Skip to content

Commit

Permalink
Result indexing metrics with group unique identifier
Browse files Browse the repository at this point in the history
  • Loading branch information
DZunke committed May 17, 2024
1 parent 7b65a93 commit 908f549
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 14 deletions.
3 changes: 2 additions & 1 deletion src/Collector/Collector.php
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -51,6 +51,7 @@ public function collect(): Result
$metricResult = $metricHandler->calculate($event->getOptions());

$group->addMetric(new Metric(
$executingMetric->identifier,
$executingMetric->title ?? $metricHandler->getDefaultTitle(),
$metricResult,
));
Expand Down
7 changes: 2 additions & 5 deletions src/Configuration/ConfigurationFile.php
Original file line number Diff line number Diff line change
Expand Up @@ -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'] ?? []),
);
}

Expand All @@ -109,7 +109,7 @@ private static function buildMetricGroupConfig(array $metricGroupConfig): array
*
* @return list<Metric>
*/
private static function convertToMetricConfig(string $groupIdentifier, array $metricConfig): array
private static function convertToMetricConfig(array $metricConfig): array
{
$metrics = [];
foreach ($metricConfig as $identifier => $options) {
Expand All @@ -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);
Expand Down
10 changes: 8 additions & 2 deletions src/Result/Group.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,17 @@ class Group
* @param list<Metric> $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;
Expand All @@ -32,12 +38,12 @@ public function addMetric(Metric $metric): void
$this->metrics[] = $metric;
}

/** @return array{title: non-empty-string, metrics: list<array{title: string, value: mixed}>} */
/** @return array{title: non-empty-string, metrics: array<string, array{title: string, value: mixed}>} */
public function toArray(): array
{
$metricsAsArray = [];
foreach ($this->metrics as $metric) {
$metricsAsArray[] = [
$metricsAsArray[$metric->identifier] = [
'title' => $metric->title,
'value' => $metric->value->compute(),
];
Expand Down
1 change: 1 addition & 0 deletions src/Result/Metric.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
class Metric
{
public function __construct(
public readonly string $identifier,
public readonly string $title,
public readonly Value $value,
) {
Expand Down
11 changes: 7 additions & 4 deletions src/Result/Result.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,13 @@ public function addGroup(Group $group): void
/**
* @return array{
* createdAt: non-falsy-string,
* groups: list<array{
* groups: array<
* string,
* array{
* title: string,
* metrics: list<array{title: string, value: mixed}>
* }>
* metrics: array<string, array{title: string, value: mixed}>
* }
* >
* }
*/
public function toArray(): array
Expand All @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions tests/Configuration/ConfigurationFileTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 908f549

Please sign in to comment.