use of com.redhat.cloud.notifications.models.CompositeEndpointType in project notifications-backend by RedHatInsights.
the class EndpointRepository method getOrCreateEmailSubscriptionEndpoint.
@Transactional
public Endpoint getOrCreateEmailSubscriptionEndpoint(String accountId, EmailSubscriptionProperties properties) {
List<Endpoint> emailEndpoints = getEndpointsPerCompositeType(accountId, null, Set.of(new CompositeEndpointType(EndpointType.EMAIL_SUBSCRIPTION)), null, null);
loadProperties(emailEndpoints);
Optional<Endpoint> endpointOptional = emailEndpoints.stream().filter(endpoint -> properties.hasSameProperties(endpoint.getProperties(EmailSubscriptionProperties.class))).findFirst();
if (endpointOptional.isPresent()) {
return endpointOptional.get();
}
Endpoint endpoint = new Endpoint();
endpoint.setProperties(properties);
endpoint.setAccountId(accountId);
endpoint.setEnabled(true);
endpoint.setDescription("System email endpoint");
endpoint.setName("Email endpoint");
endpoint.setType(EndpointType.EMAIL_SUBSCRIPTION);
return createEndpoint(endpoint);
}
use of com.redhat.cloud.notifications.models.CompositeEndpointType in project notifications-backend by RedHatInsights.
the class EndpointRepositoryTest method queryBuilderTest.
@Test
public void queryBuilderTest() {
TypedQuery<Endpoint> query = mock(TypedQuery.class);
// types with subtype and without it
EndpointRepository.queryBuilderEndpointsPerType(null, null, Set.of(new CompositeEndpointType(EndpointType.WEBHOOK), new CompositeEndpointType(EndpointType.CAMEL, "splunk")), null).build((hql, endpointClass) -> {
assertEquals("SELECT e FROM Endpoint e WHERE e.accountId IS NULL AND (e.compositeType.type IN (:endpointType) OR e.compositeType IN (:compositeTypes))", hql);
return query;
});
verify(query, times(2)).setParameter((String) any(), any());
verifyNoMoreInteractions(query);
clearInvocations(query);
// without sub-types
EndpointRepository.queryBuilderEndpointsPerType(null, null, Set.of(new CompositeEndpointType(EndpointType.WEBHOOK)), null).build((hql, endpointClass) -> {
assertEquals("SELECT e FROM Endpoint e WHERE e.accountId IS NULL AND (e.compositeType.type IN (:endpointType))", hql);
return query;
});
verify(query, times(1)).setParameter((String) any(), any());
verifyNoMoreInteractions(query);
clearInvocations(query);
// with sub-types
EndpointRepository.queryBuilderEndpointsPerType(null, null, Set.of(new CompositeEndpointType(EndpointType.CAMEL, "splunk")), null).build((hql, endpointClass) -> {
assertEquals("SELECT e FROM Endpoint e WHERE e.accountId IS NULL AND (e.compositeType IN (:compositeTypes))", hql);
return query;
});
verify(query, times(1)).setParameter((String) any(), any());
verifyNoMoreInteractions(query);
clearInvocations(query);
}
use of com.redhat.cloud.notifications.models.CompositeEndpointType in project notifications-backend by RedHatInsights.
the class EndpointResource method getEndpoints.
@GET
@Produces(APPLICATION_JSON)
@RolesAllowed(ConsoleIdentityProvider.RBAC_READ_INTEGRATIONS_ENDPOINTS)
@Parameters({ @Parameter(name = "limit", in = ParameterIn.QUERY, description = "Number of items per page. If the value is 0, it will return all elements", schema = @Schema(type = SchemaType.INTEGER)), @Parameter(name = "pageNumber", in = ParameterIn.QUERY, description = "Page number. Starts at first page (0), if not specified starts at first page.", schema = @Schema(type = SchemaType.INTEGER)) })
public EndpointPage getEndpoints(@Context SecurityContext sec, @BeanParam Query query, @QueryParam("type") List<String> targetType, @QueryParam("active") Boolean activeOnly, @QueryParam("name") String name) {
RhIdPrincipal principal = (RhIdPrincipal) sec.getUserPrincipal();
List<Endpoint> endpoints;
Long count;
if (targetType != null && targetType.size() > 0) {
Set<CompositeEndpointType> compositeType = targetType.stream().map(s -> {
try {
return CompositeEndpointType.fromString(s);
} catch (IllegalArgumentException e) {
throw new BadRequestException("Unknown endpoint type: [" + s + "]", e);
}
}).collect(Collectors.toSet());
endpoints = endpointRepository.getEndpointsPerCompositeType(principal.getAccount(), name, compositeType, activeOnly, query);
count = endpointRepository.getEndpointsCountPerCompositeType(principal.getAccount(), name, compositeType, activeOnly);
} else {
endpoints = endpointRepository.getEndpoints(principal.getAccount(), name, query);
count = endpointRepository.getEndpointsCount(principal.getAccount(), name);
}
return new EndpointPage(endpoints, new HashMap<>(), new Meta(count));
}
use of com.redhat.cloud.notifications.models.CompositeEndpointType in project notifications-backend by RedHatInsights.
the class EventResource method getEvents.
@GET
@Produces(APPLICATION_JSON)
@RolesAllowed(RBAC_READ_NOTIFICATIONS_EVENTS)
@Operation(summary = "Retrieve the event log entries.")
public Page<EventLogEntry> getEvents(@Context SecurityContext securityContext, @RestQuery Set<UUID> bundleIds, @RestQuery Set<UUID> appIds, @RestQuery String eventTypeDisplayName, @RestQuery LocalDate startDate, @RestQuery LocalDate endDate, @RestQuery Set<String> endpointTypes, @RestQuery Set<Boolean> invocationResults, @RestQuery @DefaultValue("10") int limit, @RestQuery @DefaultValue("0") int offset, @RestQuery String sortBy, @RestQuery boolean includeDetails, @RestQuery boolean includePayload, @RestQuery boolean includeActions) {
if (limit < 1 || limit > 200) {
throw new BadRequestException("Invalid 'limit' query parameter, its value must be between 1 and 200");
}
if (sortBy != null && !SORT_BY_PATTERN.matcher(sortBy).matches()) {
throw new BadRequestException("Invalid 'sortBy' query parameter");
}
Set<EndpointType> basicTypes = Collections.emptySet();
Set<CompositeEndpointType> compositeTypes = Collections.emptySet();
if (endpointTypes != null && endpointTypes.size() > 0) {
basicTypes = new HashSet<>();
compositeTypes = new HashSet<>();
for (String stringEndpointType : endpointTypes) {
try {
CompositeEndpointType compositeType = CompositeEndpointType.fromString(stringEndpointType);
if (compositeType.getSubType() == null) {
basicTypes.add(compositeType.getType());
} else {
compositeTypes.add(compositeType);
}
} catch (IllegalArgumentException e) {
throw new BadRequestException("Unknown endpoint type: [" + stringEndpointType + "]", e);
}
}
}
String accountId = getAccountId(securityContext);
List<Event> events = eventRepository.getEvents(accountId, bundleIds, appIds, eventTypeDisplayName, startDate, endDate, basicTypes, compositeTypes, invocationResults, includeActions, limit, offset, sortBy);
List<EventLogEntry> eventLogEntries = events.stream().map(event -> {
List<EventLogEntryAction> actions;
if (!includeActions) {
actions = Collections.emptyList();
} else {
actions = event.getHistoryEntries().stream().map(historyEntry -> {
EventLogEntryAction action = new EventLogEntryAction();
action.setId(historyEntry.getId());
action.setEndpointId(historyEntry.getEndpointId());
action.setEndpointType(historyEntry.getEndpointType());
action.setEndpointSubType(historyEntry.getEndpointSubType());
action.setInvocationResult(historyEntry.isInvocationResult());
if (includeDetails) {
action.setDetails(historyEntry.getDetails());
}
return action;
}).collect(Collectors.toList());
}
EventLogEntry entry = new EventLogEntry();
entry.setId(event.getId());
entry.setCreated(event.getCreated());
entry.setBundle(event.getBundleDisplayName());
entry.setApplication(event.getApplicationDisplayName());
entry.setEventType(event.getEventTypeDisplayName());
entry.setActions(actions);
if (includePayload) {
entry.setPayload(event.getPayload());
}
return entry;
}).collect(Collectors.toList());
Long count = eventRepository.count(accountId, bundleIds, appIds, eventTypeDisplayName, startDate, endDate, basicTypes, compositeTypes, invocationResults);
Meta meta = new Meta();
meta.setCount(count);
Map<String, String> links = PageLinksBuilder.build(PATH, count, limit, offset);
Page<EventLogEntry> page = new Page<>();
page.setData(eventLogEntries);
page.setMeta(meta);
page.setLinks(links);
return page;
}
Aggregations