예제 #1
0
        public async void StartWork()
        {
            var httpClient = new HttpClient
            {
                BaseAddress = _serverUrlBase
            };

            while (true)
            {
                var item = _payloads.Take();

                try
                {
                    var json = JsonConvert.SerializeObject(item,
                                                           new JsonSerializerSettings {
                        ContractResolver = new CamelCasePropertyNamesContractResolver()
                    });
                    var content = new StringContent(json, Encoding.UTF8, "application/json");

                    HttpResponseMessage result = null;
                    switch (item)
                    {
                    case Payload p:
                        result = await httpClient.PostAsync(Consts.IntakeV1Transactions, content);

                        break;

                    case Error e:
                        result = await httpClient.PostAsync(Consts.IntakeV1Errors, content);

                        break;
                    }

                    var isSucc = result.IsSuccessStatusCode;
                    var str    = await result.Content.ReadAsStringAsync();
                }
                catch (Exception e)
                {
                    switch (item)
                    {
                    case Payload p:
                        _logger.LogWarning($"Failed sending transaction {p.Transactions.FirstOrDefault()?.Name}");
                        _logger.LogDebug($"{e.GetType().Name}: {e.Message}");
                        break;

                    case Error err:
                        _logger.LogWarning($"Failed sending Error {err.Errors[0]?.Id}");
                        _logger.LogDebug($"{e.GetType().Name}: {e.Message}");
                        break;
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Turns a System.Diagnostic.StackFrame[] into a <see cref="Stacktrace" /> list which can be reported to the APM Server
        /// </summary>
        /// <param name="capturingFor">Just for logging.</param>
        /// <returns>A prepared List that can be passed to the APM server</returns>
        internal static List <Stacktrace> GenerateApmStackTrace(StackFrame[] frames, AbstractLogger logger, string capturingFor)
        {
            var retVal = new List <Stacktrace>(frames.Length);

            try
            {
                retVal.AddRange(from item in frames
                                let fileName = item?.GetMethod()?.DeclaringType?.Assembly?.GetName()?.Name
                                               where !string.IsNullOrEmpty(fileName)
                                               select new Stacktrace
                {
                    Function = item?.GetMethod()?.Name,
                    FileName = fileName,
                    Module   = item?.GetMethod()?.ReflectedType?.Name,
                    LineNo   = item?.GetFileLineNumber() ?? 0
                });
            }
            catch (Exception e)
            {
                logger.LogWarning($"Failed capturing stacktrace for {capturingFor}");
                logger.LogDebug($"{e.GetType().Name}: {e.Message}");
            }

            return(retVal);
        }
예제 #3
0
        /// <summary>
        /// Turns a System.Diagnostic.StackFrame[] into a <see cref="Stacktrace"/> list which can be reported to the APM Server
        /// </summary>
        /// <param name="capturingFor">Just for logging.</param>
        /// <returns>A prepared List that can be passed to the APM server</returns>
        public static List <Stacktrace> GenerateApmStackTrace(StackFrame[] frames, AbstractLogger logger, string capturingFor)
        {
            var retVal = new List <Stacktrace>(frames.Length);

            try
            {
                foreach (var item in frames)
                {
                    var fileName = item?.GetMethod()?.DeclaringType?.Assembly?.GetName()?.Name;
                    if (String.IsNullOrEmpty(fileName))
                    {
                        continue; //since filename is required by the server, if we don't have it we skip the frame
                    }

                    retVal.Add(new Stacktrace
                    {
                        Function = item?.GetMethod()?.Name,
                        Filename = fileName,
                        Module   = item?.GetMethod()?.ReflectedType?.Name
                    });
                }
            }
            catch (Exception e)
            {
                logger.LogWarning($"Failed capturing stacktrace for {capturingFor}");
                logger.LogDebug($"{e.GetType().Name}: {e.Message}");
            }

            return(retVal);
        }
예제 #4
0
        private void LogWithLevel(LogLevel logLevel)
        {
            Apm.Agent.Config.LogLevel = logLevel;

            logger.LogError("Error log");
            logger.LogWarning("Warning log");
            logger.LogInfo("Info log");
            logger.LogDebug("Debug log");
        }