コード例 #1
0
        private static ulong ParseUInt64(IHeadersCollection headers, string headerName)
        {
            var headerValues = headers.GetValues(headerName).ToList();

            if (headerValues.Count > 0)
            {
                foreach (string headerValue in headerValues)
                {
                    if (ulong.TryParse(headerValue, NumberStyles, InvariantCulture, out var result))
                    {
                        return(result);
                    }
                }

                Log.Information("Could not parse {0} headers: {1}", headerName, string.Join(",", headerValues));
            }

            return(0);
        }
コード例 #2
0
        public static IApiRequestFactory Get(TracerSettings settings)
        {
            var strategy = settings.TracesTransport?.ToUpperInvariant();

            switch (strategy)
            {
            case DatadogTcp:
                Log.Information("Using {0} for trace transport.", nameof(TcpStreamFactory));
                return(new HttpStreamRequestFactory(new TcpStreamFactory(settings.AgentUri.Host, settings.AgentUri.Port), new DatadogHttpClient()));

            case DatadogNamedPipes:
                Log.Information("Using {0} for trace transport, with pipe name {1} and timeout {2}ms.", nameof(NamedPipeClientStreamFactory), settings.TracesPipeName, settings.TracesPipeTimeoutMs);
                return(new HttpStreamRequestFactory(new NamedPipeClientStreamFactory(settings.TracesPipeName, settings.TracesPipeTimeoutMs), new DatadogHttpClient()));

            default:
                // Defer decision to Api logic
                return(null);
            }
        }
コード例 #3
0
        private static ulong ParseUInt64(object headers, string headerName)
        {
            if (headers.CallMethod <string, bool>("Contains", headerName).Value)
            {
                var headerValues = headers.CallMethod <string, IEnumerable <string> >("GetValues", headerName).Value;
                if (headerValues != null && headerValues.Any())
                {
                    foreach (string headerValue in headerValues)
                    {
                        if (ulong.TryParse(headerValue, NumberStyles, InvariantCulture, out var result))
                        {
                            return(result);
                        }
                    }

                    Log.Information("Could not parse {0} headers: {1}", headerName, string.Join(",", headerValues));
                }
            }

            return(0);
        }
コード例 #4
0
        private void RefreshCounter(string instanceName)
        {
            try
            {
                var newCounter = new PerformanceCounter(_categoryName, _counterName, instanceName, readOnly: true);

                var oldCounter = Interlocked.Exchange(ref _counter, newCounter);

                oldCounter?.Dispose();
            }
            catch (Exception ex)
            {
                Log.Information(ex, "Error while renewing counter");
            }
        }
コード例 #5
0
        private static ulong ParseUInt64 <T>(T headers, string headerName)
            where T : IHeadersCollection
        {
            var headerValues = headers.GetValues(headerName);

            bool hasValue = false;

            foreach (string headerValue in headerValues)
            {
                if (ulong.TryParse(headerValue, NumberStyles, InvariantCulture, out var result))
                {
                    return(result);
                }

                hasValue = true;
            }

            if (hasValue)
            {
                Log.Information("Could not parse {0} headers: {1}", headerName, string.Join(",", headerValues));
            }

            return(0);
        }
コード例 #6
0
        private static ulong ParseHexUInt64 <T>(T carrier, Func <T, string, IEnumerable <string> > getter, string headerName)
        {
            var headerValues = getter(carrier, headerName).ToList();

            if (!headerValues.Any())
            {
                return(0);
            }

            foreach (var headerValue in headerValues)
            {
                if (ulong.TryParse(headerValue, NumberStyle, InvariantCulture, out var result))
                {
                    return(result);
                }
            }

            Log.Information("Could not parse {0} headers: {1}", headerName, string.Join(",", headerValues));

            return(0);
        }
コード例 #7
0
        internal async Task WriteDiagnosticLog()
        {
            string agentError = null;

            try
            {
                var success = await _agentWriter.Ping().ConfigureAwait(false);

                if (!success)
                {
                    agentError = "An error occurred while sending traces to the agent";
                }
            }
            catch (Exception ex)
            {
                agentError = ex.Message;
            }

            try
            {
                var frameworkDescription = FrameworkDescription.Create();

                var stringWriter = new StringWriter();

                using (var writer = new JsonTextWriter(stringWriter))
                {
                    writer.WriteStartObject();

                    writer.WritePropertyName("date");
                    writer.WriteValue(DateTime.Now);

                    writer.WritePropertyName("os_name");
                    writer.WriteValue(frameworkDescription.OSPlatform);

                    writer.WritePropertyName("os_version");
                    writer.WriteValue(Environment.OSVersion.ToString());

                    writer.WritePropertyName("version");
                    writer.WriteValue(typeof(Tracer).Assembly.GetName().Version.ToString());

                    writer.WritePropertyName("platform");
                    writer.WriteValue(frameworkDescription.ProcessArchitecture);

                    writer.WritePropertyName("lang");
                    writer.WriteValue(frameworkDescription.Name);

                    writer.WritePropertyName("lang_version");
                    writer.WriteValue(frameworkDescription.ProductVersion);

                    writer.WritePropertyName("env");
                    writer.WriteValue(Settings.Environment);

                    writer.WritePropertyName("enabled");
                    writer.WriteValue(Settings.TraceEnabled);

                    writer.WritePropertyName("service");
                    writer.WriteValue(DefaultServiceName);

                    writer.WritePropertyName("agent_url");
                    writer.WriteValue(Settings.AgentUri);

                    writer.WritePropertyName("debug");
                    writer.WriteValue(GlobalSettings.Source.DebugEnabled);

                    writer.WritePropertyName("analytics_enabled");
                    writer.WriteValue(Settings.AnalyticsEnabled);

                    writer.WritePropertyName("sample_rate");
                    writer.WriteValue(Settings.GlobalSamplingRate);

                    writer.WritePropertyName("sampling_rules");
                    writer.WriteValue(Settings.CustomSamplingRules);

                    writer.WritePropertyName("tags");

                    writer.WriteStartArray();

                    foreach (var entry in Settings.GlobalTags)
                    {
                        writer.WriteValue(string.Concat(entry.Key, ":", entry.Value));
                    }

                    writer.WriteEndArray();

                    writer.WritePropertyName("log_injection_enabled");
                    writer.WriteValue(Settings.LogsInjectionEnabled);

                    writer.WritePropertyName("runtime_metrics_enabled");
                    writer.WriteValue(Settings.TracerMetricsEnabled);

                    writer.WritePropertyName("disabled_integrations");
                    writer.WriteStartArray();

                    foreach (var integration in Settings.DisabledIntegrationNames)
                    {
                        writer.WriteValue(integration);
                    }

                    writer.WriteEndArray();

                    writer.WritePropertyName("netstandard_enabled");
                    writer.WriteValue(Settings.IsNetStandardFeatureFlagEnabled());

                    writer.WritePropertyName("agent_reachable");
                    writer.WriteValue(agentError == null);

                    writer.WritePropertyName("agent_error");
                    writer.WriteValue(agentError ?? string.Empty);

                    writer.WriteEndObject();
                }

                Log.Information("DATADOG TRACER CONFIGURATION - {0}", stringWriter.ToString());
            }
            catch (Exception ex)
            {
                Log.Warning(ex, "DATADOG TRACER DIAGNOSTICS - Error fetching configuration");
            }
        }