mirror of
https://github.com/Seldaek/monolog.git
synced 2025-08-06 05:07:36 +02:00
HipChatHandler: combine batch records and send as one
This commit is contained in:
@@ -150,4 +150,70 @@ class HipChatHandler extends SocketHandler
|
|||||||
$this->closeSocket();
|
$this->closeSocket();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function handleBatch(array $records)
|
||||||
|
{
|
||||||
|
if (count($records) == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$batchRecord = $this->combineRecords($records);
|
||||||
|
|
||||||
|
if (!$this->isHandling($batchRecord)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->write($batchRecord);
|
||||||
|
|
||||||
|
return false === $this->bubble;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combines multiple records into one. Error level of the combined record
|
||||||
|
* will be the highest level from the given records. Datetime will be taken
|
||||||
|
* from the first record.
|
||||||
|
*
|
||||||
|
* @param $records
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function combineRecords($records)
|
||||||
|
{
|
||||||
|
$messages = array();
|
||||||
|
$formattedMessages = array();
|
||||||
|
$level = 0;
|
||||||
|
$levelName = null;
|
||||||
|
$datetime = null;
|
||||||
|
|
||||||
|
foreach ($records as $record) {
|
||||||
|
|
||||||
|
$record = $this->processRecord($record);
|
||||||
|
$record['formatted'] = $this->getFormatter()->format($record);
|
||||||
|
|
||||||
|
$messages[] = $record['message'];
|
||||||
|
$formattedMessages[] = $record['formatted'];
|
||||||
|
|
||||||
|
if ($record['level'] > $level) {
|
||||||
|
$level = $record['level'];
|
||||||
|
$levelName = $record['level_name'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null == $datetime) {
|
||||||
|
$datetime = $record['datetime'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$batchRecord = array(
|
||||||
|
'message' => implode(PHP_EOL, $messages),
|
||||||
|
'formatted' => implode('', $formattedMessages),
|
||||||
|
'level' => $level,
|
||||||
|
'level_name' => $levelName,
|
||||||
|
'datetime' => $datetime,
|
||||||
|
'context' => array(),
|
||||||
|
'extra' => array(),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $batchRecord;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -81,6 +81,55 @@ class HipChatHandlerTest extends TestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideBatchRecords
|
||||||
|
*/
|
||||||
|
public function testHandleBatch($records, $expectedColor)
|
||||||
|
{
|
||||||
|
$this->createHandler();
|
||||||
|
|
||||||
|
$this->handler->handleBatch($records);
|
||||||
|
|
||||||
|
fseek($this->res, 0);
|
||||||
|
$content = fread($this->res, 1024);
|
||||||
|
|
||||||
|
$this->assertRegexp('/color='.$expectedColor.'/', $content);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideBatchRecords()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
array('level' => Logger::WARNING, 'message' => 'Oh bugger!', 'level_name' => 'warning', 'datetime' => new \DateTime()),
|
||||||
|
array('level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTime()),
|
||||||
|
array('level' => Logger::CRITICAL, 'message' => 'Everything is broken!', 'level_name' => 'critical', 'datetime' => new \DateTime())
|
||||||
|
),
|
||||||
|
'red',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
array('level' => Logger::WARNING, 'message' => 'Oh bugger!', 'level_name' => 'warning', 'datetime' => new \DateTime()),
|
||||||
|
array('level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTime()),
|
||||||
|
),
|
||||||
|
'yellow',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
array('level' => Logger::DEBUG, 'message' => 'Just debugging.', 'level_name' => 'debug', 'datetime' => new \DateTime()),
|
||||||
|
array('level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTime()),
|
||||||
|
),
|
||||||
|
'green',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
array('level' => Logger::DEBUG, 'message' => 'Just debugging.', 'level_name' => 'debug', 'datetime' => new \DateTime()),
|
||||||
|
),
|
||||||
|
'gray',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private function createHandler($token = 'myToken', $room = 'room1', $name = 'Monolog', $notify = false)
|
private function createHandler($token = 'myToken', $room = 'room1', $name = 'Monolog', $notify = false)
|
||||||
{
|
{
|
||||||
$constructorArgs = array($token, $room, $name, $notify, Logger::DEBUG);
|
$constructorArgs = array($token, $room, $name, $notify, Logger::DEBUG);
|
||||||
|
Reference in New Issue
Block a user