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"); }
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); } }
public LineProtocolWriteResult Write(LineProtocolPayload payload, CancellationToken cancellationToken = default(CancellationToken)) { var stringWriter = new StringWriter(); payload.Format(stringWriter); return(OnSend(stringWriter.ToString(), Precision.Nanoseconds, cancellationToken)); }
public Task <LineProtocolWriteResult> WriteAsync(LineProtocolPayload payload, CancellationToken cancellationToken = default(CancellationToken)) { var writer = new StringWriter(); payload.Format(writer); return(SendAsync(writer.ToString(), cancellationToken)); }
/// <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); }
/// <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))); }
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(); }
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); }
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}")); }