Quellcode durchsuchen

CubeHandler cleanup

Jordi Boggiano vor 13 Jahren
Ursprung
Commit
7c2ca1c61c
3 geänderte Dateien mit 50 neuen und 71 gelöschten Zeilen
  1. 1 2
      .gitignore
  2. 1 0
      README.mdown
  3. 48 69
      src/Monolog/Handler/CubeHandler.php

+ 1 - 2
.gitignore

@@ -2,5 +2,4 @@ vendor
 composer.phar
 composer.phar
 phpunit.xml
 phpunit.xml
 composer.lock
 composer.lock
-
-.DS_Store
+.DS_Store

+ 1 - 0
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).
   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
 - _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+).
   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
 Wrappers / Special Handlers
 ---------------------------
 ---------------------------

+ 48 - 69
src/Monolog/Handler/CubeHandler.php

@@ -1,5 +1,5 @@
 <?php
 <?php
- 
+
 /*
 /*
  * This file is part of the Monolog package.
  * This file is part of the Monolog package.
  *
  *
@@ -8,28 +8,26 @@
  * For the full copyright and license information, please view the LICENSE
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
  * file that was distributed with this source code.
  */
  */
- 
+
 namespace Monolog\Handler;
 namespace Monolog\Handler;
- 
+
 use Monolog\Logger;
 use Monolog\Logger;
- 
+
 /**
 /**
  * Logs to Cube.
  * Logs to Cube.
- * @link http://square.github.com/cube/
  *
  *
+ * @link http://square.github.com/cube/
  * @author Wan Chen <kami@kamisama.me>
  * @author Wan Chen <kami@kamisama.me>
  */
  */
 class CubeHandler extends AbstractProcessingHandler
 class CubeHandler extends AbstractProcessingHandler
 {
 {
     private $udpConnection = null;
     private $udpConnection = null;
     private $httpConnection = null;
     private $httpConnection = null;
-
     private $scheme = null;
     private $scheme = null;
     private $host = null;
     private $host = null;
     private $port = null;
     private $port = null;
-    private $acceptedScheme = array('http', 'udp');
-    
-    
+    private $acceptedSchemes = array('http', 'udp');
+
     /**
     /**
      * Create a Cube handler
      * Create a Cube handler
      *
      *
@@ -40,36 +38,23 @@ class CubeHandler extends AbstractProcessingHandler
     public function __construct($url, $level = Logger::DEBUG, $bubble = true)
     public function __construct($url, $level = Logger::DEBUG, $bubble = true)
     {
     {
         $urlInfos = parse_url($url);
         $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');
             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(
             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);
         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
      * Establish a connection to an UDP socket
@@ -79,88 +64,82 @@ class CubeHandler extends AbstractProcessingHandler
     protected function connectUdp()
     protected function connectUdp()
     {
     {
         if (!extension_loaded('sockets')) {
         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);
         $this->udpConnection = socket_create(AF_INET, SOCK_DGRAM, 0);
         if (!$this->udpConnection) {
         if (!$this->udpConnection) {
             throw new \LogicException('Unable to create a socket');
             throw new \LogicException('Unable to create a socket');
         }
         }
 
 
         if (!socket_connect($this->udpConnection, $this->host, $this->port)) {
         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
      * Establish a connection to a http server
      */
      */
     protected function connectHttp()
     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) {
         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_CUSTOMREQUEST, "POST");
         curl_setopt($this->httpConnection, CURLOPT_RETURNTRANSFER, true);
         curl_setopt($this->httpConnection, CURLOPT_RETURNTRANSFER, true);
-        
     }
     }
-    
-    
+
     /**
     /**
      * {@inheritdoc}
      * {@inheritdoc}
      */
      */
     protected function write(array $record)
     protected function write(array $record)
     {
     {
         $date = $record['datetime'];
         $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']);
         unset($record['datetime']);
 
 
         if (isset($record['context']['type'])) {
         if (isset($record['context']['type'])) {
-            $datas['type'] = $record['context']['type'];
+            $data['type'] = $record['context']['type'];
             unset($record['context']['type']);
             unset($record['context']['type']);
         } else {
         } 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(
         curl_setopt($this->httpConnection, CURLOPT_HTTPHEADER, array(
                 'Content-Type: application/json',
                 'Content-Type: application/json',
-                'Content-Length: ' . strlen('['.$datas.']'))
+                'Content-Length: ' . strlen('['.$data.']'))
         );
         );
+
         return curl_exec($this->httpConnection);
         return curl_exec($this->httpConnection);
     }
     }
 }
 }