|
@@ -19,12 +19,14 @@ namespace TEAMModelFunction
|
|
|
private readonly IHttpClientFactory _clientFactory;
|
|
|
private readonly AzureCosmosFactory _azureCosmos;
|
|
|
private readonly AzureServiceBusFactory _serviceBus;
|
|
|
+ private readonly AzureStorageFactory _azureStorage;
|
|
|
|
|
|
- public MonitorCosmosDB(IHttpClientFactory clientFactory, AzureCosmosFactory azureCosmos,AzureServiceBusFactory azureServiceBus)
|
|
|
+ public MonitorCosmosDB(IHttpClientFactory clientFactory, AzureCosmosFactory azureCosmos,AzureServiceBusFactory azureServiceBus, AzureStorageFactory azureStorage)
|
|
|
{
|
|
|
_clientFactory = clientFactory;
|
|
|
_azureCosmos = azureCosmos;
|
|
|
_serviceBus = azureServiceBus;
|
|
|
+ _azureStorage = azureStorage;
|
|
|
}
|
|
|
|
|
|
[FunctionName("ActiveChange")]
|
|
@@ -64,25 +66,28 @@ namespace TEAMModelFunction
|
|
|
}
|
|
|
var message = new ServiceBusMessage(new { id = input[0].Id, name = "Exam", code = code }.ToJsonString());
|
|
|
message.Properties.Add("name", "Exam");
|
|
|
- ChangeRecord record = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ChangeRecord>(input[0].Id, new Azure.Cosmos.PartitionKey($"{info.progress}"));
|
|
|
+ List<ChangeRecord> records = await _azureStorage.FindListByDict<ChangeRecord>(new Dictionary<string, object>() { { "RowKey", input[0].Id }, { "PartitionKey", info.progress } });
|
|
|
+ //ChangeRecord record = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ChangeRecord>(input[0].Id, new Azure.Cosmos.PartitionKey($"{info.progress}"));
|
|
|
switch (info.progress) {
|
|
|
case "pending":
|
|
|
- if (record != null)
|
|
|
+ if (records.Count> 0)
|
|
|
{
|
|
|
+ await _serviceBus.GetServiceBusClient().cancelMessage("active - task", records[0].sequenceNumber);
|
|
|
long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", message, DateTimeOffset.FromUnixTimeMilliseconds(stime));
|
|
|
- record.sequenceNumber = start;
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(record, record.id, new Azure.Cosmos.PartitionKey($"{record.code}"));
|
|
|
+ records[0].sequenceNumber = start;
|
|
|
+ await _azureStorage.SaveOrUpdate<ChangeRecord>(records[0]);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(record, record.id, new Azure.Cosmos.PartitionKey($"{record.code}"));
|
|
|
}
|
|
|
else {
|
|
|
long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", message, DateTimeOffset.FromUnixTimeMilliseconds(stime));
|
|
|
ChangeRecord changeRecord = new ChangeRecord
|
|
|
{
|
|
|
- id = input[0].Id,
|
|
|
- code = "pending",
|
|
|
- pk = "ChangeRecord",
|
|
|
+ RowKey = input[0].Id,
|
|
|
+ PartitionKey = "pending",
|
|
|
sequenceNumber = start
|
|
|
};
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
+ await _azureStorage.Save<ChangeRecord>(changeRecord);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
}
|
|
|
break;
|
|
|
case "going":
|
|
@@ -127,23 +132,25 @@ namespace TEAMModelFunction
|
|
|
|
|
|
}
|
|
|
}
|
|
|
- if (record != null)
|
|
|
+ if (records.Count > 0)
|
|
|
{
|
|
|
- long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", message, DateTimeOffset.FromUnixTimeMilliseconds(etime));
|
|
|
- record.sequenceNumber = start;
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(record, record.id, new Azure.Cosmos.PartitionKey($"{record.code}"));
|
|
|
+ long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", message, DateTimeOffset.FromUnixTimeMilliseconds(etime));
|
|
|
+ await _serviceBus.GetServiceBusClient().cancelMessage("active - task", records[0].sequenceNumber);
|
|
|
+ records[0].sequenceNumber = end;
|
|
|
+ await _azureStorage.SaveOrUpdate<ChangeRecord>(records[0]);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(record, record.id, new Azure.Cosmos.PartitionKey($"{record.code}"));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", message, DateTimeOffset.FromUnixTimeMilliseconds(etime));
|
|
|
+ long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", message, DateTimeOffset.FromUnixTimeMilliseconds(etime));
|
|
|
ChangeRecord changeRecord = new ChangeRecord
|
|
|
{
|
|
|
- id = input[0].Id,
|
|
|
- code = "going",
|
|
|
- pk = "ChangeRecord",
|
|
|
- sequenceNumber = start
|
|
|
+ RowKey = input[0].Id,
|
|
|
+ PartitionKey = "going",
|
|
|
+ sequenceNumber = end
|
|
|
};
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
+ await _azureStorage.Save<ChangeRecord>(changeRecord);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
@@ -211,46 +218,51 @@ namespace TEAMModelFunction
|
|
|
Vote vote = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<Vote>(input[0].Id, new Azure.Cosmos.PartitionKey($"{code}"));
|
|
|
var messageVote = new ServiceBusMessage(new { id = input[0].Id, name = "Vote", code = code }.ToJsonString());
|
|
|
messageVote.Properties.Add("name", "Vote");
|
|
|
- ChangeRecord voteRecord = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ChangeRecord>(input[0].Id, new Azure.Cosmos.PartitionKey($"{vote.progress}"));
|
|
|
+ List<ChangeRecord> voteRecords = await _azureStorage.FindListByDict<ChangeRecord>(new Dictionary<string, object>() { { "RowKey", input[0].Id }, { "PartitionKey", vote.progress } });
|
|
|
+ //ChangeRecord voteRecord = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ChangeRecord>(input[0].Id, new Azure.Cosmos.PartitionKey($"{vote.progress}"));
|
|
|
switch (vote.progress) {
|
|
|
case "pending":
|
|
|
- if (voteRecord != null)
|
|
|
+ if (voteRecords.Count > 0)
|
|
|
{
|
|
|
long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageVote, DateTimeOffset.FromUnixTimeMilliseconds(stime));
|
|
|
- voteRecord.sequenceNumber = start;
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(voteRecord, voteRecord.id, new Azure.Cosmos.PartitionKey($"{voteRecord.code}"));
|
|
|
+ await _serviceBus.GetServiceBusClient().cancelMessage("active - task", voteRecords[0].sequenceNumber);
|
|
|
+ voteRecords[0].sequenceNumber = start;
|
|
|
+ await _azureStorage.SaveOrUpdate<ChangeRecord>(voteRecords[0]);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(voteRecord, voteRecord.id, new Azure.Cosmos.PartitionKey($"{voteRecord.code}"));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageVote, DateTimeOffset.FromUnixTimeMilliseconds(stime));
|
|
|
ChangeRecord changeRecord = new ChangeRecord
|
|
|
{
|
|
|
- id = input[0].Id,
|
|
|
- code = "pending",
|
|
|
- pk = "ChangeRecord",
|
|
|
+ RowKey = input[0].Id,
|
|
|
+ PartitionKey = "pending",
|
|
|
sequenceNumber = start
|
|
|
};
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
+ await _azureStorage.Save<ChangeRecord>(changeRecord);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
}
|
|
|
break;
|
|
|
case "going":
|
|
|
- if (voteRecord != null)
|
|
|
+ if (voteRecords.Count > 0)
|
|
|
{
|
|
|
long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageVote, DateTimeOffset.FromUnixTimeMilliseconds(etime));
|
|
|
- voteRecord.sequenceNumber = end;
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(voteRecord, voteRecord.id, new Azure.Cosmos.PartitionKey($"{voteRecord.code}"));
|
|
|
+ await _serviceBus.GetServiceBusClient().cancelMessage("active - task", voteRecords[0].sequenceNumber);
|
|
|
+ voteRecords[0].sequenceNumber = end;
|
|
|
+ await _azureStorage.SaveOrUpdate<ChangeRecord>(voteRecords[0]);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(voteRecord, voteRecord.id, new Azure.Cosmos.PartitionKey($"{voteRecord.code}"));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageVote, DateTimeOffset.FromUnixTimeMilliseconds(etime));
|
|
|
ChangeRecord changeRecord = new ChangeRecord
|
|
|
{
|
|
|
- id = input[0].Id,
|
|
|
- code = "going",
|
|
|
- pk = "ChangeRecord",
|
|
|
+ RowKey = input[0].Id,
|
|
|
+ PartitionKey = "going",
|
|
|
sequenceNumber = end
|
|
|
};
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
+ await _azureStorage.Save<ChangeRecord>(changeRecord);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -259,47 +271,51 @@ namespace TEAMModelFunction
|
|
|
Survey survey = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<Survey>(input[0].Id, new Azure.Cosmos.PartitionKey($"{code}"));
|
|
|
var messageSurvey = new ServiceBusMessage(new { id = input[0].Id, name = "Survey", code = code }.ToJsonString());
|
|
|
messageSurvey.Properties.Add("name", "Survey");
|
|
|
- ChangeRecord surveyRecord = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ChangeRecord>(input[0].Id, new Azure.Cosmos.PartitionKey($"{survey.progress}"));
|
|
|
+ List<ChangeRecord> changeRecords = await _azureStorage.FindListByDict<ChangeRecord>(new Dictionary<string, object>() { { "RowKey", input[0].Id },{"PartitionKey", survey.progress} });
|
|
|
+ //ChangeRecord surveyRecord = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ChangeRecord>(input[0].Id, new Azure.Cosmos.PartitionKey($"{survey.progress}"));
|
|
|
switch (survey.progress)
|
|
|
{
|
|
|
case "pending":
|
|
|
- if (surveyRecord != null)
|
|
|
+ if (changeRecords.Count > 0)
|
|
|
{
|
|
|
long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageSurvey, DateTimeOffset.FromUnixTimeMilliseconds(stime));
|
|
|
- surveyRecord.sequenceNumber = start;
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(surveyRecord, surveyRecord.id, new Azure.Cosmos.PartitionKey($"{surveyRecord.code}"));
|
|
|
+ await _serviceBus.GetServiceBusClient().cancelMessage("active - task", changeRecords[0].sequenceNumber);
|
|
|
+ changeRecords[0].sequenceNumber = start;
|
|
|
+ await _azureStorage.SaveOrUpdate<ChangeRecord>(changeRecords[0]);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(surveyRecord, surveyRecord.id, new Azure.Cosmos.PartitionKey($"{surveyRecord.code}"));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageSurvey, DateTimeOffset.FromUnixTimeMilliseconds(stime));
|
|
|
ChangeRecord changeRecord = new ChangeRecord
|
|
|
{
|
|
|
- id = input[0].Id,
|
|
|
- code = "pending",
|
|
|
- pk = "ChangeRecord",
|
|
|
+ RowKey = input[0].Id,
|
|
|
+ PartitionKey = "pending",
|
|
|
sequenceNumber = start
|
|
|
};
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
+ await _azureStorage.Save<ChangeRecord>(changeRecord);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
}
|
|
|
break;
|
|
|
case "going":
|
|
|
- if (surveyRecord != null)
|
|
|
+ if (changeRecords.Count > 0)
|
|
|
{
|
|
|
long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageSurvey, DateTimeOffset.FromUnixTimeMilliseconds(etime));
|
|
|
- surveyRecord.sequenceNumber = end;
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(surveyRecord, surveyRecord.id, new Azure.Cosmos.PartitionKey($"{surveyRecord.code}"));
|
|
|
+ await _serviceBus.GetServiceBusClient().cancelMessage("active - task", changeRecords[0].sequenceNumber);
|
|
|
+ changeRecords[0].sequenceNumber = end;
|
|
|
+ await _azureStorage.SaveOrUpdate<ChangeRecord>(changeRecords[0]);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageSurvey, DateTimeOffset.FromUnixTimeMilliseconds(etime));
|
|
|
ChangeRecord changeRecord = new ChangeRecord
|
|
|
{
|
|
|
- id = input[0].Id,
|
|
|
- code = "going",
|
|
|
- pk = "ChangeRecord",
|
|
|
+ RowKey = input[0].Id,
|
|
|
+ PartitionKey = "going",
|
|
|
sequenceNumber = end
|
|
|
};
|
|
|
- await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
+ await _azureStorage.Save<ChangeRecord>(changeRecord);
|
|
|
+ //await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
|
|
|
}
|
|
|
break;
|
|
|
}
|