package com.intrbiz.bergamot.worker.engine.snmp; import com.intrbiz.Util; import com.intrbiz.bergamot.model.message.check.ExecuteCheck; import com.intrbiz.bergamot.model.message.result.ActiveResultMO; import com.intrbiz.snmp.SNMPContext; import com.intrbiz.snmp.error.SNMPTimeout; /** * Execute simple SNMP gets */ public class GetSNMPExecutor extends AbstractSNMPExecutor { public GetSNMPExecutor() { super(); } /** * Where executor == 'get' */ @Override public boolean accept(ExecuteCheck task) { return super.accept(task) && "get".equalsIgnoreCase(task.getExecutor()); } @Override protected void executeSNMP(ExecuteCheck executeCheck, SNMPContext<?> agent) throws Exception { // we need an OID to get if (Util.isEmpty(executeCheck.getParameter("oid"))) throw new RuntimeException("The OID to get must be defined!"); // get the OID final long start = System.currentTimeMillis(); agent.getValue( executeCheck.getParameter("oid"), (vb) -> { long runtime = System.currentTimeMillis() - start; this.publishActiveResult(executeCheck, new ActiveResultMO() .fromCheck(executeCheck) .info(Util.coalesce(executeCheck.getParameter("prefix"), "") + vb.valueToString() + Util.coalesce(executeCheck.getParameter("suffix"), "")) .runtime(runtime) ); }, (ex) -> { long runtime = System.currentTimeMillis() - start; if (ex instanceof SNMPTimeout) { // timeout this.publishActiveResult(executeCheck, new ActiveResultMO() .fromCheck(executeCheck) .timeout(ex.getMessage()) .runtime(runtime) ); } else { // generic error this.publishActiveResult(executeCheck, new ActiveResultMO() .fromCheck(executeCheck) .error(ex) .runtime(runtime) ); } } ); } }