diff --git a/src/Process/Pool/Logger/Message/Metadata.php b/src/Process/Pool/Logger/Message/Metadata.php index 5a735787..2dae5a7d 100644 --- a/src/Process/Pool/Logger/Message/Metadata.php +++ b/src/Process/Pool/Logger/Message/Metadata.php @@ -4,6 +4,7 @@ namespace Neighborhoods\Kojo\Process\Pool\Logger\Message; use Neighborhoods\Kojo\Data\JobInterface; +use Neighborhoods\Kojo\Process\Pool\Logger\Message\Metadata\HostInterface; class Metadata implements MetadataInterface { @@ -11,6 +12,7 @@ class Metadata implements MetadataInterface protected $job; /** @var SerializableProcessInterface */ protected $process; + /** @var HostInterface */ protected $host; public function getJob() : JobInterface @@ -68,4 +70,24 @@ public function jsonSerialize() return get_object_vars($this); } + public function getHost() : HostInterface + { + if ($this->host === null) { + throw new \LogicException('Metadata host has not been set.'); + } + + return $this->host; + } + + public function setHost(HostInterface $host) : MetadataInterface + { + if ($this->host !== null) { + throw new \LogicException('Metadata host is already set.'); + } + + $this->host = $host; + + return $this; + } + } diff --git a/src/Process/Pool/Logger/Message/Metadata/Builder.php b/src/Process/Pool/Logger/Message/Metadata/Builder.php index 6992eadc..761b5084 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Builder.php +++ b/src/Process/Pool/Logger/Message/Metadata/Builder.php @@ -12,6 +12,7 @@ class Builder implements BuilderInterface { use Factory\AwareTrait; use SerializableProcess\FromProcessModel\Builder\Factory\AwareTrait; + use Host\AwareTrait; /** @var ProcessInterface */ protected $process; @@ -35,6 +36,8 @@ public function build() : MetadataInterface $metadata->setJob($this->getJob()); } + $metadata->setHost($this->getProcessPoolLoggerMessageMetadataHost()); + return $metadata; } diff --git a/src/Process/Pool/Logger/Message/Metadata/Builder.yml b/src/Process/Pool/Logger/Message/Metadata/Builder.yml index ea344004..ef57e9bb 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Builder.yml +++ b/src/Process/Pool/Logger/Message/Metadata/Builder.yml @@ -5,3 +5,4 @@ services: calls: - [setProcessPoolLoggerMessageMetadataFactory, ['@neighborhoods.kojo.process.pool.logger.message.metadata.factory']] - [setProcessPoolLoggerMessageSerializableProcessFromProcessModelBuilderFactory, ['@neighborhoods.kojo.process.pool.logger.message.serializable_process.from_process_model.builder.factory']] + - [setProcessPoolLoggerMessageMetadataHost, ['@neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host']] diff --git a/src/Process/Pool/Logger/Message/Metadata/Host.php b/src/Process/Pool/Logger/Message/Metadata/Host.php new file mode 100644 index 00000000..cbbd8f45 --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host.php @@ -0,0 +1,34 @@ +getHostName(); + $data[self::KEY_LOAD_AVERAGE] = $this->getLoadAverage(); + + return $data; + } +} diff --git a/src/Process/Pool/Logger/Message/Metadata/Host.yml b/src/Process/Pool/Logger/Message/Metadata/Host.yml new file mode 100644 index 00000000..650226f2 --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host.yml @@ -0,0 +1,4 @@ +services: + neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host: + class: Neighborhoods\Kojo\Process\Pool\Logger\Message\Metadata\Host + shared: true diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/AwareTrait.php b/src/Process/Pool/Logger/Message/Metadata/Host/AwareTrait.php new file mode 100644 index 00000000..64ae534c --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host/AwareTrait.php @@ -0,0 +1,54 @@ +hasProcessPoolLoggerMessageMetadataHost()) { + throw new \LogicException( + 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHost is already set.' + ); + } + $this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHost = $ProcessPoolLoggerMessageMetadataHost; + + return $this; + } + + protected function getProcessPoolLoggerMessageMetadataHost() : HostInterface + { + if (!$this->hasProcessPoolLoggerMessageMetadataHost()) { + throw new \LogicException( + 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHost is not set.' + ); + } + + return $this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHost; + } + + protected function hasProcessPoolLoggerMessageMetadataHost() : bool + { + return isset($this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHost); + } + + protected function unsetProcessPoolLoggerMessageMetadataHost() : self + { + if (!$this->hasProcessPoolLoggerMessageMetadataHost()) { + throw new \LogicException( + 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHost is not set.' + ); + } + unset($this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHost); + + return $this; + } +} diff --git a/src/Process/Pool/Logger/Message/Metadata/HostInterface.php b/src/Process/Pool/Logger/Message/Metadata/HostInterface.php new file mode 100644 index 00000000..c692f950 --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/HostInterface.php @@ -0,0 +1,11 @@ +dataUnitToBytes(ini_get('memory_limit')); + } + public function jsonSerialize() { - return get_object_vars($this); + $data = get_object_vars($this); + $data[self::KEY_MEMORY_USAGE_BYTES]= $this->getMemoryUsageBytes(); + $data[self::KEY_MEMORY_PEAK_USAGE_BYTES]= $this->getMemoryPeakUsageBytes(); + $data[self::KEY_MEMORY_LIMIT_BYTES]= $this->getMemoryLimitBytes(); + return $data; + } + + /* converts a number with byte unit (B / K / M / G) into an integer */ + protected function dataUnitToBytes(string $memoryString) : int + { + $memoryString = trim($memoryString); + $lastCharacter = strtolower($memoryString[-1]); + switch ($lastCharacter) { + case 'g': + $bytes = (int)$memoryString * 1024 * 1024 * 1024; + break; + case 'm': + $bytes = (int)$memoryString * 1024 * 1024; + break; + case 'k': + $bytes = (int)$memoryString * 1024; + break; + default: + $bytes = (int)$memoryString; + } + + return $bytes; } } diff --git a/src/Process/Pool/Logger/Message/SerializableProcessInterface.php b/src/Process/Pool/Logger/Message/SerializableProcessInterface.php index 8e9a334c..90d0904e 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcessInterface.php +++ b/src/Process/Pool/Logger/Message/SerializableProcessInterface.php @@ -25,4 +25,10 @@ public function setProcessId(int $process_id) : SerializableProcessInterface; public function getPath() : string; public function setPath(string $path) : SerializableProcessInterface; + + public function getMemoryPeakUsageBytes() : int; + + public function getMemoryUsageBytes() : int; + + public function getMemoryLimitBytes() : int; }