private void handleResults(List<AnomalyResult> results) { Session session = sessionFactory.openSession(); try { ManagedSessionContext.bind(session); Transaction transaction = session.beginTransaction(); try { for (AnomalyResult result : results) { // Properties that always come from the function spec AnomalyFunctionSpec spec = anomalyFunction.getSpec(); result.setFunctionId(spec.getId()); result.setFunctionType(spec.getType()); result.setFunctionProperties(spec.getProperties()); result.setCollection(spec.getCollection()); result.setMetric(spec.getMetric()); result.setFilters(spec.getFilters()); // make sure score and weight are valid numbers result.setScore(normalize(result.getScore())); result.setWeight(normalize(result.getWeight())); resultDAO.createOrUpdate(result); } transaction.commit(); } catch (Exception e) { transaction.rollback(); throw new RuntimeException(e); } } finally { session.close(); ManagedSessionContext.unbind(sessionFactory); } }
public void runAdHoc(Long id, String windowStartIsoString, String windowEndIsoString) throws Exception { synchronized (sync) { AnomalyFunctionSpec spec = specDAO.findById(id); if (spec == null) { throw new IllegalArgumentException("No function with id " + id); } AnomalyFunction anomalyFunction = anomalyFunctionFactory.fromSpec(spec); String triggerKey = String.format("ad_hoc_anomaly_function_trigger_%d", spec.getId()); Trigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).startNow().build(); String jobKey = String.format("ad_hoc_anomaly_function_job_%d", spec.getId()); buildAndScheduleJob( jobKey, trigger, anomalyFunction, spec, windowStartIsoString, windowEndIsoString); } }
public void start(Long id) throws Exception { synchronized (sync) { AnomalyFunctionSpec spec = specDAO.findById(id); if (spec == null) { throw new IllegalArgumentException("No function with id " + id); } AnomalyFunction anomalyFunction = anomalyFunctionFactory.fromSpec(spec); String triggerKey = String.format("scheduled_anomaly_function_trigger_%d", spec.getId()); CronTrigger trigger = TriggerBuilder.newTrigger() .withIdentity(triggerKey) .withSchedule(CronScheduleBuilder.cronSchedule(spec.getCron())) .build(); String jobKey = String.format("scheduled_anomaly_function_job_%d", spec.getId()); scheduledJobKeys.put(id, jobKey); buildAndScheduleJob(jobKey, trigger, anomalyFunction, spec, null, null); // use schedule time // to determine // start/end } }