X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=torrus%2Fperllib%2FTorrus%2FCollector%2FExtDBI.pm;fp=torrus%2Fperllib%2FTorrus%2FCollector%2FExtDBI.pm;h=7d139419124d09b8897b611b0d06fcc8c5ed036e;hb=74e058c8a010ef6feb539248a550d0bb169c1e94;hp=0000000000000000000000000000000000000000;hpb=35359a73152b3d7a9ad5e3d37faf81f6fedb76e8;p=freeside.git diff --git a/torrus/perllib/Torrus/Collector/ExtDBI.pm b/torrus/perllib/Torrus/Collector/ExtDBI.pm new file mode 100644 index 000000000..7d1394191 --- /dev/null +++ b/torrus/perllib/Torrus/Collector/ExtDBI.pm @@ -0,0 +1,128 @@ +# 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: ExtDBI.pm,v 1.1 2010-12-27 00:03:58 ivan Exp $ +# Stanislav Sinyagin + +## Pluggable backend module for ExternalStorage +## Stores data in a generic SQL database + +# We use some internals of Torrus::SQL::SrvExport, but +# handle the SQL by ourselves, for better efficiency. + +package Torrus::Collector::ExtDBI; + +use strict; +use DBI; +use Date::Format; + +use Torrus::SQL::SrvExport; +use Torrus::Log; + +$Torrus::Collector::ExternalStorage::backendInit = + \&Torrus::Collector::ExtDBI::backendInit; + +$Torrus::Collector::ExternalStorage::backendOpenSession = + \&Torrus::Collector::ExtDBI::backendOpenSession; + +$Torrus::Collector::ExternalStorage::backendStoreData = + \&Torrus::Collector::ExtDBI::backendStoreData; + +$Torrus::Collector::ExternalStorage::backendCloseSession = + \&Torrus::Collector::ExtDBI::backendCloseSession; + + +# Optional SQL connection subtype, configurable from torrus-siteconfig.pl +our $subtype; + +my $dbh; +my $sth; + +sub backendInit +{ + my $collector = shift; + my $token = shift; +} + +sub backendOpenSession +{ + $dbh = Torrus::SQL::SrvExport->dbh( $subtype ); + + if( defined( $dbh ) ) + { + $sth = $dbh->prepare( Torrus::SQL::SrvExport->sqlInsertStatement() ); + if( not defined( $sth ) ) + { + Error('Error preparing the SQL statement: ' . $dbh->errstr); + } + } +} + + +sub backendStoreData +{ + my $timestamp = shift; + my $serviceid = shift; + my $value = shift; + my $interval = shift; + + if( defined( $dbh ) and defined( $sth ) ) + { + my $datestr = time2str('%Y-%m-%d', $timestamp); + my $timestr = time2str('%H:%M:%S', $timestamp); + if( isDebug() ) + { + Debug('Updating SQL database: ' . + join(', ', $datestr, $timestr, + $serviceid, $value, $interval )); + } + + if( $sth->execute( $datestr, $timestr, + $serviceid, $value, $interval ) ) + { + return 1; + } + else + { + Error('Error executing SQL: ' . $dbh->errstr); + } + } + + return undef; +} + + +sub backendCloseSession +{ + undef $sth; + if( defined( $dbh ) ) + { + $dbh->commit(); + $dbh->disconnect(); + undef $dbh; + } +} + + + +1; + + +# Local Variables: +# mode: perl +# indent-tabs-mode: nil +# perl-indent-level: 4 +# End: