MonitorCosmosDB.cs 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. private readonly AzureRedisFactory _azureRedis;
  24. public MonitorCosmosDB(IHttpClientFactory clientFactory, AzureCosmosFactory azureCosmos, AzureServiceBusFactory azureServiceBus, AzureStorageFactory azureStorage, DingDing dingDing, AzureRedisFactory azureRedis)
  25. {
  26. _clientFactory = clientFactory;
  27. _azureCosmos = azureCosmos;
  28. _serviceBus = azureServiceBus;
  29. _azureStorage = azureStorage;
  30. _dingDing = dingDing;
  31. _azureRedis = azureRedis;
  32. }
  33. [FunctionName("Common")]
  34. public async Task Common([CosmosDBTrigger(
  35. databaseName: "TEAMModelOS",
  36. collectionName: "Common",
  37. ConnectionStringSetting = "Azure:Cosmos:ConnectionString",
  38. LeaseCollectionName = "leases")]IReadOnlyList<Document> inputs, ILogger log)
  39. {
  40. if (inputs != null && inputs.Count > 0)
  41. {
  42. log.LogInformation("Documents modified " + inputs.Count);
  43. log.LogInformation("First document Id " + inputs[0].Id);
  44. var client = _azureCosmos.GetCosmosClient();
  45. foreach (var input in inputs)
  46. {
  47. string pk = input.GetPropertyValue<string>("pk");
  48. if (!string.IsNullOrWhiteSpace(pk))
  49. {
  50. long stime = input.GetPropertyValue<long>("startTime");
  51. long etime = input.GetPropertyValue<long>("endTime");
  52. string school = input.GetPropertyValue<string>("school");
  53. string code = input.GetPropertyValue<string>("code");
  54. await _dingDing.SendBotMsg($"CosmosDBTrigger,{pk}\n" +
  55. $"Start Time:{DateTimeOffset.FromUnixTimeMilliseconds(stime).AddHours(8)}\n" +
  56. $"End Time:{DateTimeOffset.FromUnixTimeMilliseconds(etime).AddHours(8)}",
  57. GroupNames.成都开发測試群組);
  58. switch (pk)
  59. {
  60. case "Exam":
  61. TriggerExam.Trigger(_azureCosmos, _serviceBus, _azureStorage, _dingDing, client,input,code,stime,etime,school);
  62. break;
  63. case "Vote":
  64. TriggerVote.Trigger(_azureCosmos, _serviceBus, _azureStorage, _dingDing, client, input, code, stime, etime, school, _azureRedis);
  65. break;
  66. case "Survey":
  67. TriggerSurvey.Trigger(_azureCosmos, _serviceBus, _azureStorage, _dingDing, client, input, code, stime, etime, school, _azureRedis, _clientFactory);
  68. break;
  69. }
  70. }
  71. }
  72. }
  73. }
  74. }
  75. }