Skip to content

2. Diol backend service

Chingiz Olzhabaev edited this page Jul 12, 2023 · 4 revisions

Introduction

Dependecies

Internal

External

Diol.Core depends on:

How to use

  1. Navigate to DiolBackendService
  2. Call dotnet build
  3. Call dotnet run
  4. New web app should opened in your browser
  5. Click connect
  6. Provide process id
  7. Click 'Start'

We are good hear!

Then, navigate to your application and make some request.

You should see logs rows.

How to connect to the hub

  1. Learn more information about aspnet signal r and chouse correct client version (js, C# and etc.). Documentation

  2. Create connection

const connection = new signalR.HubConnectionBuilder()
   .withUrl("/logsHub")
   .configureLogging(signalR.LogLevel.Information)
   .build();
  1. Subscribe to LogRecievedE
function logsReceivedHanndler(categoryName, eventName, dataAsJson) {
   // categoryName -> 'HttpClient', 'AspnetCore' and etc
   // eventName -> Dto name
   let data = JSON.parse(dataAsJson);
   console.info(categoryName, eventName, data );
}

connection.on('LogReceived', logsReceivedHanndler);
  1. Connect to signal r hub
connection.start();
  1. Start processing
let processId = <some_dotnet_process_id>;
connection.invoke('Subscribe', processId);

Hubs metadata

Hub info

Hub name: LogsHub Url: /logsHub Type: Signalr core hub

You can find all events and dtos in the repo

Hub actions

  • GetProcesses
  • Subscribe

GetProcesses

Arguments:

  1. message | string

Description:

Ask from the server a list with dotnet processes. The result will be sended as an event 'ProcessesReceived'

Subscribe

Arguments:

  1. processId | int

Description:

Start processing a dotnet process. In client side you will recieve 'ProcessingStarted' event.

Hub events

  • ProcessesReceived
  • ProcessingStarted
  • ProcessingFinished
  • LogReceived

ProcessesReceived

Result: list of dotnet processes.

ProcessingStarted

Result: id of process

ProcessingFinished

Result: id of process

LogReceived

This event happen every time when the process recieve logs.

result:

  1. CategoryName | Logs Events
  2. EventName | Dto name
  3. Data | data as string json

Logs Events

  • HttpClient
  • AspnetCore
  • Entity Framework
  • WebSockets

HttpClient

Order Name Dto
1 RequestPipelineStartDto RequestPipelineStartDto
2 RequestPipelineRequestHeaderDto RequestPipelineRequestHeaderDto
3 RequestPipelineEndDto RequestPipelineEndDto
4 RequestPipelineResponseHeaderDto RequestPipelineResponseHeaderDto

AspnetCore

Order Name Dto
1 RequestLogDto RequestLogDto
2 RequestBodyDto RequestBodyDto
3 ResponseLogDto ResponseLogDto
4 ResponseBodyDto ResponseBodyDto

Entity Framework

Order Name Dto
1 ConnectionOpeningDto ConnectionOpeningDto
2 CommandExecutingDto CommandExecutingDto
3 CommandExecutedDto ConnectionOpeningDto

WebSockets

Coming soon...

DTOs

RequestPipelineStartDto

Field Type Info
CategoryName string defaultValue: 'HttpClient'
EventName string defaultValue: 'RequestPipelineStartDto'
HttpMethod string Get, post, put and etc.
Uri string request url

RequestPipelineRequestHeaderDto

Field Type Info
CategoryName string defaultValue: 'HttpClient'
EventName string defaultValue: 'RequestPipelineRequestHeaderDto'
Headers Dictionary<string, string> Request headers. key - is header name, value is header value

RequestPipelineEndDto

Field Type Info
CategoryName string defaultValue: 'HttpClient'
StatusCode int 200, 404, 500 and etc.
ElapsedMilliseconds TimeSpan request duration

RequestPipelineResponseHeaderDto

Field Type Info
CategoryName string defaultValue: 'HttpClient'
EventName string defaultValue: 'RequestPipelineRequestHeaderDto'
Headers Dictionary<string, string> Reponse headers. key - is header name, value is header value

RequestLogDto

Field Type Info
CategoryName string defaultValue: 'AspnetCore'
EventName string defaultValue: 'RequestLogDto'
Protocol string http1, http2 and etc.
Method string get, post, put and etc.
Scheme string http, https and etc.
Host string domain name
Path string paht. like api/some-resource
Metadata Dictionary<string, string> request headers.

RequestBodyDto

Field Type Info
CategoryName string defaultValue: 'AspnetCore'
EventName string defaultValue: 'RequestLogDto'
BodyAsString string request body as string
Metadata Dictionary<string, string>

ResponseLogDto

Field Type Info
CategoryName string defaultValue: 'AspnetCore'
EventName string defaultValue: 'RequestLogDto'
StatusCode int 200, 404 and etc.
ContentType string application/json or etc.
Metadata Dictionary<string, string> Response headers

ResponseBodyDto

Field Type Info
CategoryName string defaultValue: 'AspnetCore'
EventName string defaultValue: 'RequestLogDto'
BodyAsString string response body as string
Metadata Dictionary<string, string>

ConnectionOpeningDto

Field Type Info
Database string
Server string

CommandExecutingDto

Field Type Info
Parameters string
CommandText string SELECT * FROM YOUR_TABLE

CommandExecutedDto

Field Type Info
ElapsedMilliseconds TimeSpan Execution time

Issues

  • We use CorrelationId to group up events. For some reasons that CorrelationId can be wrong if you call Tasks in your source code. We are still in progress to resolve this issue