diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java index a3d7b7f48b1fe458066e5a4a4d1dbef958abaaf7..e81247931d562290a34bad3591988f79de3b61d0 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java @@ -14,6 +14,7 @@ import at.tuwien.service.UserService; import at.tuwien.service.impl.ContainerServiceImpl; import at.tuwien.utils.PrincipalUtil; import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; @@ -54,6 +55,7 @@ public class ContainerEndpoint { @GetMapping @Transactional(readOnly = true) + @Observed(name = "dbr_container_findall") @Operation(summary = "Find all containers") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -76,6 +78,7 @@ public class ContainerEndpoint { @PostMapping @Transactional + @Observed(name = "dbr_container_create") @PreAuthorize("hasAuthority('create-container')") @Operation(summary = "Create container", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { @@ -118,6 +121,7 @@ public class ContainerEndpoint { @GetMapping("/{id}") @Transactional(readOnly = true) + @Observed(name = "dbr_container_find") @Operation(summary = "Find some container") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -153,7 +157,7 @@ public class ContainerEndpoint { @DeleteMapping("/{id}") @Transactional - @Timed(value = "container.delete", description = "Time needed to delete the container") + @Observed(name = "dbr_container_delete") @PreAuthorize("hasAuthority('delete-container')") @Operation(summary = "Delete some container", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java index 925a60168bf8fbea1c0ca933f0efb69129a64abb..bcd669c573f37062f918a69d66e166b16141a220 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java @@ -14,6 +14,7 @@ import at.tuwien.service.*; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; @@ -68,7 +69,7 @@ public class DatabaseEndpoint { @GetMapping @Transactional(readOnly = true) - @Timed(value = "database.list", description = "Time needed to list the databases") + @Observed(name = "dbr_database_findall") @Operation(summary = "List databases") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -100,7 +101,7 @@ public class DatabaseEndpoint { @RequestMapping(method = RequestMethod.HEAD) @Transactional(readOnly = true) - @Timed(value = "database.list", description = "Time needed to count the databases") + @Observed(name = "dbr_database_count") @Operation(summary = "Count databases") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -135,7 +136,7 @@ public class DatabaseEndpoint { @PostMapping @Transactional(rollbackFor = Exception.class) @PreAuthorize("hasAuthority('create-database')") - @Timed(value = "database.create", description = "Time needed to create a database") + @Observed(name = "dbr_database_create") @Operation(summary = "Create database", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { @ApiResponse(responseCode = "201", @@ -205,7 +206,7 @@ public class DatabaseEndpoint { @PutMapping("/{id}/visibility") @Transactional @PreAuthorize("hasAuthority('modify-database-visibility')") - @Timed(value = "database.visibility", description = "Time needed to modify a database visibility") + @Observed(name = "dbr_database_visibility") @Operation(summary = "Update database", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { @ApiResponse(responseCode = "202", @@ -244,7 +245,7 @@ public class DatabaseEndpoint { @PutMapping("/{id}/transfer") @Transactional @PreAuthorize("hasAuthority('modify-database-owner')") - @Timed(value = "database.transfer", description = "Time needed to transfer a database ownership") + @Observed(name = "dbr_database_transfer") @Operation(summary = "Transfer database", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { @ApiResponse(responseCode = "202", @@ -282,7 +283,7 @@ public class DatabaseEndpoint { @GetMapping("/{id}") @Transactional(readOnly = true) - @Timed(value = "database.find", description = "Time needed to find a database") + @Observed(name = "dbr_database_find") @Operation(summary = "Find some database", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -322,7 +323,7 @@ public class DatabaseEndpoint { @DeleteMapping("/{id}") @Transactional(rollbackFor = Exception.class) @PreAuthorize("hasAuthority('delete-database')") - @Timed(value = "database.delete", description = "Time needed to delete a database") + @Observed(name = "dbr_database_delete") @Operation(summary = "Delete some database", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { @ApiResponse(responseCode = "201", diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java index 844667233a8ebe738e0313edacdd1978049c5b93..6c58d8509cfc45bd470addd602a291126110848e 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java @@ -10,6 +10,7 @@ import at.tuwien.service.QueryService; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -45,7 +46,7 @@ public class ExportEndpoint { @GetMapping @Transactional(readOnly = true) - @Timed(value = "table.export", description = "Time needed to export table data") + @Observed(name = "dbr_table_export") @Operation(summary = "Export table", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { @ApiResponse(responseCode = "201", diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java index 8687928087ee52c5bbc4513ed46999286eeacf0e..ef1006ed70994850ee6f8d32fd18b1c54336a09d 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java @@ -15,6 +15,7 @@ import at.tuwien.service.UserService; import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.UserUtil; import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; @@ -58,7 +59,7 @@ public class IdentifierEndpoint { @GetMapping @Transactional(readOnly = true) - @Timed(value = "identifier.list", description = "Time needed to list the identifiers") + @Observed(name = "dbr_identifier_findall") @Operation(summary = "Find identifiers") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -82,7 +83,7 @@ public class IdentifierEndpoint { @PostMapping @Transactional - @Timed(value = "identifier.create", description = "Time needed to create an identifier") + @Observed(name = "dbr_identifier_create") @PreAuthorize("hasAuthority('create-identifier') or hasAuthority('create-foreign-identifier')") @Operation(summary = "Create identifier", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { @@ -153,7 +154,7 @@ public class IdentifierEndpoint { } @GetMapping("/retrieve") - @Timed(value = "identifier.retrieve", description = "Retrieve person or organization metadata from identifier") + @Observed(name = "dbr_identifier_retrieve") @Operation(summary = "Retrieve metadata from identifier") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -162,7 +163,7 @@ public class IdentifierEndpoint { mediaType = "application/json", schema = @Schema(implementation = IdentifierDto.class))}), }) - public ResponseEntity<ExternalMetadataDto> create(@NotNull @Valid @RequestParam String url) + public ResponseEntity<ExternalMetadataDto> retrieve(@NotNull @Valid @RequestParam String url) throws OrcidNotFoundException, RorNotFoundException, RemoteUnavailableException, DoiNotFoundException { return ResponseEntity.ok(metadataService.findByUrl(url)); } diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java index dc5305dd92ab6a36349e22f565138045f94979d2..6b98c6fb38b28f103d9c96495783d437a8c94182 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java @@ -14,6 +14,7 @@ import at.tuwien.mapper.ImageMapper; import at.tuwien.service.impl.ImageServiceImpl; import at.tuwien.utils.PrincipalUtil; import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; @@ -53,7 +54,7 @@ public class ImageEndpoint { @GetMapping @Transactional(readOnly = true) - @Timed(value = "image.list", description = "Time needed to list the container images") + @Observed(name = "dbr_image_findall") @Operation(summary = "Find all images") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -73,7 +74,7 @@ public class ImageEndpoint { @PostMapping @Transactional - @Timed(value = "image.create", description = "Time needed to create a container image") + @Observed(name = "dbr_image_create") @PreAuthorize("hasAuthority('create-image')") @Operation(summary = "Create image", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { @@ -120,7 +121,7 @@ public class ImageEndpoint { @GetMapping("/{id}") @Transactional(readOnly = true) - @Timed(value = "image.find", description = "Time needed to find a container image") + @Observed(name = "dbr_image_find") @Operation(summary = "Find some image") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -145,7 +146,7 @@ public class ImageEndpoint { @PutMapping("/{id}") @Transactional - @Timed(value = "image.update", description = "Time needed to update a container image") + @Observed(name = "dbr_image_update") @PreAuthorize("hasAuthority('modify-image')") @Operation(summary = "Update some image", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { @@ -174,7 +175,7 @@ public class ImageEndpoint { @DeleteMapping("/{id}") @Transactional - @Timed(value = "image.delete", description = "Time needed to delete a container image") + @Observed(name = "dbr_image_delete") @PreAuthorize("hasAuthority('delete-image')") @Operation(summary = "Delete some image", security = @SecurityRequirement(name = "bearerAuth")) @ApiResponses(value = { diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java index 6663d1e89f8f850f99e881159c857d9a8603e65a..c7ad83c5f19ac25bec2cd86bdcbe5a311c0f06c4 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java @@ -4,6 +4,7 @@ import at.tuwien.api.database.LicenseDto; import at.tuwien.mapper.LicenseMapper; import at.tuwien.service.LicenseService; import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; @@ -40,7 +41,7 @@ public class LicenseEndpoint { @GetMapping("/license") @Transactional(readOnly = true) - @Timed(value = "license.list", description = "Time needed to list the licenses") + @Observed(name = "dbr_license_findall") @Operation(summary = "Get all licenses") @ApiResponses(value = { @ApiResponse(responseCode = "200", diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MaintenanceEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MaintenanceEndpoint.java index 3dd488acc8277bdcfa5d60b1011f200f435815c2..b71109d62ba5cd75e113a9f3f6d89677f5bd3ae8 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MaintenanceEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MaintenanceEndpoint.java @@ -7,6 +7,7 @@ import at.tuwien.api.maintenance.BannerMessageUpdateDto; import at.tuwien.exception.BannerMessageNotFoundException; import at.tuwien.mapper.BannerMessageMapper; import at.tuwien.service.BannerMessageService; +import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; @@ -40,6 +41,7 @@ public class MaintenanceEndpoint { } @GetMapping("/message") + @Observed(name = "dbr_maintenance_findall") @Operation(summary = "Find maintenance messages") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -59,6 +61,7 @@ public class MaintenanceEndpoint { } @GetMapping("/message/{id}") + @Observed(name = "dbr_maintenance_find") @Operation(summary = "Find one maintenance message") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -76,6 +79,7 @@ public class MaintenanceEndpoint { } @GetMapping("/message/active") + @Observed(name = "dbr_maintenance_findactive") @Operation(summary = "Find active maintenance messages") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -95,6 +99,7 @@ public class MaintenanceEndpoint { } @PostMapping("/message") + @Observed(name = "dbr_maintenance_create") @Operation(summary = "Create maintenance message") @PreAuthorize("hasAuthority('create-maintenance-message')") @ApiResponses(value = { @@ -113,6 +118,7 @@ public class MaintenanceEndpoint { } @PutMapping("/message/{id}") + @Observed(name = "dbr_maintenance_update") @Operation(summary = "Update maintenance message") @PreAuthorize("hasAuthority('update-maintenance-message')") @ApiResponses(value = { @@ -138,6 +144,7 @@ public class MaintenanceEndpoint { } @DeleteMapping("/message/{id}") + @Observed(name = "dbr_maintenance_delete") @Operation(summary = "Delete maintenance message") @PreAuthorize("hasAuthority('delete-maintenance-message')") @ApiResponses(value = { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java index efbe24aa944480ea5e7b2e715ff3da1c6255e1e8..c468faabb5b1407daf481f01062442baa7f2c340 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java @@ -3,13 +3,11 @@ package at.tuwien.mvc; import at.tuwien.BaseUnitTest; import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockOpensearch; -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseGiveAccessDto; -import at.tuwien.api.database.DatabaseModifyAccessDto; +import at.tuwien.api.container.ContainerCreateRequestDto; +import at.tuwien.api.database.*; import at.tuwien.config.MetricsConfig; -import at.tuwien.endpoints.AccessEndpoint; +import at.tuwien.endpoints.*; import io.micrometer.observation.tck.TestObservationRegistry; -import lombok.SneakyThrows; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -50,6 +48,27 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { @Autowired private AccessEndpoint accessEndpoint; + @Autowired + private ContainerEndpoint containerEndpoint; + + @Autowired + private DatabaseEndpoint databaseEndpoint; + + @Autowired + private ExportEndpoint exportEndpoint; + + @Autowired + private IdentifierEndpoint identifierEndpoint; + + @Autowired + private ImageEndpoint imageEndpoint; + + @Autowired + private LicenseEndpoint licenseEndpoint; + + @Autowired + private MaintenanceEndpoint maintenanceEndpoint; + @TestConfiguration static class ObservationTestConfiguration { @@ -70,7 +89,7 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"create-database-access", "update-database-access", "check-database-access", "delete-database-access"}) - public void prometheusAccessEndpoint_succeeds() throws Exception { + public void prometheusAccessEndpoint_succeeds() { /* mock */ try { @@ -94,10 +113,6 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { /* ignore */ } - - this.mockMvc.perform(get("/actuator/prometheus")) - .andDo(print()) - .andExpect(status().isOk()); /* test */ for (String metric : List.of("dbr_access_give", "dbr_access_modify", "dbr_access_check", "dbr_access_delete")) { assertThat(registry) @@ -105,4 +120,228 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { } } + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"create-container", "delete-container"}) + public void prometheusContainerEndpoint_succeeds() { + + /* mock */ + try { + containerEndpoint.findAll(USER_1_PRINCIPAL, null); + } catch (Exception e) { + /* ignore */ + } + try { + containerEndpoint.create(ContainerCreateRequestDto.builder().name(CONTAINER_1_NAME).imageId(IMAGE_1_ID).build(), USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + try { + containerEndpoint.findById(CONTAINER_1_ID); + } catch (Exception e) { + /* ignore */ + } + try { + containerEndpoint.delete(CONTAINER_1_ID, USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + + /* test */ + for (String metric : List.of("dbr_container_findall", "dbr_container_create", "dbr_container_find", "dbr_container_delete")) { + assertThat(registry) + .hasObservationWithNameEqualTo(metric); + } + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"create-database", "modify-database-visibility", "modify-database-owner", "delete-database"}) + public void prometheusDatabaseEndpoint_succeeds() { + + /* mock */ + try { + databaseEndpoint.list(USER_1_PRINCIPAL, null); + } catch (Exception e) { + /* ignore */ + } + try { + databaseEndpoint.count(USER_1_PRINCIPAL, null); + } catch (Exception e) { + /* ignore */ + } + try { + databaseEndpoint.create(DATABASE_1_CREATE, USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + try { + databaseEndpoint.visibility(DATABASE_1_ID, DatabaseModifyVisibilityDto.builder().isPublic(true).build(), USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + try { + databaseEndpoint.transfer(DATABASE_1_ID, DatabaseTransferDto.builder().username(USER_2_USERNAME).build(), USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + try { + databaseEndpoint.findById(DATABASE_1_ID, USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + try { + databaseEndpoint.delete(DATABASE_1_ID, USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + + /* test */ + for (String metric : List.of("dbr_database_findall", "dbr_database_count", "dbr_database_create", "dbr_database_visibility", "dbr_database_transfer", "dbr_database_find", "dbr_database_delete")) { + assertThat(registry) + .hasObservationWithNameEqualTo(metric); + } + } + + @Test + @WithMockUser(username = USER_1_USERNAME) + public void prometheusExportEndpoint_succeeds() { + + /* mock */ + try { + exportEndpoint.export(DATABASE_1_ID, TABLE_1_ID, null, USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + + /* test */ + for (String metric : List.of("dbr_table_export")) { + assertThat(registry) + .hasObservationWithNameEqualTo(metric); + } + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"create-identifier", "create-foreign-identifier"}) + public void prometheusIdentifierEndpoint_succeeds() { + + /* mock */ + try { + identifierEndpoint.list(DATABASE_1_ID, null, null, IDENTIFIER_1_TYPE_DTO); + } catch (Exception e) { + /* ignore */ + } + try { + identifierEndpoint.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + try { + identifierEndpoint.retrieve(USER_1_ORCID_URL); + } catch (Exception e) { + /* ignore */ + } + + /* test */ + for (String metric : List.of("dbr_identifier_findall", "dbr_identifier_create", "dbr_identifier_retrieve")) { + assertThat(registry) + .hasObservationWithNameEqualTo(metric); + } + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"create-image", "modify-image", "delete-image"}) + public void prometheusImageEndpoint_succeeds() { + + /* mock */ + try { + imageEndpoint.findAll(USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + try { + imageEndpoint.create(IMAGE_1_CREATE_DTO, USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + try { + imageEndpoint.findById(IMAGE_1_ID); + } catch (Exception e) { + /* ignore */ + } + try { + imageEndpoint.update(IMAGE_1_ID, IMAGE_1_CHANGE_DTO, USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + try { + imageEndpoint.delete(IMAGE_1_ID, USER_1_PRINCIPAL); + } catch (Exception e) { + /* ignore */ + } + + /* test */ + for (String metric : List.of("dbr_image_findall", "dbr_image_create", "dbr_image_find", "dbr_image_update", "dbr_image_delete")) { + assertThat(registry) + .hasObservationWithNameEqualTo(metric); + } + } + + @Test + @WithMockUser(username = USER_1_USERNAME) + public void prometheusLicenseEndpoint_succeeds() { + + /* mock */ + try { + licenseEndpoint.list(); + } catch (Exception e) { + /* ignore */ + } + + /* test */ + assertThat(registry) + .hasObservationWithNameEqualTo("dbr_license_findall"); + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"create-maintenance-message", "update-maintenance-message", "delete-maintenance-message"}) + public void prometheusMaintenanceEndpoint_succeeds() { + + /* mock */ + try { + maintenanceEndpoint.list(); + } catch (Exception e) { + /* ignore */ + } + try { + maintenanceEndpoint.find(BANNER_MESSAGE_1_ID); + } catch (Exception e) { + /* ignore */ + } + try { + maintenanceEndpoint.active(); + } catch (Exception e) { + /* ignore */ + } + try { + maintenanceEndpoint.create(BANNER_MESSAGE_1_CREATE_DTO); + } catch (Exception e) { + /* ignore */ + } + try { + maintenanceEndpoint.update(BANNER_MESSAGE_1_ID, BANNER_MESSAGE_1_UPDATE_DTO); + } catch (Exception e) { + /* ignore */ + } + try { + maintenanceEndpoint.delete(BANNER_MESSAGE_1_ID); + } catch (Exception e) { + /* ignore */ + } + + /* test */ + for (String metric : List.of("dbr_maintenance_findall", "dbr_maintenance_find", "dbr_maintenance_findactive", "dbr_maintenance_create", "dbr_maintenance_update", "dbr_maintenance_delete")) { + assertThat(registry) + .hasObservationWithNameEqualTo(metric); + } + } + } diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java index ae3ae81be32720f67f7303a1920ecb153b2265ea..6fa29160b3969cb28934c3bd33e3ac1522dfd200 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java @@ -4,10 +4,7 @@ import at.tuwien.api.amqp.*; import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.container.ContainerBriefDto; import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.container.image.ImageBriefDto; -import at.tuwien.api.container.image.ImageCreateDto; -import at.tuwien.api.container.image.ImageDateDto; -import at.tuwien.api.container.image.ImageDto; +import at.tuwien.api.container.image.*; import at.tuwien.api.database.*; import at.tuwien.api.database.query.QueryBriefDto; import at.tuwien.api.database.query.QueryDto; @@ -698,6 +695,14 @@ public abstract class BaseTest { .defaultPort(IMAGE_1_PORT) .build(); + public final static ImageChangeDto IMAGE_1_CHANGE_DTO = ImageChangeDto.builder() + .registry(IMAGE_1_REGISTRY) + .dialect(IMAGE_1_DIALECT) + .jdbcMethod(IMAGE_1_JDBC) + .driverClass(IMAGE_1_DRIVER) + .defaultPort(IMAGE_1_PORT) + .build(); + public final static Long IMAGE_DATE_2_ID = 2L; public final static Long IMAGE_DATE_2_IMAGE_ID = IMAGE_1_ID; public final static String IMAGE_DATE_2_UNIX_FORMAT = "dd.MM.yy";