public async Task<Result> GetEventsAsync()
{
Result results = new Result
{
ChaosLog = new SortedList<long, ChaosEntry>(),
CurrentState = StringResource.NotAvailable,
TotalRuntime = StringResource.NotAvailable
};
IReliableDictionary<long, ChaosEntry> savedEvents =
await this.StateManager.GetOrAddAsync<IReliableDictionary<long, ChaosEntry>>(StringResource.SavedEventsKey);
IReliableDictionary<string, DateTime> startTime =
await this.StateManager.GetOrAddAsync<IReliableDictionary<string, DateTime>>(StringResource.StartTimeKey);
IReliableDictionary<string, CurrentState> currentState =
await this.StateManager.GetOrAddAsync<IReliableDictionary<string, CurrentState>>(StringResource.ChaosServiceStateKey);
using (ITransaction tx = this.StateManager.CreateTransaction())
{
IAsyncEnumerable<KeyValuePair<long, ChaosEntry>> enumerable = await savedEvents.CreateEnumerableAsync(tx);
await enumerable.ForeachAsync(CancellationToken.None, item => { results.ChaosLog.Add(item.Key, item.Value); });
ConditionalValue<DateTime> result = await startTime.TryGetValueAsync(tx, StringResource.StartTimeKey);
if (result.HasValue)
{
results.TotalRuntime = (DateTime.UtcNow - result.Value).ToString();
}
ConditionalValue<CurrentState> currentStateResult = await currentState.TryGetValueAsync(tx, StringResource.ChaosServiceStateKey);
if (currentStateResult.HasValue)
{
results.CurrentState = currentStateResult.Value.ToString();
}
await tx.CommitAsync();
}
return results;
}