123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- using Newtonsoft.Json.Linq;
- using Sers.Core.Module.ApiTrace;
- using Sers.Core.Module.ApiTrace.Collector;
- using Sers.Core.Module.App.AppEvent;
- using Sers.Core.Module.Message;
- using Sers.Core.Module.Rpc;
- using System;
- using Vit.Core.Module.Log;
- namespace Sers.Gover.Base.AppEvent
- {
- public class ApiTracePublisher : IAppEvent
- {
- [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
- Action<Object, Vit.Core.Util.Pipelines.ByteData> ApiScopeEvent(RpcContextData rpcData, ApiMessage apiRequestMessage)
- {
-
- var traceData = collector.TraceStart(rpcData);
- return (s, apiReplyMessage) =>
- {
- ApiMessage apiResponseMessage = null;
- collector?.TraceEnd(traceData, rpcData, apiRequestMessage, () =>
- {
- if (apiResponseMessage == null)
- {
- apiResponseMessage = new ApiMessage();
- apiResponseMessage.Unpack(apiReplyMessage.ToArraySegment());
- }
- return apiResponseMessage;
- });
- };
- }
-
- public void InitEvent(JObject arg)
- {
- var collectorName = arg?["collectorName"]?.ToString();
- if (string.IsNullOrEmpty(collectorName))
- {
- Logger.Warn("[Gover.ApiTracePublisher]跳过初始化,没有指定collectorName");
- return;
- }
- ApiTraceMng.InitCollector();
-
- Logger.Info("[Gover.ApiTracePublisher]初始化中");
- if (ApiTraceMng.collectorMap.TryGetValue(collectorName, out collector))
- {
- Logger.Info("[Gover.ApiTracePublisher]已绑定collector", new { collectorName });
- }
- else
- {
- Logger.Error("[Gover.ApiTracePublisher]初始化失败,没有配置指定的collector", new { collectorName = collectorName, Message = "请在appsettings.json中配置正确的Sers.ApiTrace.Collector" });
- }
- }
- IApiTraceCollector collector;
- public void BeforeStart()
- {
- if (collector == null) return;
- GoverApiCenterService.Instance.AddApiScopeEvent(ApiScopeEvent);
- Logger.Info("[Gover.ApiTracePublisher]加载成功");
- }
- [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
- public void OnStart()
- {
- }
- [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
- public void AfterStart()
- {
- }
- [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
- public void BeforeStop()
- {
- }
- [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
- public void AfterStop()
- {
- }
- }
-
- }
|