diff --git a/myconext-server/src/main/java/myconext/api/MetricsController.java b/myconext-server/src/main/java/myconext/api/MetricsController.java index 035fddfa..bb393691 100644 --- a/myconext-server/src/main/java/myconext/api/MetricsController.java +++ b/myconext-server/src/main/java/myconext/api/MetricsController.java @@ -37,6 +37,11 @@ public MetricsController(UserRepository userRepository, .description("Used services count") .register(meterRegistry); + Gauge.builder("total_external_linked_account_count", + () -> metricsRepository.countTotalExternalLinkedAccounts()) + .description("Total external linked account count") + .register(meterRegistry); + Stream.of(IdpScoping.values()) .forEach(idpScoping -> Gauge .builder("external_linked_account_" + idpScoping.name(), diff --git a/myconext-server/src/main/java/myconext/repository/MetricsRepository.java b/myconext-server/src/main/java/myconext/repository/MetricsRepository.java index ce8c6ec6..629c9925 100644 --- a/myconext-server/src/main/java/myconext/repository/MetricsRepository.java +++ b/myconext-server/src/main/java/myconext/repository/MetricsRepository.java @@ -41,6 +41,14 @@ public Integer countTotalExternalLinkedAccountsByType(IdpScoping idpScoping) { ), "countExternalLinkedAccounts"); } + public Integer countTotalExternalLinkedAccounts() { + return doInCollection("users", + List.of( + "{ \"$unwind\": \"$externalLinkedAccounts\" }", + "{ \"$count\": \"totalExternalLinkedAccounts\" }" + ), "totalExternalLinkedAccounts"); + } + public Integer countTotalUsedServices() { return doInCollection("users", List.of( diff --git a/myconext-server/src/test/java/myconext/api/MetricsControllerTest.java b/myconext-server/src/test/java/myconext/api/MetricsControllerTest.java index 9e7f0345..1da5970f 100644 --- a/myconext-server/src/test/java/myconext/api/MetricsControllerTest.java +++ b/myconext-server/src/test/java/myconext/api/MetricsControllerTest.java @@ -33,7 +33,7 @@ void prometheus() throws IOException { String metrics = IOUtils.toString(inputStream, Charset.defaultCharset()); - List.of("user_count", "linked_account_count", "app_registration_count", "used_services_count") + List.of("user_count", "linked_account_count", "app_registration_count", "used_services_count", "total_external_linked_account_count") .forEach(s -> assertTrue(metrics.contains(s))); Stream.of(IdpScoping.values()).forEach(idpScoping -> assertTrue(metrics.contains("external_linked_account_" + idpScoping.name()))); diff --git a/myconext-server/src/test/java/myconext/repository/MetricsRepositoryTest.java b/myconext-server/src/test/java/myconext/repository/MetricsRepositoryTest.java index 0c08d7ba..a954b391 100644 --- a/myconext-server/src/test/java/myconext/repository/MetricsRepositoryTest.java +++ b/myconext-server/src/test/java/myconext/repository/MetricsRepositoryTest.java @@ -18,6 +18,8 @@ void getTotalLinkedAccountCount() { assertEquals(2, totalLinkedAccountCount); Integer idinExternalAccounts = metricsRepository.countTotalExternalLinkedAccountsByType(IdpScoping.idin); assertEquals(0, idinExternalAccounts); + Integer totalExternalLinkedAccounts = metricsRepository.countTotalExternalLinkedAccounts(); + assertEquals(0, totalExternalLinkedAccounts); Integer countTotalUsedServices = metricsRepository.countTotalUsedServices(); assertEquals(2, countTotalUsedServices); }