A perl client for graphite-api (and graphite-web) with IO::Async.

All methods return Future objects to enable integration into
asynchronous code.

graphite-api is an early project which exposes the /metrics/* and
/render APIs. graphite-web is more mature but only exposes the /render
API, which means it can't be used to find metrics (and this error is
not handled).


Find metrics:

my $search = 'host.*.collectd.load.*.shortterm';
my $subset = $graphite->metrics_asperl(find => $search)->get;
# => [
#   'host.foo.collecd.load.load.shortterm',
#   'host.bar.collecd.load.load-relative.shortterm',
#   'host.baz.collecd.load.load.shortterm',
# ];


Download data:

my $allofit = $graphite->render(raw => 'host.*.collectd.load.*.shortterm')->get;
# => <big blob of raw data>


Download data usably:

my @datasets = $graphite->render_asperl('host.*.collectd.load.*.shortterm')->get;
# => {
#   target => 'host.foo.collecd.load.load.shortterm',
#   start  => 1495125843,
#   end    => 1495122243,
#   step   => 20,
#   date   => [ <list of numbers (or 'None') AS STRINGS> ],
# },
# { ... }, # One per set


Download graphs (only into a scalar for now):

my $png = $graphite->render(png => 'host.*.collectd.load.*.shortterm')->get;
# => <PNG bytestream>


Draw graphs on the terminal using gnuplot:

my $ascii = $graphite->plot('host.*.collectd.load.*.shortterm',
                            width => 72, height => 20)->get;
# => ...
#       +-------+-------+------+-------+-------+----A--+------+-------+
#     2 ++      A       +      +       +       +    A  +      +A A   ++
#       |                                           A          A B    |
#       |      AA           AA                    AAA         AA C    |
#   1.5 ++A    AAA  A      AAAA        AA   A     AAA     A   AAA    ++
#       | AA   AAAA AA    A AAA        AAA  A  A  AAA  AA A A AAA     |
#       AAAAAAAA  AAAAAAAAAAA    A     A AAAAAAAA  AAAAAAAAAAAA       |
#       AAAAAAAA  AAAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAAA       |
#     1 AAAAAAAA  AAAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAAA      ++
#       |                                                             |
#       |                                                             |
#   0.5 ++                 C                                         ++
#       |                  B                                          |
#       |  C               C  C C            C     C                  |
#       BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBC     +
#     0 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB----++
#       0      200     400    600     800     1000    1200   1400    1600


Draw graphs using other formats supported by gnuplot:

my $png = $graphite->plot('host.*.collectd.load.*.shortterm',
                          format => 'png', width => 640, height => 480)->get;
# => <PNG bytestream created by gnuplot from raw data>
