AnalyseFileController.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. using Azure.Storage.Blobs;
  2. using Azure.Storage.Blobs.Models;
  3. using Microsoft.AspNetCore.Hosting;
  4. using Microsoft.AspNetCore.Http;
  5. using Microsoft.AspNetCore.Mvc;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Text.Json;
  12. using System.Threading.Tasks;
  13. using TEAMModelBI.Models.RecordM;
  14. using TEAMModelBI.Tool.Context;
  15. using TEAMModelOS.SDK.DI;
  16. using TEAMModelOS.SDK.Extension;
  17. using TEAMModelOS.SDK.Models.Cosmos.BI;
  18. namespace TEAMModelBI.Controllers.BIHome
  19. {
  20. [Route("analyse")]
  21. [ApiController]
  22. public class AnalyseFileController : ControllerBase
  23. {
  24. private readonly IWebHostEnvironment _environment; //读取文件流
  25. private readonly AzureStorageFactory _azureStorage;
  26. public AnalyseFileController(IWebHostEnvironment environment, AzureStorageFactory azureStorage)
  27. {
  28. _environment = environment;
  29. _azureStorage = azureStorage;
  30. }
  31. /// <summary>
  32. /// 本地Json
  33. /// </summary>
  34. /// <param name="jsonElement"></param>
  35. /// <returns></returns>
  36. [HttpPost("get-visitjson")]
  37. public async Task<IActionResult> GetVisitJson(JsonElement jsonElement)
  38. {
  39. jsonElement.TryGetProperty("path", out JsonElement _path);
  40. jsonElement.TryGetProperty("time", out JsonElement _time);
  41. var path = $"{_environment.ContentRootPath}/JsonFile/TempFile/PT1H.json";
  42. StreamReader streamReader = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.UTF8);
  43. List<object> objs = new();
  44. StringBuilder visits = new StringBuilder("[");
  45. string text;
  46. while ((text = streamReader.ReadLine()) != null)
  47. {
  48. if (streamReader.EndOfStream)
  49. visits.Append($"{text.ToString()}");
  50. else
  51. visits.Append($"{text.ToString()},");
  52. }
  53. visits.Append("]");
  54. streamReader.Close();
  55. string input = visits.ToString();
  56. List<AGInfo> aGInfos = input.ToObject<List<AGInfo>>();
  57. DateTimeOffset dtime = DateTimeOffset.UtcNow;
  58. string cHour = dtime.ToString("yyyyMMddHH");
  59. string cDay = dtime.ToString("yyyyMMdd");
  60. if (aGInfos.Count > 0)
  61. {
  62. cHour = aGInfos.Select(s => DateTimeOffset.Parse(s.time).ToString("yyyyMMddHH")).First();
  63. cDay = aGInfos.Select(s => DateTimeOffset.Parse(s.time).ToString("yyyyMMdd")).First();
  64. }
  65. RecCnt saveCnts = new();
  66. //var ipGroup = aGInfos.GroupBy(g => g.properties.clientIp).ToDictionary(k => k.Key, k => k.Count()).ToList();
  67. List<RecAppGWInfo> recInfo = aGInfos.Select(s => new RecAppGWInfo { hour = cHour, ip = s.properties.clientIp, api = s.properties.requestUri.Split("?").ToList().Count() > 1 ? s.properties.requestUri.Split("?").ToList()[0] : s.properties.requestUri, hostName = s.properties.hostname }).ToList();
  68. List<RecApiCnt> apiCnt = recInfo.GroupBy(a => a.api).Select(g => new RecApiCnt { api = g.Key, count = g.Count(), hour = cHour, hostName = g.Select(h => h.hostName).Distinct().ToList(), ip = g.Select(i => i.ip).Distinct().ToList() }).ToList();
  69. saveCnts.apiCnt= apiCnt;
  70. List<RecIpCnt> ipCnt = recInfo.GroupBy(a => a.ip).Select(g => new RecIpCnt { ip = g.Key, count = g.Count(), hour = cHour, hostName = g.Select(h => h.hostName).Distinct().ToList(), api = g.Select(i => i.api).Distinct().ToList() }).ToList();
  71. saveCnts.ipCnt = ipCnt;
  72. ////保存存至Blob文件
  73. var url = await _azureStorage.GetBlobContainerClient("0-public").UploadFileByContainer(saveCnts.ToJsonString(), $"visitCnt/{cDay}", $"{cHour}.json");
  74. var blob = _azureStorage.GetBlobContainerClient($"0-public");
  75. List<RecCnt> recCnts = new();
  76. await foreach (BlobItem blobItem in blob.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"visitCnt/{cDay}"))
  77. {
  78. BlobClient blobClient = blob.GetBlobClient(blobItem.Name);
  79. if (await blobClient.ExistsAsync())
  80. {
  81. using (var meomoryStream = new MemoryStream())
  82. {
  83. var response = blob.GetBlobClient($"{blobItem.Name}").DownloadTo(meomoryStream);
  84. //var response = await blob.GetBlobClient($"{blobItem.Name}").DownloadToAsync(meomoryStream);
  85. var temps = meomoryStream.ToString();
  86. var temp1 = Encoding.UTF8.GetString(meomoryStream.ToArray());
  87. var temp = Encoding.UTF8.GetString(meomoryStream.ToArray()).ToObject<RecCnt>();
  88. RecCnt recCnt = Encoding.UTF8.GetString(meomoryStream.ToArray()).ToString().ToObject<RecCnt>();
  89. recCnts.Add(recCnt);
  90. }
  91. }
  92. }
  93. return Ok(new { state = 200, recCnts, apiCon = apiCnt.Count(), apiSum = apiCnt.Select(ap => ap.count).Sum(), ipCount = ipCnt.Count, ipSum = ipCnt.Select(ip => ip.count).Sum(), ipCnt, apiCnt }); ;
  94. }
  95. /// <summary>
  96. /// 日志访问秘钥
  97. /// </summary>
  98. /// <param name="jsonElement"></param>
  99. /// <returns></returns>
  100. [HttpPost("get-loginfos")]
  101. public async Task<IActionResult> GetOSLog(JsonElement jsonElement)
  102. {
  103. jsonElement.TryGetProperty("site", out JsonElement site);
  104. DateTimeOffset dateTime = DateTimeOffset.UtcNow;
  105. int year = dateTime.Year;
  106. int month = dateTime.Month;
  107. int day = dateTime.Day;
  108. int hour = dateTime.Hour;
  109. var blobClient = _azureStorage.GetBlobContainerClient($"insights-logs-applicationgatewayfirewalllog",name:BIConst.LogChina);
  110. if ($"{site}".Equals(BIConst.Global))
  111. {
  112. blobClient = _azureStorage.GetBlobContainerClient($"insights-logs-applicationgatewayfirewalllog", name: BIConst.Global);
  113. }
  114. //地址: y={year}/m={month}/d={day}/h={hour}/m=00/PT1H.json
  115. string logName = "resourceId=/SUBSCRIPTIONS/73B7F9EF-D8B7-4444-9E8D-D80B43BF3CD4/RESOURCEGROUPS/TEAMMODELCHENGDU/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/OSFIREWARE";
  116. await foreach (BlobItem blobItem in blobClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, logName))
  117. {
  118. BlobClient tempBlobClient = blobClient.GetBlobClient(blobItem.Name);
  119. StreamReader streamReader = new StreamReader(new FileStream(blobItem.Name, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.UTF8);
  120. if (await blobClient.ExistsAsync())
  121. {
  122. }
  123. }
  124. return Ok(new { state = 200 });
  125. }
  126. public record StatisNameCnt
  127. {
  128. public string name { get; set; }
  129. public int cnt { get; set; }
  130. }
  131. public record AGInfo
  132. {
  133. //public string resourceId { get; set; }
  134. public string operationName { get; set; }
  135. public string time { get; set; }
  136. public string category { get; set; }
  137. public Properties properties { get; set; }
  138. }
  139. public record Properties
  140. {
  141. //public string instanceId { get; set; }
  142. public string clientIp { get; set; }
  143. public string clientPort { get; set; }
  144. public string requestUri { get; set; }
  145. public string ruleSetType { get; set; }
  146. public string ruleSetVersion { get; set; }
  147. public string ruleId { get; set;}
  148. public string ruleGroup { get; set; }
  149. //public string message { get; set; }
  150. public string action { get; set; }
  151. public string site { get; set; }
  152. //public Datails datails { get; set; }
  153. public string hostname { get; set; }
  154. public string transactionId { get; set; }
  155. }
  156. public record Datails
  157. {
  158. public string message { get; set; }
  159. public string data { get; set; }
  160. public string file { get; set; }
  161. public string line { get; set; }
  162. }
  163. }
  164. }