123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- using System;
- using System.Collections.Generic;
- using System.Net.Http;
- using System.Text.Json;
- using System.Threading.Tasks;
- using Azure.Cosmos;
- using Azure.Messaging.ServiceBus;
- using Microsoft.Azure.Documents;
- using Microsoft.Azure.WebJobs;
- using Microsoft.Extensions.Logging;
- using TEAMModelOS.SDK.DI;
- using TEAMModelOS.SDK.Extension;
- using TEAMModelOS.SDK.Models;
- namespace TEAMModelFunction
- {
- public class MonitorCosmosDB
- {
- private readonly AzureCosmosFactory _azureCosmos;
- private readonly AzureServiceBusFactory _serviceBus;
- private readonly AzureStorageFactory _azureStorage;
- private readonly DingDing _dingDing;
- private readonly AzureRedisFactory _azureRedis;
- public MonitorCosmosDB( AzureCosmosFactory azureCosmos, AzureServiceBusFactory azureServiceBus, AzureStorageFactory azureStorage, DingDing dingDing, AzureRedisFactory azureRedis)
- {
- _azureCosmos = azureCosmos;
- _serviceBus = azureServiceBus;
- _azureStorage = azureStorage;
- _dingDing = dingDing;
- _azureRedis = azureRedis;
- }
- [FunctionName("Common")]
- public async Task Common([CosmosDBTrigger(
- databaseName: "TEAMModelOS",
- collectionName: "Common",
- ConnectionStringSetting = "Azure:Cosmos:ConnectionString",
- LeaseCollectionName = "leases")]IReadOnlyList<Document> inputs, ILogger log)
- {
- if (inputs != null && inputs.Count > 0)
- {
- log.LogInformation("Documents modified " + inputs.Count);
- log.LogInformation("First document Id " + inputs[0].Id);
- var client = _azureCosmos.GetCosmosClient();
- foreach (var input in inputs)
- {
- string pk = input.GetPropertyValue<string>("pk");
- if (!string.IsNullOrWhiteSpace(pk))
- {
- if (pk.Equals("Receiver", StringComparison.OrdinalIgnoreCase))
- {
- ///通知接收者的变更
- return;
-
- }
- else {
- ///活动类型的变更
- int ttl = input.GetPropertyValue<int>("ttl");
- long stime = input.GetPropertyValue<long>("startTime");
- long etime = input.GetPropertyValue<long>("endTime");
- string school = input.GetPropertyValue<string>("school");
- string code = input.GetPropertyValue<string>("code");
- string creatorId = input.GetPropertyValue<string>("creatorId");
- string progress = input.GetPropertyValue<string>("progress");
- string scope = input.GetPropertyValue<string>("scope");
- string name = input.GetPropertyValue<string>("name");
- int? status = input.GetPropertyValue<int?>("status");
- var data = new TriggerData
- {
- stime = stime,
- etime = etime,
- school = school,
- code = code,
- creatorId = creatorId,
- progress = progress,
- scope = scope,
- ttl = ttl,
- id = input.Id,
- status = status
- };
- await _dingDing.SendBotMsg($"CosmosDBTrigger,{pk}触发变更\n{data.ToJsonString()}",
- GroupNames.成都开发測試群組);
- switch (pk)
- {
- case "Exam":
- TriggerExam.Trigger(_azureCosmos, _serviceBus, _azureStorage, _dingDing, client, input, code, stime, etime, school);
- break;
- case "Vote":
- TriggerVote.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis);
- break;
- case "Survey":
- TriggerSurvey.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis);
- break;
- }
- }
-
- }
- }
- }
- }
- }
- public class TriggerData {
- public int? status { get; set; }
- public string name { get; set; }
- public long stime { get; set; }
- public long etime { get; set; }
- public string school { get; set; }
- public string code { get; set; }
- public string creatorId { get; set; }
- public string progress { get; set; }
- public string scope { get; set; }
- public int ttl { get; set; }
- public string id { get; set; }
- }
- }
|