ApiTracePublisher.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Newtonsoft.Json.Linq;
  2. using Sers.Core.Module.ApiTrace;
  3. using Sers.Core.Module.ApiTrace.Collector;
  4. using Sers.Core.Module.App.AppEvent;
  5. using Sers.Core.Module.Message;
  6. using Sers.Core.Module.Rpc;
  7. using System;
  8. using Vit.Core.Module.Log;
  9. namespace Sers.Gover.Base.AppEvent
  10. {
  11. public class ApiTracePublisher : IAppEvent
  12. {
  13. [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
  14. Action<Object, Vit.Core.Util.Pipelines.ByteData> ApiScopeEvent(RpcContextData rpcData, ApiMessage apiRequestMessage)
  15. {
  16. var traceData = collector.TraceStart(rpcData);
  17. return (s, apiReplyMessage) =>
  18. {
  19. ApiMessage apiResponseMessage = null;
  20. collector?.TraceEnd(traceData, rpcData, apiRequestMessage, () =>
  21. {
  22. if (apiResponseMessage == null)
  23. {
  24. apiResponseMessage = new ApiMessage();
  25. apiResponseMessage.Unpack(apiReplyMessage.ToArraySegment());
  26. }
  27. return apiResponseMessage;
  28. });
  29. };
  30. }
  31. public void InitEvent(JObject arg)
  32. {
  33. var collectorName = arg?["collectorName"]?.ToString();
  34. if (string.IsNullOrEmpty(collectorName))
  35. {
  36. Logger.Info("[Gover.ApiTracePublisher]跳过初始化,没有指定collectorName");
  37. return;
  38. }
  39. ApiTraceMng.InitCollector();
  40. Logger.Info("[Gover.ApiTracePublisher]初始化中");
  41. if (ApiTraceMng.collectorMap.TryGetValue(collectorName, out collector))
  42. {
  43. Logger.Info("[Gover.ApiTracePublisher]已绑定collector", new { collectorName = collectorName });
  44. }
  45. else
  46. {
  47. Logger.Info("[Gover.ApiTracePublisher]初始化失败,没有配置指定的collector", new { collectorName = collectorName, Message = "请在appsettings.json中配置正确的Sers.ApiTrace.Collector" });
  48. }
  49. }
  50. IApiTraceCollector collector;
  51. public void BeforeStart()
  52. {
  53. if (collector == null) return;
  54. GoverApiCenterService.Instance.AddApiScopeEvent(ApiScopeEvent);
  55. Logger.Info("[Gover.ApiTracePublisher]加载成功");
  56. }
  57. [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
  58. public void OnStart()
  59. {
  60. }
  61. [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
  62. public void AfterStart()
  63. {
  64. }
  65. [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
  66. public void BeforeStop()
  67. {
  68. }
  69. [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
  70. public void AfterStop()
  71. {
  72. }
  73. }
  74. }