VisitSettleJob.cs 4.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Azure.Storage.Blobs.Models;
  2. using Azure.Storage.Blobs.Specialized;
  3. using Microsoft.Azure.Cosmos.Linq;
  4. using System.Collections.Concurrent;
  5. using System.Text;
  6. using TEAMModelOS.SDK;
  7. using TEAMModelOS.SDK.DI;
  8. using TEAMModelOS.SDK.Models.Service;
  9. using static TEAMModelOS.SDK.Models.Service.SystemService;
  10. using TEAMModelOS.SDK.Extension;
  11. namespace HTEXScreen.Service.CoreHangfire
  12. {
  13. public class VisitSettleJob
  14. {
  15. private readonly IConfiguration _configuration;
  16. private readonly AzureRedisFactory _azureRedis;
  17. private readonly AzureCosmosFactory _azureCosmos;
  18. // private readonly AzureServiceBusFactory _serviceBus;
  19. private readonly AzureStorageFactory _azureStorage;
  20. private readonly DingDing _dingDing;
  21. private readonly IPSearcher _ipSearcher;
  22. private readonly Region2LongitudeLatitudeTranslator _longitudeLatitudeTranslator;
  23. public VisitSettleJob(Region2LongitudeLatitudeTranslator longitudeLatitudeTranslator,IPSearcher ipSearcher, DingDing dingDing,IConfiguration configuration, AzureRedisFactory azureRedis, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage)
  24. {
  25. _azureCosmos = azureCosmos;
  26. _azureRedis = azureRedis;
  27. _configuration = configuration;
  28. // _serviceBus = azureServiceBus;
  29. _azureStorage = azureStorage;
  30. _dingDing=dingDing;
  31. _ipSearcher=ipSearcher;
  32. _longitudeLatitudeTranslator=longitudeLatitudeTranslator;
  33. }
  34. public async Task Run()
  35. {
  36. var gmt8Time = DateTimeOffset.Now.GetGMTTime(8).AddHours(-1);
  37. await _dingDing.SendBotMsg($"{DateTimeOffset.Now.GetGMTTime(8):yyyy-MM-dd HH:mm:ss}Http日志访问统计开始,统计时间:{gmt8Time:yyyy-MM-dd HH}", GroupNames.成都开发測試群組);
  38. try
  39. {
  40. // string location = _configuration.GetValue<string>("Option:Location");
  41. //获取上一个小时的数据
  42. var appendBlob = _azureStorage.GetBlobContainerClient("0-service-log").GetAppendBlobClient($"http-log/{gmt8Time:yyyy}/{gmt8Time:MM}/{gmt8Time:dd}/{gmt8Time:HH}.log");
  43. if (await appendBlob.ExistsAsync())
  44. {
  45. BlobDownloadResult result = await appendBlob.DownloadContentAsync();
  46. var content = result.Content.ToString();
  47. content= content.Substring(0, content.Length-2);
  48. if (content.EndsWith("}"))
  49. {
  50. content=$"[{content}]";
  51. }
  52. else
  53. {
  54. content=$"[{content}}}]";
  55. }
  56. var httpLogList = content.ToObject<List<HttpLog>>();
  57. (ConcurrentBag<ApiVisit> vists, ConcurrentBag<(string uuid, HttpLog httpLog, List<string> tmdid, List<string> school)> uuidInfo) =
  58. await SystemService.ConvertHttpLog(httpLogList, _azureRedis, _ipSearcher, _longitudeLatitudeTranslator, gmt8Time);
  59. if (vists!=null && vists.Count>0)
  60. {
  61. var appendDayBlob = _azureStorage.GetBlobContainerClient("0-service-log").GetAppendBlobClient($"http-log/{gmt8Time:yyyy}/{gmt8Time:MM}/{gmt8Time:dd}/index.log");
  62. if (!await appendDayBlob.ExistsAsync())
  63. {
  64. await appendDayBlob.CreateAsync();
  65. }
  66. StringBuilder sb = new StringBuilder();
  67. foreach (var item in vists)
  68. {
  69. sb.Append($"{item.ToJsonString()},\n");
  70. }
  71. using (var stream = new MemoryStream(Encoding.UTF8.GetBytes($"{sb}")))
  72. {
  73. await appendDayBlob.AppendBlockAsync(stream);
  74. }
  75. }
  76. }
  77. }
  78. catch (Exception ex)
  79. {
  80. await _dingDing.SendBotMsg($"日志访问统计异常{ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
  81. }
  82. await _dingDing.SendBotMsg($"{DateTimeOffset.Now.GetGMTTime(8):yyyy-MM-dd HH:mm:ss}Http日志访问统计结束,统计时间:{gmt8Time:yyyy-MM-dd HH}", GroupNames.成都开发測試群組);
  83. }
  84. }
  85. }