Beispiel #1
0
        private static async Task PostLog(ILoggingStore store, UssdRequest request, UssdResponse response,
                                          DateTime startTime, DateTime endTime, bool dispose)
        {
            if (store == null)
            {
                return;
            }
            var log = await store.Find(request.SessionId);

            if (log == null)
            {
                return;
            }
            log.EndTime = endTime;
            log.DurationInMilliseconds = endTime.Subtract(log.StartTime).TotalMilliseconds;
            log.ErrorStackTrace        = response.Exception == null ? null : response.Exception.StackTrace;
            var entry = new UssdSessionLogEntry
            {
                StartTime = startTime,
                EndTime   = endTime,
                DurationInMilliseconds = endTime.Subtract(startTime).TotalMilliseconds,
                UssdRequest            = request,
                UssdResponse           = response,
            };
            await store.Update(log);

            await store.AddEntry(request.SessionId, entry);

            if (dispose)
            {
                store.Dispose();
            }
        }
        public async Task AddEntry(string sessionId, UssdSessionLogEntry entry)
        {
            var filter = Builders <MongoDbSessionLog> .Filter.Where(x => x.SessionId == sessionId);

            var update = Builders <MongoDbSessionLog> .Update.AddToSet(x => x.Entries, entry);

            await Collection.UpdateOneAsync(filter, update);
        }