package com.intrbiz.bergamot.ui.action; import org.apache.log4j.Logger; import com.intrbiz.accounting.Accounting; import com.intrbiz.bergamot.accounting.model.ExecuteCheckAccountingEvent; import com.intrbiz.bergamot.model.ActiveCheck; import com.intrbiz.bergamot.model.message.check.ExecuteCheck; import com.intrbiz.bergamot.queue.WorkerQueue; import com.intrbiz.bergamot.queue.key.WorkerKey; import com.intrbiz.metadata.Action; import com.intrbiz.queue.RoutedProducer; public class ExecuteCheckAction { private Logger logger = Logger.getLogger(ExecuteCheckAction.class); private WorkerQueue queue; private RoutedProducer<ExecuteCheck, WorkerKey> executeCheckProducer; private Accounting accounting = Accounting.create(ExecuteCheckAction.class); public ExecuteCheckAction() { this.queue = WorkerQueue.open(); this.executeCheckProducer = this.queue.publishChecks(); } @Action("execute-check") public void executeCheck(ActiveCheck<?,?> check) { // fire off the check ExecuteCheck executeCheck = check.executeCheck(); if (executeCheck != null) { if (logger.isTraceEnabled()) logger.trace("Executing check:\r\n" + executeCheck); // account this.accounting.account(new ExecuteCheckAccountingEvent(executeCheck.getSiteId(), executeCheck.getId(), check.getId(), executeCheck.getEngine(), executeCheck.getExecutor(), executeCheck.getName())); // execute synchronized (this) { this.executeCheckProducer.publish(check.getRoutingKey(), executeCheck, check.getMessageTTL()); } } } }