1
0
mirror of https://github.com/Seldaek/monolog.git synced 2025-08-02 19:27:37 +02:00

Allow setting stream chunk size in SocketHandler (#1129)

This commit is contained in:
Klemen Bratec
2018-06-18 11:31:46 +02:00
committed by Jordi Boggiano
parent fd29c89e3c
commit e8db808dd3
2 changed files with 65 additions and 0 deletions

View File

@@ -27,6 +27,7 @@ class SocketHandler extends AbstractProcessingHandler
private $timeout = 0; private $timeout = 0;
private $writingTimeout = 10; private $writingTimeout = 10;
private $lastSentBytes = null; private $lastSentBytes = null;
private $chunkSize = null;
private $persistent = false; private $persistent = false;
private $errno; private $errno;
private $errstr; private $errstr;
@@ -127,6 +128,16 @@ class SocketHandler extends AbstractProcessingHandler
$this->writingTimeout = (float) $seconds; $this->writingTimeout = (float) $seconds;
} }
/**
* Set chunk size. Only has effect during connection in the writing cycle.
*
* @param float $bytes
*/
public function setChunkSize($bytes)
{
$this->chunkSize = $bytes;
}
/** /**
* Get current connection string * Get current connection string
* *
@@ -177,6 +188,16 @@ class SocketHandler extends AbstractProcessingHandler
return $this->writingTimeout; return $this->writingTimeout;
} }
/**
* Get current chunk size
*
* @return float
*/
public function getChunkSize()
{
return $this->chunkSize;
}
/** /**
* Check to see if the socket is currently available. * Check to see if the socket is currently available.
* *
@@ -219,6 +240,16 @@ class SocketHandler extends AbstractProcessingHandler
return stream_set_timeout($this->resource, $seconds, $microseconds); return stream_set_timeout($this->resource, $seconds, $microseconds);
} }
/**
* Wrapper to allow mocking
*
* @see http://php.net/manual/en/function.stream-set-chunk-size.php
*/
protected function streamSetChunkSize()
{
return stream_set_chunk_size($this->resource, $this->chunkSize);
}
/** /**
* Wrapper to allow mocking * Wrapper to allow mocking
*/ */
@@ -268,6 +299,7 @@ class SocketHandler extends AbstractProcessingHandler
{ {
$this->createSocketResource(); $this->createSocketResource();
$this->setSocketTimeout(); $this->setSocketTimeout();
$this->setStreamChunkSize();
} }
private function createSocketResource() private function createSocketResource()
@@ -290,6 +322,13 @@ class SocketHandler extends AbstractProcessingHandler
} }
} }
private function setStreamChunkSize()
{
if ($this->chunkSize && !$this->streamSetChunkSize()) {
throw new \UnexpectedValueException("Failed setting chunk size with stream_set_chunk_size()");
}
}
private function writeToSocket($data) private function writeToSocket($data)
{ {
$length = strlen($data); $length = strlen($data);

View File

@@ -77,6 +77,13 @@ class SocketHandlerTest extends TestCase
$this->assertEquals(10.25, $this->handler->getWritingTimeout()); $this->assertEquals(10.25, $this->handler->getWritingTimeout());
} }
public function testSetChunkSize()
{
$this->createHandler('localhost:1234');
$this->handler->setChunkSize(1025);
$this->assertEquals(1025, $this->handler->getChunkSize());
}
public function testSetConnectionString() public function testSetConnectionString()
{ {
$this->createHandler('tcp://localhost:9090'); $this->createHandler('tcp://localhost:9090');
@@ -120,6 +127,19 @@ class SocketHandlerTest extends TestCase
$this->writeRecord('Hello world'); $this->writeRecord('Hello world');
} }
/**
* @expectedException UnexpectedValueException
*/
public function testExceptionIsThrownIfCannotSetChunkSize()
{
$this->setMockHandler(array('streamSetChunkSize'));
$this->handler->setChunkSize(8192);
$this->handler->expects($this->once())
->method('streamSetChunkSize')
->will($this->returnValue(false));
$this->writeRecord('Hello world');
}
/** /**
* @expectedException RuntimeException * @expectedException RuntimeException
*/ */
@@ -304,6 +324,12 @@ class SocketHandlerTest extends TestCase
->will($this->returnValue(true)); ->will($this->returnValue(true));
} }
if (!in_array('streamSetChunkSize', $methods)) {
$this->handler->expects($this->any())
->method('streamSetChunkSize')
->will($this->returnValue(8192));
}
$this->handler->setFormatter($this->getIdentityFormatter()); $this->handler->setFormatter($this->getIdentityFormatter());
} }
} }