From 7c2ca1c61c23475921cb96eb52d1f688562ff74e Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Sat, 18 Aug 2012 18:51:10 +0200 Subject: [PATCH] CubeHandler cleanup --- .gitignore | 3 +- README.mdown | 1 + src/Monolog/Handler/CubeHandler.php | 117 ++++++++++++---------------- 3 files changed, 50 insertions(+), 71 deletions(-) diff --git a/.gitignore b/.gitignore index 6e964676..0a3fb552 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ vendor composer.phar phpunit.xml composer.lock - -.DS_Store \ No newline at end of file +.DS_Store diff --git a/README.mdown b/README.mdown index 0e40fb77..c051eb19 100644 --- a/README.mdown +++ b/README.mdown @@ -113,6 +113,7 @@ Handlers for UNIX and TCP sockets. See an [example](https://github.com/Seldaek/monolog/blob/master/doc/sockets.md). - _AmqpHandler_: Logs records to an [amqp](http://www.amqp.org/) compatible server. Requires the [php-amqp](http://pecl.php.net/package/amqp) extension (1.0+). +- _CubeHandler_: Logs records to a [Cube](http://square.github.com/cube/) server. Wrappers / Special Handlers --------------------------- diff --git a/src/Monolog/Handler/CubeHandler.php b/src/Monolog/Handler/CubeHandler.php index 5819a407..c21e0e3e 100644 --- a/src/Monolog/Handler/CubeHandler.php +++ b/src/Monolog/Handler/CubeHandler.php @@ -1,5 +1,5 @@ */ class CubeHandler extends AbstractProcessingHandler { private $udpConnection = null; private $httpConnection = null; - private $scheme = null; private $host = null; private $port = null; - private $acceptedScheme = array('http', 'udp'); - - + private $acceptedSchemes = array('http', 'udp'); + /** * Create a Cube handler * @@ -40,36 +38,23 @@ class CubeHandler extends AbstractProcessingHandler public function __construct($url, $level = Logger::DEBUG, $bubble = true) { $urlInfos = parse_url($url); - - if (!$urlInfos || !isset($urlInfos['scheme']) - || !isset($urlInfos['host']) || !isset($urlInfos['port'])) { + + if (!isset($urlInfos['scheme']) || !isset($urlInfos['host']) || !isset($urlInfos['port'])) { throw new \UnexpectedValueException('URL "'.$url.'" is not valid'); } - - if (!in_array($urlInfos['scheme'], $this->acceptedScheme)) { + + if (!in_array($urlInfos['scheme'], $this->acceptedSchemes)) { throw new \UnexpectedValueException( - 'Invalid ' . $urlInfos['scheme'] . ' protocol.' - . 'Valid options are ' . implode(', ', $this->acceptedScheme)); - } else { - $this->scheme = $urlInfos['scheme']; - $this->host = $urlInfos['host']; - $this->port = $urlInfos['port']; + 'Invalid protocol (' . $urlInfos['scheme'] . ').' + . ' Valid options are ' . implode(', ', $this->acceptedSchemes)); } - + + $this->scheme = $urlInfos['scheme']; + $this->host = $urlInfos['host']; + $this->port = $urlInfos['port']; + parent::__construct($level, $bubble); } - - - /** - * Check if a connection resource is available - * - * @return boolean - */ - private function isConnected($scheme) - { - return $this->{$scheme . 'Connection'} !== null; - } - /** * Establish a connection to an UDP socket @@ -79,88 +64,82 @@ class CubeHandler extends AbstractProcessingHandler protected function connectUdp() { if (!extension_loaded('sockets')) { - throw new \LogicException('The sockets extension is not loaded'); + throw new \LogicException('The sockets extension is needed to use udp URLs with the CubeHandler'); } - + $this->udpConnection = socket_create(AF_INET, SOCK_DGRAM, 0); if (!$this->udpConnection) { throw new \LogicException('Unable to create a socket'); } if (!socket_connect($this->udpConnection, $this->host, $this->port)) { - throw new \LogicException('Unable to connect to the socket at ' - . $this->host . ':' . $this->port); + throw new \LogicException('Unable to connect to the socket at ' . $this->host . ':' . $this->port); } } - /** * Establish a connection to a http server */ protected function connectHttp() { - $this->httpConnection = - curl_init('http://'.$this->host.':'.$this->port.'/1.0/event/put'); - + if (!extension_loaded('curl')) { + throw new \LogicException('The curl extension is needed to use http URLs with the CubeHandler'); + } + + $this->httpConnection = curl_init('http://'.$this->host.':'.$this->port.'/1.0/event/put'); + if (!$this->httpConnection) { - throw new \LogicException('Unable to connect to ' - . $this->host . ':' . $this->port); + throw new \LogicException('Unable to connect to ' . $this->host . ':' . $this->port); } curl_setopt($this->httpConnection, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($this->httpConnection, CURLOPT_RETURNTRANSFER, true); - } - - + /** * {@inheritdoc} */ protected function write(array $record) { $date = $record['datetime']; - - $datas = array('time' => $date->format('Y-m-d H:i:s')); + + $data = array('time' => $date->format('Y-m-d H:i:s')); unset($record['datetime']); if (isset($record['context']['type'])) { - $datas['type'] = $record['context']['type']; + $data['type'] = $record['context']['type']; unset($record['context']['type']); } else { - $datas['type'] = $record['channel']; + $data['type'] = $record['channel']; } - - $datas['data'] = $record['context']; - $datas['data']['level'] = $record['level']; - - call_user_func( - array($this, 'send'.ucwords($this->scheme)), json_encode($datas)); + + $data['data'] = $record['context']; + $data['data']['level'] = $record['level']; + + $this->{'write'.$this->scheme}(json_encode($data)); } - - private function sendUdp($datas) + private function writeUdp($data) { - if (!$this->isConnected($this->scheme)) { - call_user_func( - array($this, 'connect' . ucwords($this->scheme))); + if (!$this->udpConnection) { + $this->connectUdp(); } - socket_send($this->udpConnection, $datas, strlen($datas), 0); + socket_send($this->udpConnection, $data, strlen($data), 0); } - - private function sendHttp($datas) + private function writeHttp($data) { - if (!$this->isConnected($this->scheme)) { - call_user_func( - array($this, 'connect' . ucwords($this->scheme))); + if (!$this->httpConnection) { + $this->connectHttp(); } - curl_setopt($this->httpConnection, CURLOPT_POSTFIELDS, '['.$datas.']'); + curl_setopt($this->httpConnection, CURLOPT_POSTFIELDS, '['.$data.']'); curl_setopt($this->httpConnection, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', - 'Content-Length: ' . strlen('['.$datas.']')) + 'Content-Length: ' . strlen('['.$data.']')) ); + return curl_exec($this->httpConnection); } } \ No newline at end of file