SideCarCLI–create releases

Summary links SideCarCLI

NoName + Link 
1Description
2Specifications
3Refactor specifications and code
4Create Release
5Finish interceptors
6Send part of command to interceptors
7Line Interceptors
8Finish process after some time
9Documetation Diagram
10Technical Summary
11Create dotnet tool
( Description : SideCar for CLI applications. Interceptors for Line, Finish, Timer . See Code )

Because all code is in Github, the easy way is GitHub Actions , https://github.com/features/actions . Some modifications are required on CSPROJ file to build for Linux or Windows :

<PropertyGroup>

<OutputType>Exe</OutputType>

<TargetFramework>netcoreapp3.1</TargetFramework>

<RuntimeIdentifiers>win-x64;linux-x64</RuntimeIdentifiers>

</PropertyGroup>

 

And after 6 commits, this is the ( almost) final version:

name: .NET Core

on:

push:

branches: [ main ]

pull_request:

branches: [ main ]

jobs:

build:

runs-on: ubuntu-latest

steps:

– uses: actions/checkout@v2

– name: Setup .NET Core

uses: actions/setup-dotnet@v1

with:

dotnet-version: 3.1.301

– name: Build

run: |

cd src

cd SideCarCLI

dotnet restore

dotnet build –configuration Release –no-restore -r linux-x64 -o linuxx64

dotnet build –configuration Release –no-restore -r win-x64 -o winx64

– uses: actions/upload-artifact@v2

with:

name: winx64

path: src/SideCarCLI/winx64/

– uses: actions/upload-artifact@v2

with:

name: linuxx64

path: src/SideCarCLI/linuxx64/

#- name: Test

#  run: dotnet test –no-restore –verbosity normal

 

Your job , if you accept, is to modify to use

dotnet publish

with trimmed and self contained and publish single file. ( you can see latest version at https://github.com/ignatandrei/SideCarCLI/blob/main/.github/workflows/dotnet-core.yml )

SideCarCLI–refactor command line

Summary links SideCarCLI

NoName + Link 
1Description
2Specifications
3Refactor specifications and code
4Create Release
5Finish interceptors
6Send part of command to interceptors
7Line Interceptors
8Finish process after some time
9Documetation Diagram
10Technical Summary
11Create dotnet tool
( Description : SideCar for CLI applications. Interceptors for Line, Finish, Timer . See Code )

When starting to implement the project, suddenly realize that list interceptors command does not belong to  start app command . So the application should be refactored to new specifications

– StartApp command – contains the whole list of commands for starting the app , including timer, adding interceptor

– Interceptors command – should list the interceptors  (timer, line, finish)

The interceptors should be defined in a separate file , like this

{
“TimerInterceptors”: [],
“LineInterceptors”: [
{
“Name”: “echo”,
“FolderToExecute”: null
}
],
“FinishInterceptors”: []
}

So this will be how it looks the command line

 

————–
command path:
————–
SideCar for any other application

Usage:  [command] [options]

Options:
-h|–help          Show help information
-max|–maxSeconds  max seconds for the StartApp to run

Commands:
about
interceptors
listAllCommands
StartAPP

Run ‘ [command] -h|–help’ for more information about a command.

The most simplest form it is:
SideCarCLI startApp –name YourApp

————–
command path:–>about
————–
Usage:  about [options]

Options:
-h|–help  Show help information

————–
command path:–>StartAPP
————–
start the CLI application that you need to intercept

Usage:  StartAPP [options]

Options:
-n|–name <fullPathToApplication>             Path to the StartApp
-a|–arguments <arguments_to_the_app>         StartApp arguments
-f|–folder[:<folder_where_execute_the_app>]  folder where to execute the StartApp – default folder of the StartApp
-aLi|–addLineInterceptor                     Add Line Interceptor to execute
-aTi|–addTimerInterceptor                    Add Timer Interceptor to execute
-aFi|–addFinishInterceptor                   Add Finish Interceptor to execute
-h|–help                                     Show help information

————–
command path:–>interceptors
————–
Usage:  interceptors [options]

Options:
-lLi|–ListLineInterceptor    List line interceptor
-lLi|–ListTimerInterceptor   List timer interceptor
-lFi|–ListFinishInterceptor  List timer interceptor
-h|–help                     Show help information

————–
command path:–>listAllCommands
————–
List all commands for the app

Usage:  listAllCommands [options]

Options:
-h|–help  Show help information

SideCarCLI–Architecture and specs–part 2

Summary links SideCarCLI

NoName + Link 
1Description
2Specifications
3Refactor specifications and code
4Create Release
5Finish interceptors
6Send part of command to interceptors
7Line Interceptors
8Finish process after some time
9Documetation Diagram
10Technical Summary
11Create dotnet tool
( Description : SideCar for CLI applications. Interceptors for Line, Finish, Timer . See Code )

The SideCarCLI application should start another application and intercept in various ways .  What will execute when intercept is not known in advance – so should be read at runtime  . So the SideCarCLI will load the interceptors and make then available to the application. Let’s say that , for the moment, the SideCarCLI will take all the configuration from the command line.

So let’s analyze the command line . The most simplest form it is:

SideCarCLI startApp  –name YourCLIApplication

For intercepting the output or the error of the console we do not know in advance what we will use. So we will make start dynamically what applications will  intercept the output lines provided by StartApp.

Also this is available for intercepting the result of the application and for the thing that is running periodically.

Also I want to provide a way for the users to make on-the-fly code to intercept – so I will make also a plugin architecture to provide interceptors on the fly.

Let’s see how the application command line will look  –

 

 

————–
command path:
————–
SideCar for any other application

Usage:  [command] [options]

Options:
-h|–help          Show help information
-max|–maxSeconds  max seconds for the StartApp to run

Commands:
_about
_listAllCommands
startApp

Run ‘ [command] -h|–help’ for more information about a command.

The most simplest form it is:
SideCarCLI startApp –name YourApp

————–
command path:–>_about
————–
Usage:  _about [options]

Options:
-h|–help  Show help information

————–
command path:–>startApp
————–
start the CLI application that you need to intercept

Usage:  startApp [command] [options]

Options:
-n|–name <fullPathToApplication>             Path to the StartApp
-a|–arguments <arguments_to_the_app>         StartApp arguments
-f|–folder[:<folder_where_execute_the_app>]  folder where to execute the StartApp – default folder of the StartApp
-h|–help                                     Show help information

Commands:
finishInterceptors
lineInterceptors
plugins
timer

Run ‘startApp [command] -h|–help’ for more information about a command.

————–
command path:–>startApp–>lineInterceptors
————–
Specify application for start when StartApp has a new line output

Usage:  startApp lineInterceptors [options]

Options:
-l|–list    List interceptors for lines
-a|–add     Add interceptor to execute
-f|–folder  folder where to start the interceptor
-h|–help    Show help information

————–
command path:–>startApp–>timer
————–
Specify timer to start an application at repeating interval

Usage:  startApp timer [options]

Options:
-i|–intervalRepeatSeconds  Repeat interval in seconds
-l|–list                   List interceptors to execute periodically
-a|–add                    Add interceptor to execute
-f|–folder                 folder where to start the interceptor
-h|–help                   Show help information

————–
command path:–>startApp–>finishInterceptors
————–
Specify interceptors for start when finish the app

Usage:  startApp finishInterceptors [options]

Options:
-l|–list    List interceptors for finish application
-a|–add     Add interceptor to execute
-f|–folder  folder where to start the interceptor
-h|–help    Show help information

————–
command path:–>startApp–>plugins
————–
Load dynamically plugins

Usage:  startApp plugins [options]

Options:
-f|–folder  folder with plugins
-l|–list    List plugins
-a|–add     Add interceptor to execute
-h|–help    Show help information

————–
command path:–>_listAllCommands
————–
List all commands for the app

Usage:  _listAllCommands [options]

Options:
-h|–help  Show help information

SideCarCLI | Command Line – description –part 1

Summary links SideCarCLI

NoName + Link 
1Description
2Specifications
3Refactor specifications and code
4Create Release
5Finish interceptors
6Send part of command to interceptors
7Line Interceptors
8Finish process after some time
9Documetation Diagram
10Technical Summary
11Create dotnet tool
( Description : SideCar for CLI applications. Interceptors for Line, Finish, Timer . See Code )

There are those days a great deal of command line applications that performs a variety of things. The problem is that you cannot control them . The command line performs their duty well – but , from time to time, you need something else integrated with this.

The pattern for this is https://docs.microsoft.com/en-us/azure/architecture/patterns/sidecar – it is applied to microservices , but why not applied to command lines ?

So – let’s start this project  with specifications.

Let’s suppose that I want to run an command line application – let name it StartApp. But I want also:

  1. Intercept every line of the StartApp that is outputting to the console and run something with that with the line ( send to HTTP endpoint, log somewhere, and so on).
  2. Intercept the finish of the StartApp and run something with the output ( either all lines, either with the result of the application)
  3. Timers:
    • Do not let the StartApp to run more than an maximum amount of time
    • Run something periodically  with arguments  from the StartApp arguments

 

 

The solution is to make another application ( let’s name SideCarCLI ) that runs the  StartApplication.

What it is complicated her is how we pass the arguments of the SideCarCLI versus the arguments of the StartApp .

[ADCES]SqlInjection si Migrare BD in Azure

1. Teorie si Demo practic de Sql Injection si spargerea parolelor prin hashing
Prezentator: Andrei Rinea, https://www.linkedin.com/in/andreirinea/
Descriere: Abordare teoretică și practică asupra SQL Injection și Hashing. Include live hacking!
2. Migrarea bazelor de date SQL Server in cloud
Prezentator: Dragos Barbu, https://www.linkedin.com/in/drbarbu/
Descriere:
Incheiem seria in care am prezentat cum mutam o solutie veche in cloud cu etapa de migrare a bazei de date. Voi prezenta de ce sa alegem varianta migrarii in cloud si cum sa facem acest lucru. Variante de gazduire a bazei de date in cloud-ul Microsoft Azure si pentru ce este potrivita fiecare. Discutam si de trend-ul denumit Database Modernization.

Va astept la https://www.meetup.com/Bucharest-A-D-C-E-S-Meetup/events/273499121/  ( online la https://meet.google.com/gpj-jedu-mzj  )

Deploy .NET Core +SqlServer application to Ubuntu

Tools used:

SSH –  Windows Native

DOS – Windows Native

SSMS – download https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15

FileZilla – download https://filezilla-project.org/download.php?platform=win64

How I did :

SSH : Install SqlServer: https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-ver15

SSMS: Copy database with SSMS export data

DOS : Windows Compile application for Linux: dotnet publish -r linux-x64

Filezilla: Transfer with FileZilla all files: manual

SSH -Change permission chmod +777 <application name>  – to can execute

SSH –execute:  sudo ./<application name>–urls http://<ip>:8090

Note: Pay attention to Environment Variables on Linux – it did not work . See  https://docs.microsoft.com/en-us/dotnet/api/system.environment.getenvironmentvariables?view=netcore-2.0 . It did not work for me with Export.

Maybe it is better to configure as Linux Service, as in

https://irina.codes/net-api-as-a-linux-service/

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0

Add

Environment=ASPNETCORE_URLS=http://asdasd:port/

Also, for editing in ssh , sudo nano name.of.the.service

Also, to start , sudo systemctl start name.of.the.service

Also, to start at startup, sudo systemctl enable name.of.the.service

ASP.NET Core WebAPI should/ (must?) have

I am trying to have an extensive list about what an ASP.NET Core WebAPI project should / must have . After al, can be easy integrated into a VS project – or a wizard. I have put into 3 categories:

  1. Development – you need at development time.
  2. Testing – needed at testing time
  3. Production – needed in production

Note: All three are needed to be developed  !

  1. Development – Visibility  – see definition of the API
  2. Development  – Authorization + Authentication
  3. Development-Problem Details –  flow the
    errors as JSON text , keep status code
  4. Testing – test your application in CI mode
    • Production – Versioning  API endpoints
      • Production – CORS
      • Production – WhiteBox Monitoring
      • Production –BlackBox Monitoring and Observability – read about RED and USE
      • Production –Rate limit – do not allow insane usage
      • Production –Caching data – to return latest values
      • Production  – Status of the system

      Nice to have:

      1. Graph with endpoints: https://andrewlock.net/adding-an-endpoint-graph-to-your-aspnetcore-application/ – read about https://en.wikipedia.org/wiki/DOT_(graph_description_language) 
      2. Versioning  end points- see what version is your program: http://msprogrammer.serviciipeweb.ro/2019/02/18/identify-version-for-application-and-components-for-backend-net-core-and-frontendangularpart-2-backend/
      3. Not yet discovered, but should have endpoints for environment, settings json and others.
      4. Formatters: BSON, CSV, YAML: https://github.com/WebApiContrib/WebAPIContrib.Core

      Andrei Ignat weekly software news(mostly .NET)

      * indicates required

      Please select all the ways you would like to hear from me:

      You can unsubscribe at any time by clicking the link in the footer of our emails. For information about our privacy practices, please visit our website.

      We use Mailchimp as our marketing platform. By clicking below to subscribe, you acknowledge that your information will be transferred to Mailchimp for processing. Learn more about Mailchimp's privacy practices here.