public async Task UpdateExceptionSnap(ExceptionSnap exceptionSnap) { if (exceptionSnap == null) { throw new ArgumentNullException(nameof(exceptionSnap)); } await _exceptionSnapRepository.Update(exceptionSnap); }
private static async Task Log(ILogger <Program> logger, MonitorOptions options) { logger.LogInformation("开始批量处理Log文件"); var files = ListFiles(Path.Combine(options.FindResponseLogPath, "extract")); foreach (var file in files) { logger.LogInformation("正在处理Log文件:" + file.Name); var path = CommonHelper.MapPath(file.FullName); var data = MessagePackHelper.ToObject <List <MonitorEvent> >(path); var resultResponse = new List <ResponseSnap>(); var resultSql = new List <SqlSnap>(); var resultError = new List <ExceptionSnap>(); var resultTrace = new List <TrackSnap>(); foreach (var item in data) { var traceId = GetValue <string>(item.Data, MonitorKeys.trace_id); if (item.EventType == RequestTypeEnum.Http.ToString().ToLowerInvariant()) { var snap = PreResponse(item, traceId); resultResponse.Add(snap); } else if (item.EventType == RequestTypeEnum.Signalr.ToString().ToLowerInvariant()) { var snap = PreResponse(item, traceId); resultResponse.Add(snap); } else if (item.EventType == RequestTypeEnum.Sql.ToString().ToLowerInvariant()) { var snap = PreSql(item, traceId); resultSql.Add(snap); } else { var snap = PreTrace(item, traceId); if (snap != null) { resultTrace.Add(snap); } else { logger.LogWarning("事件{0},得EventType为{1},不正确", traceId, item.EventType); continue; } } if (item.Data.ContainsKey(MonitorKeys.request_error)) { var source = GetValue <string>(item.Data, MonitorKeys.request_error); var errormessage = GetValue <string>(item.Data, MonitorKeys.request_errordetail); var snap = new ExceptionSnap { TraceId = traceId, ErrorSource = source, ErrorDetail = errormessage, CreateTime = DateTime.Now }; resultError.Add(snap); } } var dbContext = IoC.Resolve <IDbContext>("monitor_dbcontext"); if (resultResponse.Any()) { await IoC.Resolve <IGenericRepository <ResponseSnap> >().CreateRange(resultResponse); } if (resultSql.Any()) { await IoC.Resolve <IGenericRepository <SqlSnap> >().CreateRange(resultSql); } if (resultError.Any()) { await IoC.Resolve <IGenericRepository <ExceptionSnap> >().CreateRange(resultError); } if (resultTrace.Any()) { await IoC.Resolve <IGenericRepository <TrackSnap> >().CreateRange(resultTrace); } File.Delete(file.FullName); } logger.LogInformation("结束这批处理Log文件,共:" + files.Count()); await Task.CompletedTask; }