コード例 #1
0
        public void can_format_payload()
        {
            var textWriter = new StringWriter();
            var payload    = new LineProtocolPayload();
            var fieldsOne  = new Dictionary <string, object> {
                { "key", "value" }
            };
            var timestampOne = new DateTime(2017, 1, 1, 1, 1, 1, DateTimeKind.Utc);
            var pointOne     = new LineProtocolPoint("measurement", fieldsOne, MetricTags.None, timestampOne);

            var fieldsTwo = new Dictionary <string, object>
            {
                { "field1key", "field1value" },
                { "field2key", 2 },
                { "field3key", false }
            };
            var timestampTwo = new DateTime(2017, 1, 2, 1, 1, 1, DateTimeKind.Utc);
            var pointTwo     = new LineProtocolPoint("measurement", fieldsTwo, MetricTags.None, timestampTwo);

            payload.Add(pointOne);
            payload.Add(pointTwo);

            payload.Format(textWriter);

            textWriter.ToString().Should()
            .Be(
                "measurement key=\"value\" 1483232461000000000\nmeasurement field1key=\"field1value\",field2key=2i,field3key=f 1483318861000000000\n");
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: tkhadimullin/mikrotik-acct
        static void Main(string[] args)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                                               .SetBasePath(Directory.GetCurrentDirectory())
                                               .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                                               .Build();

            while (true)
            {
                using ITikConnection connection = ConnectionFactory.CreateConnection(TikConnectionType.Api);

                var host     = configuration.GetSection("Mikrotik").GetSection("Host").Value;
                var user     = configuration.GetSection("Mikrotik").GetSection("User").Value;
                var password = configuration.GetSection("Mikrotik").GetSection("Password").Value;

                var influxDbEnabled   = bool.Parse(configuration.GetSection("InfluxDb").GetSection("Enabled").Value);
                var influxDbUrl       = configuration.GetSection("InfluxDb").GetSection("Url").Value;
                var influxDatabase    = configuration.GetSection("InfluxDb").GetSection("Database").Value;
                var influxMeasurement = configuration.GetSection("InfluxDb").GetSection("Measurement").Value;
                var isConsoleOutput   = bool.Parse(configuration.GetSection("App").GetSection("ConsoleOutput").Value);
                var sleepTimeout      = int.Parse(configuration.GetSection("App").GetSection("SleepTimeout").Value);

                connection.Open(host, user, password);
                connection.ExecuteNonQuery("/ip/accounting/snapshot/take");
                var interfaces = connection.LoadList <IpAddress>()
                                 .ToImmutableSortedDictionary(d => d.Address, a => a.Interface);
                var acctList = connection.LoadList <AccountingSnapshot>();

                var payload = new LineProtocolPayload();

                foreach (var item in acctList)
                {
                    var point = new LineProtocolPoint(
                        influxMeasurement,
                        new Dictionary <string, object>
                    {
                        { "bytes", item.Bytes },
                        { "packets", item.Packets },
                    },
                        TagDirection(item, interfaces),
                        DateTime.UtcNow);
                    payload.Add(point);
                }

                if (influxDbEnabled)
                {
                    var client = new LineProtocolClient(new Uri(influxDbUrl), influxDatabase);
                    client.WriteAsync(payload);
                }
                if (isConsoleOutput)
                {
                    var wr = new StringWriter();
                    payload.Format(wr);
                    Console.WriteLine(wr.GetStringBuilder().ToString());
                }

                Thread.Sleep(sleepTimeout);
            }
        }
コード例 #3
0
        public LineProtocolWriteResult Write(LineProtocolPayload payload, CancellationToken cancellationToken = default(CancellationToken))
        {
            var stringWriter = new StringWriter();

            payload.Format(stringWriter);

            return(OnSend(stringWriter.ToString(), Precision.Nanoseconds, cancellationToken));
        }
コード例 #4
0
        public Task <LineProtocolWriteResult> WriteAsync(LineProtocolPayload payload, CancellationToken cancellationToken = default(CancellationToken))
        {
            var writer = new StringWriter();

            payload.Format(writer);

            return(SendAsync(writer.ToString(), cancellationToken));
        }
コード例 #5
0
        /// <summary>
        /// Sends metrics to the backend.
        /// </summary>
        /// <param name="payload">Metrics payload.</param>
        public void Send(LineProtocolPayload payload)
        {
            var payloadText = new StringWriter();

            payload.Format(payloadText);
            byte[] content = Encoding.UTF8.GetBytes(payloadText.ToString());
            this.udpClient.Send(content, content.Length);
        }
コード例 #6
0
        /// <summary>
        /// Writes metrics to the backend asynchronously.
        /// </summary>
        /// <param name="payload">Metrics payload.</param>
        /// <param name="cancellationToken">Optional operation cancellation token.</param>
        /// <returns><see cref="System.Threading.Tasks.Task"/>, that performs the write operation.</returns>
        private async Task <LineProtocolWriteResult> WriteAsync(LineProtocolPayload payload, CancellationToken cancellationToken = default(CancellationToken))
        {
            var payloadText = new StringWriter();

            payload.Format(payloadText);
            var content  = new StringContent(payloadText.ToString(), Encoding.UTF8);
            var response = await this.httpClient.PostAsync(string.Empty, content, cancellationToken).ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                return(new LineProtocolWriteResult(true, null));
            }

            return(new LineProtocolWriteResult(false, string.Format("{0} {1}", response.StatusCode, response.ReasonPhrase)));
        }
コード例 #7
0
        public void when_null_text_writer_ignore_and_dont_throw()
        {
            var payload = new LineProtocolPayload();
            var fields  = new Dictionary <string, object> {
                { "key", "value" }
            };
            var pointOne = new LineProtocolPoint("measurement", fields, MetricTags.None);

            Action action = () =>
            {
                payload.Add(pointOne);
                payload.Format(null);
            };

            action.ShouldNotThrow();
        }
コード例 #8
0
        protected virtual HttpContent CreateHttpContent(LineProtocolPayload lineProtocolPayload)
        {
            string requestContent;

            using (StringWriter stringWriter = new StringWriter())
            {
                lineProtocolPayload.Format(stringWriter);
                requestContent = stringWriter.ToString();
            }

            StringContent httpStringContent = new StringContent(requestContent);

            if (!_useGzipCompression)
            {
                return(httpStringContent);
            }

            GzipHttpContent httpGzipContent = new GzipHttpContent(httpStringContent);

            return(httpGzipContent);
        }
コード例 #9
0
        public async Task <LineProtocolWriteResult> WriteAsync(LineProtocolPayload payload, CancellationToken cancellationToken = default(CancellationToken))
        {
            var endpoint = $"write?db={Uri.EscapeDataString(_database)}";

            if (!string.IsNullOrEmpty(_username))
            {
                endpoint += $"&u={Uri.EscapeDataString(_username)}&p={Uri.EscapeDataString(_password)}";
            }

            var payloadText = new StringWriter();

            payload.Format(payloadText);
            var content  = new StringContent(payloadText.ToString(), Encoding.UTF8);
            var response = await _httpClient.PostAsync(endpoint, content, cancellationToken);

            if (response.IsSuccessStatusCode)
            {
                return(new LineProtocolWriteResult(true, null));
            }

            return(new LineProtocolWriteResult(false, $"{response.StatusCode} {response.ReasonPhrase}"));
        }