Permalink
Browse files

CubeHandler cleanup

  • Loading branch information...
1 parent bd73a56 commit 7c2ca1c61c23475921cb96eb52d1f688562ff74e @Seldaek committed Aug 18, 2012
Showing with 50 additions and 71 deletions.
  1. +1 −2 .gitignore
  2. +1 −0 README.mdown
  3. +48 −69 src/Monolog/Handler/CubeHandler.php
View
@@ -2,5 +2,4 @@ vendor
composer.phar
phpunit.xml
composer.lock
-
-.DS_Store
+.DS_Store
View
@@ -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
---------------------------
@@ -1,5 +1,5 @@
<?php
-
+
/*
* This file is part of the Monolog package.
*
@@ -8,28 +8,26 @@
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
-
+
namespace Monolog\Handler;
-
+
use Monolog\Logger;
-
+
/**
* Logs to Cube.
- * @link http://square.github.com/cube/
*
+ * @link http://square.github.com/cube/
* @author Wan Chen <kami@kamisama.me>
*/
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 @@ private function isConnected($scheme)
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);
}
}

0 comments on commit 7c2ca1c

Please sign in to comment.