package com.intrbiz.bergamot.model; import java.util.Map.Entry; import java.util.UUID; import org.apache.log4j.Logger; import com.intrbiz.bergamot.config.model.PassiveCheckCfg; import com.intrbiz.bergamot.express.BergamotEntityResolver; import com.intrbiz.bergamot.io.BergamotTranscoder; import com.intrbiz.bergamot.model.message.PassiveCheckMO; import com.intrbiz.bergamot.model.message.event.watcher.RegisterCheck; import com.intrbiz.bergamot.model.message.event.watcher.UnregisterCheck; import com.intrbiz.bergamot.model.util.Parameter; import com.intrbiz.express.DefaultContext; import com.intrbiz.express.ExpressContext; import com.intrbiz.express.value.ValueExpression; /** * A check which is never polled */ public abstract class PassiveCheck<T extends PassiveCheckMO, C extends PassiveCheckCfg<C>> extends RealCheck<T,C> { private static final long serialVersionUID = 1L; public PassiveCheck() { super(); } /** * Construct the register check message for this check */ public final RegisterCheck registerCheck() { Logger logger = Logger.getLogger(PassiveCheck.class); CheckCommand checkCommand = this.getCheckCommand(); if (checkCommand == null) return null; Command command = checkCommand.getCommand(); if (command == null) return null; if (logger.isTraceEnabled()) logger.trace("Registering check for " + this.getId() + " " + this.getName() + " with command " + command); RegisterCheck registerCheck = new RegisterCheck(); registerCheck.setId(UUID.randomUUID()); registerCheck.setSiteId(this.getSiteId()); registerCheck.setCheckType(this.getType()); registerCheck.setCheckId(this.getId()); registerCheck.setProcessingPool(this.getPool()); registerCheck.setEngine(command.getEngine()); registerCheck.setExecutor(command.getExecutor()); registerCheck.setName(command.getName()); ExpressContext context = new DefaultContext(new BergamotEntityResolver()); // configured parameters for (Entry<String, Parameter> parameter : checkCommand.resolveCheckParameters().entrySet()) { try { ValueExpression vexp = new ValueExpression(context, parameter.getValue().getValue()); String value = (String) vexp.get(context, this); if (logger.isTraceEnabled()) logger.trace("Adding parameter: " + parameter.getKey() + " => " + value + " (" + parameter.getValue().getValue() + ")"); registerCheck.setParameter(parameter.getKey(), value); } catch (Exception e) { logger.error("Error computing parameter value, for check: " + this.getType() + "::" + this.getId() + " " + this.getName() , e); } } if (logger.isTraceEnabled()) logger.trace("Register check: " + new BergamotTranscoder().encodeAsString(registerCheck)); return registerCheck; } /** * Construct the unregister check message for this check */ public final UnregisterCheck unregisterCheck() { Logger logger = Logger.getLogger(PassiveCheck.class); CheckCommand checkCommand = this.getCheckCommand(); if (checkCommand == null) return null; Command command = checkCommand.getCommand(); if (command == null) return null; if (logger.isTraceEnabled()) logger.trace("Unregistering check for " + this.getId() + " " + this.getName() + " with command " + command); UnregisterCheck unregisterCheck = new UnregisterCheck(); unregisterCheck.setId(UUID.randomUUID()); unregisterCheck.setSiteId(this.getSiteId()); unregisterCheck.setCheckType(this.getType()); unregisterCheck.setCheckId(this.getId()); unregisterCheck.setProcessingPool(this.getPool()); unregisterCheck.setEngine(command.getEngine()); unregisterCheck.setExecutor(command.getExecutor()); unregisterCheck.setName(command.getName()); ExpressContext context = new DefaultContext(new BergamotEntityResolver()); // configured parameters for (Entry<String, Parameter> parameter : checkCommand.resolveCheckParameters().entrySet()) { try { ValueExpression vexp = new ValueExpression(context, parameter.getValue().getValue()); String value = (String) vexp.get(context, this); if (logger.isTraceEnabled()) logger.trace("Adding parameter: " + parameter.getKey() + " => " + value + " (" + parameter.getValue().getValue() + ")"); unregisterCheck.setParameter(parameter.getKey(), value); } catch (Exception e) { logger.error("Error computing parameter value, for check: " + this.getType() + "::" + this.getId() + " " + this.getName() , e); } } if (logger.isTraceEnabled()) logger.trace("Unregister check: " + new BergamotTranscoder().encodeAsString(unregisterCheck)); return unregisterCheck; } }