import torrus 1.0.9
[freeside.git] / torrus / perllib / Torrus / Collector / ExtDBI.pm
diff --git a/torrus/perllib/Torrus/Collector/ExtDBI.pm b/torrus/perllib/Torrus/Collector/ExtDBI.pm
new file mode 100644 (file)
index 0000000..7d13941
--- /dev/null
@@ -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 <ssinyagin@yahoo.com>
+
+## 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: