use of io.hops.hopsworks.alerting.exceptions.AlertManagerDuplicateEntryException in project hopsworks by logicalclocks.
the class AlertManagerConfigController method updateRoute.
/**
* @param routeToUpdate
* @param route
* @return updated AlertManagerConfig
* @throws IOException
* @throws AlertManagerNoSuchElementException
* @throws AlertManagerDuplicateEntryException
* @throws AlertManagerConfigUpdateException
* @throws IllegalArgumentException if route is missing a receiver or match
*/
public AlertManagerConfig updateRoute(Route routeToUpdate, Route route) throws AlertManagerNoSuchElementException, AlertManagerDuplicateEntryException, AlertManagerConfigReadException {
validate(route);
AlertManagerConfig alertManagerConfig = read();
// check if receiver exists
getIndexOfReceiver(alertManagerConfig, route.getReceiver());
int index = getIndexOfRoute(alertManagerConfig, routeToUpdate);
if (!routeToUpdate.equals(route.getReceiver()) && alertManagerConfig.getRoute().getRoutes().contains(route)) {
throw new AlertManagerDuplicateEntryException("A route with the same mather and receiver name already exists.");
}
alertManagerConfig.getRoute().getRoutes().remove(index);
alertManagerConfig.getRoute().getRoutes().add(route);
return alertManagerConfig;
}
use of io.hops.hopsworks.alerting.exceptions.AlertManagerDuplicateEntryException in project hopsworks by logicalclocks.
the class AlertManagerConfigController method addRoute.
/**
* @param route
* @return updated AlertManagerConfig
* @throws IOException
* @throws AlertManagerDuplicateEntryException
* @throws AlertManagerConfigUpdateException
* @throws IllegalArgumentException if route is missing a receiver or match
*/
public AlertManagerConfig addRoute(Route route) throws AlertManagerDuplicateEntryException, AlertManagerConfigReadException, AlertManagerNoSuchElementException {
validate(route);
AlertManagerConfig alertManagerConfig = read();
// check if receiver exists
getIndexOfReceiver(alertManagerConfig, route.getReceiver());
if (alertManagerConfig.getRoute() == null) {
alertManagerConfig.setRoute(new Route());
}
if (alertManagerConfig.getRoute().getRoutes() == null) {
alertManagerConfig.getRoute().setRoutes(new ArrayList<>());
}
if (alertManagerConfig.getRoute().getRoutes().contains(route)) {
throw new AlertManagerDuplicateEntryException("A route with the same match and receiver name already exists.");
}
alertManagerConfig.getRoute().getRoutes().add(route);
return alertManagerConfig;
}
use of io.hops.hopsworks.alerting.exceptions.AlertManagerDuplicateEntryException in project hopsworks by logicalclocks.
the class AlertManagerConfigController method addSlackToReceiver.
/**
* @param name
* @param slackConfig
* @return updated AlertManagerConfig
* @throws IOException
* @throws AlertManagerNoSuchElementException
* @throws AlertManagerDuplicateEntryException
* @throws AlertManagerConfigUpdateException
* @throws IllegalArgumentException if slackConfig is missing apiUrl or channel
*/
public AlertManagerConfig addSlackToReceiver(String name, SlackConfig slackConfig) throws AlertManagerNoSuchElementException, AlertManagerDuplicateEntryException, AlertManagerConfigReadException {
validate(slackConfig);
AlertManagerConfig alertManagerConfig = read();
int index = getIndexOfReceiver(alertManagerConfig, name);
Receiver receiverToUpdate = alertManagerConfig.getReceivers().get(index);
if (receiverToUpdate.getSlackConfigs() == null) {
receiverToUpdate.setSlackConfigs(new ArrayList<>());
}
if (receiverToUpdate.getSlackConfigs().contains(slackConfig)) {
throw new AlertManagerDuplicateEntryException("A receiver with the same api url and channel already exists.");
}
receiverToUpdate.getSlackConfigs().add(slackConfig);
return alertManagerConfig;
}
use of io.hops.hopsworks.alerting.exceptions.AlertManagerDuplicateEntryException in project hopsworks by logicalclocks.
the class AdminRouteResource method create.
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Create a receiver.")
@JWTRequired(acceptedTokens = { Audience.API }, allowedUserRoles = { "HOPS_ADMIN" })
public Response create(PostableRouteDTO routeDTO, @Context UriInfo uriInfo, @Context SecurityContext sc) throws AlertException {
if (routeDTO == null) {
throw new AlertException(RESTCodes.AlertErrorCode.ILLEGAL_ARGUMENT, Level.FINE, "No payload.");
}
Route route = routeBuilder.toRoute(routeDTO);
try {
alertManagerConfiguration.addRoute(route);
} 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.RECEIVER_NOT_FOUND, Level.FINE, e.getMessage());
}
ResourceRequest resourceRequest = new ResourceRequest(ResourceRequest.Name.ROUTES);
RouteDTO dto = routeBuilder.build(uriInfo, resourceRequest, route, null);
return Response.created(dto.getHref()).build();
}
use of io.hops.hopsworks.alerting.exceptions.AlertManagerDuplicateEntryException in project hopsworks by logicalclocks.
the class AdminRouteResource method update.
@PUT
@Path("{receiver}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Create a receiver.")
@JWTRequired(acceptedTokens = { Audience.API }, allowedUserRoles = { "HOPS_ADMIN" })
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 {
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);
} 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());
}
ResourceRequest resourceRequest = new ResourceRequest(ResourceRequest.Name.ROUTES);
RouteDTO dto = routeBuilder.build(uriInfo, resourceRequest, updatedRoute, null);
return Response.ok().entity(dto).build();
}
Aggregations