示例#1
0
        /// <summary>
        /// Runs the diagnostics method.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <remarks></remarks>
        private void RunDiagnosticsMethod(DiagnosticsInfo value)
        {
            var current = GetDiagnosticsDetailItem(value.Id);

            _logger.DebugFormat("Trying Method {0}", value.DiagnosticsMethodInfo.Name);
            current.StartedAt = DateTime.Now;
            current.Info      = "Running";
            SaveDetailItem(current);
            try
            {
                var instance = Activator.CreateInstance(value.DiagnosticsClassType);
                value.DiagnosticsMethodInfo.Invoke(instance, null);
                current.Status  = DiagnosticsStatus.Valid;
                current.Info    = "Succeeded.";
                current.EndedAt = DateTime.Now;
            }
            catch (Exception ex)
            {
                current.Info   = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                current.Status = DiagnosticsStatus.Error;
                _logger.ErrorFormat("An error occured executing method {0} - {1}", current.Method, current.Info);
                current.EndedAt = DateTime.Now;
            }
            finally
            {
                SaveDetailItem(current);
            }
            _logger.DebugFormat("Executed Method {0} - {1} => {2}", current.Method, current.Status, current.Info);
        }
        public static void LogTransaction(HttpRequest request, string response)
        {
            var info = new DiagnosticsInfo()
            {
                RequestUrl   = "[" + request.Method + "]" + request.Host + request.Path + request.QueryString,
                Body         = new List <string>(),
                ResponseBody = new List <string>()
            };

            if (request.HasFormContentType)
            {
                foreach (var form in request.Form)
                {
                    if (form.Key == "client" || form.Key == "server")
                    {
                        var clientParams = Encoding.ASCII.GetString(Base64UrlTextEncoder.Decode(form.Value))
                                           .Replace("\r\n", "\n")
                                           .Split('\n')
                                           .Where(x => x.Contains("="))
                                           .ToDictionary(x => x.Split('=')[0], x => x.Remove(0, x.Split('=')[0].Length + 1));

                        foreach (var param in clientParams)
                        {
                            info.Body.Add(form.Key + "." + param.Key + ": " + param.Value);
                        }
                        continue;
                    }
                    info.Body.Add(form.Key + ": " + form.Value);
                }
            }

            var responseValues = response
                                 .Replace("\r\n", "\n")
                                 .Split('\n')
                                 .Where(x => x.Contains("="))
                                 .ToDictionary(x => x.Split('=')[0], x => x.Remove(0, x.Split('=')[0].Length + 1));

            foreach (var responseValue in responseValues)
            {
                if (responseValue.Key == "tif")
                {
                    var intValue  = int.Parse(responseValue.Value, System.Globalization.NumberStyles.HexNumber);
                    var translate = Enum.TryParse <SqrlCommandWorker.Tif>(intValue.ToString(), out var tifText);
                    if (translate)
                    {
                        info.ResponseBody.Add(responseValue.Key + ": " + responseValue.Value + " ( " + tifText.ToString("F") + " ) ");
                    }
                    else
                    {
                        info.ResponseBody.Add(responseValue.Key + ": " + responseValue.Value + " ( !!!UNKNOWN!!! ) ");
                    }
                }
                else
                {
                    info.ResponseBody.Add(responseValue.Key + ": " + responseValue.Value);
                }
            }

            TransactionLog.Add(info);
        }
示例#3
0
        protected void AppendSection(List <object[]> output, DiagnosticsInfo section)
        {
            var sectionContents = new List <object[]> {
                new object[] { "Contains", "" }
            };

            foreach (var node in section.Nodes)
            {
                sectionContents.Add(new object[] { node.Name, node.Value });
            }

            foreach (var group in section.Groups)
            {
                var groupContents = GetGroupContents(group);
                if (groupContents.Count > 1)
                {
                    sectionContents.Add(new object[] { group.Name, groupContents });
                }
            }

            if (sectionContents.Count > 1)
            {
                output.Add(new object[] { section.Name, sectionContents });
            }
        }
示例#4
0
        /// <inheritdoc />
        public async Task ProcessRequestAsync(HttpContext context)
        {
            if (!_environment.IsDevelopment())
            {
                context.Response.StatusCode = 404;
                return;
            }

            var usertoken = await context.GetUserAccessTokenAsync();

            var clientToken = await context.GetClientAccessTokenAsync();

            var info = new DiagnosticsInfo
            {
                UserAccessToken   = usertoken,
                ClientAccessToken = clientToken
            };

#if NET6_0_OR_GREATER
            var options = new JsonSerializerOptions
            {
                DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
            };
#else
            var options = new JsonSerializerOptions
            {
                IgnoreNullValues = true
            };
#endif

            var json = JsonSerializer.Serialize(info, options);

            context.Response.ContentType = "application/json";
            await context.Response.WriteAsync(json);
        }
示例#5
0
 /// <summary>
 /// Adds the test method.
 /// </summary>
 /// <param name="nfo">The nfo.</param>
 /// <remarks></remarks>
 private void AddDiagnosticsInfo(DiagnosticsInfo nfo)
 {
     if (ActiveTests.Keys.Contains(nfo.FullMethodName))
     {
         return;
     }
     _logger.DebugFormat(String.Format("Adding Test Method {0}", nfo.FullMethodName));
     ActiveTests.Add(nfo.FullMethodName, nfo);
 }
        public virtual DiagnosticsInfo Build()
        {
            var diagnosticsInfo = new DiagnosticsInfo("Db: '{0}'", Database.Name);
            AppendConnectionInfoDiagnostics(diagnosticsInfo);
            AppendSerializerDiagnostics(diagnosticsInfo);
            AppendSettingsDiagnostics(diagnosticsInfo);
            AppendStructureSchemasDiagnostics(diagnosticsInfo);

            return diagnosticsInfo;
        }
示例#7
0
        public virtual DiagnosticsInfo Build()
        {
            var diagnosticsInfo = new DiagnosticsInfo("Db: '{0}'", Database.Name);

            AppendConnectionInfoDiagnostics(diagnosticsInfo);
            AppendSerializerDiagnostics(diagnosticsInfo);
            AppendSettingsDiagnostics(diagnosticsInfo);
            AppendStructureSchemasDiagnostics(diagnosticsInfo);

            return(diagnosticsInfo);
        }
示例#8
0
 /// <summary>
 /// Runs the diagnostics method async.
 /// </summary>
 /// <param name="value">The value.</param>
 /// <remarks></remarks>
 private void RunDiagnosticsMethodAsync(DiagnosticsInfo value)
 {
     using (var wrk = new BackgroundWorker())
     {
         wrk.DoWork += (s, e) =>
         {
             try
             {
                 RunDiagnosticsMethod(value);
             }
             catch (Exception)
             {
                 wrk.Dispose();
             }
         };
         wrk.RunWorkerAsync();
     }
 }
 public DbSettingsDiagnosticsAppender(DiagnosticsInfo info)
 {
     Info = info;
 }
示例#10
0
        protected virtual void AppendStructureSchemasDiagnostics(DiagnosticsInfo info)
        {
            var appender = new StructureSchemasDiagnosticsAppender(info);

            appender.Append(Database.StructureSchemas);
        }
示例#11
0
        protected virtual void AppendSettingsDiagnostics(DiagnosticsInfo info)
        {
            var appender = new DbSettingsDiagnosticsAppender(info);

            appender.Append(Database.Settings);
        }
示例#12
0
        protected virtual void AppendSerializerDiagnostics(DiagnosticsInfo info)
        {
            var appender = new SerializerDiagnosticsAppender(info);

            appender.Append(Database.Serializer);
        }
示例#13
0
        protected virtual void AppendConnectionInfoDiagnostics(DiagnosticsInfo info)
        {
            var appender = new ConnectionInfoDiagnosticsAppender(info);

            appender.Append(Database.ConnectionInfo);
        }
示例#14
0
 public SerializerDiagnosticsAppender(DiagnosticsInfo info)
 {
     Info = info;
 }
 protected virtual void AppendSerializerDiagnostics(DiagnosticsInfo info)
 {
     var appender = new SerializerDiagnosticsAppender(info);
     appender.Append(Database.Serializer);
 }
 public StructureSchemasDiagnosticsAppender(DiagnosticsInfo info)
 {
     Info = info;
 }
 protected virtual void AppendSettingsDiagnostics(DiagnosticsInfo info)
 {
     var appender = new DbSettingsDiagnosticsAppender(info);
     appender.Append(Database.Settings);
 }
 protected virtual void AppendConnectionInfoDiagnostics(DiagnosticsInfo info)
 {
     var appender = new ConnectionInfoDiagnosticsAppender(info);
     appender.Append(Database.ConnectionInfo);
 }
 protected virtual void AppendStructureSchemasDiagnostics(DiagnosticsInfo info)
 {
     var appender = new StructureSchemasDiagnosticsAppender(info);
     appender.Append(Database.StructureSchemas);
 }
 public static ModelInfo ModelInfo(int?slidingWindow = default, AlignPolicy alignPolicy = default, string source = default, DateTimeOffset startTime = default, DateTimeOffset endTime = default, string displayName = default, ModelStatus?status = default, IReadOnlyList <ErrorResponse> errors = default, DiagnosticsInfo diagnosticsInfo = default)
 {
     errors ??= new List <ErrorResponse>();
     return(new ModelInfo(slidingWindow, alignPolicy, source, startTime, endTime, displayName, status, errors, diagnosticsInfo));
 }
 public ConnectionInfoDiagnosticsAppender(DiagnosticsInfo info)
 {
     Info = info;
 }