use of javax.ws.rs.Path in project jersey by jersey.
the class SseEventSinkToEventSourceTest method testWithJerseyApi.
@Test
public void testWithJerseyApi() throws InterruptedException {
final WebTarget endpoint = target().path("events");
final EventSource eventSource = EventSource.target(endpoint).build();
transmitLatch = new CountDownLatch(MSG_COUNT);
final CountDownLatch receiveLatch = new CountDownLatch(MSG_COUNT);
final List<Integer> results = new ArrayList<>();
final EventListener listener = inboundEvent -> {
try {
results.add(inboundEvent.readData(Integer.class));
receiveLatch.countDown();
Assert.assertEquals(INTEGER_SSE_NAME, inboundEvent.getName());
} catch (ProcessingException ex) {
throw new RuntimeException("Error when deserializing of data.", ex);
}
};
eventSource.register(listener, INTEGER_SSE_NAME);
eventSource.open();
Assert.assertTrue(transmitLatch.await(5000, TimeUnit.MILLISECONDS));
Assert.assertTrue(receiveLatch.await(5000, TimeUnit.MILLISECONDS));
Assert.assertEquals(10, results.size());
}
use of javax.ws.rs.Path in project jersey by jersey.
the class TestExceptionResource method getUnmappedException.
@GET
@Path("unmapped")
public void getUnmappedException(@Suspended final AsyncResponse asyncResponse) {
lastProcessingThread = Thread.currentThread();
asyncResponse.resume(new UnmappedException());
}
use of javax.ws.rs.Path in project jersey by jersey.
the class TestExceptionResource method getUnmappedRuntimeException.
@GET
@Path("runtime")
public void getUnmappedRuntimeException(@Suspended final AsyncResponse asyncResponse) {
lastProcessingThread = Thread.currentThread();
asyncResponse.resume(new UnmappedRuntimeException());
}
use of javax.ws.rs.Path in project pinot by linkedin.
the class DetectionJobResource method computeSeverity.
/**
* Returns the weight of the metric at the given window. The calculation of baseline (history) data is specified by
* seasonal period (in days) and season count. Seasonal period is the difference of duration from one window to the
* other. For instance, to use the data that is one week before current window, set seasonal period to 7. The season
* count specify how many seasons of history data to retrieve. If there are more than 1 season, then the baseline is
* the average of all seasons.
*
* Examples of the configuration of baseline:
* 1. Week-Over-Week: seasonalPeriodInDays = 7, seasonCount = 1
* 2. Week-Over-4-Weeks-Mean: seasonalPeriodInDays = 7, seasonCount = 4
* 3. Month-Over-Month: seasonalPeriodInDays = 30, seasonCount = 1
*
* @param collectionName the collection to which the metric belong
* @param metricName the metric name
* @param startTimeIso start time of current window, inclusive
* @param endTimeIso end time of current window, exclusive
* @param seasonalPeriodInDays the difference of duration between the start time of each window
* @param seasonCount the number of history windows
*
* @return the weight of the metric at the given window
* @throws Exception
*/
@POST
@Path("/anomaly-weight")
public Response computeSeverity(@NotNull @QueryParam("collection") String collectionName, @NotNull @QueryParam("metric") String metricName, @NotNull @QueryParam("start") String startTimeIso, @NotNull @QueryParam("end") String endTimeIso, @QueryParam("period") String seasonalPeriodInDays, @QueryParam("seasonCount") String seasonCount) throws Exception {
DateTime startTime = null;
DateTime endTime = null;
if (StringUtils.isNotBlank(startTimeIso)) {
startTime = ISODateTimeFormat.dateTimeParser().parseDateTime(startTimeIso);
}
if (StringUtils.isNotBlank(endTimeIso)) {
endTime = ISODateTimeFormat.dateTimeParser().parseDateTime(endTimeIso);
}
long currentWindowStart = startTime.getMillis();
long currentWindowEnd = endTime.getMillis();
// Default is using one week data priors current values for calculating weight
long seasonalPeriodMillis = TimeUnit.DAYS.toMillis(7);
if (StringUtils.isNotBlank(seasonalPeriodInDays)) {
seasonalPeriodMillis = TimeUnit.DAYS.toMillis(Integer.parseInt(seasonalPeriodInDays));
}
int seasonCountInt = 1;
if (StringUtils.isNotBlank(seasonCount)) {
seasonCountInt = Integer.parseInt(seasonCount);
}
ThirdEyeClient thirdEyeClient = CACHE_REGISTRY_INSTANCE.getQueryCache().getClient();
SeverityComputationUtil util = new SeverityComputationUtil(thirdEyeClient, collectionName, metricName);
Map<String, Object> severity = util.computeSeverity(currentWindowStart, currentWindowEnd, seasonalPeriodMillis, seasonCountInt);
return Response.ok(severity.toString(), MediaType.TEXT_PLAIN_TYPE).build();
}
use of javax.ws.rs.Path in project pinot by linkedin.
the class DetectionJobResource method tuneAlertFilter.
/**
*
* @param id anomaly function id
* @param startTime start time of anomalies to tune alert filter
* @param endTime end time of anomalies to tune alert filter
* @param autoTuneType the type of auto tune to invoke (default is "AUTOTUNE")
* @return HTTP response of request: string of alert filter
*/
@POST
@Path("/autotune/filter/{functionId}")
public Response tuneAlertFilter(@PathParam("functionId") long id, @QueryParam("startTime") long startTime, @QueryParam("endTime") long endTime, @QueryParam("autoTuneType") String autoTuneType) {
// get anomalies by function id, start time and end time
AnomalyFunctionDTO anomalyFunctionSpec = DAO_REGISTRY.getAnomalyFunctionDAO().findById(id);
AnomalyFunctionManager anomalyFunctionDAO = DAO_REGISTRY.getAnomalyFunctionDAO();
MergedAnomalyResultManager anomalyMergedResultDAO = DAO_REGISTRY.getMergedAnomalyResultDAO();
List<MergedAnomalyResultDTO> anomalyResultDTOS = anomalyMergedResultDAO.findByStartTimeInRangeAndFunctionId(startTime, endTime, id);
// create alert filter and evaluator
AlertFilter alertFilter = alertFilterFactory.fromSpec(anomalyFunctionSpec.getAlertFilter());
AlertFilterEvaluationUtil evaluator = new AlertFilterEvaluationUtil(alertFilter);
// create alert filter auto tune
AlertFilterAutoTune alertFilterAutotune = alertFilterAutotuneFactory.fromSpec(autoTuneType);
LOG.info("initiated alertFilterAutoTune of Type {}", alertFilterAutotune.getClass().toString());
try {
//evaluate current alert filter (calculate current precision and recall)
evaluator.updatePrecisionAndRecall(anomalyResultDTOS);
LOG.info("AlertFilter of Type {}, has been evaluated with precision: {}, recall: {}", alertFilter.getClass().toString(), evaluator.getPrecision(), evaluator.getRecall());
// get tuned alert filter
Map<String, String> tunedAlertFilter = alertFilterAutotune.tuneAlertFilter(anomalyResultDTOS, evaluator.getPrecision(), evaluator.getRecall());
LOG.info("tuned AlertFilter");
// otherwise do nothing and return alert filter
if (alertFilterAutotune.isUpdated()) {
anomalyFunctionSpec.setAlertFilter(tunedAlertFilter);
anomalyFunctionDAO.update(anomalyFunctionSpec);
LOG.info("Model has been updated");
} else {
LOG.info("Model hasn't been updated because tuned model cannot beat original model");
}
} catch (Exception e) {
LOG.warn("AutoTune throws exception due to: {}", e.getMessage());
}
return Response.ok(alertFilterAutotune.isUpdated()).build();
}
Aggregations