public async Task <UsageDataTableResult> GetSequenceHistory(Guid telemetryKey, string sequenceId, string searchValue) { Program program = await this.portalContext.Programs.FirstOrDefaultAsync(x => x.TelemetryKey == telemetryKey).ConfigureAwait(false); if (program == null) { throw new ArgumentException($"Program with key {telemetryKey} does not exist"); } string sequencePrefix = SequenceIdParser.GetPrefix(sequenceId); if (string.IsNullOrEmpty(sequencePrefix)) { return(new UsageDataTableResult { TotalCount = 0, FilteredCount = 0, UsageData = new List <DataTableTelemetryData>() }); } IEnumerable <TelemetryDetail> viewQuery = (await this.telemetryContext.ViewTelemetryDetails.Where(x => x.Sequence.StartsWith(sequencePrefix)).ToListAsync().ConfigureAwait(false)).Cast <TelemetryDetail>(); IEnumerable <TelemetryDetail> eventQuery = (await this.telemetryContext.EventTelemetryDetails.Where(x => x.Sequence.StartsWith(sequencePrefix)).ToListAsync().ConfigureAwait(false)).Cast <TelemetryDetail>(); List <LogMessage> logsQuery = (await this.telemetryContext.LogMessages.Where(x => x.ProgramId == program.Id && x.Sequence.StartsWith(sequencePrefix)).ToListAsync().ConfigureAwait(false)); List <ExceptionInfo> exceptionsQuery = (await this.telemetryContext.Exceptions.Where(x => x.ProgramId == program.Id && x.Sequence.StartsWith(sequencePrefix)).ToListAsync().ConfigureAwait(false)); List <object> allResults = viewQuery.Concat(eventQuery).Cast <object>().ToList(); allResults.AddRange(logsQuery); allResults.AddRange(exceptionsQuery); int totalCount = allResults.Count; List <SequenceHistoryData> result = new List <SequenceHistoryData>(); foreach (object detail in allResults) { SequenceHistoryData data = this.BuildSequenceItem(detail); result.Add(data); } result = result.OrderByDescending(x => x.Order).ToList(); return(new UsageDataTableResult { TotalCount = totalCount, FilteredCount = totalCount, UsageData = result }); }
private SequenceHistoryData BuildSequenceItem(object item) { SequenceHistoryData data = null; if (item is TelemetryDetail telemetryDetail) { data = new SequenceHistoryData(telemetryDetail); data.Order = SequenceIdParser.GetOrder(telemetryDetail.Sequence); } else if (item is LogMessage logMessage) { data = new SequenceHistoryData(logMessage); data.Order = SequenceIdParser.GetOrder(logMessage.Sequence); } else if (item is ExceptionInfo error) { data = new SequenceHistoryData(error); data.Order = SequenceIdParser.GetOrder(error.Sequence); } return(data); }