use of io.hops.hopsworks.alerting.config.dto.Route in project hopsworks by logicalclocks.
the class AlertManagerConfiguration method isNotSystemReceiver.
private boolean isNotSystemReceiver(AlertManagerConfig alertManagerConfig, Receiver receiver) {
if (alertManagerConfig.getRoute() == null) {
return true;
}
if (alertManagerConfig.getRoute().getReceiver().equals(receiver.getName())) {
return false;
}
List<Route> routes = alertManagerConfig.getRoute().getRoutes();
for (Route route : routes) {
Map<String, String> match = route.getMatch() != null ? route.getMatch() : route.getMatchRe();
String alertType = match != null && match.get(Constants.ALERT_TYPE_LABEL) != null ? match.get(Constants.ALERT_TYPE_LABEL) : null;
if (alertType != null && alertType.equals(AlertType.SYSTEM_ALERT.getValue()) && route.getReceiver().equals(receiver.getName())) {
return false;
}
}
return true;
}
use of io.hops.hopsworks.alerting.config.dto.Route in project hopsworks by logicalclocks.
the class AlertManagerConfiguration method cleanProject.
public void cleanProject(Project project) throws AlertManagerConfigCtrlCreateException, AlertManagerConfigReadException, AlertManagerConfigUpdateException, AlertManagerUnreachableException, AlertManagerClientCreateException {
AlertManagerConfig alertManagerConfig = read();
List<Route> routes = alertManagerConfig.getRoute() == null || alertManagerConfig.getRoute().getRoutes() == null ? Collections.emptyList() : alertManagerConfig.getRoute().getRoutes();
List<Receiver> receivers = alertManagerConfig.getReceivers() == null ? Collections.emptyList() : alertManagerConfig.getReceivers();
List<Receiver> receiversToRemove = new ArrayList<>();
for (Receiver receiver : receivers) {
if (receiver.getName().startsWith(Constants.RECEIVER_NAME_PREFIX.replace(Constants.PROJECT_PLACE_HOLDER, project.getName()))) {
receiversToRemove.add(receiver);
}
}
List<Route> routesToRemove = new ArrayList<>();
for (Route route : routes) {
if (isRouteInProject(route, project) || receiversToRemove.contains(new Receiver(route.getReceiver()))) {
routesToRemove.add(route);
}
}
if (!routesToRemove.isEmpty() || !receiversToRemove.isEmpty()) {
if (!routesToRemove.isEmpty()) {
alertManagerConfig.getRoute().getRoutes().removeAll(routesToRemove);
}
if (!receiversToRemove.isEmpty()) {
alertManagerConfig.getReceivers().removeAll(receiversToRemove);
for (Receiver receiver : receiversToRemove) {
removeReceiverFromDatabase(receiver.getName());
}
}
writeAndReload(alertManagerConfig);
}
}
use of io.hops.hopsworks.alerting.config.dto.Route in project hopsworks by logicalclocks.
the class ConfigUtil method getRoute.
public static Route getRoute(JobAlert alert) {
if (alert.getAlertType().isGlobal()) {
return getRoute(alert.getAlertType());
}
Map<String, String> match = getMatch(alert);
List<String> groupBy = new ArrayList<>();
groupBy.add(Constants.LABEL_PROJECT);
groupBy.add(Constants.LABEL_JOB);
groupBy.add(Constants.LABEL_STATUS);
return new Route(alert.getReceiver().getName()).withContinue(true).withMatch(match).withGroupBy(groupBy);
}
use of io.hops.hopsworks.alerting.config.dto.Route in project hopsworks by logicalclocks.
the class ConfigUtil method getRoute.
public static Route getRoute(ProjectServiceAlert alert) {
if (alert.getAlertType().isGlobal()) {
return getRoute(alert.getAlertType());
}
Map<String, String> match = getMatch(alert);
List<String> groupBy = new ArrayList<>();
groupBy.add(Constants.LABEL_PROJECT);
groupBy.add(Constants.LABEL_JOB);
groupBy.add(Constants.LABEL_FEATURE_GROUP);
groupBy.add(Constants.LABEL_STATUS);
return new Route(alert.getReceiver().getName()).withContinue(true).withMatch(match).withGroupBy(groupBy);
}
use of io.hops.hopsworks.alerting.config.dto.Route in project hopsworks by logicalclocks.
the class RouteResource method update.
@PUT
@Path("{receiver}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Update a route.")
@AllowedProjectRoles({ AllowedProjectRoles.DATA_OWNER })
@JWTRequired(acceptedTokens = { Audience.API }, allowedUserRoles = { "HOPS_ADMIN", "HOPS_USER" })
public Response update(@PathParam("receiver") String receiver, PostableRouteDTO route, @QueryParam("match") List<String> match, @QueryParam("matchRe") List<String> matchRe, @Context UriInfo uriInfo, @Context SecurityContext sc) throws AlertException, ProjectException {
if (route == null) {
throw new AlertException(RESTCodes.AlertErrorCode.ILLEGAL_ARGUMENT, Level.FINE, "No payload.");
}
Route routeToUpdate = new Route(receiver).withMatch(routeBuilder.toMap(match)).withMatchRe(routeBuilder.toMap(matchRe));
Route updatedRoute = routeBuilder.toRoute(route);
try {
alertManagerConfiguration.updateRoute(routeToUpdate, updatedRoute, getProject());
} catch (AlertManagerConfigCtrlCreateException | AlertManagerUnreachableException | AlertManagerConfigReadException e) {
throw new AlertException(RESTCodes.AlertErrorCode.FAILED_TO_READ_CONFIGURATION, Level.FINE, e.getMessage());
} catch (AlertManagerDuplicateEntryException e) {
throw new AlertException(RESTCodes.AlertErrorCode.RECEIVER_EXIST, Level.FINE, e.getMessage());
} catch (AlertManagerConfigUpdateException e) {
throw new AlertException(RESTCodes.AlertErrorCode.FAILED_TO_UPDATE_AM_CONFIG, Level.FINE, e.getMessage());
} catch (AlertManagerClientCreateException e) {
throw new AlertException(RESTCodes.AlertErrorCode.FAILED_TO_CONNECT, Level.FINE, e.getMessage());
} catch (AlertManagerNoSuchElementException e) {
throw new AlertException(RESTCodes.AlertErrorCode.ROUTE_NOT_FOUND, Level.FINE, e.getMessage());
} catch (AlertManagerAccessControlException e) {
throw new AlertException(RESTCodes.AlertErrorCode.ACCESS_CONTROL_EXCEPTION, Level.FINE, e.getMessage());
} catch (IllegalArgumentException e) {
throw new AlertException(RESTCodes.AlertErrorCode.ILLEGAL_ARGUMENT, Level.FINE, e.getMessage());
}
ResourceRequest resourceRequest = new ResourceRequest(ResourceRequest.Name.ROUTES);
RouteDTO dto = routeBuilder.build(uriInfo, resourceRequest, updatedRoute, getProject());
return Response.ok().entity(dto).build();
}
Aggregations