mirror of
https://github.com/Seldaek/monolog.git
synced 2025-08-02 19:27:37 +02:00
added support for Pushover API priority brought up by SteveEdson in issue #187; the priority levels can be adjusted either through the handler's constructor or setters
This commit is contained in:
@@ -25,6 +25,9 @@ class PushoverHandler extends SocketHandler
|
|||||||
private $user;
|
private $user;
|
||||||
private $title;
|
private $title;
|
||||||
|
|
||||||
|
private $highPriorityLevel;
|
||||||
|
private $emergencyLevel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $token Pushover api token
|
* @param string $token Pushover api token
|
||||||
* @param string $user Pushover user id the message will be sent to
|
* @param string $user Pushover user id the message will be sent to
|
||||||
@@ -33,8 +36,12 @@ class PushoverHandler extends SocketHandler
|
|||||||
* @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not
|
* @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not
|
||||||
* @param Boolean $useSSL Whether to connect via SSL. Required when pushing messages to users that are not
|
* @param Boolean $useSSL Whether to connect via SSL. Required when pushing messages to users that are not
|
||||||
* the pushover.net app owner. OpenSSL is required for this option.
|
* the pushover.net app owner. OpenSSL is required for this option.
|
||||||
|
* @param integer $highPriorityLevel The minimum logging level at which this handler will start
|
||||||
|
* sending "high priority" requestes to Pushover API
|
||||||
|
* @param integer $emergencyLevel The minimum logging level at which this handler will start
|
||||||
|
* sending "emergency" requests to Pushover API
|
||||||
*/
|
*/
|
||||||
public function __construct($token, $user, $title = null, $level = Logger::CRITICAL, $bubble = true, $useSSL = true)
|
public function __construct($token, $user, $title = null, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $highPriorityLevel = Logger::CRITICAL, $emergencyLevel = Logger::EMERGENCY)
|
||||||
{
|
{
|
||||||
$connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80';
|
$connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80';
|
||||||
parent::__construct($connectionString, $level, $bubble);
|
parent::__construct($connectionString, $level, $bubble);
|
||||||
@@ -42,6 +49,8 @@ class PushoverHandler extends SocketHandler
|
|||||||
$this->token = $token;
|
$this->token = $token;
|
||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
$this->title = $title ?: gethostname();
|
$this->title = $title ?: gethostname();
|
||||||
|
$this->highPriorityLevel = $highPriorityLevel;
|
||||||
|
$this->emergencyLevel = $emergencyLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function generateDataStream($record)
|
protected function generateDataStream($record)
|
||||||
@@ -66,6 +75,12 @@ class PushoverHandler extends SocketHandler
|
|||||||
'timestamp' => $timestamp
|
'timestamp' => $timestamp
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if( $record['level'] >= $this->highPriorityLevel && $record['level'] < $this->emergencyLevel ) {
|
||||||
|
$dataArray['priority'] = 1;
|
||||||
|
} else if ( $record['level'] >= $this->emergencyLevel ) {
|
||||||
|
$dataArray['priority'] = 2;
|
||||||
|
}
|
||||||
|
|
||||||
return http_build_query($dataArray);
|
return http_build_query($dataArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,4 +100,13 @@ class PushoverHandler extends SocketHandler
|
|||||||
parent::write($record);
|
parent::write($record);
|
||||||
$this->closeSocket();
|
$this->closeSocket();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setHighPriorityLevel($value) {
|
||||||
|
$this->highPriorityLevel = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setEmergencyLevel($value) {
|
||||||
|
$this->emergencyLevel = $value;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -29,6 +29,7 @@ class PushoverHandlerTest extends TestCase
|
|||||||
public function testWriteHeader()
|
public function testWriteHeader()
|
||||||
{
|
{
|
||||||
$this->createHandler();
|
$this->createHandler();
|
||||||
|
$this->handler->setHighPriorityLevel(Logger::EMERGENCY); // skip priority notifications
|
||||||
$this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1'));
|
$this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1'));
|
||||||
fseek($this->res, 0);
|
fseek($this->res, 0);
|
||||||
$content = fread($this->res, 1024);
|
$content = fread($this->res, 1024);
|
||||||
@@ -48,7 +49,7 @@ class PushoverHandlerTest extends TestCase
|
|||||||
|
|
||||||
public function testWriteWithComplexTitle()
|
public function testWriteWithComplexTitle()
|
||||||
{
|
{
|
||||||
$this->createHandler('myToken', 'myUser', 'Backup finished - SQL1');
|
$this->createHandler('myToken', 'myUser', 'Backup finished - SQL1', Logger::EMERGENCY);
|
||||||
$this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1'));
|
$this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1'));
|
||||||
fseek($this->res, 0);
|
fseek($this->res, 0);
|
||||||
$content = fread($this->res, 1024);
|
$content = fread($this->res, 1024);
|
||||||
@@ -59,6 +60,7 @@ class PushoverHandlerTest extends TestCase
|
|||||||
public function testWriteWithComplexMessage()
|
public function testWriteWithComplexMessage()
|
||||||
{
|
{
|
||||||
$this->createHandler();
|
$this->createHandler();
|
||||||
|
$this->handler->setHighPriorityLevel(Logger::EMERGENCY); // skip priority notifications
|
||||||
$this->handler->handle($this->getRecord(Logger::CRITICAL, 'Backup of database "example" finished in 16 minutes.'));
|
$this->handler->handle($this->getRecord(Logger::CRITICAL, 'Backup of database "example" finished in 16 minutes.'));
|
||||||
fseek($this->res, 0);
|
fseek($this->res, 0);
|
||||||
$content = fread($this->res, 1024);
|
$content = fread($this->res, 1024);
|
||||||
@@ -70,6 +72,7 @@ class PushoverHandlerTest extends TestCase
|
|||||||
{
|
{
|
||||||
$message = str_pad('test', 520, 'a');
|
$message = str_pad('test', 520, 'a');
|
||||||
$this->createHandler();
|
$this->createHandler();
|
||||||
|
$this->handler->setHighPriorityLevel(Logger::EMERGENCY); // skip priority notifications
|
||||||
$this->handler->handle($this->getRecord(Logger::CRITICAL, $message));
|
$this->handler->handle($this->getRecord(Logger::CRITICAL, $message));
|
||||||
fseek($this->res, 0);
|
fseek($this->res, 0);
|
||||||
$content = fread($this->res, 1024);
|
$content = fread($this->res, 1024);
|
||||||
@@ -79,6 +82,26 @@ class PushoverHandlerTest extends TestCase
|
|||||||
$this->assertRegexp('/message=' . $expectedMessage . '&title/', $content);
|
$this->assertRegexp('/message=' . $expectedMessage . '&title/', $content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testWriteWithHighPriority()
|
||||||
|
{
|
||||||
|
$this->createHandler();
|
||||||
|
$this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1'));
|
||||||
|
fseek($this->res, 0);
|
||||||
|
$content = fread($this->res, 1024);
|
||||||
|
|
||||||
|
$this->assertRegexp('/token=myToken&user=myUser&message=test1&title=Monolog×tamp=\d{10}&priority=1$/', $content);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWriteWithEmergencyPriority()
|
||||||
|
{
|
||||||
|
$this->createHandler();
|
||||||
|
$this->handler->handle($this->getRecord(Logger::EMERGENCY, 'test1'));
|
||||||
|
fseek($this->res, 0);
|
||||||
|
$content = fread($this->res, 1024);
|
||||||
|
|
||||||
|
$this->assertRegexp('/token=myToken&user=myUser&message=test1&title=Monolog×tamp=\d{10}&priority=2$/', $content);
|
||||||
|
}
|
||||||
|
|
||||||
private function createHandler($token = 'myToken', $user = 'myUser', $title = 'Monolog')
|
private function createHandler($token = 'myToken', $user = 'myUser', $title = 'Monolog')
|
||||||
{
|
{
|
||||||
$constructorArgs = array($token, $user, $title);
|
$constructorArgs = array($token, $user, $title);
|
||||||
|
Reference in New Issue
Block a user