#!/usr/bin/perl -w
use strict; use RRDs;
use Finance::Quote qw/asx/;

# Deklarujemy najwaniejsze zmienne.
my @stocks       = ('IBM','MSFT','LNUX');
my @stock_prices = (0,0,0);
my $workdir      = "./stocks";
my $db           = "$workdir/stocks.rrd";
my $now          = time(  );

# jeli baza danych nie istnieje, tworzymy j; jeli
# si to nie uda, koczymy program.
if (!-f $db) {
    RRDs::create ($db, "--start", $now-1,
          "DS:IBM:ABSOLUTE:900:0:U",
          "DS:MSFT:ABSOLUTE:900:0:U",
          "DS:LNUX:ABSOLUTE:900:0:U",
          "RRA:AVERAGE:0.5:1:4800",
          "RRA:AVERAGE:0.5:4:4800",
          "RRA:AVERAGE:0.5:24:3000",
    );

    if (my $ERROR = RRDs::error) { die "$ERROR\n"; }
}

# teraz pobieramy notowania
# firm IBM, Microsoft i Linux.
my $q      = Finance::Quote->new(  );
my %quotes = $q->fetch("usa",@stocks);

# dla kadego z naszych papierw sprawdzamy, czy mamy dane;
# jeli tak, dodajemy je do notowa.
foreach my $code (@stocks) {
    my $count = 0; # indeks tablicy.
    unless ($quote{$code, "success"}) {
        warn "$code szukanie nie powiodo si: ".$quote{$code,"errormsg"}."\n";
        $count++; next; # c, le to wry.
    }

    # aktualizujemy cen giedow, przechodzimy do nastpnego.
    $stock_prices[$count] = $quote{$code,'last'}; $count++;
}

# mamy notowania, aktualizujemy baz danych.
RRDs::update($db, "--template=" . join(':',@stocks),
                  "$now:" . join(':',@stock_prices));
if (my $ERROR = RRDs::error) { die "$ERROR\n"; }

# Generujemy tygodniowy wykres.
RRDs::graph("$workdir/stocks-weekly.png",
  "--title",     'Finance::Quote example',
  "--start",     "-1w",
  "--end",       $now+60,
  "--imgformat", "PNG",
  "--interlace", "--width=450",
  "DEF:ibm=$db:IBM:AVERAGE",
  "DEF:msft=$db:MSFT:AVERAGE",
  "DEF:lnux=$db:LNUX:AVERAGE",
  "LINE1:ibm#ff4400:ibm\\c",
  "LINE1:msft#11EE11:msft\\c",
  "LINE1:lnux#FF0000:lnux\\c"
); if (my $ERROR = RRDs::error) { die "$ERROR\n"; }

# Generujemy raport miesiczny.
RRDs::graph ("$workdir/stocks-weekly.png",
  "--title",     'Finance::Quote example',
  "--start",     "-1m",
  "--end",       $now+60,
  "--imgformat", "PNG",
  "--interlace", "--width=450",
  "DEF:ibm=$db:IBM:AVERAGE",
  "DEF:msft=$db:MSFT:AVERAGE",
  "DEF:lnux=$db:LNUX:AVERAGE",
  "LINE1:ibm#ff4400:ibm\\c",
  "LINE1:msft#11EE11:msft\\c",
  "LINE1:lnux#FF0000:lnux\\c"
); if (my $ERROR = RRDs::error) { die "$ERROR\n"; }

