Пример #1
0
        /// <inheritdoc/>
        public Task <IDiagnosticEventSink> CreateDiagnosticEventSink(IConfiguration configuration)
        {
            var uri      = configuration?.GetValue <Uri>("uri");
            var database = configuration?["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["measurement"],
                Username    = configuration["username"],
                Password    = configuration["password"]
            };

            var precision = configuration["precision"];

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

            var tags = configuration["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["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)));
        }