using Azure.Storage.Blobs.Models; using Azure.Storage.Blobs.Specialized; using Microsoft.Azure.Cosmos.Linq; using System.Collections.Concurrent; using System.Text; using TEAMModelOS.SDK; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK.Models.Service; using static TEAMModelOS.SDK.Models.Service.SystemService; using TEAMModelOS.SDK.Extension; namespace HTEXScreen.Service.CoreHangfire { public class VisitSettleJob { private readonly IConfiguration _configuration; private readonly AzureRedisFactory _azureRedis; private readonly AzureCosmosFactory _azureCosmos; // private readonly AzureServiceBusFactory _serviceBus; private readonly AzureStorageFactory _azureStorage; private readonly DingDing _dingDing; private readonly IPSearcher _ipSearcher; private readonly Region2LongitudeLatitudeTranslator _longitudeLatitudeTranslator; public VisitSettleJob(Region2LongitudeLatitudeTranslator longitudeLatitudeTranslator,IPSearcher ipSearcher, DingDing dingDing,IConfiguration configuration, AzureRedisFactory azureRedis, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage) { _azureCosmos = azureCosmos; _azureRedis = azureRedis; _configuration = configuration; // _serviceBus = azureServiceBus; _azureStorage = azureStorage; _dingDing=dingDing; _ipSearcher=ipSearcher; _longitudeLatitudeTranslator=longitudeLatitudeTranslator; } public async Task Run() { var gmt8Time = DateTimeOffset.Now.GetGMTTime(8).AddHours(-1); await _dingDing.SendBotMsg($"{DateTimeOffset.Now.GetGMTTime(8):yyyy-MM-dd HH:mm:ss}Http日志访问统计开始,统计时间:{gmt8Time:yyyy-MM-dd HH}", GroupNames.成都开发測試群組); try { // string location = _configuration.GetValue("Option:Location"); //获取上一个小时的数据 var appendBlob = _azureStorage.GetBlobContainerClient("0-service-log").GetAppendBlobClient($"http-log/{gmt8Time:yyyy}/{gmt8Time:MM}/{gmt8Time:dd}/{gmt8Time:HH}.log"); if (await appendBlob.ExistsAsync()) { BlobDownloadResult result = await appendBlob.DownloadContentAsync(); var content = result.Content.ToString(); content= content.Substring(0, content.Length-2); if (content.EndsWith("}")) { content=$"[{content}]"; } else { content=$"[{content}}}]"; } var httpLogList = content.ToObject>(); (ConcurrentBag vists, ConcurrentBag<(string uuid, HttpLog httpLog, List tmdid, List school)> uuidInfo) = await SystemService.ConvertHttpLog(httpLogList, _azureRedis, _ipSearcher, _longitudeLatitudeTranslator, gmt8Time); if (vists!=null && vists.Count>0) { var appendDayBlob = _azureStorage.GetBlobContainerClient("0-service-log").GetAppendBlobClient($"http-log/{gmt8Time:yyyy}/{gmt8Time:MM}/{gmt8Time:dd}/index.log"); if (!await appendDayBlob.ExistsAsync()) { await appendDayBlob.CreateAsync(); } StringBuilder sb = new StringBuilder(); foreach (var item in vists) { sb.Append($"{item.ToJsonString()},\n"); } using (var stream = new MemoryStream(Encoding.UTF8.GetBytes($"{sb}"))) { await appendDayBlob.AppendBlockAsync(stream); } } } } catch (Exception ex) { await _dingDing.SendBotMsg($"日志访问统计异常{ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組); } await _dingDing.SendBotMsg($"{DateTimeOffset.Now.GetGMTTime(8):yyyy-MM-dd HH:mm:ss}Http日志访问统计结束,统计时间:{gmt8Time:yyyy-MM-dd HH}", GroupNames.成都开发測試群組); } } }