/// <inheritdoc />
            public Task <IDiagnosticEventSink> CreateDiagnosticEventSink(DiagnosticEventSinkElement configuration)
            {
                var host = configuration.GetString("host");
                var port = configuration.GetInt("port") ?? GelfUdpOptions.DefaultPort;
                var enableCompression = configuration.GetBool("compress") ?? true;
                var chunkSize         = configuration.GetInt("chunkSize") ?? GelfUdpOptions.DefaultChunkSize;

                if (string.IsNullOrWhiteSpace(host))
                {
                    throw new ConfigurationErrorsException("'host' attribute is required");
                }
                if (port == 0)
                {
                    throw new ConfigurationErrorsException("'port' attribute is required");
                }
                if (port <= 0 || port > 65535)
                {
                    throw new ConfigurationErrorsException("Invalid port");
                }
                if (chunkSize <= 0 || chunkSize > GelfUdpOptions.MaxChunkSize)
                {
                    throw new ConfigurationErrorsException("Invalid chunk size");
                }

                var options = new GelfUdpOptions(host)
                {
                    Port = port,
                    EnableCompression = enableCompression,
                    ChunkSize         = chunkSize
                };

                return(Task.FromResult <IDiagnosticEventSink>(new GelfUdpLoggingSink(options)));
            }
Exemplo n.º 2
0
        /// <inheritdoc/>
        public Task <IDiagnosticEventSink> CreateDiagnosticEventSink(DiagnosticEventSinkElement configuration)
        {
            var uri      = configuration.GetUri("uri");
            var database = configuration.GetString("database");

            if (uri == null)
            {
                throw new ConfigurationErrorsException("'uri' attribute is required (e.g. http://localhost:8086)");
            }
            if (string.IsNullOrWhiteSpace(database))
            {
                throw new ConfigurationErrorsException("'database' attribute is required");
            }

            var options = new InfluxDBOptions(uri, database)
            {
                Measurement = configuration.GetString("measurement"),
                Username    = configuration.GetString("username"),
                Password    = configuration.GetString("password")
            };

            var precision = configuration.GetString("precision");

            if (!string.IsNullOrWhiteSpace(precision))
            {
                options.Precision = InfluxDBPrecision.Parse(precision);
            }

            var tags = configuration.GetString("tags");

            if (!string.IsNullOrWhiteSpace(tags))
            {
                options.Tags = tags.Split(',')
                               .Select(tag =>
                {
                    var keyValue = tag.Split('=');
                    var key      = keyValue.FirstOrDefault();
                    var value    = keyValue.Skip(1).FirstOrDefault();
                    return(new KeyValuePair <string, string>(key, value));
                })
                               .ToDictionary(tag => tag.Key, tag => tag.Value);
            }

            var sampleRate    = default(TimeSpan);
            var sampleRateStr = configuration.GetString("sampleRate");

            if (!string.IsNullOrWhiteSpace(sampleRateStr))
            {
                if (!TimeSpan.TryParse(sampleRateStr, out sampleRate))
                {
                    throw new ConfigurationErrorsException("Invalid timespan specified for 'sampleRate'");
                }
            }

            return(Task.FromResult <IDiagnosticEventSink>(new InfluxDBSink(options, sampleRate)));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Initializes a subscription tracking service based on the supplied
        /// <paramref name="configuration"/>
        /// </summary>
        /// <param name="configuration">The subscription tracking configuration</param>
        /// <returns>Returns a task whose result is the initialized subscription tracking service</returns>
        public async Task <IDiagnosticEventSink> InitDiagnosticEventSink(DiagnosticEventSinkElement configuration)
        {
            var myConfig = configuration ?? new DiagnosticEventSinkElement();

            if (string.IsNullOrWhiteSpace(myConfig.Provider))
            {
                var message = "Provider not specified for diagnostic event sink '" + myConfig.Name + "'";
                await _diagnosticService.EmitAsync(
                    new DiagnosticEventBuilder(this, DiagnosticEventType.ConfigurationError)
                {
                    Detail = message
                }.Build());

                throw new ConfigurationErrorsException(message);
            }

            var provider = GetProvider(myConfig.Provider);

            if (provider == null)
            {
                var message = "Unknown provider '" + myConfig.Provider + "' specified for diagnostic event sink '" + myConfig.Name + "'";
                await _diagnosticService.EmitAsync(
                    new DiagnosticEventBuilder(this, DiagnosticEventType.ConfigurationError)
                {
                    Detail = message
                }.Build());

                throw new ConfigurationErrorsException(message);
            }

            await _diagnosticService.EmitAsync(
                new DiagnosticEventBuilder(this, DiagnosticEventType.ComponentInitialization)
            {
                Detail = "Initializing diagnostic event sink '" + myConfig.Name + "'"
            }.Build());

            var sink = await provider.CreateDiagnosticEventSink(myConfig);

            var filterSpec = new DiagnosticEventLevelSpecification(myConfig.MinLevel, myConfig.MaxLevel);
            var filterSink = new FilteringSink(sink, filterSpec);

            await _diagnosticService.EmitAsync(
                new DiagnosticEventBuilder(this, DiagnosticEventType.ComponentInitialization)
            {
                Detail = "Diagnostic event sink '" + myConfig.Name + "' initialized"
            }.Build());

            return(filterSink);
        }
            /// <inheritdoc />
            public Task <IDiagnosticEventSink> CreateDiagnosticEventSink(DiagnosticEventSinkElement configuration)
            {
                var uri      = configuration.GetUri("uri");
                var username = configuration.GetString("username");
                var password = configuration.GetString("password");

                var credentials = string.IsNullOrWhiteSpace(username)
                    ? null
                    : new BasicAuthCredentials(username, password);

                if (uri == null)
                {
                    throw new ConfigurationErrorsException("'uri' attribute is required");
                }
                return(Task.FromResult <IDiagnosticEventSink>(new GelfHttpLoggingSink(uri, credentials)));
            }
            /// <inheritdoc />
            public Task <IDiagnosticEventSink> CreateDiagnosticEventSink(DiagnosticEventSinkElement configuration)
            {
                var host = configuration.GetString("host");
                var port = configuration.GetInt("port") ?? 12201;

                if (string.IsNullOrWhiteSpace(host))
                {
                    throw new ConfigurationErrorsException("'host' attribute is required");
                }
                if (port == 0)
                {
                    throw new ConfigurationErrorsException("'port' attribute is required");
                }
                if (port <= 0 || port > 65535)
                {
                    throw new ConfigurationErrorsException("Invalid port");
                }
                return(Task.FromResult <IDiagnosticEventSink>(new GelfTcpLoggingSink(host, port)));
            }
Exemplo n.º 6
0
 public DiagnosticEventSinkFactoryTests()
 {
     Configuration = new ConfigurationBuilder()
                     .AddInMemoryCollection()
                     .Build();
 }
 /// <inheritdoc />
 public Task <IDiagnosticEventSink> CreateDiagnosticEventSink(DiagnosticEventSinkElement configuration)
 {
     return(Task.FromResult <IDiagnosticEventSink>(new ConsoleLoggingSink()));
 }