# NAME

Measure::Everything::Adapter::InfluxDB::TCP - Send stats to Influx via TCP using Telegraf

# VERSION

version 1.004

# SYNOPSIS

    Measure::Everything::Adapter->set( 'InfluxDB::TCP',
        host => 'localhost',   # default
        port => 8094,          # default
        precision => 'ms'      # default is ns (nanoseconds)
    );

    use Measure::Everything qw($stats);
    $stats->write('metric', 1);

# DESCRIPTION

Send stats via TCP to a
[Telegraf](https://influxdata.com/time-series-platform/telegraf/)
service, which will forward them to [InfluxDB](https://influxdb.com/).
No buffering whatsoever, so there is one TCP request per call to
`$stats->write`. This might be a bad idea.

If TCP listener is not available when `set` is called, an error will
be written via `Log::Any`. `write` will silently discard all
metrics, no data will be sent to Telegraf / InfluxDB.

If a request fails no further error handling is done. The metric will
be lost.

### OPTIONS

Set these options when setting your adapter via `Measure::Everything::Adapter->set`

- host

    Name of the host where your Telegraf is running. Default to `localhost`.

- port

    Port your Telegraf is listening. Defaults to `8094`.

- precision

    A valid InfluxDB precision. Default to undef (i.e. nanoseconds). Do
    not set it if you're talking with Telegraf, as Telegraf will always
    interpret the timestamp as nanoseconds.

### Handling server disconnect

`Measure::Everything::Adapter::InfluxDB::TCP` installs a `local`
handler for `SIGPIPE` to handle a disconnect from the server. If the
server goes away, `InfluxDB::TCP` will try to reconnect every time a
stat is written. As of now (1.003), this behavior is hardcoded.

You might want to check out
[Measure::Everything::Adapter::InfluxDB::UDP](https://metacpan.org/pod/Measure%3A%3AEverything%3A%3AAdapter%3A%3AInfluxDB%3A%3AUDP) for an even lossier,
but more failure tolerant way to send your stats.

See also [this blog post](http://domm.plix.at/perl/2016_09_too_dumb_for_tcp.html), where
HJansen provided the correct solution to my problem. Nicholas Clark
also pointed me in the right direction (in #Austria.pm)

### Example

See ["send\_metrics.pl" in example](https://metacpan.org/pod/example#send_metrics.pl) for a working example.

# AUTHOR

Thomas Klausner <domm@plix.at>

# COPYRIGHT AND LICENSE

This software is copyright (c) 2016 by Thomas Klausner.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.