diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 7fb4e2ea6b0..057a7e57772 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -1950,8 +1950,7 @@ return array( 'OC\\OpenMetrics\\ExporterManager' => $baseDir . '/lib/private/OpenMetrics/ExporterManager.php', 'OC\\OpenMetrics\\Exporters\\ActiveSessions' => $baseDir . '/lib/private/OpenMetrics/Exporters/ActiveSessions.php', 'OC\\OpenMetrics\\Exporters\\ActiveUsers' => $baseDir . '/lib/private/OpenMetrics/Exporters/ActiveUsers.php', - 'OC\\OpenMetrics\\Exporters\\AppsCount' => $baseDir . '/lib/private/OpenMetrics/Exporters/AppsCount.php', - 'OC\\OpenMetrics\\Exporters\\AppsInfo' => $baseDir . '/lib/private/OpenMetrics/Exporters/AppsInfo.php', + 'OC\\OpenMetrics\\Exporters\\AppEnabled' => $baseDir . '/lib/private/OpenMetrics/Exporters/AppEnabled.php', 'OC\\OpenMetrics\\Exporters\\Cached' => $baseDir . '/lib/private/OpenMetrics/Exporters/Cached.php', 'OC\\OpenMetrics\\Exporters\\FilesByType' => $baseDir . '/lib/private/OpenMetrics/Exporters/FilesByType.php', 'OC\\OpenMetrics\\Exporters\\InstanceInfo' => $baseDir . '/lib/private/OpenMetrics/Exporters/InstanceInfo.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 31ccabdeab4..2e7a0d8c040 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -1991,8 +1991,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'OC\\OpenMetrics\\ExporterManager' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/ExporterManager.php', 'OC\\OpenMetrics\\Exporters\\ActiveSessions' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/ActiveSessions.php', 'OC\\OpenMetrics\\Exporters\\ActiveUsers' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/ActiveUsers.php', - 'OC\\OpenMetrics\\Exporters\\AppsCount' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/AppsCount.php', - 'OC\\OpenMetrics\\Exporters\\AppsInfo' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/AppsInfo.php', + 'OC\\OpenMetrics\\Exporters\\AppEnabled' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/AppEnabled.php', 'OC\\OpenMetrics\\Exporters\\Cached' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/Cached.php', 'OC\\OpenMetrics\\Exporters\\FilesByType' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/FilesByType.php', 'OC\\OpenMetrics\\Exporters\\InstanceInfo' => __DIR__ . '/../../..' . '/lib/private/OpenMetrics/Exporters/InstanceInfo.php', diff --git a/lib/private/OpenMetrics/ExporterManager.php b/lib/private/OpenMetrics/ExporterManager.php index 0b984fb382e..38984a173a4 100644 --- a/lib/private/OpenMetrics/ExporterManager.php +++ b/lib/private/OpenMetrics/ExporterManager.php @@ -12,8 +12,7 @@ namespace OC\OpenMetrics; use Generator; use OC\OpenMetrics\Exporters\ActiveSessions; use OC\OpenMetrics\Exporters\ActiveUsers; -use OC\OpenMetrics\Exporters\AppsCount; -use OC\OpenMetrics\Exporters\AppsInfo; +use OC\OpenMetrics\Exporters\AppEnabled; use OC\OpenMetrics\Exporters\FilesByType; use OC\OpenMetrics\Exporters\InstanceInfo; use OC\OpenMetrics\Exporters\LogLevel; @@ -44,8 +43,7 @@ class ExporterManager { $exporters = [ // Basic exporters InstanceInfo::class, - AppsInfo::class, - AppsCount::class, + AppEnabled::class, Maintenance::class, LogLevel::class, diff --git a/lib/private/OpenMetrics/Exporters/AppsInfo.php b/lib/private/OpenMetrics/Exporters/AppEnabled.php similarity index 60% rename from lib/private/OpenMetrics/Exporters/AppsInfo.php rename to lib/private/OpenMetrics/Exporters/AppEnabled.php index 0910007c10a..cc4a84f4266 100644 --- a/lib/private/OpenMetrics/Exporters/AppsInfo.php +++ b/lib/private/OpenMetrics/Exporters/AppEnabled.php @@ -17,9 +17,9 @@ use OCP\OpenMetrics\MetricType; use Override; /** - * Export information about enabled applications + * Export information about installed applications */ -class AppsInfo implements IMetricFamily { +class AppEnabled implements IMetricFamily { public function __construct( private IAppManager $appManager, ) { @@ -27,12 +27,12 @@ class AppsInfo implements IMetricFamily { #[Override] public function name(): string { - return 'apps_info'; + return 'app_enabled'; } #[Override] public function type(): MetricType { - return MetricType::info; + return MetricType::gauge; } #[Override] @@ -42,15 +42,15 @@ class AppsInfo implements IMetricFamily { #[Override] public function help(): string { - return 'Enabled applications in Nextcloud'; + return 'Information about the installed Nextcloud applications'; } #[Override] public function metrics(): Generator { $apps = []; - foreach ($this->appManager->getAppInstalledVersions(true) as $appId => $version) { - $apps[str_replace('-', '_', $appId)] = $version; + $enabledApps = $this->appManager->getEnabledApps(); + foreach ($this->appManager->getAppInstalledVersions(false) as $appId => $version) { + yield new Metric(in_array($appId, $enabledApps, true) ? 1 : 0, ['app_id' => $appId, 'version' => $version]); } - yield new Metric(1, $apps, time()); } } diff --git a/lib/private/OpenMetrics/Exporters/AppsCount.php b/lib/private/OpenMetrics/Exporters/AppsCount.php deleted file mode 100644 index f011bea6956..00000000000 --- a/lib/private/OpenMetrics/Exporters/AppsCount.php +++ /dev/null @@ -1,62 +0,0 @@ -appManager->getAppInstalledVersions(false)); - $enabledAppsCount = count($this->appManager->getEnabledApps()); - $disabledAppsCount = $installedAppsCount - $enabledAppsCount; - yield new Metric( - $disabledAppsCount, - ['status' => 'disabled'], - ); - yield new Metric( - $enabledAppsCount, - ['status' => 'enabled'], - ); - } -} diff --git a/tests/lib/OpenMetrics/Exporters/AppEnabledTest.php b/tests/lib/OpenMetrics/Exporters/AppEnabledTest.php new file mode 100644 index 00000000000..3dba47768f6 --- /dev/null +++ b/tests/lib/OpenMetrics/Exporters/AppEnabledTest.php @@ -0,0 +1,52 @@ + '0.1.2', + 'appB' => '1.2.3 beta 4', + 'appC' => '6.2.1', + 'appD' => '3.141.5', + ]; + private array $installedAppsList = [ + 'appA', 'appB', 'appD' + ]; + + protected function getExporter():IMetricFamily { + $this->appManager = $this->createMock(IAppManager::class); + $this->appManager->method('getAppInstalledVersions') + ->with(false) + ->willReturn($this->appList); + $this->appManager->method('getEnabledApps') + ->willReturn($this->installedAppsList); + + return new AppEnabled($this->appManager); + } + + public function testMetrics(): void { + $this->assertCount(4, $this->metrics); + foreach ($this->appList as $appId => $appVersion) { + $metricForApp = array_find($this->metrics, function (Metric $metric) use ($appId) { + return $metric->label('app_id') === $appId; + }); + + $expectedMetricValue = in_array($appId, $this->installedAppsList) ? 1 : 0; + $this->assertEquals($expectedMetricValue, $metricForApp->value); + $this->assertSame(['app_id' => $appId, 'version' => $appVersion], $metricForApp->labels); + } + } +} diff --git a/tests/lib/OpenMetrics/Exporters/AppsCountTest.php b/tests/lib/OpenMetrics/Exporters/AppsCountTest.php deleted file mode 100644 index c1617e1ba1d..00000000000 --- a/tests/lib/OpenMetrics/Exporters/AppsCountTest.php +++ /dev/null @@ -1,38 +0,0 @@ -appManager = $this->createMock(IAppManager::class); - $this->appManager->method('getAppInstalledVersions') - ->with(false) - ->willReturn(['app1', 'app2', 'app3', 'app4', 'app5']); - $this->appManager->method('getEnabledApps') - ->willReturn(['app1', 'app2', 'app3']); - return new AppsCount($this->appManager); - } - - public function testMetrics(): void { - foreach ($this->metrics as $metric) { - $expectedValue = match ($metric->label('status')) { - 'disabled' => 2, - 'enabled' => 3, - }; - $this->assertEquals($expectedValue, $metric->value); - } - } -} diff --git a/tests/lib/OpenMetrics/Exporters/AppsInfoTest.php b/tests/lib/OpenMetrics/Exporters/AppsInfoTest.php deleted file mode 100644 index 5baa85af3f9..00000000000 --- a/tests/lib/OpenMetrics/Exporters/AppsInfoTest.php +++ /dev/null @@ -1,37 +0,0 @@ - '0.1.2', - 'appB' => '1.2.3 beta 4', - ]; - - protected function getExporter():IMetricFamily { - $this->appManager = $this->createMock(IAppManager::class); - $this->appManager->method('getAppInstalledVersions') - ->with(true) - ->willReturn($this->appList); - - return new AppsInfo($this->appManager); - } - - public function testMetrics(): void { - $this->assertCount(1, $this->metrics); - $metric = array_pop($this->metrics); - $this->assertSame($this->appList, $metric->labels); - } -}