From b0d0370b7269a8e5fc4254b3f47f266551957fc4 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Wed, 15 Aug 2012 22:01:09 +0200 Subject: [PATCH] db logger needs to reconnect, too --- src/callnotifier/Logger/CallDb.php | 92 ++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 31 deletions(-) diff --git a/src/callnotifier/Logger/CallDb.php b/src/callnotifier/Logger/CallDb.php index e2cdc6f..0135fba 100644 --- a/src/callnotifier/Logger/CallDb.php +++ b/src/callnotifier/Logger/CallDb.php @@ -9,6 +9,11 @@ namespace callnotifier; */ class Logger_CallDb extends Logger_CallBase { + protected $db; + protected $dsn; + protected $username; + protected $password; + /** * Create new detailler object * @@ -18,42 +23,36 @@ class Logger_CallDb extends Logger_CallBase * @param string $password Database password */ public function __construct( - $dsn, $username, $password, - $callTypes = 'i', $msns = array() + $dsn, $username, $password, $callTypes = 'i', $msns = array() ) { parent::__construct($callTypes, $msns); + + $this->dsn = $dsn; + $this->username = $username; + $this->password = $password; + //check if the credentials are correct + $this->connect(); + } + + /** + * Connect to the SQL server. + * SQL servers close the connection automatically after some hours, + * and since calls often don't come in every minute, we will have + * disconnects in between. + * Thus, we will reconnect on every location load. + * + * @return void + */ + protected function connect() + { $this->db = new \PDO( - $dsn, $username, $password, + $this->dsn, $this->username, $this->password, array( \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', - \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC + \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, + \PDO::ATTR_PERSISTENT => true ) ); - $this->stmt = $this->db->prepare( - 'INSERT INTO finished (' - . ' call_start' - . ', call_end' - . ', call_type' - . ', call_from' - . ', call_from_name' - . ', call_from_location' - . ', call_to' - . ', call_to_name' - . ', call_to_location' - . ', call_length' - . ') VALUES (' - . ' :call_start' - . ', :call_end' - . ', :call_type' - . ', :call_from' - . ', :call_from_name' - . ', :call_from_location' - . ', :call_to' - . ', :call_to_name' - . ', :call_to_location' - . ', :call_length' - . ')' - ); } public function log($type, $arData) @@ -72,7 +71,9 @@ class Logger_CallDb extends Logger_CallBase $this->addUnsetVars($call); - $ret = $this->stmt->execute( + $this->connect(); + $stmt = $this->prepareDbStatement(); + $ret = $stmt->execute( array( 'call_start' => date('Y-m-d H:i:s', $call->start), 'call_end' => date('Y-m-d H:i:s', $call->end), @@ -89,11 +90,40 @@ class Logger_CallDb extends Logger_CallBase if ($ret === false) { throw new \Exception( 'Error logging call to database: ' - . implode(' / ', $this->stmt->errorInfo()) + . implode(' / ', $stmt->errorInfo()) ); } } + protected function prepareDbStatement() + { + return $this->db->prepare( + 'INSERT INTO finished (' + . ' call_start' + . ', call_end' + . ', call_type' + . ', call_from' + . ', call_from_name' + . ', call_from_location' + . ', call_to' + . ', call_to_name' + . ', call_to_location' + . ', call_length' + . ') VALUES (' + . ' :call_start' + . ', :call_end' + . ', :call_type' + . ', :call_from' + . ', :call_from_name' + . ', :call_from_location' + . ', :call_to' + . ', :call_to_name' + . ', :call_to_location' + . ', :call_length' + . ')' + ); + } + } ?> -- 2.30.2