Skip to content
Snippets Groups Projects
Unverified Commit 74797f96 authored by Martin Weise's avatar Martin Weise
Browse files

Updated further metrics

parent 186f7426
Branches
Tags
4 merge requests!231CI: Remove build for log-service,!228Better error message handling in the frontend,!223Release of version 1.4.0,!213Resolve "Some bugs regarding data"
Showing
with 293 additions and 33 deletions
...@@ -14,6 +14,7 @@ import at.tuwien.service.UserService; ...@@ -14,6 +14,7 @@ import at.tuwien.service.UserService;
import at.tuwien.service.impl.ContainerServiceImpl; import at.tuwien.service.impl.ContainerServiceImpl;
import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.PrincipalUtil;
import io.micrometer.core.annotation.Timed; 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.Operation;
import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Content;
...@@ -54,6 +55,7 @@ public class ContainerEndpoint { ...@@ -54,6 +55,7 @@ public class ContainerEndpoint {
@GetMapping @GetMapping
@Transactional(readOnly = true) @Transactional(readOnly = true)
@Observed(name = "dbr_container_findall")
@Operation(summary = "Find all containers") @Operation(summary = "Find all containers")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -76,6 +78,7 @@ public class ContainerEndpoint { ...@@ -76,6 +78,7 @@ public class ContainerEndpoint {
@PostMapping @PostMapping
@Transactional @Transactional
@Observed(name = "dbr_container_create")
@PreAuthorize("hasAuthority('create-container')") @PreAuthorize("hasAuthority('create-container')")
@Operation(summary = "Create container", security = @SecurityRequirement(name = "bearerAuth")) @Operation(summary = "Create container", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
...@@ -118,6 +121,7 @@ public class ContainerEndpoint { ...@@ -118,6 +121,7 @@ public class ContainerEndpoint {
@GetMapping("/{id}") @GetMapping("/{id}")
@Transactional(readOnly = true) @Transactional(readOnly = true)
@Observed(name = "dbr_container_find")
@Operation(summary = "Find some container") @Operation(summary = "Find some container")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -153,7 +157,7 @@ public class ContainerEndpoint { ...@@ -153,7 +157,7 @@ public class ContainerEndpoint {
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@Transactional @Transactional
@Timed(value = "container.delete", description = "Time needed to delete the container") @Observed(name = "dbr_container_delete")
@PreAuthorize("hasAuthority('delete-container')") @PreAuthorize("hasAuthority('delete-container')")
@Operation(summary = "Delete some container", security = @SecurityRequirement(name = "bearerAuth")) @Operation(summary = "Delete some container", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
......
...@@ -14,6 +14,7 @@ import at.tuwien.service.*; ...@@ -14,6 +14,7 @@ import at.tuwien.service.*;
import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.PrincipalUtil;
import at.tuwien.utils.UserUtil; import at.tuwien.utils.UserUtil;
import io.micrometer.core.annotation.Timed; 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.Operation;
import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Content;
...@@ -68,7 +69,7 @@ public class DatabaseEndpoint { ...@@ -68,7 +69,7 @@ public class DatabaseEndpoint {
@GetMapping @GetMapping
@Transactional(readOnly = true) @Transactional(readOnly = true)
@Timed(value = "database.list", description = "Time needed to list the databases") @Observed(name = "dbr_database_findall")
@Operation(summary = "List databases") @Operation(summary = "List databases")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -100,7 +101,7 @@ public class DatabaseEndpoint { ...@@ -100,7 +101,7 @@ public class DatabaseEndpoint {
@RequestMapping(method = RequestMethod.HEAD) @RequestMapping(method = RequestMethod.HEAD)
@Transactional(readOnly = true) @Transactional(readOnly = true)
@Timed(value = "database.list", description = "Time needed to count the databases") @Observed(name = "dbr_database_count")
@Operation(summary = "Count databases") @Operation(summary = "Count databases")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -135,7 +136,7 @@ public class DatabaseEndpoint { ...@@ -135,7 +136,7 @@ public class DatabaseEndpoint {
@PostMapping @PostMapping
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PreAuthorize("hasAuthority('create-database')") @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")) @Operation(summary = "Create database", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "201", @ApiResponse(responseCode = "201",
...@@ -205,7 +206,7 @@ public class DatabaseEndpoint { ...@@ -205,7 +206,7 @@ public class DatabaseEndpoint {
@PutMapping("/{id}/visibility") @PutMapping("/{id}/visibility")
@Transactional @Transactional
@PreAuthorize("hasAuthority('modify-database-visibility')") @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")) @Operation(summary = "Update database", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "202", @ApiResponse(responseCode = "202",
...@@ -244,7 +245,7 @@ public class DatabaseEndpoint { ...@@ -244,7 +245,7 @@ public class DatabaseEndpoint {
@PutMapping("/{id}/transfer") @PutMapping("/{id}/transfer")
@Transactional @Transactional
@PreAuthorize("hasAuthority('modify-database-owner')") @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")) @Operation(summary = "Transfer database", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "202", @ApiResponse(responseCode = "202",
...@@ -282,7 +283,7 @@ public class DatabaseEndpoint { ...@@ -282,7 +283,7 @@ public class DatabaseEndpoint {
@GetMapping("/{id}") @GetMapping("/{id}")
@Transactional(readOnly = true) @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")) @Operation(summary = "Find some database", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -322,7 +323,7 @@ public class DatabaseEndpoint { ...@@ -322,7 +323,7 @@ public class DatabaseEndpoint {
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PreAuthorize("hasAuthority('delete-database')") @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")) @Operation(summary = "Delete some database", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "201", @ApiResponse(responseCode = "201",
......
...@@ -10,6 +10,7 @@ import at.tuwien.service.QueryService; ...@@ -10,6 +10,7 @@ import at.tuwien.service.QueryService;
import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.PrincipalUtil;
import at.tuwien.utils.UserUtil; import at.tuwien.utils.UserUtil;
import io.micrometer.core.annotation.Timed; 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.Operation;
import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
...@@ -45,7 +46,7 @@ public class ExportEndpoint { ...@@ -45,7 +46,7 @@ public class ExportEndpoint {
@GetMapping @GetMapping
@Transactional(readOnly = true) @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")) @Operation(summary = "Export table", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "201", @ApiResponse(responseCode = "201",
......
...@@ -15,6 +15,7 @@ import at.tuwien.service.UserService; ...@@ -15,6 +15,7 @@ import at.tuwien.service.UserService;
import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.PrincipalUtil;
import at.tuwien.utils.UserUtil; import at.tuwien.utils.UserUtil;
import io.micrometer.core.annotation.Timed; 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.Operation;
import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Content;
...@@ -58,7 +59,7 @@ public class IdentifierEndpoint { ...@@ -58,7 +59,7 @@ public class IdentifierEndpoint {
@GetMapping @GetMapping
@Transactional(readOnly = true) @Transactional(readOnly = true)
@Timed(value = "identifier.list", description = "Time needed to list the identifiers") @Observed(name = "dbr_identifier_findall")
@Operation(summary = "Find identifiers") @Operation(summary = "Find identifiers")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -82,7 +83,7 @@ public class IdentifierEndpoint { ...@@ -82,7 +83,7 @@ public class IdentifierEndpoint {
@PostMapping @PostMapping
@Transactional @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')") @PreAuthorize("hasAuthority('create-identifier') or hasAuthority('create-foreign-identifier')")
@Operation(summary = "Create identifier", security = @SecurityRequirement(name = "bearerAuth")) @Operation(summary = "Create identifier", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
...@@ -153,7 +154,7 @@ public class IdentifierEndpoint { ...@@ -153,7 +154,7 @@ public class IdentifierEndpoint {
} }
@GetMapping("/retrieve") @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") @Operation(summary = "Retrieve metadata from identifier")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -162,7 +163,7 @@ public class IdentifierEndpoint { ...@@ -162,7 +163,7 @@ public class IdentifierEndpoint {
mediaType = "application/json", mediaType = "application/json",
schema = @Schema(implementation = IdentifierDto.class))}), 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 { throws OrcidNotFoundException, RorNotFoundException, RemoteUnavailableException, DoiNotFoundException {
return ResponseEntity.ok(metadataService.findByUrl(url)); return ResponseEntity.ok(metadataService.findByUrl(url));
} }
......
...@@ -14,6 +14,7 @@ import at.tuwien.mapper.ImageMapper; ...@@ -14,6 +14,7 @@ import at.tuwien.mapper.ImageMapper;
import at.tuwien.service.impl.ImageServiceImpl; import at.tuwien.service.impl.ImageServiceImpl;
import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.PrincipalUtil;
import io.micrometer.core.annotation.Timed; 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.Operation;
import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Content;
...@@ -53,7 +54,7 @@ public class ImageEndpoint { ...@@ -53,7 +54,7 @@ public class ImageEndpoint {
@GetMapping @GetMapping
@Transactional(readOnly = true) @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") @Operation(summary = "Find all images")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -73,7 +74,7 @@ public class ImageEndpoint { ...@@ -73,7 +74,7 @@ public class ImageEndpoint {
@PostMapping @PostMapping
@Transactional @Transactional
@Timed(value = "image.create", description = "Time needed to create a container image") @Observed(name = "dbr_image_create")
@PreAuthorize("hasAuthority('create-image')") @PreAuthorize("hasAuthority('create-image')")
@Operation(summary = "Create image", security = @SecurityRequirement(name = "bearerAuth")) @Operation(summary = "Create image", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
...@@ -120,7 +121,7 @@ public class ImageEndpoint { ...@@ -120,7 +121,7 @@ public class ImageEndpoint {
@GetMapping("/{id}") @GetMapping("/{id}")
@Transactional(readOnly = true) @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") @Operation(summary = "Find some image")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -145,7 +146,7 @@ public class ImageEndpoint { ...@@ -145,7 +146,7 @@ public class ImageEndpoint {
@PutMapping("/{id}") @PutMapping("/{id}")
@Transactional @Transactional
@Timed(value = "image.update", description = "Time needed to update a container image") @Observed(name = "dbr_image_update")
@PreAuthorize("hasAuthority('modify-image')") @PreAuthorize("hasAuthority('modify-image')")
@Operation(summary = "Update some image", security = @SecurityRequirement(name = "bearerAuth")) @Operation(summary = "Update some image", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
...@@ -174,7 +175,7 @@ public class ImageEndpoint { ...@@ -174,7 +175,7 @@ public class ImageEndpoint {
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@Transactional @Transactional
@Timed(value = "image.delete", description = "Time needed to delete a container image") @Observed(name = "dbr_image_delete")
@PreAuthorize("hasAuthority('delete-image')") @PreAuthorize("hasAuthority('delete-image')")
@Operation(summary = "Delete some image", security = @SecurityRequirement(name = "bearerAuth")) @Operation(summary = "Delete some image", security = @SecurityRequirement(name = "bearerAuth"))
@ApiResponses(value = { @ApiResponses(value = {
......
...@@ -4,6 +4,7 @@ import at.tuwien.api.database.LicenseDto; ...@@ -4,6 +4,7 @@ import at.tuwien.api.database.LicenseDto;
import at.tuwien.mapper.LicenseMapper; import at.tuwien.mapper.LicenseMapper;
import at.tuwien.service.LicenseService; import at.tuwien.service.LicenseService;
import io.micrometer.core.annotation.Timed; 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.Operation;
import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Content;
...@@ -40,7 +41,7 @@ public class LicenseEndpoint { ...@@ -40,7 +41,7 @@ public class LicenseEndpoint {
@GetMapping("/license") @GetMapping("/license")
@Transactional(readOnly = true) @Transactional(readOnly = true)
@Timed(value = "license.list", description = "Time needed to list the licenses") @Observed(name = "dbr_license_findall")
@Operation(summary = "Get all licenses") @Operation(summary = "Get all licenses")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
......
...@@ -7,6 +7,7 @@ import at.tuwien.api.maintenance.BannerMessageUpdateDto; ...@@ -7,6 +7,7 @@ import at.tuwien.api.maintenance.BannerMessageUpdateDto;
import at.tuwien.exception.BannerMessageNotFoundException; import at.tuwien.exception.BannerMessageNotFoundException;
import at.tuwien.mapper.BannerMessageMapper; import at.tuwien.mapper.BannerMessageMapper;
import at.tuwien.service.BannerMessageService; import at.tuwien.service.BannerMessageService;
import io.micrometer.observation.annotation.Observed;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Content;
...@@ -40,6 +41,7 @@ public class MaintenanceEndpoint { ...@@ -40,6 +41,7 @@ public class MaintenanceEndpoint {
} }
@GetMapping("/message") @GetMapping("/message")
@Observed(name = "dbr_maintenance_findall")
@Operation(summary = "Find maintenance messages") @Operation(summary = "Find maintenance messages")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -59,6 +61,7 @@ public class MaintenanceEndpoint { ...@@ -59,6 +61,7 @@ public class MaintenanceEndpoint {
} }
@GetMapping("/message/{id}") @GetMapping("/message/{id}")
@Observed(name = "dbr_maintenance_find")
@Operation(summary = "Find one maintenance message") @Operation(summary = "Find one maintenance message")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -76,6 +79,7 @@ public class MaintenanceEndpoint { ...@@ -76,6 +79,7 @@ public class MaintenanceEndpoint {
} }
@GetMapping("/message/active") @GetMapping("/message/active")
@Observed(name = "dbr_maintenance_findactive")
@Operation(summary = "Find active maintenance messages") @Operation(summary = "Find active maintenance messages")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", @ApiResponse(responseCode = "200",
...@@ -95,6 +99,7 @@ public class MaintenanceEndpoint { ...@@ -95,6 +99,7 @@ public class MaintenanceEndpoint {
} }
@PostMapping("/message") @PostMapping("/message")
@Observed(name = "dbr_maintenance_create")
@Operation(summary = "Create maintenance message") @Operation(summary = "Create maintenance message")
@PreAuthorize("hasAuthority('create-maintenance-message')") @PreAuthorize("hasAuthority('create-maintenance-message')")
@ApiResponses(value = { @ApiResponses(value = {
...@@ -113,6 +118,7 @@ public class MaintenanceEndpoint { ...@@ -113,6 +118,7 @@ public class MaintenanceEndpoint {
} }
@PutMapping("/message/{id}") @PutMapping("/message/{id}")
@Observed(name = "dbr_maintenance_update")
@Operation(summary = "Update maintenance message") @Operation(summary = "Update maintenance message")
@PreAuthorize("hasAuthority('update-maintenance-message')") @PreAuthorize("hasAuthority('update-maintenance-message')")
@ApiResponses(value = { @ApiResponses(value = {
...@@ -138,6 +144,7 @@ public class MaintenanceEndpoint { ...@@ -138,6 +144,7 @@ public class MaintenanceEndpoint {
} }
@DeleteMapping("/message/{id}") @DeleteMapping("/message/{id}")
@Observed(name = "dbr_maintenance_delete")
@Operation(summary = "Delete maintenance message") @Operation(summary = "Delete maintenance message")
@PreAuthorize("hasAuthority('delete-maintenance-message')") @PreAuthorize("hasAuthority('delete-maintenance-message')")
@ApiResponses(value = { @ApiResponses(value = {
......
...@@ -3,13 +3,11 @@ package at.tuwien.mvc; ...@@ -3,13 +3,11 @@ package at.tuwien.mvc;
import at.tuwien.BaseUnitTest; import at.tuwien.BaseUnitTest;
import at.tuwien.annotations.MockAmqp; import at.tuwien.annotations.MockAmqp;
import at.tuwien.annotations.MockOpensearch; import at.tuwien.annotations.MockOpensearch;
import at.tuwien.api.database.AccessTypeDto; import at.tuwien.api.container.ContainerCreateRequestDto;
import at.tuwien.api.database.DatabaseGiveAccessDto; import at.tuwien.api.database.*;
import at.tuwien.api.database.DatabaseModifyAccessDto;
import at.tuwien.config.MetricsConfig; import at.tuwien.config.MetricsConfig;
import at.tuwien.endpoints.AccessEndpoint; import at.tuwien.endpoints.*;
import io.micrometer.observation.tck.TestObservationRegistry; import io.micrometer.observation.tck.TestObservationRegistry;
import lombok.SneakyThrows;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
...@@ -50,6 +48,27 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { ...@@ -50,6 +48,27 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest {
@Autowired @Autowired
private AccessEndpoint accessEndpoint; 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 @TestConfiguration
static class ObservationTestConfiguration { static class ObservationTestConfiguration {
...@@ -70,7 +89,7 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { ...@@ -70,7 +89,7 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest {
@Test @Test
@WithMockUser(username = USER_1_USERNAME, authorities = {"create-database-access", "update-database-access", "check-database-access", "delete-database-access"}) @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 */ /* mock */
try { try {
...@@ -94,10 +113,6 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { ...@@ -94,10 +113,6 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest {
/* ignore */ /* ignore */
} }
this.mockMvc.perform(get("/actuator/prometheus"))
.andDo(print())
.andExpect(status().isOk());
/* test */ /* test */
for (String metric : List.of("dbr_access_give", "dbr_access_modify", "dbr_access_check", "dbr_access_delete")) { for (String metric : List.of("dbr_access_give", "dbr_access_modify", "dbr_access_check", "dbr_access_delete")) {
assertThat(registry) assertThat(registry)
...@@ -105,4 +120,228 @@ public class PrometheusEndpointMvcTest extends BaseUnitTest { ...@@ -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);
}
}
} }
...@@ -4,10 +4,7 @@ import at.tuwien.api.amqp.*; ...@@ -4,10 +4,7 @@ import at.tuwien.api.amqp.*;
import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.auth.SignupRequestDto;
import at.tuwien.api.container.ContainerBriefDto; import at.tuwien.api.container.ContainerBriefDto;
import at.tuwien.api.container.ContainerDto; import at.tuwien.api.container.ContainerDto;
import at.tuwien.api.container.image.ImageBriefDto; import at.tuwien.api.container.image.*;
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.database.*; import at.tuwien.api.database.*;
import at.tuwien.api.database.query.QueryBriefDto; import at.tuwien.api.database.query.QueryBriefDto;
import at.tuwien.api.database.query.QueryDto; import at.tuwien.api.database.query.QueryDto;
...@@ -698,6 +695,14 @@ public abstract class BaseTest { ...@@ -698,6 +695,14 @@ public abstract class BaseTest {
.defaultPort(IMAGE_1_PORT) .defaultPort(IMAGE_1_PORT)
.build(); .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_ID = 2L;
public final static Long IMAGE_DATE_2_IMAGE_ID = IMAGE_1_ID; public final static Long IMAGE_DATE_2_IMAGE_ID = IMAGE_1_ID;
public final static String IMAGE_DATE_2_UNIX_FORMAT = "dd.MM.yy"; public final static String IMAGE_DATE_2_UNIX_FORMAT = "dd.MM.yy";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment