From 15106a307101a6bb447867e9c3966975f6a5c618 Mon Sep 17 00:00:00 2001
From: Tomas Plesnik <plesnik@ics.muni.cz>
Date: Tue, 12 Mar 2013 15:18:55 +0100
Subject: [PATCH] pripojeni do DB presunuto do WardenCommon jako funkce + v END
 sekci zajisten disconnest

---
 src/warden-server/bin/getClients.pl       | 12 ++++++--
 src/warden-server/bin/getStatus.pl        | 34 +++++++++++++----------
 src/warden-server/bin/registerReceiver.pl | 19 +++++++++----
 src/warden-server/bin/registerSender.pl   | 21 ++++++++++----
 src/warden-server/bin/unregisterClient.pl | 23 ++++++++++-----
 5 files changed, 74 insertions(+), 35 deletions(-)

diff --git a/src/warden-server/bin/getClients.pl b/src/warden-server/bin/getClients.pl
index acdb0a9..ff4db39 100755
--- a/src/warden-server/bin/getClients.pl
+++ b/src/warden-server/bin/getClients.pl
@@ -52,11 +52,10 @@ if ($help) {
 }
 
 # connect to DB
-our $DBH = DBI->connect("DBI:mysql:database=$WardenCommon::DB_NAME;host=$WardenCommon::DB_HOST", $WardenCommon::DB_USER, $WardenCommon::DB_PASS, {RaiseError => 1, mysql_auto_reconnect => 1})
-           || die "Could not connect to database: $DBI::errstr";
+my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS);
 
 # obtain data from DB
-my $sth = $DBH->prepare("SELECT * FROM clients WHERE valid = 't' ORDER BY client_id ASC;") or die "Cannot prepare statement: " . $DBH->errstr;
+my $sth = $dbh->prepare("SELECT * FROM clients WHERE valid = 't' ORDER BY client_id ASC;") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $hash_ref = $sth->fetchall_hashref("client_id");
 
@@ -81,4 +80,11 @@ print "+------------------------------------------------------------------------
 print "\n";
 print "Current registered clients in: " . scalar localtime(time) . "\n";
 
+# cleanup section
+END {
+  if (defined $dbh) {
+    $dbh->disconnect or warn "Disconnection from database '$WardenCommon::DB_NAME' failed: $dbh->errstr\n";
+  }
+}
+
 exit 0;
diff --git a/src/warden-server/bin/getStatus.pl b/src/warden-server/bin/getStatus.pl
index fac320d..bd1ba55 100755
--- a/src/warden-server/bin/getStatus.pl
+++ b/src/warden-server/bin/getStatus.pl
@@ -59,8 +59,7 @@ if ($UID != 0) {
 }
 
 # connect to DB
-our $DBH = DBI->connect("DBI:mysql:database=$WardenCommon::DB_NAME;host=$WardenCommon::DB_HOST", $WardenCommon::DB_USER, $WardenCommon::DB_PASS, {RaiseError => 1, mysql_auto_reconnect => 1})
-           || die "Could not connect to database: $DBI::errstr";
+my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS);
 
 #-----------------------------------------------------------------------------
 # Warden server variables
@@ -85,13 +84,13 @@ if ($WardenCommon::SYSLOG_VERBOSE == 1) {
 # Warden server status
 
 # size of database events
-my $sth = $DBH->prepare("SELECT data_length + index_length FROM information_schema.TABLES WHERE table_schema = ? AND TABLE_NAME = ?") or die "Cannot prepare statement: " . $DBH->errstr;
+my $sth = $dbh->prepare("SELECT data_length + index_length FROM information_schema.TABLES WHERE table_schema = ? AND TABLE_NAME = ?") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute($WardenCommon::DB_NAME, 'events') or die "Cannot execute statement: " . $sth->errstr;
 my $size = $sth->fetchrow();
 my $db_size = defined $size ? Format::Human::Bytes::base10($size) : "none";
 
 # sum of records in table events
-$sth = $DBH->prepare("SELECT count(*) FROM events WHERE valid = 't';") or die "Cannot prepare statement: " . $DBH->errstr;
+$sth = $dbh->prepare("SELECT count(*) FROM events WHERE valid = 't';") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $events_sum = $sth->fetchrow();
 if (!defined $events_sum) {
@@ -99,7 +98,7 @@ if (!defined $events_sum) {
 }
 
 # sum of records in table events (with invalid)
-$sth = $DBH->prepare("SELECT count(*) FROM events;") or die "Cannot prepare statement: " . $DBH->errstr;
+$sth = $dbh->prepare("SELECT count(*) FROM events;") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $events_sum_inv = $sth->fetchrow();
 if (!defined $events_sum_inv) {
@@ -107,7 +106,7 @@ if (!defined $events_sum_inv) {
 }
 
 # id of last record in table events
-$sth = $DBH->prepare("SELECT max(id) FROM events WHERE valid = 't';") or die "Cannot prepare statement: " . $DBH->errstr;
+$sth = $dbh->prepare("SELECT max(id) FROM events WHERE valid = 't';") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $events_last_id = $sth->fetchrow();
 if (!defined $events_last_id) {
@@ -115,7 +114,7 @@ if (!defined $events_last_id) {
 }
 
 # id of last record in table events (with invalid)
-$sth = $DBH->prepare("SELECT max(id) FROM events;") or die "Cannot prepare statement: " . $DBH->errstr;
+$sth = $dbh->prepare("SELECT max(id) FROM events;") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $events_last_id_inv = $sth->fetchrow();
 if (!defined $events_last_id_inv) {
@@ -123,7 +122,7 @@ if (!defined $events_last_id_inv) {
 }
 
 # timestamp of first record in table events
-$sth = $DBH->prepare("SELECT received FROM events WHERE id = (SELECT min(id) FROM events WHERE valid = 't');") or die "Cannot prepare statement: " . $DBH->errstr;
+$sth = $dbh->prepare("SELECT received FROM events WHERE id = (SELECT min(id) FROM events WHERE valid = 't');") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $events_first_timestamp = $sth->fetchrow();
 if (!defined $events_first_timestamp) {
@@ -131,7 +130,7 @@ if (!defined $events_first_timestamp) {
 }
 
 # timestamp of first record in table events (with invalid)
-$sth = $DBH->prepare("SELECT received FROM events WHERE id = (SELECT min(id) FROM events);") or die "Cannot prepare statement: " . $DBH->errstr;
+$sth = $dbh->prepare("SELECT received FROM events WHERE id = (SELECT min(id) FROM events);") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $events_first_timestamp_inv = $sth->fetchrow();
 if (!defined $events_first_timestamp_inv) {
@@ -139,7 +138,7 @@ if (!defined $events_first_timestamp_inv) {
 }
 
 # timestamp of last record in table events
-$sth = $DBH->prepare("SELECT received FROM events WHERE id = (SELECT max(id) FROM events WHERE valid = 't');") or die "Cannot prepare statement: " . $DBH->errstr;
+$sth = $dbh->prepare("SELECT received FROM events WHERE id = (SELECT max(id) FROM events WHERE valid = 't');") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $events_last_timestamp = $sth->fetchrow();
 if (!defined $events_last_timestamp) {
@@ -147,7 +146,7 @@ if (!defined $events_last_timestamp) {
 }
 
 # timestamp of last record in table events (with invalid)
-$sth = $DBH->prepare("SELECT received FROM events WHERE id = (SELECT max(id) FROM events);") or die "Cannot prepare statement: " . $DBH->errstr;
+$sth = $dbh->prepare("SELECT received FROM events WHERE id = (SELECT max(id) FROM events);") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $events_last_timestamp_inv = $sth->fetchrow();
 if (!defined $events_last_timestamp_inv) {
@@ -155,7 +154,7 @@ if (!defined $events_last_timestamp_inv) {
 }
 
 # sum of records in table clients
-$sth = $DBH->prepare("SELECT count(*) FROM clients WHERE valid = 't';") or die "Cannot prepare statement: " . $DBH->errstr;
+$sth = $dbh->prepare("SELECT count(*) FROM clients WHERE valid = 't';") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $clients_sum = $sth->fetchrow();
 if (!defined $clients_sum) {
@@ -163,7 +162,7 @@ if (!defined $clients_sum) {
 }
 
 # sum of records in table clients (with invalid)
-$sth = $DBH->prepare("SELECT count(*) FROM clients;") or die "Cannot prepare statement: " . $DBH->errstr;
+$sth = $dbh->prepare("SELECT count(*) FROM clients;") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute or die "Cannot execute statement: " . $sth->errstr;
 my $clients_sum_inv = $sth->fetchrow();
 if (!defined $clients_sum_inv) {
@@ -174,7 +173,7 @@ if (!defined $clients_sum_inv) {
 # Statistics of active registered senders
 my $hash_ref;
 if ($clients_sum != 0) {
-  $sth = $DBH->prepare("SELECT clients.client_id, clients.hostname, clients.service, count(*), max(received) FROM events LEFT JOIN clients ON (events.hostname=clients.hostname AND events.service=clients.service) WHERE clients.valid='t' AND events.valid='t' GROUP BY client_id;") or die "Cannot prepare statement: " . $DBH->errstr;
+  $sth = $dbh->prepare("SELECT clients.client_id, clients.hostname, clients.service, count(*), max(received) FROM events LEFT JOIN clients ON (events.hostname=clients.hostname AND events.service=clients.service) WHERE clients.valid='t' AND events.valid='t' GROUP BY client_id;") or die "Cannot prepare statement: " . $dbh->errstr;
   $sth->execute or die "Cannot execute statement: " . $sth->errstr;
   my ($client_id, $hostname, $service, $count, $timestamp, $client_status);
   $hash_ref = $sth->fetchall_hashref("client_id");
@@ -233,4 +232,11 @@ if ($clients_sum != 0) {
 
 print "Current server status in:\t" . scalar localtime(time) . "\n";
 
+# cleanup section
+END {
+  if (defined $dbh) {
+    $dbh->disconnect or warn "Disconnection from database '$WardenCommon::DB_NAME' failed: $dbh->errstr\n";
+  }
+}
+
 exit 0;
diff --git a/src/warden-server/bin/registerReceiver.pl b/src/warden-server/bin/registerReceiver.pl
index c8e4f99..0aac8ee 100755
--- a/src/warden-server/bin/registerReceiver.pl
+++ b/src/warden-server/bin/registerReceiver.pl
@@ -113,19 +113,19 @@ my $service		= undef;
 my $description_tags	= undef;
 
 # connect to DB
-our $DBH = DBI->connect("DBI:mysql:database=$WardenCommon::DB_NAME;host=$WardenCommon::DB_HOST", $WardenCommon::DB_USER, $WardenCommon::DB_PASS, {RaiseError => 1, mysql_auto_reconnect => 1})
-           || die "Could not connect to database: $DBI::errstr";
+my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS);
+
+my $warden_server = WardenCommon::trim(`hostname -f`);
 
 # check if receiver has been already registered or register it
-my $sth = $DBH->prepare("SELECT registered FROM clients WHERE hostname = ? AND client_type = ? AND type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $DBH->errstr;
+my $sth = $dbh->prepare("SELECT registered FROM clients WHERE hostname = ? AND client_type = ? AND type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute($hostname, $client_type, $type, $ip_net_client) or die "Cannot execute statement: " . $sth->errstr;
 my $result = $sth->fetchrow();
-my $warden_server = WardenCommon::trim(`hostname -f`);
 if (defined $result) {
   sendMsg("err", "Attempt to re-register receiver [Hostname: '$hostname', Type: '$type', CIDR: '$ip_net_client'] at Warden server '$warden_server'");
   WardenCommon::errMsg("Receiver has already been registered at Warden server '$warden_server' in '$result'");
 } else {
-  $sth = $DBH->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $DBH->errstr;
+  $sth = $dbh->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $dbh->errstr;
   my $ret_val = $sth->execute(undef, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
   if ($ret_val == 1) {
     sendMsg("info", "New receiver [Hostname: '$hostname', Requestor: '$requestor', Type: '$type', ROE: '$receive_own_events', CIDR: '$ip_net_client'] has been registered");
@@ -134,3 +134,12 @@ if (defined $result) {
     WardenCommon::errMsg("Registration of receiver $hostname ($type) FAILED!!!");
   }
 }
+
+# cleanup section
+END {
+  if (defined $dbh) {
+    $dbh->disconnect or warn "Disconnection from database '$WardenCommon::DB_NAME' failed: $dbh->errstr\n";
+  }
+}
+
+exit 0;
diff --git a/src/warden-server/bin/registerSender.pl b/src/warden-server/bin/registerSender.pl
index 772b7d3..83dc56f 100755
--- a/src/warden-server/bin/registerSender.pl
+++ b/src/warden-server/bin/registerSender.pl
@@ -112,19 +112,19 @@ my $type		= undef;
 my $receive_own_events	= undef;
 
 # connect to DB
-our $DBH = DBI->connect("DBI:mysql:database=$WardenCommon::DB_NAME;host=$WardenCommon::DB_HOST", $WardenCommon::DB_USER, $WardenCommon::DB_PASS, {RaiseError => 1, mysql_auto_reconnect => 1})
-           || die "Could not connect to database: $DBI::errstr";
+my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS);
 
-# check if receiver has been already registered or register it
-my $sth = $DBH->prepare("SELECT registered FROM clients WHERE hostname = ? AND service = ? AND client_type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $DBH->errstr;
+my $warden_server = WardenCommon::trim(`hostname -f`);
+
+# check if receiver has been already registered or do its registration
+my $sth = $dbh->prepare("SELECT registered FROM clients WHERE hostname = ? AND service = ? AND client_type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute($hostname, $service, $client_type, $ip_net_client) or die "Cannot execute statement: " . $sth->errstr;
 my $result = $sth->fetchrow();
-my $warden_server = WardenCommon::trim(`hostname -f`);
 if (defined $result) {
   sendMsg("err", "Attempt to re-register sender [Hostname: '$hostname', Service: '$service', CIDR: '$ip_net_client'] at Warden server '$warden_server'");
   WardenCommon::errMsg("Sender has already been registered at Warden server '$warden_server' in '$result'");
 } else {
-  $sth = $DBH->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $DBH->errstr;
+  $sth = $dbh->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $dbh->errstr;
   my $ret_val = $sth->execute(undef, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
   if ($ret_val == 1) {
     sendMsg("info", "New sender [Hostname: '$hostname', Requestor: '$requestor', Service: '$service', Description_tags: '$description_tags', CIDR: '$ip_net_client'] has been registered");
@@ -133,3 +133,12 @@ if (defined $result) {
     WardenCommon::errMsg("Registration of sender $hostname ($service) FAILED!!!");
   }
 }
+
+# cleanup section
+END {
+  if (defined $dbh) {
+    $dbh->disconnect or warn "Disconnection from database '$WardenCommon::DB_NAME' failed: $dbh->errstr\n";
+  }
+}
+
+exit 0;
diff --git a/src/warden-server/bin/unregisterClient.pl b/src/warden-server/bin/unregisterClient.pl
index caddcb0..2daa616 100755
--- a/src/warden-server/bin/unregisterClient.pl
+++ b/src/warden-server/bin/unregisterClient.pl
@@ -88,14 +88,14 @@ if (!defined $client_id) {
 }
 
 # connect to DB
-our $DBH = DBI->connect("DBI:mysql:database=$WardenCommon::DB_NAME;host=$WardenCommon::DB_HOST", $WardenCommon::DB_USER, $WardenCommon::DB_PASS, {RaiseError => 1, mysql_auto_reconnect => 1})
-           || die "Could not connect to database: $DBI::errstr";
+my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS);
+
+my $warden_server = WardenCommon::trim(`hostname -f`);
 
 # check if receiver has been already registered
-my $sth = $DBH->prepare("SELECT client_id, hostname, service, client_type, type FROM clients WHERE client_id = ? AND valid = 't' LIMIT 1;") or die "Cannot prepare statement: " . $DBH->errstr;
+my $sth = $dbh->prepare("SELECT client_id, hostname, service, client_type, type FROM clients WHERE client_id = ? AND valid = 't' LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
 my ($id, $hostname, $service, $client_type, $type) = $sth->fetchrow();
-my $warden_server = WardenCommon::trim(`hostname -f`);
 
 # delete registered client
 if (!defined $id) {
@@ -103,10 +103,10 @@ if (!defined $id) {
   WardenCommon::errMsg("Client (#$client_id) is not registered at Warden server '$warden_server'");
 } else {
   if ($client_type eq 's') {
-    $sth = $DBH->prepare("UPDATE clients SET valid = 'f' WHERE client_id = ?;") or die "Cannot prepare statement: " . $DBH->errstr;
+    $sth = $dbh->prepare("UPDATE clients SET valid = 'f' WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
     my $ret_val = $sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
     if ($ret_val == 1) {
-      $sth = $DBH->prepare("UPDATE events SET valid = 'f' where hostname = ? AND service = ?;") or die "Cannot prepare statement: " . $DBH->errstr;
+      $sth = $dbh->prepare("UPDATE events SET valid = 'f' where hostname = ? AND service = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
       $sth->execute($hostname, $service) or die "Cannot execute statement: " . $sth->errstr;
       # log message until after invalidate all events
       sendMsg("info", "Sender [Client_id: '$client_id', Hostname: '$hostname', Service: '$service'] has been deleted and its data were invalidated from Warden server '$warden_server'");
@@ -115,7 +115,7 @@ if (!defined $id) {
       WardenCommon::errMsg("Unregistration of sender (#$client_id) FAILED!!!");
     }
   } else {
-    $sth = $DBH->prepare("UPDATE clients SET valid = 'f' WHERE client_id = ?;") or die "Cannot prepare statement: " . $DBH->errstr;
+    $sth = $dbh->prepare("UPDATE clients SET valid = 'f' WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
     my $ret_val = $sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
     if ($ret_val == 1) {
       sendMsg("info", "Receiver [Client_id: '$client_id', Hostname: '$hostname', Type: '$type'] has been deleted from Warden server '$warden_server'");
@@ -125,3 +125,12 @@ if (!defined $id) {
     }
   }
 }
+
+# cleanup section
+END {
+  if (defined $dbh) {
+    $dbh->disconnect or warn "Disconnection from database '$WardenCommon::DB_NAME' failed: $dbh->errstr\n";
+  }
+}
+
+exit 0;
-- 
GitLab