Skip to content

Commit

Permalink
add user permission to all endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
Battlestad committed Aug 16, 2024
1 parent a1c5733 commit 1201bac
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 5 deletions.
11 changes: 9 additions & 2 deletions src/main/java/no/fintlabs/HistoryController.java
Original file line number Diff line number Diff line change
Expand Up @@ -195,13 +195,20 @@ public ResponseEntity<Statistics> getStatistics(
) {
if (userPermissionsConsumerEnabled) {
List<Long> sourceApplicationIds = UserAuthorizationUtil.convertSourceApplicationIdsStringToList(authentication);
return ResponseEntity.ok(statisticsService.getStatisticsBySourceApplicationIds(sourceApplicationIds));
return ResponseEntity.ok(statisticsService.getStatistics(sourceApplicationIds));
}
return ResponseEntity.ok(statisticsService.getStatistics());
}

@GetMapping("statistikk/integrasjoner")
public ResponseEntity<Collection<IntegrationStatistics>> getIntegrationStatistics() {
public ResponseEntity<Collection<IntegrationStatistics>> getIntegrationStatistics(
@AuthenticationPrincipal Authentication authentication
) {
if (userPermissionsConsumerEnabled) {
List<Long> sourceApplicationIds = UserAuthorizationUtil.convertSourceApplicationIdsStringToList(authentication);
return ResponseEntity.ok(statisticsService.getIntegrationStatisticsBySourceApplicationId(sourceApplicationIds));
}

return ResponseEntity.ok(statisticsService.getIntegrationStatistics());
}

Expand Down
40 changes: 38 additions & 2 deletions src/main/java/no/fintlabs/StatisticsService.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ public Statistics getStatistics() {
.build();
}

public Statistics getStatisticsBySourceApplicationIds(List<Long> sourceApplicationIds) {
public Statistics getStatistics(List<Long> sourceApplicationIds) {
return Statistics
.builder()
.dispatchedInstances(eventRepository.countDispatchedInstancesBySourceApplicationIds(sourceApplicationIds))
.currentErrors(eventRepository.countCurrentInstanceErrors())
.currentErrors(eventRepository.countCurrentInstanceErrorsBySourceApplicationIds(sourceApplicationIds))
.build();
}

Expand Down Expand Up @@ -70,4 +70,40 @@ public List<IntegrationStatistics> getIntegrationStatistics() {
.toList();
}

public List<IntegrationStatistics> getIntegrationStatisticsBySourceApplicationId(List<Long> sourceApplicationIds) {
Map<String, Long> numberOfDispatchedInstancesPerIntegrationId = eventRepository
.countDispatchedInstancesPerIntegrationIdBySourceApplicationIds(sourceApplicationIds)
.stream()
.collect(Collectors.toMap(
EventRepository.IntegrationIdAndCount::getIntegrationId,
EventRepository.IntegrationIdAndCount::getCount
));

Map<String, Long> numberOfCurrentErrorsPerIntegrationId = eventRepository
.countCurrentInstanceErrorsPerIntegrationIdBySourceApplicationIds(sourceApplicationIds)
.stream()
.collect(Collectors.toMap(
EventRepository.IntegrationIdAndCount::getIntegrationId,
EventRepository.IntegrationIdAndCount::getCount
));

Set<String> integrationIds = Stream.concat(
numberOfDispatchedInstancesPerIntegrationId.keySet().stream(),
numberOfCurrentErrorsPerIntegrationId.keySet().stream()
)
.collect(Collectors.toSet());

return integrationIds
.stream()
.map(
integrationId -> IntegrationStatistics
.builder()
.sourceApplicationIntegrationId(integrationId)
.dispatchedInstances(numberOfDispatchedInstancesPerIntegrationId.getOrDefault(integrationId, 0L))
.currentErrors(numberOfCurrentErrorsPerIntegrationId.getOrDefault(integrationId, 0L))
.build()
)
.toList();
}

}
50 changes: 50 additions & 0 deletions src/main/java/no/fintlabs/repositories/EventRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,22 @@ Collection<IntegrationIdAndCount> countNamedEventsPerIntegrationId(
@Param(value = "eventName") String eventName
);

default Collection<IntegrationIdAndCount> countDispatchedInstancesPerIntegrationIdBySourceApplicationIds(List<Long> sourceApplicationIds) {
return countNamedEventsPerIntegrationIdBySourceApplicationIds(INSTANCE_DISPATCHED, sourceApplicationIds);
}

@Query(value = "SELECT e.instanceFlowHeaders.sourceApplicationIntegrationId AS integrationId, COUNT(e) AS count " +
"FROM Event e " +
"WHERE e.name LIKE :eventName " +
"AND e.instanceFlowHeaders.sourceApplicationId IN :sourceApplicationIds " +
"GROUP BY e.instanceFlowHeaders.sourceApplicationIntegrationId"
)
Collection<IntegrationIdAndCount> countNamedEventsPerIntegrationIdBySourceApplicationIds(
@Param(value = "eventName") String eventName,
@Param(value = "sourceApplicationIds") List<Long> sourceApplicationIds
);


@Query(value = "SELECT COUNT(*) " +
"FROM event AS e " +
"INNER JOIN ( " +
Expand All @@ -119,6 +135,21 @@ Collection<IntegrationIdAndCount> countNamedEventsPerIntegrationId(
)
long countCurrentInstanceErrors();

@Query(value = "SELECT COUNT(*) " +
"FROM event AS e " +
"INNER JOIN ( " +
" SELECT source_application_instance_id, max(timestamp) AS timestampMax " +
" FROM event " +
" WHERE source_application_id IN :sourceApplicationIds " +
" GROUP BY source_application_instance_id " +
") AS eMax " +
"ON e.source_application_instance_id = eMax.source_application_instance_id " +
" AND e.timestamp = eMax.timestampMax " +
"WHERE e.type = 'ERROR' " +
"AND e.source_application_id IN :sourceApplicationIds",
nativeQuery = true
)
long countCurrentInstanceErrorsBySourceApplicationIds(@Param("sourceApplicationIds") List<Long> sourceApplicationIds);

@Query(value = "SELECT source_application_integration_id AS integrationId, COUNT(*) AS count " +
"FROM event AS e " +
Expand All @@ -135,6 +166,25 @@ Collection<IntegrationIdAndCount> countNamedEventsPerIntegrationId(
)
Collection<IntegrationIdAndCount> countCurrentInstanceErrorsPerIntegrationId();

@Query(value = "SELECT source_application_integration_id AS integrationId, COUNT(*) AS count " +
"FROM event AS e " +
"INNER JOIN ( " +
" SELECT source_application_instance_id, max(timestamp) AS timestampMax " +
" FROM event " +
" WHERE source_application_id IN :sourceApplicationIds " +
" GROUP BY source_application_instance_id " +
") AS eMax " +
"ON e.source_application_instance_id = eMax.source_application_instance_id " +
" AND e.timestamp = eMax.timestampMax " +
"WHERE e.type = 'ERROR' " +
"AND e.source_application_id IN :sourceApplicationIds " +
"GROUP BY source_application_integration_id",
nativeQuery = true
)
Collection<IntegrationIdAndCount> countCurrentInstanceErrorsPerIntegrationIdBySourceApplicationIds(
@Param("sourceApplicationIds") List<Long> sourceApplicationIds);


Optional<Event> findFirstByInstanceFlowHeadersInstanceIdAndNameOrderByTimestampDesc(Long instanceId, String name);

Optional<Event> findFirstByInstanceFlowHeadersSourceApplicationIdAndInstanceFlowHeadersSourceApplicationInstanceIdAndInstanceFlowHeadersSourceApplicationIntegrationIdOrderByTimestampDesc(
Expand Down
2 changes: 1 addition & 1 deletion src/test/java/no/fintlabs/HistoryControllerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ void testGetIntegrationStatistics() {
List<IntegrationStatistics> expectedList = Arrays.asList(integrationStatistics1, integrationStatistics2);
when(statisticsService.getIntegrationStatistics()).thenReturn(expectedList);

ResponseEntity<Collection<IntegrationStatistics>> response = historyController.getIntegrationStatistics();
ResponseEntity<Collection<IntegrationStatistics>> response = historyController.getIntegrationStatistics(authentication);

assertEquals(200, response.getStatusCodeValue());
assertEquals(expectedList, response.getBody());
Expand Down

0 comments on commit 1201bac

Please sign in to comment.