From cb1952e5ef9df9816b8bdfd0bbd83cf7d106ba75 Mon Sep 17 00:00:00 2001 From: Alex Berryman Date: Thu, 19 Sep 2019 08:20:21 -0500 Subject: [PATCH 01/11] collect host information and store on the Metadata object --- src/Process/Pool/Logger/Message/Metadata.php | 23 +++++- .../Pool/Logger/Message/Metadata/Builder.php | 3 + .../Pool/Logger/Message/Metadata/Builder.yml | 1 + .../Pool/Logger/Message/Metadata/Host.php | 71 +++++++++++++++++++ .../Pool/Logger/Message/Metadata/Host.yml | 3 + .../Message/Metadata/Host/AwareTrait.php | 54 ++++++++++++++ .../Logger/Message/Metadata/Host/Factory.php | 17 +++++ .../Logger/Message/Metadata/Host/Factory.yml | 5 ++ .../Metadata/Host/Factory/AwareTrait.php | 54 ++++++++++++++ .../Metadata/Host/FactoryInterface.php | 12 ++++ .../Logger/Message/Metadata/HostInterface.php | 9 +++ .../Pool/Logger/Message/MetadataInterface.php | 5 ++ 12 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host.php create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host.yml create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/AwareTrait.php create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Factory.php create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Factory.yml create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Factory/AwareTrait.php create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/FactoryInterface.php create mode 100644 src/Process/Pool/Logger/Message/Metadata/HostInterface.php diff --git a/src/Process/Pool/Logger/Message/Metadata.php b/src/Process/Pool/Logger/Message/Metadata.php index b215e1f3..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,7 +12,7 @@ class Metadata implements MetadataInterface protected $job; /** @var SerializableProcessInterface */ protected $process; - /** @var */ + /** @var HostInterface */ protected $host; public function getJob() : JobInterface @@ -69,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..bcbf5324 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\Factory\AwareTrait; /** @var ProcessInterface */ protected $process; @@ -35,6 +36,8 @@ public function build() : MetadataInterface $metadata->setJob($this->getJob()); } + $metadata->setHost($this->getProcessPoolLoggerMessageMetadataHostFactory()->create()); + return $metadata; } diff --git a/src/Process/Pool/Logger/Message/Metadata/Builder.yml b/src/Process/Pool/Logger/Message/Metadata/Builder.yml index 35aa2663..3056bb90 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Builder.yml +++ b/src/Process/Pool/Logger/Message/Metadata/Builder.yml @@ -4,3 +4,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']] + - [setProcessPoolLoggerMessageMetadataHostFactory, ['@neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host.factory']] 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..8acc912f --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host.php @@ -0,0 +1,71 @@ +host_name = gethostname(); + + return $this->host_name; + } + + public function getLoadAverage() : float + { + $this->load_average = (float)current(sys_getloadavg()); + + return $this->load_average; + } + + public function getMemoryUsageBytes() : int + { + $this->memory_usage_bytes = memory_get_usage(); + + return $this->memory_usage_bytes; + } + + public function getPeakMemoryUsageBytes() : int + { + $this->peak_memory_usage_bytes = memory_get_peak_usage(); + + return $this->peak_memory_usage_bytes; + } + + public function getMemoryLimitBytes() : int + { + $this->memory_limit_bytes = $mem_limit = $this->dataUnitToBytes(ini_get('memory_limit')); + return $this->memory_limit_bytes; + } + + public function jsonSerialize() + { + $this->getHostName(); + $this->getLoadAverage(); + $this->getMemoryUsageBytes(); + $this->getPeakMemoryUsageBytes(); + $this->getMemoryLimitBytes(); + + return get_object_vars($this); + } + + /* converts a number with byte unit (B / K / M / G) into an integer */ + protected function dataUnitToBytes($s) + { + return (int)preg_replace_callback('/(\-?\d+)(.?)/', function ($m) { + return $m[1] * pow(1024, strpos('BKMG', $m[2])); + }, strtoupper($s)); + } +} 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..abcb3100 --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host.yml @@ -0,0 +1,3 @@ +services: + neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host: + class: Neighborhoods\Kojo\Process\Pool\Logger\Message\Metadata\Host 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/Host/Factory.php b/src/Process/Pool/Logger/Message/Metadata/Host/Factory.php new file mode 100644 index 00000000..d6492c77 --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host/Factory.php @@ -0,0 +1,17 @@ +getProcessPoolLoggerMessageMetadataHost(); + } +} diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Factory.yml b/src/Process/Pool/Logger/Message/Metadata/Host/Factory.yml new file mode 100644 index 00000000..96b2e27d --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host/Factory.yml @@ -0,0 +1,5 @@ +services: + neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host.factory: + class: Neighborhoods\Kojo\Process\Pool\Logger\Message\Metadata\Host\Factory + calls: + - [setProcessPoolLoggerMessageMetadataHost, ['@neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host']] diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Factory/AwareTrait.php b/src/Process/Pool/Logger/Message/Metadata/Host/Factory/AwareTrait.php new file mode 100644 index 00000000..02a6f80f --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host/Factory/AwareTrait.php @@ -0,0 +1,54 @@ +hasProcessPoolLoggerMessageMetadataHostFactory()) { + throw new \LogicException( + 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory is already set.' + ); + } + $this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory = $ProcessPoolLoggerMessageMetadataHostFactory; + + return $this; + } + + protected function getProcessPoolLoggerMessageMetadataHostFactory() : FactoryInterface + { + if (!$this->hasProcessPoolLoggerMessageMetadataHostFactory()) { + throw new \LogicException( + 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory is not set.' + ); + } + + return $this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory; + } + + protected function hasProcessPoolLoggerMessageMetadataHostFactory() : bool + { + return isset($this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory); + } + + protected function unsetProcessPoolLoggerMessageMetadataHostFactory() : self + { + if (!$this->hasProcessPoolLoggerMessageMetadataHostFactory()) { + throw new \LogicException( + 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory is not set.' + ); + } + unset($this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory); + + return $this; + } +} diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/FactoryInterface.php b/src/Process/Pool/Logger/Message/Metadata/Host/FactoryInterface.php new file mode 100644 index 00000000..21d8fb13 --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host/FactoryInterface.php @@ -0,0 +1,12 @@ + Date: Thu, 19 Sep 2019 08:29:09 -0500 Subject: [PATCH 02/11] move the magic of populating Host object vars into a builder instead of jsonSerialize --- .../Pool/Logger/Message/Metadata/Builder.php | 4 +- .../Pool/Logger/Message/Metadata/Builder.yml | 2 +- .../Pool/Logger/Message/Metadata/Host.php | 6 --- .../Logger/Message/Metadata/Host/Builder.php | 24 +++++++++ .../Logger/Message/Metadata/Host/Builder.yml | 5 ++ .../Metadata/Host/Builder/AwareTrait.php | 54 +++++++++++++++++++ .../Metadata/Host/BuilderInterface.php | 11 ++++ .../Logger/Message/Metadata/HostInterface.php | 9 ++++ 8 files changed, 106 insertions(+), 9 deletions(-) create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Builder.php create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Builder.yml create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Builder/AwareTrait.php create mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/BuilderInterface.php diff --git a/src/Process/Pool/Logger/Message/Metadata/Builder.php b/src/Process/Pool/Logger/Message/Metadata/Builder.php index bcbf5324..bdabe424 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Builder.php +++ b/src/Process/Pool/Logger/Message/Metadata/Builder.php @@ -12,7 +12,7 @@ class Builder implements BuilderInterface { use Factory\AwareTrait; use SerializableProcess\FromProcessModel\Builder\Factory\AwareTrait; - use Host\Factory\AwareTrait; + use Host\Builder\AwareTrait; /** @var ProcessInterface */ protected $process; @@ -36,7 +36,7 @@ public function build() : MetadataInterface $metadata->setJob($this->getJob()); } - $metadata->setHost($this->getProcessPoolLoggerMessageMetadataHostFactory()->create()); + $metadata->setHost($this->getProcessPoolLoggerMessageMetadataHostBuilder()->build()); return $metadata; } diff --git a/src/Process/Pool/Logger/Message/Metadata/Builder.yml b/src/Process/Pool/Logger/Message/Metadata/Builder.yml index 3056bb90..dcd74624 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Builder.yml +++ b/src/Process/Pool/Logger/Message/Metadata/Builder.yml @@ -4,4 +4,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']] - - [setProcessPoolLoggerMessageMetadataHostFactory, ['@neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host.factory']] + - [setProcessPoolLoggerMessageMetadataHostBuilder, ['@neighborhoods.kojo.process.pool.logger.message.metadata.host.builder']] diff --git a/src/Process/Pool/Logger/Message/Metadata/Host.php b/src/Process/Pool/Logger/Message/Metadata/Host.php index 8acc912f..2a788beb 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Host.php +++ b/src/Process/Pool/Logger/Message/Metadata/Host.php @@ -52,12 +52,6 @@ public function getMemoryLimitBytes() : int public function jsonSerialize() { - $this->getHostName(); - $this->getLoadAverage(); - $this->getMemoryUsageBytes(); - $this->getPeakMemoryUsageBytes(); - $this->getMemoryLimitBytes(); - return get_object_vars($this); } diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Builder.php b/src/Process/Pool/Logger/Message/Metadata/Host/Builder.php new file mode 100644 index 00000000..5acdf7a0 --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host/Builder.php @@ -0,0 +1,24 @@ +getProcessPoolLoggerMessageMetadataHostFactory()->create(); + + $host->getHostName(); + $host->getLoadAverage(); + $host->getMemoryUsageBytes(); + $host->getPeakMemoryUsageBytes(); + $host->getMemoryLimitBytes(); + + return $host; + } +} diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Builder.yml b/src/Process/Pool/Logger/Message/Metadata/Host/Builder.yml new file mode 100644 index 00000000..54318a37 --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host/Builder.yml @@ -0,0 +1,5 @@ +services: + neighborhoods.kojo.process.pool.logger.message.metadata.host.builder: + class: Neighborhoods\Kojo\Process\Pool\Logger\Message\Metadata\Host\Builder + calls: + - [setProcessPoolLoggerMessageMetadataHostFactory, ['@neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host.factory']] diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Builder/AwareTrait.php b/src/Process/Pool/Logger/Message/Metadata/Host/Builder/AwareTrait.php new file mode 100644 index 00000000..72b6032e --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host/Builder/AwareTrait.php @@ -0,0 +1,54 @@ +hasProcessPoolLoggerMessageMetadataHostBuilder()) { + throw new \LogicException( + 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder is already set.' + ); + } + $this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder = $ProcessPoolLoggerMessageMetadataHostBuilder; + + return $this; + } + + protected function getProcessPoolLoggerMessageMetadataHostBuilder() : BuilderInterface + { + if (!$this->hasProcessPoolLoggerMessageMetadataHostBuilder()) { + throw new \LogicException( + 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder is not set.' + ); + } + + return $this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder; + } + + protected function hasProcessPoolLoggerMessageMetadataHostBuilder() : bool + { + return isset($this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder); + } + + protected function unsetProcessPoolLoggerMessageMetadataHostBuilder() : self + { + if (!$this->hasProcessPoolLoggerMessageMetadataHostBuilder()) { + throw new \LogicException( + 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder is not set.' + ); + } + unset($this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder); + + return $this; + } +} diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/BuilderInterface.php b/src/Process/Pool/Logger/Message/Metadata/Host/BuilderInterface.php new file mode 100644 index 00000000..cf7d9c00 --- /dev/null +++ b/src/Process/Pool/Logger/Message/Metadata/Host/BuilderInterface.php @@ -0,0 +1,11 @@ + Date: Thu, 19 Sep 2019 08:40:02 -0500 Subject: [PATCH 03/11] move memory info to the process object --- .../Pool/Logger/Message/Metadata/Host.php | 34 ------------------ .../Logger/Message/Metadata/Host/Builder.php | 3 -- .../Logger/Message/Metadata/HostInterface.php | 9 +---- .../Logger/Message/SerializableProcess.php | 36 ++++++++++++++++++- .../FromProcessModel/Builder.php | 3 ++ .../Message/SerializableProcessInterface.php | 6 ++++ 6 files changed, 45 insertions(+), 46 deletions(-) diff --git a/src/Process/Pool/Logger/Message/Metadata/Host.php b/src/Process/Pool/Logger/Message/Metadata/Host.php index 2a788beb..d7235ef3 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Host.php +++ b/src/Process/Pool/Logger/Message/Metadata/Host.php @@ -9,12 +9,6 @@ class Host implements HostInterface protected $host_name; /** @var float */ protected $load_average; - /** @var int */ - protected $memory_usage_bytes; - /** @var int */ - protected $peak_memory_usage_bytes; - /** @var int */ - protected $memory_limit_bytes; public function getHostName() : string { @@ -30,36 +24,8 @@ public function getLoadAverage() : float return $this->load_average; } - public function getMemoryUsageBytes() : int - { - $this->memory_usage_bytes = memory_get_usage(); - - return $this->memory_usage_bytes; - } - - public function getPeakMemoryUsageBytes() : int - { - $this->peak_memory_usage_bytes = memory_get_peak_usage(); - - return $this->peak_memory_usage_bytes; - } - - public function getMemoryLimitBytes() : int - { - $this->memory_limit_bytes = $mem_limit = $this->dataUnitToBytes(ini_get('memory_limit')); - return $this->memory_limit_bytes; - } - public function jsonSerialize() { return get_object_vars($this); } - - /* converts a number with byte unit (B / K / M / G) into an integer */ - protected function dataUnitToBytes($s) - { - return (int)preg_replace_callback('/(\-?\d+)(.?)/', function ($m) { - return $m[1] * pow(1024, strpos('BKMG', $m[2])); - }, strtoupper($s)); - } } diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Builder.php b/src/Process/Pool/Logger/Message/Metadata/Host/Builder.php index 5acdf7a0..63ac9fcb 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Host/Builder.php +++ b/src/Process/Pool/Logger/Message/Metadata/Host/Builder.php @@ -15,9 +15,6 @@ public function build() : HostInterface $host->getHostName(); $host->getLoadAverage(); - $host->getMemoryUsageBytes(); - $host->getPeakMemoryUsageBytes(); - $host->getMemoryLimitBytes(); return $host; } diff --git a/src/Process/Pool/Logger/Message/Metadata/HostInterface.php b/src/Process/Pool/Logger/Message/Metadata/HostInterface.php index ebc18795..c692f950 100644 --- a/src/Process/Pool/Logger/Message/Metadata/HostInterface.php +++ b/src/Process/Pool/Logger/Message/Metadata/HostInterface.php @@ -5,14 +5,7 @@ interface HostInterface extends \JsonSerializable { - - public function getMemoryLimitBytes() : int; - - public function getLoadAverage() : float; - public function getHostName() : string; - public function getMemoryUsageBytes() : int; - - public function getPeakMemoryUsageBytes() : int; + public function getLoadAverage() : float; } diff --git a/src/Process/Pool/Logger/Message/SerializableProcess.php b/src/Process/Pool/Logger/Message/SerializableProcess.php index caafb439..7a458a91 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcess.php +++ b/src/Process/Pool/Logger/Message/SerializableProcess.php @@ -15,6 +15,12 @@ class SerializableProcess implements SerializableProcessInterface protected $uuid; /** @var string */ protected $type_code; + /** @var int */ + protected $memory_usage_bytes; + /** @var int */ + protected $peak_memory_usage_bytes; + /** @var int */ + protected $memory_limit_bytes; public function getProcessId() : int { @@ -116,8 +122,36 @@ public function setTypeCode(string $type_code) : SerializableProcessInterface return $this; } + public function getMemoryUsageBytes() : int + { + $this->memory_usage_bytes = memory_get_usage(); + + return $this->memory_usage_bytes; + } + + public function getPeakMemoryUsageBytes() : int + { + $this->peak_memory_usage_bytes = memory_get_peak_usage(); + + return $this->peak_memory_usage_bytes; + } + + public function getMemoryLimitBytes() : int + { + $this->memory_limit_bytes = $mem_limit = $this->dataUnitToBytes(ini_get('memory_limit')); + return $this->memory_limit_bytes; + } + public function jsonSerialize() { - return get_object_vars($this); + return get_object_vars($this); + } + + /* converts a number with byte unit (B / K / M / G) into an integer */ + protected function dataUnitToBytes($s) + { + return (int)preg_replace_callback('/(\-?\d+)(.?)/', function ($m) { + return $m[1] * pow(1024, strpos('BKMG', $m[2])); + }, strtoupper($s)); } } diff --git a/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php b/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php index e6a97d90..7fc17aae 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php +++ b/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php @@ -21,6 +21,9 @@ public function build() : MessageProcessInterface $process->setPath($this->getProcessModelInterface()->getPath()); $process->setUuid($this->getProcessModelInterface()->getUuid()); $process->setTypeCode($this->getProcessModelInterface()->getTypeCode()); + $process->getMemoryLimitBytes(); + $process->getMemoryUsageBytes(); + $process->getPeakMemoryUsageBytes(); return $process; } diff --git a/src/Process/Pool/Logger/Message/SerializableProcessInterface.php b/src/Process/Pool/Logger/Message/SerializableProcessInterface.php index 8e9a334c..249835c0 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 getPeakMemoryUsageBytes() : int; + + public function getMemoryUsageBytes() : int; + + public function getMemoryLimitBytes() : int; } From e6ab6f10e43482bc2a12696fad542c72a6d5ef3a Mon Sep 17 00:00:00 2001 From: Alex Berryman Date: Thu, 19 Sep 2019 08:47:51 -0500 Subject: [PATCH 04/11] start all memory keys with the word memory --- src/Process/Pool/Logger/Message/SerializableProcess.php | 8 ++++---- .../SerializableProcess/FromProcessModel/Builder.php | 2 +- .../Pool/Logger/Message/SerializableProcessInterface.php | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Process/Pool/Logger/Message/SerializableProcess.php b/src/Process/Pool/Logger/Message/SerializableProcess.php index 7a458a91..567bb971 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcess.php +++ b/src/Process/Pool/Logger/Message/SerializableProcess.php @@ -18,7 +18,7 @@ class SerializableProcess implements SerializableProcessInterface /** @var int */ protected $memory_usage_bytes; /** @var int */ - protected $peak_memory_usage_bytes; + protected $memory_peak_usage_bytes; /** @var int */ protected $memory_limit_bytes; @@ -129,11 +129,11 @@ public function getMemoryUsageBytes() : int return $this->memory_usage_bytes; } - public function getPeakMemoryUsageBytes() : int + public function getMemoryPeakUsageBytes() : int { - $this->peak_memory_usage_bytes = memory_get_peak_usage(); + $this->memory_peak_usage_bytes = memory_get_peak_usage(); - return $this->peak_memory_usage_bytes; + return $this->memory_peak_usage_bytes; } public function getMemoryLimitBytes() : int diff --git a/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php b/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php index 7fc17aae..710a86b3 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php +++ b/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php @@ -23,7 +23,7 @@ public function build() : MessageProcessInterface $process->setTypeCode($this->getProcessModelInterface()->getTypeCode()); $process->getMemoryLimitBytes(); $process->getMemoryUsageBytes(); - $process->getPeakMemoryUsageBytes(); + $process->getMemoryPeakUsageBytes(); return $process; } diff --git a/src/Process/Pool/Logger/Message/SerializableProcessInterface.php b/src/Process/Pool/Logger/Message/SerializableProcessInterface.php index 249835c0..90d0904e 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcessInterface.php +++ b/src/Process/Pool/Logger/Message/SerializableProcessInterface.php @@ -26,7 +26,7 @@ public function getPath() : string; public function setPath(string $path) : SerializableProcessInterface; - public function getPeakMemoryUsageBytes() : int; + public function getMemoryPeakUsageBytes() : int; public function getMemoryUsageBytes() : int; From e091d2ad0f727cb45b479adf310c05e1d7a80f61 Mon Sep 17 00:00:00 2001 From: Alex Berryman Date: Mon, 30 Sep 2019 13:11:30 -0500 Subject: [PATCH 05/11] remove temp var artifact from refactoring --- src/Process/Pool/Logger/Message/SerializableProcess.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Process/Pool/Logger/Message/SerializableProcess.php b/src/Process/Pool/Logger/Message/SerializableProcess.php index 567bb971..2a16ad5e 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcess.php +++ b/src/Process/Pool/Logger/Message/SerializableProcess.php @@ -138,7 +138,7 @@ public function getMemoryPeakUsageBytes() : int public function getMemoryLimitBytes() : int { - $this->memory_limit_bytes = $mem_limit = $this->dataUnitToBytes(ini_get('memory_limit')); + $this->memory_limit_bytes = $this->dataUnitToBytes(ini_get('memory_limit')); return $this->memory_limit_bytes; } From 208dc0298b60e76c0f37a608074eef6df6ba092d Mon Sep 17 00:00:00 2001 From: Alex Berryman Date: Mon, 30 Sep 2019 14:15:40 -0500 Subject: [PATCH 06/11] always access fresh data during serialization --- .../Pool/Logger/Message/SerializableProcess.php | 17 ++++++++--------- .../FromProcessModel/Builder.php | 3 --- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/Process/Pool/Logger/Message/SerializableProcess.php b/src/Process/Pool/Logger/Message/SerializableProcess.php index 2a16ad5e..835b1186 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcess.php +++ b/src/Process/Pool/Logger/Message/SerializableProcess.php @@ -124,27 +124,26 @@ public function setTypeCode(string $type_code) : SerializableProcessInterface public function getMemoryUsageBytes() : int { - $this->memory_usage_bytes = memory_get_usage(); - - return $this->memory_usage_bytes; + return memory_get_usage(); } public function getMemoryPeakUsageBytes() : int { - $this->memory_peak_usage_bytes = memory_get_peak_usage(); - - return $this->memory_peak_usage_bytes; + return memory_get_peak_usage(); } public function getMemoryLimitBytes() : int { - $this->memory_limit_bytes = $this->dataUnitToBytes(ini_get('memory_limit')); - return $this->memory_limit_bytes; + return $this->dataUnitToBytes(ini_get('memory_limit')); } public function jsonSerialize() { - return get_object_vars($this); + $data = get_object_vars($this); + $data['memory_usage_bytes']= $this->getMemoryUsageBytes(); + $data['memory_peak_usage_bytes']= $this->getMemoryPeakUsageBytes(); + $data['memory_limit_bytes']= $this->getMemoryLimitBytes(); + return $data; } /* converts a number with byte unit (B / K / M / G) into an integer */ diff --git a/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php b/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php index 5992778d..15afc3ee 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php +++ b/src/Process/Pool/Logger/Message/SerializableProcess/FromProcessModel/Builder.php @@ -24,9 +24,6 @@ public function build() : MessageProcessInterface $serializableProcess->setPath($processModel->getPath()); $serializableProcess->setUuid($processModel->getUuid()); $serializableProcess->setTypeCode($processModel->getTypeCode()); - $serializableProcess->getMemoryLimitBytes(); - $serializableProcess->getMemoryUsageBytes(); - $serializableProcess->getMemoryPeakUsageBytes(); return $serializableProcess; } From e74b1e81a2e9ca9954a61376bc9e11cb95d666a3 Mon Sep 17 00:00:00 2001 From: Alex Berryman Date: Mon, 30 Sep 2019 14:32:54 -0500 Subject: [PATCH 07/11] extract constants --- .../Pool/Logger/Message/SerializableProcess.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Process/Pool/Logger/Message/SerializableProcess.php b/src/Process/Pool/Logger/Message/SerializableProcess.php index 835b1186..5a15e1f6 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcess.php +++ b/src/Process/Pool/Logger/Message/SerializableProcess.php @@ -5,6 +5,10 @@ class SerializableProcess implements SerializableProcessInterface { + const KEY_MEMORY_USAGE_BYTES = 'memory_usage_bytes'; + const KEY_MEMORY_PEAK_USAGE_BYTES = 'memory_peak_usage_bytes'; + const KEY_MEMORY_LIMIT_BYTES = 'memory_limit_bytes'; + /** @var int */ protected $process_id; /** @var int */ @@ -140,9 +144,9 @@ public function getMemoryLimitBytes() : int public function jsonSerialize() { $data = get_object_vars($this); - $data['memory_usage_bytes']= $this->getMemoryUsageBytes(); - $data['memory_peak_usage_bytes']= $this->getMemoryPeakUsageBytes(); - $data['memory_limit_bytes']= $this->getMemoryLimitBytes(); + $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; } From 6daee3e46b5ad5ced84afc2b9caea138d6fd37fd Mon Sep 17 00:00:00 2001 From: Alex Berryman Date: Mon, 30 Sep 2019 14:58:23 -0500 Subject: [PATCH 08/11] remove Host builder and factory --- .../Pool/Logger/Message/Metadata/Builder.php | 4 +- .../Pool/Logger/Message/Metadata/Builder.yml | 2 +- .../Logger/Message/Metadata/Host/Builder.php | 21 -------- .../Logger/Message/Metadata/Host/Builder.yml | 5 -- .../Metadata/Host/Builder/AwareTrait.php | 54 ------------------- .../Logger/Message/Metadata/Host/Factory.php | 17 ------ .../Logger/Message/Metadata/Host/Factory.yml | 5 -- .../Metadata/Host/Factory/AwareTrait.php | 54 ------------------- .../Metadata/Host/FactoryInterface.php | 12 ----- 9 files changed, 3 insertions(+), 171 deletions(-) delete mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Builder.php delete mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Builder.yml delete mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Builder/AwareTrait.php delete mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Factory.php delete mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Factory.yml delete mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/Factory/AwareTrait.php delete mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/FactoryInterface.php diff --git a/src/Process/Pool/Logger/Message/Metadata/Builder.php b/src/Process/Pool/Logger/Message/Metadata/Builder.php index bdabe424..761b5084 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Builder.php +++ b/src/Process/Pool/Logger/Message/Metadata/Builder.php @@ -12,7 +12,7 @@ class Builder implements BuilderInterface { use Factory\AwareTrait; use SerializableProcess\FromProcessModel\Builder\Factory\AwareTrait; - use Host\Builder\AwareTrait; + use Host\AwareTrait; /** @var ProcessInterface */ protected $process; @@ -36,7 +36,7 @@ public function build() : MetadataInterface $metadata->setJob($this->getJob()); } - $metadata->setHost($this->getProcessPoolLoggerMessageMetadataHostBuilder()->build()); + $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 dcd74624..3aeb0543 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Builder.yml +++ b/src/Process/Pool/Logger/Message/Metadata/Builder.yml @@ -4,4 +4,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']] - - [setProcessPoolLoggerMessageMetadataHostBuilder, ['@neighborhoods.kojo.process.pool.logger.message.metadata.host.builder']] + - [setProcessPoolLoggerMessageMetadataHost, ['@neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host']] diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Builder.php b/src/Process/Pool/Logger/Message/Metadata/Host/Builder.php deleted file mode 100644 index 63ac9fcb..00000000 --- a/src/Process/Pool/Logger/Message/Metadata/Host/Builder.php +++ /dev/null @@ -1,21 +0,0 @@ -getProcessPoolLoggerMessageMetadataHostFactory()->create(); - - $host->getHostName(); - $host->getLoadAverage(); - - return $host; - } -} diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Builder.yml b/src/Process/Pool/Logger/Message/Metadata/Host/Builder.yml deleted file mode 100644 index 54318a37..00000000 --- a/src/Process/Pool/Logger/Message/Metadata/Host/Builder.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - neighborhoods.kojo.process.pool.logger.message.metadata.host.builder: - class: Neighborhoods\Kojo\Process\Pool\Logger\Message\Metadata\Host\Builder - calls: - - [setProcessPoolLoggerMessageMetadataHostFactory, ['@neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host.factory']] diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Builder/AwareTrait.php b/src/Process/Pool/Logger/Message/Metadata/Host/Builder/AwareTrait.php deleted file mode 100644 index 72b6032e..00000000 --- a/src/Process/Pool/Logger/Message/Metadata/Host/Builder/AwareTrait.php +++ /dev/null @@ -1,54 +0,0 @@ -hasProcessPoolLoggerMessageMetadataHostBuilder()) { - throw new \LogicException( - 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder is already set.' - ); - } - $this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder = $ProcessPoolLoggerMessageMetadataHostBuilder; - - return $this; - } - - protected function getProcessPoolLoggerMessageMetadataHostBuilder() : BuilderInterface - { - if (!$this->hasProcessPoolLoggerMessageMetadataHostBuilder()) { - throw new \LogicException( - 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder is not set.' - ); - } - - return $this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder; - } - - protected function hasProcessPoolLoggerMessageMetadataHostBuilder() : bool - { - return isset($this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder); - } - - protected function unsetProcessPoolLoggerMessageMetadataHostBuilder() : self - { - if (!$this->hasProcessPoolLoggerMessageMetadataHostBuilder()) { - throw new \LogicException( - 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder is not set.' - ); - } - unset($this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostBuilder); - - return $this; - } -} diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Factory.php b/src/Process/Pool/Logger/Message/Metadata/Host/Factory.php deleted file mode 100644 index d6492c77..00000000 --- a/src/Process/Pool/Logger/Message/Metadata/Host/Factory.php +++ /dev/null @@ -1,17 +0,0 @@ -getProcessPoolLoggerMessageMetadataHost(); - } -} diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Factory.yml b/src/Process/Pool/Logger/Message/Metadata/Host/Factory.yml deleted file mode 100644 index 96b2e27d..00000000 --- a/src/Process/Pool/Logger/Message/Metadata/Host/Factory.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host.factory: - class: Neighborhoods\Kojo\Process\Pool\Logger\Message\Metadata\Host\Factory - calls: - - [setProcessPoolLoggerMessageMetadataHost, ['@neighborhoods.kojo.neighborhoods.kojo.src.process.pool.logger.message.metadata.host']] diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/Factory/AwareTrait.php b/src/Process/Pool/Logger/Message/Metadata/Host/Factory/AwareTrait.php deleted file mode 100644 index 02a6f80f..00000000 --- a/src/Process/Pool/Logger/Message/Metadata/Host/Factory/AwareTrait.php +++ /dev/null @@ -1,54 +0,0 @@ -hasProcessPoolLoggerMessageMetadataHostFactory()) { - throw new \LogicException( - 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory is already set.' - ); - } - $this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory = $ProcessPoolLoggerMessageMetadataHostFactory; - - return $this; - } - - protected function getProcessPoolLoggerMessageMetadataHostFactory() : FactoryInterface - { - if (!$this->hasProcessPoolLoggerMessageMetadataHostFactory()) { - throw new \LogicException( - 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory is not set.' - ); - } - - return $this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory; - } - - protected function hasProcessPoolLoggerMessageMetadataHostFactory() : bool - { - return isset($this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory); - } - - protected function unsetProcessPoolLoggerMessageMetadataHostFactory() : self - { - if (!$this->hasProcessPoolLoggerMessageMetadataHostFactory()) { - throw new \LogicException( - 'NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory is not set.' - ); - } - unset($this->NeighborhoodsKojoProcessPoolLoggerMessageMetadataHostFactory); - - return $this; - } -} diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/FactoryInterface.php b/src/Process/Pool/Logger/Message/Metadata/Host/FactoryInterface.php deleted file mode 100644 index 21d8fb13..00000000 --- a/src/Process/Pool/Logger/Message/Metadata/Host/FactoryInterface.php +++ /dev/null @@ -1,12 +0,0 @@ - Date: Mon, 30 Sep 2019 15:00:35 -0500 Subject: [PATCH 09/11] cast the memory_limit to bytes using a more readable method --- .../Logger/Message/SerializableProcess.php | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Process/Pool/Logger/Message/SerializableProcess.php b/src/Process/Pool/Logger/Message/SerializableProcess.php index 5a15e1f6..8e3ace71 100644 --- a/src/Process/Pool/Logger/Message/SerializableProcess.php +++ b/src/Process/Pool/Logger/Message/SerializableProcess.php @@ -151,10 +151,24 @@ public function jsonSerialize() } /* converts a number with byte unit (B / K / M / G) into an integer */ - protected function dataUnitToBytes($s) + protected function dataUnitToBytes(string $memoryString) : int { - return (int)preg_replace_callback('/(\-?\d+)(.?)/', function ($m) { - return $m[1] * pow(1024, strpos('BKMG', $m[2])); - }, strtoupper($s)); + $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; } } From 3050aa97359a036e7d5458e0096fcbbc82034c55 Mon Sep 17 00:00:00 2001 From: Alex Berryman Date: Mon, 30 Sep 2019 15:04:50 -0500 Subject: [PATCH 10/11] Host data fetched on serialization --- .../Pool/Logger/Message/Metadata/Host.php | 17 ++++++++++------- .../Pool/Logger/Message/Metadata/Host.yml | 1 + 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Process/Pool/Logger/Message/Metadata/Host.php b/src/Process/Pool/Logger/Message/Metadata/Host.php index d7235ef3..cbbd8f45 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Host.php +++ b/src/Process/Pool/Logger/Message/Metadata/Host.php @@ -5,6 +5,9 @@ class Host implements HostInterface { + const KEY_HOST_NAME = 'host_name'; + const KEY_LOAD_AVERAGE = 'load_average'; + /** @var string */ protected $host_name; /** @var float */ @@ -12,20 +15,20 @@ class Host implements HostInterface public function getHostName() : string { - $this->host_name = gethostname(); - - return $this->host_name; + return gethostname(); } public function getLoadAverage() : float { - $this->load_average = (float)current(sys_getloadavg()); - - return $this->load_average; + return (float)current(sys_getloadavg()); } public function jsonSerialize() { - return get_object_vars($this); + $data = get_object_vars($this); + $data[self::KEY_HOST_NAME] = $this->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 index abcb3100..650226f2 100644 --- a/src/Process/Pool/Logger/Message/Metadata/Host.yml +++ b/src/Process/Pool/Logger/Message/Metadata/Host.yml @@ -1,3 +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 From 2f2f056c5861623312bcb3941e3b8b758784edcc Mon Sep 17 00:00:00 2001 From: Alex Berryman Date: Mon, 30 Sep 2019 15:45:59 -0500 Subject: [PATCH 11/11] remove missed Host\BuilderInterface file --- .../Logger/Message/Metadata/Host/BuilderInterface.php | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 src/Process/Pool/Logger/Message/Metadata/Host/BuilderInterface.php diff --git a/src/Process/Pool/Logger/Message/Metadata/Host/BuilderInterface.php b/src/Process/Pool/Logger/Message/Metadata/Host/BuilderInterface.php deleted file mode 100644 index cf7d9c00..00000000 --- a/src/Process/Pool/Logger/Message/Metadata/Host/BuilderInterface.php +++ /dev/null @@ -1,11 +0,0 @@ -