Skip to content

Commit 5a728a4

Browse files
authored
Merge pull request #59720 from nextcloud/feature/59718/appinfo-metrics
feat(openmetrics): expose app information per-app
2 parents 63a1a08 + 3183aa0 commit 5a728a4

8 files changed

Lines changed: 64 additions & 153 deletions

File tree

lib/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1950,8 +1950,7 @@
19501950
'OC\\OpenMetrics\\ExporterManager' => $baseDir . '/lib/private/OpenMetrics/ExporterManager.php',
19511951
'OC\\OpenMetrics\\Exporters\\ActiveSessions' => $baseDir . '/lib/private/OpenMetrics/Exporters/ActiveSessions.php',
19521952
'OC\\OpenMetrics\\Exporters\\ActiveUsers' => $baseDir . '/lib/private/OpenMetrics/Exporters/ActiveUsers.php',
1953-
'OC\\OpenMetrics\\Exporters\\AppsCount' => $baseDir . '/lib/private/OpenMetrics/Exporters/AppsCount.php',
1954-
'OC\\OpenMetrics\\Exporters\\AppsInfo' => $baseDir . '/lib/private/OpenMetrics/Exporters/AppsInfo.php',
1953+
'OC\\OpenMetrics\\Exporters\\AppEnabled' => $baseDir . '/lib/private/OpenMetrics/Exporters/AppEnabled.php',
19551954
'OC\\OpenMetrics\\Exporters\\Cached' => $baseDir . '/lib/private/OpenMetrics/Exporters/Cached.php',
19561955
'OC\\OpenMetrics\\Exporters\\FilesByType' => $baseDir . '/lib/private/OpenMetrics/Exporters/FilesByType.php',
19571956
'OC\\OpenMetrics\\Exporters\\InstanceInfo' => $baseDir . '/lib/private/OpenMetrics/Exporters/InstanceInfo.php',

lib/composer/composer/autoload_static.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1991,8 +1991,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
19911991
'OC\\OpenMetrics\\ExporterManager' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/ExporterManager.php',
19921992
'OC\\OpenMetrics\\Exporters\\ActiveSessions' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/ActiveSessions.php',
19931993
'OC\\OpenMetrics\\Exporters\\ActiveUsers' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/ActiveUsers.php',
1994-
'OC\\OpenMetrics\\Exporters\\AppsCount' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/AppsCount.php',
1995-
'OC\\OpenMetrics\\Exporters\\AppsInfo' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/AppsInfo.php',
1994+
'OC\\OpenMetrics\\Exporters\\AppEnabled' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/AppEnabled.php',
19961995
'OC\\OpenMetrics\\Exporters\\Cached' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/Cached.php',
19971996
'OC\\OpenMetrics\\Exporters\\FilesByType' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/FilesByType.php',
19981997
'OC\\OpenMetrics\\Exporters\\InstanceInfo' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/InstanceInfo.php',

lib/private/OpenMetrics/ExporterManager.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
use Generator;
1313
use OC\OpenMetrics\Exporters\ActiveSessions;
1414
use OC\OpenMetrics\Exporters\ActiveUsers;
15-
use OC\OpenMetrics\Exporters\AppsCount;
16-
use OC\OpenMetrics\Exporters\AppsInfo;
15+
use OC\OpenMetrics\Exporters\AppEnabled;
1716
use OC\OpenMetrics\Exporters\FilesByType;
1817
use OC\OpenMetrics\Exporters\InstanceInfo;
1918
use OC\OpenMetrics\Exporters\LogLevel;
@@ -44,8 +43,7 @@ public function export(): Generator {
4443
$exporters = [
4544
// Basic exporters
4645
InstanceInfo::class,
47-
AppsInfo::class,
48-
AppsCount::class,
46+
AppEnabled::class,
4947
Maintenance::class,
5048
LogLevel::class,
5149

lib/private/OpenMetrics/Exporters/AppsInfo.php renamed to lib/private/OpenMetrics/Exporters/AppEnabled.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,22 @@
1717
use Override;
1818

1919
/**
20-
* Export information about enabled applications
20+
* Export information about installed applications
2121
*/
22-
class AppsInfo implements IMetricFamily {
22+
class AppEnabled implements IMetricFamily {
2323
public function __construct(
2424
private IAppManager $appManager,
2525
) {
2626
}
2727

2828
#[Override]
2929
public function name(): string {
30-
return 'apps_info';
30+
return 'app_enabled';
3131
}
3232

3333
#[Override]
3434
public function type(): MetricType {
35-
return MetricType::info;
35+
return MetricType::gauge;
3636
}
3737

3838
#[Override]
@@ -42,15 +42,15 @@ public function unit(): string {
4242

4343
#[Override]
4444
public function help(): string {
45-
return 'Enabled applications in Nextcloud';
45+
return 'Information about the installed Nextcloud applications';
4646
}
4747

4848
#[Override]
4949
public function metrics(): Generator {
5050
$apps = [];
51-
foreach ($this->appManager->getAppInstalledVersions(true) as $appId => $version) {
52-
$apps[str_replace('-', '_', $appId)] = $version;
51+
$enabledApps = $this->appManager->getEnabledApps();
52+
foreach ($this->appManager->getAppInstalledVersions(false) as $appId => $version) {
53+
yield new Metric(in_array($appId, $enabledApps, true) ? 1 : 0, ['app_id' => $appId, 'version' => $version]);
5354
}
54-
yield new Metric(1, $apps, time());
5555
}
5656
}

lib/private/OpenMetrics/Exporters/AppsCount.php

Lines changed: 0 additions & 62 deletions
This file was deleted.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
10+
namespace Test\OpenMetrics\Exporters;
11+
12+
use OC\OpenMetrics\Exporters\AppEnabled;
13+
use OCP\App\IAppManager;
14+
use OCP\OpenMetrics\IMetricFamily;
15+
use OCP\OpenMetrics\Metric;
16+
17+
class AppEnabledTest extends ExporterTestCase {
18+
private IAppManager $appManager;
19+
private array $appList = [
20+
'appA' => '0.1.2',
21+
'appB' => '1.2.3 beta 4',
22+
'appC' => '6.2.1',
23+
'appD' => '3.141.5',
24+
];
25+
private array $installedAppsList = [
26+
'appA', 'appB', 'appD'
27+
];
28+
29+
protected function getExporter():IMetricFamily {
30+
$this->appManager = $this->createMock(IAppManager::class);
31+
$this->appManager->method('getAppInstalledVersions')
32+
->with(false)
33+
->willReturn($this->appList);
34+
$this->appManager->method('getEnabledApps')
35+
->willReturn($this->installedAppsList);
36+
37+
return new AppEnabled($this->appManager);
38+
}
39+
40+
public function testMetrics(): void {
41+
$this->assertCount(4, $this->metrics);
42+
foreach ($this->appList as $appId => $appVersion) {
43+
$metricForApp = array_find($this->metrics, function (Metric $metric) use ($appId) {
44+
return $metric->label('app_id') === $appId;
45+
});
46+
47+
$expectedMetricValue = in_array($appId, $this->installedAppsList) ? 1 : 0;
48+
$this->assertEquals($expectedMetricValue, $metricForApp->value);
49+
$this->assertSame(['app_id' => $appId, 'version' => $appVersion], $metricForApp->labels);
50+
}
51+
}
52+
}

tests/lib/OpenMetrics/Exporters/AppsCountTest.php

Lines changed: 0 additions & 38 deletions
This file was deleted.

tests/lib/OpenMetrics/Exporters/AppsInfoTest.php

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)