mirror of
https://github.com/Seldaek/monolog.git
synced 2025-02-24 06:52:34 +01:00
Merge pull request #252 from astina-forks/hipchat_batch_records
HipChatHandler: combine batch records and send as one
This commit is contained in:
commit
620922356a
@ -150,4 +150,70 @@ class HipChatHandler extends SocketHandler
|
||||
$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)
|
||||
{
|
||||
$constructorArgs = array($token, $room, $name, $notify, Logger::DEBUG);
|
||||
|
Loading…
x
Reference in New Issue
Block a user