package com.intrbiz.bergamot.agent.handler; import java.io.IOException; import java.util.List; import org.apache.log4j.Logger; import com.intrbiz.bergamot.model.message.agent.AgentMessage; import com.intrbiz.bergamot.model.message.agent.check.ExecCheck; import com.intrbiz.bergamot.model.message.agent.stat.ExecStat; import com.intrbiz.bergamot.model.message.agent.util.Parameter; import com.intrbiz.bergamot.nagios.NagiosPluginExecutor; import com.intrbiz.bergamot.nagios.model.NagiosPerfData; import com.intrbiz.bergamot.nagios.model.NagiosResult; import com.intrbiz.bergamot.util.AgentUtil; import com.intrbiz.gerald.polyakov.Reading; public class ExecHandler extends AbstractAgentHandler { private Logger logger = Logger.getLogger(ExecHandler.class); private NagiosPluginExecutor executor; public ExecHandler() { super(); this.executor = new NagiosPluginExecutor(); } @Override public Class<?>[] getMessages() { return new Class[] { ExecCheck.class }; } @Override public AgentMessage handle(AgentMessage request) { ExecCheck check = (ExecCheck) request; // ExecStat stat = new ExecStat(request); // if (Boolean.getBoolean("bergamot.agent.no-exec")) { logger.error("Cannot execute check, administratively disabled!"); stat.error("Cannot execute check, administratively disabled!"); } else { try { if ("nagios".equalsIgnoreCase(check.getEngine())) { // validate the command line String commandLine = getParameter(check.getParameters(), "command_line"); if (AgentUtil.isEmpty(commandLine)) throw new RuntimeException("The command_line must be defined!"); NagiosResult response = this.executor.execute(commandLine); stat.setOk(response.toOk()); stat.setStatus(response.toStatus()); stat.setOutput(response.getOutput()); stat.setRuntime(response.getRuntime()); // readings stat.setCaptured(System.currentTimeMillis()); for (NagiosPerfData perf : response.getPerfData()) { Reading reading = perf.toReading(); if (reading != null) stat.getReadings().add(reading); } } else { stat.error("Cannot execute check, unknown engine!"); } } catch (IOException e) { logger.error("Failed to execute nagios check command", e); stat.error(e); } catch (InterruptedException e) { logger.error("Failed to execute nagios check command", e); stat.error(e); } } // return stat; } private static String getParameter(List<Parameter> parameters, String name) { for (Parameter parameter : parameters) { if (name.equals(parameter.getName())) return parameter.getValue(); } return null; } }