diff options
| author | ivan <ivan> | 2010-12-27 00:04:44 +0000 |
|---|---|---|
| committer | ivan <ivan> | 2010-12-27 00:04:44 +0000 |
| commit | 74e058c8a010ef6feb539248a550d0bb169c1e94 (patch) | |
| tree | 6e8d3efb218dd0f41970b62c7f29758d1ae9a937 /torrus/perllib/Torrus/SQL | |
| parent | 35359a73152b3d7a9ad5e3d37faf81f6fedb76e8 (diff) | |
import torrus 1.0.9
Diffstat (limited to 'torrus/perllib/Torrus/SQL')
| -rw-r--r-- | torrus/perllib/Torrus/SQL/Reports.pm | 291 | ||||
| -rw-r--r-- | torrus/perllib/Torrus/SQL/SrvExport.pm | 109 |
2 files changed, 400 insertions, 0 deletions
diff --git a/torrus/perllib/Torrus/SQL/Reports.pm b/torrus/perllib/Torrus/SQL/Reports.pm new file mode 100644 index 000000000..5a90b7e42 --- /dev/null +++ b/torrus/perllib/Torrus/SQL/Reports.pm @@ -0,0 +1,291 @@ +# Copyright (C) 2005 Stanislav Sinyagin +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + +# $Id: Reports.pm,v 1.1 2010-12-27 00:03:59 ivan Exp $ +# Stanislav Sinyagin <ssinyagin@yahoo.com> + +# Class for Reporter data manipulation +package Torrus::SQL::ReportFields; + +package Torrus::SQL::Reports; + +use strict; + +use Torrus::SQL; +use base 'Torrus::SQL'; + +use Torrus::Log; +# use Torrus::SQL::ReportFields; + +# The name of the table and columns +# defaults configured in torrus-config.pl +our $tableName; +our %columns; + + +sub new +{ + my $class = shift; + my $subtype = shift; + + my $self = $class->SUPER::new( $subtype ); + + $self->{'fields'} = Torrus::SQL::ReportFields->new( $subtype ); + + bless ($self, $class); + return $self; +} + + +# Find or create a new row in reports table +# +sub reportId +{ + my $self = shift; + my $repdate = shift; + my $reptime = shift; + my $repname = shift; + + my $result = $self->{'sql'}->select_one_to_arrayref({ + 'fields' => [ $columns{'id'}, $columns{'iscomplete'} ], + 'table' => $tableName, + 'where' => { $columns{'rep_date'} => $repdate, + $columns{'rep_time'} => $reptime, + $columns{'reportname'} => $repname } }); + + if( defined( $result ) ) + { + if( not $result->[1] ) + { + # iscomplete is zero - the report is unfinished + Warn('Found unfinished report ' . $repname . ' for ' . + $repdate . ' ' . $reptime . + '. Deleting the previous report data'); + $self->{'fields'}->removeAll( $result->[0] ); + } + + return $result->[0]; + } + else + { + my $id = $self->sequenceNext(); + + $self->{'sql'}->insert({ + 'table' => $tableName, + 'fields' => { $columns{'id'} => $id, + $columns{'rep_date'} => $repdate, + $columns{'rep_time'} => $reptime, + $columns{'reportname'} => $repname, + $columns{'iscomplete'} => 0 } }); + + return $id; + } +} + + + +# Add a new field to a report. The field is a hash array reference +# with keys: 'name', 'serviceid', 'value', 'units' + +sub addField +{ + my $self = shift; + my $reportId = shift; + my $field = shift; + + if( isDebug() ) + { + Debug('Adding report field: ' . $field->{'name'} . + ':' . $field->{'serviceid'} . ' = ' . $field->{'value'} . + ' ' . $field->{'units'}); + } + $self->{'fields'}->add( $reportId, $field ); +} + + +sub getFields +{ + my $self = shift; + my $reportId = shift; + + return $self->{'fields'}->getAll( $reportId ); +} + + +sub isComplete +{ + my $self = shift; + my $reportId = shift; + + my $result = $self->{'sql'}->select_one_to_arrayref({ + 'fields' => [ $columns{'iscomplete'} ], + 'table' => $tableName, + 'where' => { $columns{'id'} => $reportId } }); + + if( defined( $result ) ) + { + return $result->[0]; + } + else + { + Error('Cannot find the report record for ID=' . $reportId); + } + + return 0; +} + + +sub finalize +{ + my $self = shift; + my $reportId = shift; + + $self->{'sql'}->update({ + 'table' => $tableName, + 'where' => { $columns{'id'} => $reportId }, + 'fields' => { $columns{'iscomplete'} => 1 } }); + + $self->{'sql'}->commit(); +} + + +sub getAllReports +{ + my $self = shift; + my $srvIdList = shift; + my $limitDate = shift; + + my $where = { $columns{'iscomplete'} => 1 }; + + if( defined( $limitDate ) ) + { + $where->{$columns{'rep_date'}} = ['>=', $limitDate]; + } + + $self->{'sql'}->select({ + 'table' => $tableName, + 'where' => $where, + 'fields' => [ $columns{'id'}, + $columns{'rep_date'}, + $columns{'rep_time'}, + $columns{'reportname'} ] }); + + my $reports = + $self->fetchall([ 'id', 'rep_date', 'rep_time', 'reportname' ]); + + my $ret = {}; + foreach my $report ( @{$reports} ) + { + my($year, $month, $day) = split('-', $report->{'rep_date'}); + + my $fields = $self->getFields( $report->{'id'} ); + my $fieldsref = {}; + + foreach my $field ( @{$fields} ) + { + if( not ref( $srvIdList ) or + grep {$field->{'serviceid'} eq $_} @{$srvIdList} ) + { + $fieldsref->{$field->{'serviceid'}}->{$field->{'name'}} = { + 'value' => $field->{'value'}, + 'units' => $field->{'units'} }; + } + } + + $ret->{$year}{$month}{$day}{$report->{'reportname'}} = $fieldsref; + } + return $ret; +} + + + + + + + +################################################ +## Class for report fields table + +package Torrus::SQL::ReportFields; +use strict; + +use Torrus::SQL; +use base 'Torrus::SQL'; + +use Torrus::Log; + +# The name of the table and columns +# defaults configured in torrus-config.pl +our $tableName; +our %columns; + +sub add +{ + my $self = shift; + my $reportId = shift; + my $attrs = shift; + + my $id = $self->sequenceNext(); + + $self->{'sql'}->insert({ + 'table' => $tableName, + 'fields' => { $columns{'id'} => $id, + $columns{'rep_id'} => $reportId, + $columns{'name'} => $attrs->{'name'}, + $columns{'serviceid'} => $attrs->{'serviceid'}, + $columns{'value'} => $attrs->{'value'}, + $columns{'units'} => $attrs->{'units'} } }); +} + + +sub getAll +{ + my $self = shift; + my $reportId = shift; + + $self->{'sql'}->select({ + 'table' => $tableName, + 'where' => { $columns{'rep_id'} => $reportId }, + 'fields' => [ $columns{'name'}, + $columns{'serviceid'}, + $columns{'value'}, + $columns{'units'}] }); + + return $self->fetchall([ 'name', 'serviceid', 'value', 'units' ]); +} + + +sub removeAll +{ + my $self = shift; + my $reportId = shift; + + $self->{'sql'}->delete({ + 'table' => $tableName, + 'where' => { $columns{'rep_id'} => $reportId }}); +} + + + + +1; + + +# Local Variables: +# mode: perl +# indent-tabs-mode: nil +# perl-indent-level: 4 +# End: diff --git a/torrus/perllib/Torrus/SQL/SrvExport.pm b/torrus/perllib/Torrus/SQL/SrvExport.pm new file mode 100644 index 000000000..ef94547d6 --- /dev/null +++ b/torrus/perllib/Torrus/SQL/SrvExport.pm @@ -0,0 +1,109 @@ +# Copyright (C) 2005 Stanislav Sinyagin +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + +# $Id: SrvExport.pm,v 1.1 2010-12-27 00:03:59 ivan Exp $ +# Stanislav Sinyagin <ssinyagin@yahoo.com> + +# Class for Collector's external storage export data manipulation. + +package Torrus::SQL::SrvExport; + +use strict; + +use Torrus::SQL; +use base 'Torrus::SQL'; + +use Torrus::Log; + +# The name of the table and columns where the collector export is stored +# defaults configured in torrus-config.pl +our $tableName; +our %columns; + +sub sqlInsertStatement +{ + return sprintf('INSERT INTO %s (%s,%s,%s,%s,%s) VALUES (?,?,?,?,?)', + $tableName, + $columns{'srv_date'}, + $columns{'srv_time'}, + $columns{'serviceid'}, + $columns{'value'}, + $columns{'intvl'}); +} + + +sub getServiceIDs +{ + my $self = shift; + + $self->{'sql'}->select({ + 'fields' => [ $columns{'serviceid'} ], + 'table' => $tableName, + 'group' => [ $columns{'serviceid'} ], + 'order' => [ $columns{'serviceid'} ] }); + + my $ret = []; + while( defined( my $row = $self->{'sql'}->fetchrow_arrayref() ) ) + { + push( @{$ret}, $row->[0] ); + } + + return $ret; +} + + +# YYYY-MM-DD for start and end date +# returns the reference to the array of hashes for selected entries. + +sub getIntervalData +{ + my $self = shift; + my $startdate = shift; + my $enddate = shift; + my $serviceid = shift; + + $self->{'sql'}->select({ + 'fields' => + [ $columns{'srv_date'}, + $columns{'srv_time'}, + $columns{'value'}, + $columns{'intvl'} ], + 'table' => $tableName, + 'where' => [ {$columns{'serviceid'} => $serviceid}, + 'AND', + {$columns{'srv_date'} => ['>=', $startdate]}, + 'AND', + {$columns{'srv_date'} => ['<', $enddate]} + ]}); + + return $self->fetchall([ 'srv_date', 'srv_time', 'value', 'intvl' ]); +} + + + + + + + + +1; + + +# Local Variables: +# mode: perl +# indent-tabs-mode: nil +# perl-indent-level: 4 +# End: |
