1 #!/usr/bin/perl
2 #$ENV{PATH}='/scratch/rrd4/bin';
3 $ENV{PATH}=$ENV{HOME}.'/checkouts/rrdtool/branches/1.3/program/src:'.$ENV{PATH};
4 my $R='rrdtool';
5 my $width=600 ;
6 my $height=200 ;
8 $ENV{TZ}='MET';
10 sub create {
11 my %p = (@_);
12 my $start;
13 open my $fh,'<hw-demo.data';
14 my $end = (split /\s/, <$fh>)[0]; # drop the first line;
15 my @updates;
16 $start = $end;
17 while (<$fh>){
18 my @line = split;
19 last if $start - $p{step} > $line[0];
20 $start = $line[0];
21 unshift @updates, join ":",@line[0,1,2];
22 }
23 system $R,'create','hw-demo.rrd',
24 '--step' => $p{step},
25 '--start' => ($start-1),
26 'DS:in:GAUGE:'.($p{step}*1.5).':U:U',
27 'DS:out:GAUGE:'.($p{step}*1.5).':U:U',
28 'RRA:AVERAGE:0.5:1:'.$p{rows},
29 'RRA:HWPREDICT:'.$p{rows}.':'.$p{alpha}.':'.$p{beta}.':'.$p{period};
30 system $R,'resize','hw-demo.rrd',5,'GROW',$p{rows};
31 rename 'resize.rrd','hw-demo.rrd';
32 system $R,'update','hw-demo.rrd',@updates;
33 exit 1;
34 return ($start,$end);
35 }
37 sub graph {
38 my $file = shift;
39 my $start = shift;
40 my $end = shift;
41 system $R, 'graph', $file,
42 '--lazy',
43 '--start' => $start,
44 '--end' => $end,
45 '--color=BACK#ffff',
46 '--color=CANVAS#ffff',
47 '--color=SHADEA#ffff',
48 '--color=SHADEB#ffff',
49 '--lower-limit' => 0,
50 '--pango-markup',
51 '--height' => $height,
52 '--width' => $width,
53 '--imgformat' => 'PDF', @_;
54 }
56 sub quick {
57 my $period = shift;
58 my $alpha = shift;
59 my $beta = shift;
60 create ( step => 1800,
61 rows => 16*24*12,
62 period => $period,
63 alpha => $alpha,
64 beta => $beta );
65 my $file = "HW-p${period}-a${alpha}-b${beta}";
66 $file =~ s/\./_/g;
67 graph $file.'.pdf',
68 '00:00 20080916',
69 'start+8d',
70 'DEF:a=hw-demo.rrd:in:AVERAGE',
71 'DEF:pred=hw-demo.rrd:in:HWPREDICT',
72 'DEF:conf=hw-demo.rrd:in:DEVPREDICT',
73 'DEF:fail=hw-demo.rrd:in:FAILURES',
74 'TICK:fail#ff8:1:Failures',
75 'CDEF:lowc=pred,conf,2,*,-',
76 'CDEF:widc=conf,4,*',
77 'LINE1:lowc',
78 'AREA:widc#cfc:Band:STACK',
79 'LINE0.1:0#3a1::STACK',
80 'LINE0.1:lowc#3a1',
81 'LINE1:a#c00:InOctets',
82 "LINE1:pred#0a0:Predicted p\\:$period, a\\:$alpha, b\\:$beta\\l";
83 }
85 my ($start,$end) = create ( step => 1800,
86 rows => 16*24*12,
87 period => 24*2,
88 alpha => 0.5,
89 beta => 0.001 );
91 $width=800;
92 $height=100;
93 graph 'HW-input.pdf',
94 '00:00 20080916',
95 'start+14d',
96 'DEF:a=hw-demo.rrd:in:AVERAGE',
97 'LINE2:a#c00:InOctets';
100 $width=450;
101 $height=120;
102 quick 1,0.5,0.001;
103 quick 1,0.1,0.001;
104 quick 1,0.1,0.1;
105 quick 48,0.5,0.001;
106 quick 48,0.2,0.001;
107 quick 48,0.03,0.001;
108 quick 48,0.03,0.1;