MonitorCosmosDB.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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.Logging;
  11. using TEAMModelOS.SDK.DI;
  12. using TEAMModelOS.SDK.Extension;
  13. using TEAMModelOS.SDK.Models;
  14. namespace TEAMModelFunction
  15. {
  16. public class MonitorCosmosDB
  17. {
  18. private readonly IHttpClientFactory _clientFactory;
  19. private readonly AzureCosmosFactory _azureCosmos;
  20. private readonly AzureServiceBusFactory _serviceBus;
  21. private readonly AzureStorageFactory _azureStorage;
  22. private readonly DingDing _dingDing;
  23. public MonitorCosmosDB(IHttpClientFactory clientFactory, AzureCosmosFactory azureCosmos, AzureServiceBusFactory azureServiceBus, AzureStorageFactory azureStorage, DingDing dingDing)
  24. {
  25. _clientFactory = clientFactory;
  26. _azureCosmos = azureCosmos;
  27. _serviceBus = azureServiceBus;
  28. _azureStorage = azureStorage;
  29. _dingDing = dingDing;
  30. }
  31. [FunctionName("Common")]
  32. public async Task Common([CosmosDBTrigger(
  33. databaseName: "TEAMModelOS",
  34. collectionName: "Common",
  35. ConnectionStringSetting = "Azure:Cosmos:ConnectionString",
  36. LeaseCollectionName = "leases")]IReadOnlyList<Document> inputs, ILogger log)
  37. {
  38. if (inputs != null && inputs.Count > 0)
  39. {
  40. log.LogInformation("Documents modified " + inputs.Count);
  41. log.LogInformation("First document Id " + inputs[0].Id);
  42. var client = _azureCosmos.GetCosmosClient();
  43. foreach (var input in inputs)
  44. {
  45. string pk = input.GetPropertyValue<string>("pk");
  46. if (!string.IsNullOrWhiteSpace(pk))
  47. {
  48. long stime = input.GetPropertyValue<long>("startTime");
  49. long etime = input.GetPropertyValue<long>("endTime");
  50. string school = input.GetPropertyValue<string>("school");
  51. string code = input.GetPropertyValue<string>("code");
  52. await _dingDing.SendBotMsg($"CosmosDBTrigger,{pk}\n" +
  53. $"Start Time:{DateTimeOffset.FromUnixTimeMilliseconds(stime).AddHours(8)}\n" +
  54. $"End Time:{DateTimeOffset.FromUnixTimeMilliseconds(etime).AddHours(8)}",
  55. GroupNames.醍摩豆服務運維群組);
  56. switch (pk)
  57. {
  58. case "Exam":
  59. ExamTrigger.Trigger(_azureCosmos, _serviceBus, _azureStorage, _dingDing, client,input,code,stime,etime,school);
  60. break;
  61. case "Vote":
  62. VoteTrigger.Trigger(_azureCosmos, _serviceBus, _azureStorage, _dingDing, client, input, code, stime, etime, school);
  63. break;
  64. case "Survey":
  65. SurveyTrigger.Trigger(_azureCosmos, _serviceBus, _azureStorage, _dingDing, client, input, code, stime, etime, school);
  66. break;
  67. }
  68. }
  69. }
  70. }
  71. }
  72. }
  73. }