#!/usr/local/bin/perl -w
###########################################
# data-normalize - Align probes by time
# Mike Schilli, 2009 (m@perlmeister.com)
###########################################
use strict;
use DateTime;

my @result = ();
my $max    = {};

my $data = {
    "2gb" => [qw(
  21:33 100 08:18 83 10:52 80 
  18:40 57  08:36 35 12:21 28
)],
    "0.5gb" => [qw(
  14:44 100 16:09 97 18:08 95
  20:43 88  22:19 86 08:47 73
  15:19 65  17:52 61 21:19 56
  23:04 55  07:35 43
)]};

for my $conf (keys %$data) {

  my $points = $data->{ $conf };
  my $day_start;
  my $day_current;

  while( my($time, $charge) = 
         splice( @$points, 0, 2 ) ) {

    my($hour, $minute) = split /:/, $time;

    if(!defined $day_start) {
        $day_start = DateTime->today();
        $day_start->set_hour( $hour );
        $day_start->set_minute( $minute );
        $day_current = $day_start->clone();
    }

    my $time_current = 
                     $day_current->clone();
    $time_current->set_hour( $hour );
    $time_current->set_minute( $minute );

    if($time_current < $day_current) {
        $time_current->add( days => 1 );
        $day_current->add( days => 1 );
    }

    $day_current = $time_current->clone();

    my $x = (($time_current->epoch() -
              $day_start->epoch()) / 60);

    push @result, [ $conf, $x, $charge ];

    if(!exists $max->{x} or
       $max->{x} < $x) {
        $max->{x} = $x;
    }
    if(!exists $max->{y} or
       $max->{y} < $charge) {
        $max->{y} = $charge;
    }
  }
}

my $margin = 2;

for my $result (@result) {
    my($symbol, $x, $y) = @$result;
    print "$symbol ", 
          int($x*(100-2*$margin)/
              $max->{x})+$margin,
          " ",
          int($y*(100-2*$margin)/
              $max->{y})+$margin,
          "\n";
}
