Changeset View
Changeset View
Standalone View
Standalone View
src/channel/PhutilMetricsChannel.php
- This file was added.
<?php | |||||
/** | |||||
* A @{class:PhutilChannelChannel} which wraps some other channel and provides | |||||
* metrics about its use (e.g., bytes read and bytes written). | |||||
* | |||||
* @task metrics Channel Metrics | |||||
* @task impl Implementation | |||||
*/ | |||||
final class PhutilMetricsChannel extends PhutilChannelChannel { | |||||
private $bytesRead = 0; | |||||
private $bytesWritten = 0; | |||||
private $startTime; | |||||
/* -( Channel Metrics )---------------------------------------------------- */ | |||||
/** | |||||
* Get the number of bytes that have been written to the channel. This | |||||
* includes any bytes which have been buffered but not actually transmitted, | |||||
* and thus may overreport compared to actual activity on the wire. | |||||
* | |||||
* @return int Bytes written. | |||||
* @task metrics | |||||
*/ | |||||
public function getBytesWritten() { | |||||
return $this->bytesWritten; | |||||
} | |||||
/** | |||||
* Get the number of bytes that have been read from the channel. This excludes | |||||
* any bytes which have been received but not actually read by anything, and | |||||
* thus may underreport compared to actual activity on the wire. | |||||
* | |||||
* @return int Bytes read. | |||||
* @task metrics | |||||
*/ | |||||
public function getBytesRead() { | |||||
return $this->bytesRead; | |||||
} | |||||
/** | |||||
* Get the elapsed wall time since this channel opened. | |||||
* | |||||
* @return float Wall time, in seconds. | |||||
* @task metrics | |||||
*/ | |||||
public function getWallTime() { | |||||
return microtime(true) - $this->startTime; | |||||
} | |||||
/* -( Implementation )----------------------------------------------------- */ | |||||
/** | |||||
* @task impl | |||||
*/ | |||||
protected function didConstruct() { | |||||
$this->startTime = microtime(true); | |||||
} | |||||
/** | |||||
* @task impl | |||||
*/ | |||||
public function read() { | |||||
$buffer = parent::read(); | |||||
$this->bytesRead += strlen($buffer); | |||||
return $buffer; | |||||
} | |||||
/** | |||||
* @task impl | |||||
*/ | |||||
public function write($message) { | |||||
$this->bytesWritten += strlen($message); | |||||
return parent::write($message); | |||||
} | |||||
} |