Beispiel #1
0
        public async Task UpdateExceptionSnap(ExceptionSnap exceptionSnap)
        {
            if (exceptionSnap == null)
            {
                throw new ArgumentNullException(nameof(exceptionSnap));
            }

            await _exceptionSnapRepository.Update(exceptionSnap);
        }
Beispiel #2
0
        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;
        }