MonitorCosmosDB.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net.Http;
  4. using System.Text.Json;
  5. using System.Threading.Tasks;
  6. using Azure.Cosmos;
  7. using Azure.Messaging.ServiceBus;
  8. using Microsoft.Azure.Documents;
  9. using Microsoft.Azure.WebJobs;
  10. using Microsoft.Extensions.Configuration;
  11. using Microsoft.Extensions.Logging;
  12. using TEAMModelOS.SDK.DI;
  13. using TEAMModelOS.SDK.Extension;
  14. using TEAMModelOS.SDK.Models;
  15. namespace TEAMModelFunction
  16. {
  17. public class MonitorCosmosDB
  18. {
  19. private readonly AzureCosmosFactory _azureCosmos;
  20. private readonly AzureServiceBusFactory _serviceBus;
  21. private readonly AzureStorageFactory _azureStorage;
  22. private readonly DingDing _dingDing;
  23. private readonly AzureRedisFactory _azureRedis;
  24. private IConfiguration _configuration { get; set; }
  25. public MonitorCosmosDB( AzureCosmosFactory azureCosmos, AzureServiceBusFactory azureServiceBus, AzureStorageFactory azureStorage, DingDing dingDing, AzureRedisFactory azureRedis
  26. , IConfiguration configuration
  27. )
  28. {
  29. _azureCosmos = azureCosmos;
  30. _serviceBus = azureServiceBus;
  31. _azureStorage = azureStorage;
  32. _dingDing = dingDing;
  33. _azureRedis = azureRedis;
  34. _configuration = configuration;
  35. }
  36. //[Function("Common")]
  37. //public async Task Common([Microsoft.Azure.Functions.Worker.CosmosDBTriggerAttribute(
  38. // databaseName: "TEAMModelOS",
  39. // containerName: "Common",
  40. // Connection = "Azure:Cosmos:ConnectionString",
  41. // LeaseContainerName = "leases",
  42. // LeaseContainerPrefix = "TEAMModelOS",
  43. // CreateLeaseContainerIfNotExists =true)]string josn, ILogger log)
  44. //{
  45. // IReadOnlyList<Document> inputs = new List<Document>();
  46. [FunctionName("Common")]
  47. public async Task Common([Microsoft.Azure.WebJobs.CosmosDBTriggerAttribute(
  48. databaseName: "TEAMModelOS",
  49. collectionName: "Common",
  50. ConnectionStringSetting = "Azure:Cosmos:ConnectionString",
  51. LeaseCollectionName = "leases",
  52. LeaseCollectionPrefix = "TEAMModelOS",
  53. CreateLeaseCollectionIfNotExists =true)]IReadOnlyList<Document> inputs, ILogger log)
  54. {
  55. if (inputs != null && inputs.Count > 0)
  56. {
  57. log.LogInformation("Documents modified " + inputs.Count);
  58. log.LogInformation("First document Id " + inputs[0].Id);
  59. var client = _azureCosmos.GetCosmosClient();
  60. foreach (var input in inputs)
  61. {
  62. string pk = input.GetPropertyValue<string>("pk");
  63. if (!string.IsNullOrWhiteSpace(pk))
  64. {
  65. if (pk.Equals("Receiver", StringComparison.OrdinalIgnoreCase))
  66. {
  67. ///通知接收者的变更
  68. return;
  69. }
  70. else {
  71. ///活动类型的变更
  72. int ttl = input.GetPropertyValue<int>("ttl");
  73. long stime = input.GetPropertyValue<long>("startTime");
  74. long etime = input.GetPropertyValue<long>("endTime");
  75. string school = input.GetPropertyValue<string>("school");
  76. string code = input.GetPropertyValue<string>("code");
  77. string creatorId = input.GetPropertyValue<string>("creatorId");
  78. string progress = input.GetPropertyValue<string>("progress");
  79. string scope = input.GetPropertyValue<string>("scope");
  80. string name = input.GetPropertyValue<string>("name");
  81. int? status = input.GetPropertyValue<int?>("status");
  82. int? publish = input.GetPropertyValue<int?>("publish");
  83. var data = new TriggerData
  84. {
  85. stime = stime,
  86. etime = etime,
  87. school = school,
  88. code = code,
  89. creatorId = creatorId,
  90. progress = progress,
  91. scope = scope,
  92. ttl = ttl,
  93. id = input.Id,
  94. status = status,
  95. name = name,
  96. publish = publish
  97. };
  98. #if DEBUG
  99. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-CosmosDBTrigger,{pk}触发变更\n{data.ToJsonString()}",
  100. GroupNames.成都开发測試群組);
  101. #endif
  102. switch (pk)
  103. {
  104. case "Exam":
  105. await TriggerExam.Trigger(_azureCosmos, _serviceBus, _azureStorage, _dingDing, client, input, code, stime, etime, school);
  106. break;
  107. case "Vote":
  108. await TriggerVote.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis, _configuration);
  109. break;
  110. case "Survey":
  111. await TriggerSurvey.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis, _configuration);
  112. break;
  113. case "Correct":
  114. await TriggerCorrect.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis);
  115. break;
  116. case "ExamLite":
  117. await TriggerExamLite.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis, _configuration);
  118. break;
  119. case "Study":
  120. await TriggerStudy.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis, _configuration);
  121. break;
  122. case "Homework":
  123. await TriggerHomework.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis, _configuration);
  124. break;
  125. }
  126. }
  127. }
  128. }
  129. }
  130. }
  131. }
  132. public class TriggerData {
  133. public int? status { get; set; }
  134. public string name { get; set; }
  135. public long stime { get; set; }
  136. public long etime { get; set; }
  137. public string school { get; set; }
  138. public string code { get; set; }
  139. public string creatorId { get; set; }
  140. public string progress { get; set; }
  141. public string scope { get; set; }
  142. public int ttl { get; set; }
  143. public string id { get; set; }
  144. public int? publish { get; set; }
  145. }
  146. }