src/EasyProfiler.PostgreSQL/Interceptors/EasyProfilerInterceptors.cs
using EasyProfiler.Core.Entities;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.Caching.Memory;
using System.Collections.Generic;
using System.Data.Common;
using EasyProfiler.EntityFrameworkCore.Extensions;
using System;
using Microsoft.Extensions.Caching.Distributed;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using EasyProfiler.Core.Statics;
namespace EasyProfiler.PostgreSQL.Interceptors
{
/// <summary>
/// Profiler Interceptors.
/// </summary>
public class EasyProfilerInterceptors : DbCommandInterceptor
{
private readonly IHttpContextAccessor httpContextAccessor;
public EasyProfilerInterceptors(IHttpContextAccessor httpContextAccessor)
{
this.httpContextAccessor = httpContextAccessor;
}
/// <summary>
/// Data reader Disposing.
/// </summary>
/// <param name="command">
/// DbCommand.
/// </param>
/// <param name="eventData">
/// Event data.
/// </param>
/// <param name="result">
/// Interception result.
/// </param>
/// <returns></returns>
public override InterceptionResult DataReaderDisposing(DbCommand command, DataReaderDisposingEventData eventData, InterceptionResult result)
{
var profilerData = new Profiler
{
Duration = eventData.Duration.Ticks,
Query = command.CommandText,
RequestUrl = httpContextAccessor?.HttpContext?.GetEndpoint()?.DisplayName ?? "Not Http",
QueryType = command.FindQueryType(),
EndDate = DateTime.UtcNow,
StartDate = DateTime.UtcNow - eventData.Duration
};
Values.Profilers.Add(profilerData);
return base.DataReaderDisposing(command, eventData, result);
}
}
}