SeaLights .NET Core agent - Setting up a windows service

SeaLights .NET Core agent - Setting up a windows service

Coverage Collector Service Installation

  • As an Administrator, install and start the coverage collector service

    SL.DotNet.CoverageCollectorService.exe install --start
  • Register our agent as a profiler in the services registry settings:

    SL.DotNet.exe instrumentService --serviceName {YourService} --force
  • Restart your service manually via the Service Manager console or the following PowerShell command

    Restart-Service -Name {YourService} -Force

At the successful completion of this step, you will see a new entry appearing in the Cockpit > Live Agents Monitor for an entity called CollectorService for dotnet technology

Capturing coverage

During the time you want to run your tests and capture coverage, you can now start and stop the coverage collection of the SeaLights agent test listener

Starting coverage collection session

Before you start running your tests, you need to update the SeaLights test listener to start collecting coverage. You do so with the startCollectorServiceSession parameter.

SL.DotNet.exe startCollectorServiceSession --buildSessionIdFile buildSessionId.txt --labId my_labId --processName YourProcess.exe --includeChildProcesses true

At the successful completion of this step, you will see new entries appearing in the Cockpit > Live Agents Monitor: the CollectorServiceSession and a entity called Profiler with the version details of your service.

  • Note that this can be run on a remote machine (like the CI running the tests) while providing the host to start the session on using the parameter: --machine <host> 

  • If you’re running several services on the machine, you can use the above command with --processName * and every service having the Sealights' environment variables defined in its Registry entry will be metered

See 'SeaLights .NET Core agent - Command Reference' for full parameter details

If the Profiler doesn't start correctly, you can validate your configuration using the following approaches:

  1. Open the Event Viewer and search for possible errors under Local> Windows Log > Application

  2. Validate the correct variables were attached to the process of your service using a tool like https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer.
    You can refer to our dedicated article .NET - Deep Troubleshooting using Process Explorer for detailed instructions on how to use it with Sealights.

  3. You can enable advanced logs at the Profiler level according to the following instructions: .NET - Collecting Profiler Logs | Collecting Profiler logs from Windows Services

Running your tests

Now you can run any one of your tests that runs against this service and capture coverage.

See 'SeaLights .NET Core agent - Running tests' for details of how to run tests

Stopping coverage collection session

SL.DotNet.exe stopCollectorServiceSession --buildSessionIdFile buildSessionId.txt --processName YourProcess.exe

Uninstalling Profiler from your Service

If needed, you can un-register the SeaLights profiler from your Service

SL.DotNet.exe instrumentService --serviceName {YourService} --force --undo

Sample script

# ===== SECTION TO UPDATE ==== $SL_TOKEN="123456789" #Prefer an Env variable from your Credentials Manager # Env specific $SL_BSID_FILE="$SEALIGHTS_PATH\buildSessionId.txt" $SL_ENV_LABID="TestLabEnv@Automation" #App specific $SL_ServiceName="YourService" $SL_ProcessName="YourService.exe" # ============================ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $previousProgressPref=$global:ProgressPreference && $global:ProgressPreference = "SilentlyContinue" #Disable Progress bar topowershell speed up download and expand ### Install Agent and Token ### iwr -OutFile sealights-dotnet-agent.zip -UseBasicParsing -Uri https://agents.sealights.co/dotnetcore/latest/sealights-dotnet-agent-windows-self-contained.zip Expand-Archive .\sealights-dotnet-agent.zip -DestinationPath sl-dotnet-agent -Force Write-Output "[Sealights] .NetCore Agent version is: $(Get-Content .\sl-dotnet-agent\version.txt)" $global:ProgressPreference = $previousProgressPref #Restore progress bar Out-File -Input-Object $SL_TOKEN -NoNewline -Force ".\sl-dotnet-agent\sltoken.txt" ### Install SL Collector Service ### Invoke-Expression .\sl-dotnet-agent\SL.DotNet.CoverageCollectorService.exe install start Invoke-Expression .\sl-dotnet-agent\SL.DotNet.exe instrumentService --serviceName $SL_ServiceName --force Restart-Service -Name $SL_ServiceName -Force ### Stop all session for specific Service version if they exist ### SL.DotNet.exe stopCollectorServiceSession --buildSessionIdFile $SL_BSID_FILE --processName $SL_ProcessName ### Starting session for specific Service version ### Invoke-Expression .\sl-dotnet-agent\SL.DotNet.exe startCollectorServiceSession --buildSessionIdFile $SL_BSID_FILE --processName $SL_ProcessName --labId $SL_ENV_LABID ` --includeChildProcesses true --logEnabled true --logAppendConsole true #### You can start your tests ####