From 908f5494a1ffd1682413228bbd9f0d0ac94642eb Mon Sep 17 00:00:00 2001 From: Denis Zunke Date: Fri, 17 May 2024 21:51:43 +0200 Subject: [PATCH] Result indexing metrics with group unique identifier --- src/Collector/Collector.php | 3 ++- src/Configuration/ConfigurationFile.php | 7 ++----- src/Result/Group.php | 10 ++++++++-- src/Result/Metric.php | 1 + src/Result/Result.php | 11 +++++++---- tests/Configuration/ConfigurationFileTest.php | 4 ++-- 6 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/Collector/Collector.php b/src/Collector/Collector.php index 67f9c0c..6e82007 100644 --- a/src/Collector/Collector.php +++ b/src/Collector/Collector.php @@ -35,7 +35,7 @@ public function collect(): Result $title = $executingGroup->title; assert($title !== ''); // Ensured by validation of the object - $group = new Group($title); + $group = new Group($executingGroup->identifier, $title); foreach ($executingGroup->metrics as $executingMetric) { $this->runtimeConfiguration->getLogger()->debug( @@ -51,6 +51,7 @@ public function collect(): Result $metricResult = $metricHandler->calculate($event->getOptions()); $group->addMetric(new Metric( + $executingMetric->identifier, $executingMetric->title ?? $metricHandler->getDefaultTitle(), $metricResult, )); diff --git a/src/Configuration/ConfigurationFile.php b/src/Configuration/ConfigurationFile.php index b8ee263..0c41f16 100644 --- a/src/Configuration/ConfigurationFile.php +++ b/src/Configuration/ConfigurationFile.php @@ -97,7 +97,7 @@ private static function buildMetricGroupConfig(array $metricGroupConfig): array $metricGroup[] = new MetricGroup( $groupIdentifier, $options['title'] ?? '', - self::convertToMetricConfig($groupIdentifier, $options['metrics'] ?? []), + self::convertToMetricConfig($options['metrics'] ?? []), ); } @@ -109,7 +109,7 @@ private static function buildMetricGroupConfig(array $metricGroupConfig): array * * @return list */ - private static function convertToMetricConfig(string $groupIdentifier, array $metricConfig): array + private static function convertToMetricConfig(array $metricConfig): array { $metrics = []; foreach ($metricConfig as $identifier => $options) { @@ -123,9 +123,6 @@ private static function convertToMetricConfig(string $groupIdentifier, array $me // Take the metric not from the key but from the option $metric = $options['metric']; unset($options['metric']); - } else { - // Because the name of the metric was utilized as key it is not unique, so combine it with the group - $identifier = $groupIdentifier . '.' . $identifier; } $metrics[] = new Metric($identifier, $metric, $title, $options); diff --git a/src/Result/Group.php b/src/Result/Group.php index 375dc09..1cecc5e 100644 --- a/src/Result/Group.php +++ b/src/Result/Group.php @@ -11,11 +11,17 @@ class Group * @param list $metrics */ public function __construct( + private readonly string $identifier, private readonly string $title, private array $metrics = [], ) { } + public function getIdentifier(): string + { + return $this->identifier; + } + public function getTitle(): string { return $this->title; @@ -32,12 +38,12 @@ public function addMetric(Metric $metric): void $this->metrics[] = $metric; } - /** @return array{title: non-empty-string, metrics: list} */ + /** @return array{title: non-empty-string, metrics: array} */ public function toArray(): array { $metricsAsArray = []; foreach ($this->metrics as $metric) { - $metricsAsArray[] = [ + $metricsAsArray[$metric->identifier] = [ 'title' => $metric->title, 'value' => $metric->value->compute(), ]; diff --git a/src/Result/Metric.php b/src/Result/Metric.php index 99c786b..1906ebc 100644 --- a/src/Result/Metric.php +++ b/src/Result/Metric.php @@ -9,6 +9,7 @@ class Metric { public function __construct( + public readonly string $identifier, public readonly string $title, public readonly Value $value, ) { diff --git a/src/Result/Result.php b/src/Result/Result.php index 627e881..2e8f25d 100644 --- a/src/Result/Result.php +++ b/src/Result/Result.php @@ -37,10 +37,13 @@ public function addGroup(Group $group): void /** * @return array{ * createdAt: non-falsy-string, - * groups: list - * }> + * metrics: array + * } + * > * } */ public function toArray(): array @@ -51,7 +54,7 @@ public function toArray(): array ]; foreach ($this->groups as $group) { - $asArray['groups'][] = $group->toArray(); + $asArray['groups'][$group->getIdentifier()] = $group->toArray(); } return $asArray; diff --git a/tests/Configuration/ConfigurationFileTest.php b/tests/Configuration/ConfigurationFileTest.php index cc39e0a..b5c0607 100644 --- a/tests/Configuration/ConfigurationFileTest.php +++ b/tests/Configuration/ConfigurationFileTest.php @@ -79,13 +79,13 @@ public function testThatCreatingWithMetricGroupsIsValid(): void self::assertCount(3, $configurationFile->metricGroups[0]->metrics); // The "baz" metric - self::assertSame('foo.baz', $configurationFile->metricGroups[0]->metrics[0]->identifier); + self::assertSame('baz', $configurationFile->metricGroups[0]->metrics[0]->identifier); self::assertSame('baz', $configurationFile->metricGroups[0]->metrics[0]->metric); self::assertSame('foo_baz', $configurationFile->metricGroups[0]->metrics[0]->title); self::assertSame(['foo' => 'bar'], $configurationFile->metricGroups[0]->metrics[0]->options); // The "quo" metric - self::assertSame('foo.quo', $configurationFile->metricGroups[0]->metrics[1]->identifier); + self::assertSame('quo', $configurationFile->metricGroups[0]->metrics[1]->identifier); self::assertSame('quo', $configurationFile->metricGroups[0]->metrics[1]->metric); self::assertNull($configurationFile->metricGroups[0]->metrics[1]->title); self::assertSame(['foo' => 'baz'], $configurationFile->metricGroups[0]->metrics[1]->options);