#!/usr/bin/perl # creates time-based charts from process-size data: use lib '/home/raj/perl-lib/ChartDirector/lib'; use perlchartdir; use IO::All; use Modern::Perl; use Data::Printer; my $file = $ARGV[0] or die "usage: .csv"; my @rows = io($file . '.csv')->chomp->slurp; # p @rows; exit; my %h; for (@rows) { my ($t,$ps) = split ','; # eg 19-03-2016 10:59:19 my ($d,$mon,$y,$h,$min,$s) = $t =~ m!(\d+)-(\d+)-(\d{4}) (\d{2}):(\d{2}):(\d{2})!; my $chartTime = perlchartdir::chartTime($y,$mon,$d,$h,$min,$s); # p $chartTime; # reduce data points by only using 1 timepoint if >1: $h{$chartTime} = $ps; # last one wins } # p %h; exit; my %data; for (sort keys %h) { push @{ $data{labels} }, $_; push @{ $data{vals} }, $h{$_}; } # p %h; { # time-based graph: # Create a XYChart object of size 1250 x 350 pixels my $c = new XYChart(1250, 450); # Set the plotarea at (80, 20) and of size 1100 x 280 pixels $c->setPlotArea(80, 30, 1100, 320); $c->xAxis()->setLabelStyle("arial.ttf", 8, 0x000000)->setFontAngle(-45); # Add the first data series my $layer = $c->addLineLayer2(); $layer->addDataSet($data{vals}); $layer->setXData($data{labels}); $layer->setLineWidth(1); # Output the chart $c->makeChart($file . '_time.png'); } { # event-based graph: # Create a XYChart object of size 1250 x 350 pixels my $c = new XYChart(1250, 450); # Set the plotarea at (80, 20) and of size 1100 x 280 pixels $c->setPlotArea(80, 30, 1100, 320); $c->xAxis()->setLabelStyle("arial.ttf", 8, 0x000000)->setFontAngle(-45); # Set the labels on the x axis $c->xAxis()->setLabels2([ 0 .. scalar @{ $data{labels} } - 1 ]); $c->xAxis()->setLabelStep(300,10); # Add a line layer to the chart my $layer = $c->addLineLayer2(); # Add the data line $layer->addDataSet($data{vals}); # Set the default line width to 1 pixels $layer->setLineWidth(1); # Output the chart $c->makeChart($file . '_event.png'); }