/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2011 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
* OpenNMS(R) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* OpenNMS(R) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenNMS(R). If not, see:
* http://www.gnu.org/licenses/
*
* For more information contact:
* OpenNMS(R) Licensing <license@opennms.org>
* http://www.opennms.org/
* http://www.opennms.com/
*******************************************************************************/
package org.opennms.netmgt.scriptd.helper;
import java.net.UnknownHostException;
import org.opennms.core.utils.InetAddressUtils;
import org.opennms.core.utils.LogUtils;
import org.opennms.netmgt.snmp.SnmpTrapBuilder;
import org.opennms.netmgt.snmp.SnmpV2TrapBuilder;
import org.opennms.netmgt.snmp.SnmpV3TrapBuilder;
import org.opennms.netmgt.xml.event.Event;
public abstract class SnmpTrapForwarderHelper extends AbstractEventForwarder implements
EventForwarder {
String source_ip;
String ip;
String community;
int port;
int timeout;
int retries;
int securityLevel;
String securityname;
String authPassPhrase;
String authProtocol;
String privPassPhrase;
String privprotocol;
SnmpTrapHelper snmpTrapHelper;
public SnmpTrapHelper getSnmpTrapHelper() {
return snmpTrapHelper;
}
public void setSnmpTrapHelper(SnmpTrapHelper snmpTrapHelper) {
this.snmpTrapHelper = snmpTrapHelper;
}
public int getTimeout() {
return timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public int getRetries() {
return retries;
}
public void setRetries(int retries) {
this.retries = retries;
}
public SnmpTrapForwarderHelper(String source_ip, String ip, int port, String community,SnmpTrapHelper snmpTrapHelper) {
this.source_ip = source_ip;
this.ip = ip;
this.port=port;
this.community=community;
this.snmpTrapHelper = snmpTrapHelper;
}
public SnmpTrapForwarderHelper(String ip, int port, String community, SnmpTrapHelper snmpTrapHelper) {
this.ip = ip;
this.port=port;
this.community=community;
this.snmpTrapHelper = snmpTrapHelper;
}
public SnmpTrapForwarderHelper(String ip, int port, String community, int timeout, int retries, SnmpTrapHelper snmpTrapHelper) {
this.ip = ip;
this.port=port;
this.community=community;
this.snmpTrapHelper = snmpTrapHelper;
this.timeout = timeout;
this.retries = retries;
}
public SnmpTrapForwarderHelper(String ip, int port, int securityLevel,
String securityname, String authPassPhrase, String authProtocol,
String privPassPhrase, String privprotocol, SnmpTrapHelper snmpTrapHelper) {
super();
this.ip = ip;
this.port = port;
this.securityLevel = securityLevel;
this.securityname = securityname;
this.authPassPhrase = authPassPhrase;
this.authProtocol = authProtocol;
this.privPassPhrase = privPassPhrase;
this.privprotocol = privprotocol;
this.snmpTrapHelper = snmpTrapHelper;
}
public SnmpTrapForwarderHelper(String ip, int port, int securityLevel,
String securityname, String authPassPhrase, String authProtocol,
String privPassPhrase, String privprotocol, int timeout, int retries, SnmpTrapHelper snmpTrapHelper) {
super();
this.ip = ip;
this.port = port;
this.securityLevel = securityLevel;
this.securityname = securityname;
this.authPassPhrase = authPassPhrase;
this.authProtocol = authProtocol;
this.privPassPhrase = privPassPhrase;
this.privprotocol = privprotocol;
this.snmpTrapHelper = snmpTrapHelper;
this.timeout = timeout;
this.retries = retries;
}
public void sendV1StartSyncTrap() {
try {
SnmpTrapBuilder trap = snmpTrapHelper.createV1Trap(".1.3.6.1.4.1.5813.1",getSource_ip(), 6, 5, 0);
trap.send(getIp(), getPort(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV1EndSyncTrap() {
try {
SnmpTrapBuilder trap = snmpTrapHelper.createV1Trap(".1.3.6.1.4.1.5813.1",getSource_ip(), 6, 6, 0);
trap.send(getIp(), getPort(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV2StartSyncTrap() {
long trapTimeStamp = 0;
try {
SnmpTrapBuilder trap = snmpTrapHelper.createV2Trap(".1.3.6.1.4.1.5813.1.5",Long.toString(trapTimeStamp));
trap.send(getIp(), getPort(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV2EndSyncTrap() {
long trapTimeStamp = 0;
try {
SnmpTrapBuilder trap = snmpTrapHelper.createV2Trap(".1.3.6.1.4.1.5813.1.6",Long.toString(trapTimeStamp));
trap.send(getIp(), getPort(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV2StartSyncInform() {
long trapTimeStamp = 0;
try {
SnmpV2TrapBuilder inform = snmpTrapHelper.createV2Inform(".1.3.6.1.4.1.5813.1.5",Long.toString(trapTimeStamp));
inform.sendInform(getIp(), getPort(), getTimeout(), getRetries(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV2EndSyncInform() {
long trapTimeStamp = 0;
try {
SnmpV2TrapBuilder inform = snmpTrapHelper.createV2Inform(".1.3.6.1.4.1.5813.1.6",Long.toString(trapTimeStamp));
inform.sendInform(getIp(), getPort(), getTimeout(), getRetries(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV3StartSyncTrap() {
long trapTimeStamp = 0;
try {
SnmpV3TrapBuilder trap = snmpTrapHelper.createV3Trap(".1.3.6.1.4.1.5813.1.5",Long.toString(trapTimeStamp));
trap.send(getIp(), getPort(), getSecurityLevel(), getSecurityname(), getAuthPassPhrase(), getAuthProtocol(), getPrivPassPhrase(), getPrivprotocol());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV3EndSyncTrap() {
long trapTimeStamp = 0;
try {
SnmpV3TrapBuilder trap = snmpTrapHelper.createV3Trap(".1.3.6.1.4.1.5813.1.6",Long.toString(trapTimeStamp));
trap.send(getIp(), getPort(), getSecurityLevel(), getSecurityname(), getAuthPassPhrase(), getAuthProtocol(), getPrivPassPhrase(), getPrivprotocol());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV3StartSyncInform() {
long trapTimeStamp = 0;
try {
SnmpV3TrapBuilder inform = snmpTrapHelper.createV3Inform(".1.3.6.1.4.1.5813.1.5",Long.toString(trapTimeStamp));
inform.sendInform(getIp(), getPort(), getTimeout(), getRetries(),getSecurityLevel(), getSecurityname(), getAuthPassPhrase(), getAuthProtocol(), getPrivPassPhrase(), getPrivprotocol());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV3EndSyncInform() {
long trapTimeStamp = 0;
try {
SnmpV3TrapBuilder inform = snmpTrapHelper.createV3Inform(".1.3.6.1.4.1.5813.1.6",Long.toString(trapTimeStamp));
inform.sendInform(getIp(), getPort(), getTimeout(), getRetries(),getSecurityLevel(), getSecurityname(), getAuthPassPhrase(), getAuthProtocol(), getPrivPassPhrase(), getPrivprotocol());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV1AlarmTrap( Event event, boolean sync) throws UnknownHostException {
SnmpTrapBuilder trap = snmpTrapHelper.createV1Trap(".1.3.6.1.4.1.5813.1",getSource_ip(), 6, 3, 0);
trap = buildAlarmTrap(event, sync, trap);
try {
trap.send(getIp(), getPort(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV2AlarmTrap( Event event, boolean sync) throws UnknownHostException, SnmpTrapHelperException {
long trapTimeStamp = 0;
SnmpTrapBuilder trap = snmpTrapHelper.createV2Trap(".1.3.6.1.4.1.5813.1.3",Long.toString(trapTimeStamp));
trap=buildAlarmTrap(event, sync, trap);
try {
trap.send(getIp(), getPort(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV3AlarmTrap( Event event, boolean sync) throws UnknownHostException, SnmpTrapHelperException {
long trapTimeStamp = 0;
SnmpTrapBuilder trap = snmpTrapHelper.createV3Trap(".1.3.6.1.4.1.5813.1.3",Long.toString(trapTimeStamp));
trap=buildAlarmTrap(event, sync, trap);
SnmpV3TrapBuilder v3trap = (SnmpV3TrapBuilder) trap;
try {
v3trap.send(getIp(), getPort(), getSecurityLevel(), getSecurityname(), getAuthPassPhrase(), getAuthProtocol(), getPrivPassPhrase(), getPrivprotocol());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV2AlarmInform( Event event, boolean sync) throws UnknownHostException, SnmpTrapHelperException {
long trapTimeStamp = 0;
SnmpTrapBuilder trap = snmpTrapHelper.createV2Inform(".1.3.6.1.4.1.5813.1.3",Long.toString(trapTimeStamp));
trap=buildAlarmTrap(event, sync, trap);
SnmpV2TrapBuilder inform = (SnmpV2TrapBuilder) trap;
try {
inform.sendInform(getIp(), getPort(), getTimeout(), getRetries(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV3AlarmInform( Event event, boolean sync) throws UnknownHostException, SnmpTrapHelperException {
long trapTimeStamp = 0;
SnmpTrapBuilder trap = snmpTrapHelper.createV3Inform(".1.3.6.1.4.1.5813.1.3",Long.toString(trapTimeStamp));
trap=buildAlarmTrap(event, sync, trap);
SnmpV3TrapBuilder inform = (SnmpV3TrapBuilder) trap;
try {
inform.sendInform(getIp(), getPort(), getTimeout(), getRetries(),getSecurityLevel(), getSecurityname(), getAuthPassPhrase(), getAuthProtocol(), getPrivPassPhrase(), getPrivprotocol());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV1EventTrap( Event event) throws UnknownHostException {
SnmpTrapBuilder trap = snmpTrapHelper.createV1Trap(".1.3.6.1.4.1.5813.1",getSource_ip(), 6, 1, 0);
trap = buildEventTrap(event, trap, null);
try {
trap.send(getIp(), getPort(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV2EventTrap( Event event) throws UnknownHostException, SnmpTrapHelperException {
long trapTimeStamp = 0;
SnmpTrapBuilder trap = snmpTrapHelper.createV2Trap(".1.3.6.1.4.1.5813.1.1",Long.toString(trapTimeStamp));
trap = buildEventTrap(event, trap, null);
try {
trap.send(getIp(), getPort(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV3EventTrap( Event event) throws UnknownHostException, SnmpTrapHelperException {
long trapTimeStamp = 0;
SnmpTrapBuilder trap = snmpTrapHelper.createV3Trap(".1.3.6.1.4.1.5813.1.1",Long.toString(trapTimeStamp));
trap = buildEventTrap(event, trap,null);
SnmpV3TrapBuilder v3trap = (SnmpV3TrapBuilder) trap;
try {
v3trap.send(getIp(), getPort(), getSecurityLevel(), getSecurityname(), getAuthPassPhrase(), getAuthProtocol(), getPrivPassPhrase(), getPrivprotocol());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV2EventInform( Event event) throws UnknownHostException, SnmpTrapHelperException {
long trapTimeStamp = 0;
SnmpTrapBuilder trap = snmpTrapHelper.createV2Inform(".1.3.6.1.4.1.5813.1.1",Long.toString(trapTimeStamp));
trap=buildEventTrap(event,trap,null);
SnmpV2TrapBuilder inform = (SnmpV2TrapBuilder) trap;
try {
inform.sendInform(getIp(), getPort(), getTimeout(), getRetries(), getCommunity());
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendV3EventInform( Event event) throws UnknownHostException, SnmpTrapHelperException {
long trapTimeStamp = 0;
SnmpTrapBuilder trap = snmpTrapHelper.createV3Inform(".1.3.6.1.4.1.5813.1.1",Long.toString(trapTimeStamp));
trap=buildEventTrap(event,trap,null);
SnmpV3TrapBuilder inform = (SnmpV3TrapBuilder) trap;
try {
inform.sendInform(getIp(), getPort(), getTimeout(), getRetries(),getSecurityLevel(), getSecurityname(), getAuthPassPhrase(), getAuthProtocol(), getPrivPassPhrase(), getPrivprotocol());
} catch (Exception e) {
e.printStackTrace();
}
}
private SnmpTrapBuilder buildAlarmTrap(Event event, boolean sync, SnmpTrapBuilder trap) {
try {
if (event.getAlarmData() != null ) {
if (event.getAlarmData().getAlarmType() == 2) {
trap = buildEventTrap(event, trap, "Cleared");
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.3.1.0", "OctetString", "text", event.getAlarmData().getClearKey());
} else {
trap = buildEventTrap(event, trap, null);
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.3.1.0", "OctetString", "text", event.getAlarmData().getReductionKey());
}
} else {
trap = buildEventTrap(event, trap, null);
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.3.1.0", "OctetString", "text", "null");
}
if (sync)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.3.2.0", "OctetString", "text", "SYNC");
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.3.2.0", "OctetString", "text", "null");
} catch (SnmpTrapHelperException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return trap;
}
private SnmpTrapBuilder buildEventTrap(Event event, SnmpTrapBuilder trap, String severity) {
try {
Integer t_dbid = new Integer(event.getDbid());
if (t_dbid.intValue() > 0)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.1.0", "OctetString", "text", t_dbid.toString());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.1.0", "OctetString", "text", "null");
if (event.getDistPoller() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.2.0", "OctetString", "text", event.getDistPoller());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.2.0", "OctetString", "text", "null");
if (event.getCreationTime() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.3.0", "OctetString", "text", event.getCreationTime());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.3.0", "OctetString", "text", "null");
if (event.getMasterStation() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.4.0", "OctetString", "text", event.getMasterStation());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.4.0", "OctetString", "text", "null");
if (event.getUei() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.6.0", "OctetString", "text", event.getUei());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.6.0", "OctetString", "text", "null");
if (event.getSource() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.7.0", "OctetString", "text", event.getSource());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.7.0", "OctetString", "text", "null");
String label=null;
if (event.hasNodeid()) {
label = DbHelper.getNodeLabel(new Integer(new Long(event.getNodeid()).toString()));
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.8.0", "OctetString", "text", new Long(event.getNodeid()).toString());
} else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.8.0", "OctetString", "text", "null");
if (event.getTime() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.9.0", "OctetString", "text", event.getTime());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.9.0", "OctetString", "text", "null");
if (event.getHost() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.10.0", "OctetString", "text", event.getHost());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.10.0", "OctetString", "text", "null");
if (event.getInterface() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.11.0", "OctetString", "text", event.getInterface());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.11.0", "OctetString", "text", "null");
if (event.getSnmphost() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.12.0", "OctetString", "text", event.getSnmphost());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.12.0", "OctetString", "text", "null");
if (event.getService() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.13.0", "OctetString", "text", event.getService());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.13.0", "OctetString", "text", "null");
if (event.getDescr() != null) {
String descrString = event.getDescr().replaceAll("<.*>", " ").replaceAll("\\s+", " ");
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.16.0", "OctetString", "text", descrString);
} else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.16.0", "OctetString", "text", "null");
if (event.getLogmsg() != null && event.getLogmsg().getContent() != null) {
String logString = event.getLogmsg().getContent().replaceAll("<.*>", " ").replaceAll("\\s+", " ");
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.17.0", "OctetString", "text", logString);
} else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.17.0", "OctetString", "text", "null");
if (severity == null && event.getSeverity() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.18.0", "OctetString", "text", event.getSeverity());
else if (severity != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.18.0", "OctetString", "text", severity);
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.18.0", "OctetString", "text", "null");
if (event.getPathoutage() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.19.0", "OctetString", "text", event.getPathoutage());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.19.0", "OctetString", "text", "null");
if (event.getOperinstruct() != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.20.0", "OctetString", "text", event.getOperinstruct());
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.20.0", "OctetString", "text", "null");
String retParmVal = null;
if (event.getInterface() != null) {
retParmVal = event.getInterface();
java.net.InetAddress inet = InetAddressUtils.addr(retParmVal);
retParmVal = inet.getHostName();
}
if (retParmVal != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.21.0", "OctetString", "text", retParmVal);
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.21.0", "OctetString", "text", "null");
if (label != null)
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.22.0", "OctetString", "text", label);
else
snmpTrapHelper.addVarBinding(trap, ".1.3.6.1.4.1.5813.20.1.22.0", "OctetString", "text", "null");
} catch (final IllegalArgumentException e) {
LogUtils.warnf(this, e, "Failed to look up host.");
} catch (final SnmpTrapHelperException e) {
LogUtils.warnf(this, e, "An SNMP trap helpre error occurred while parsing traps.");
} catch (final Throwable t) {
LogUtils.warnf(this, t, "An unknown error occurred while parsing traps.");
}
return trap;
}
public String getSource_ip() {
return source_ip;
}
public void setSource_ip(String source_ip) {
this.source_ip = source_ip;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getCommunity() {
return community;
}
public void setCommunity(String community) {
this.community = community;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public int getSecurityLevel() {
return securityLevel;
}
public void setSecurityLevel(int securityLevel) {
this.securityLevel = securityLevel;
}
public String getSecurityname() {
return securityname;
}
public void setSecurityname(String securityname) {
this.securityname = securityname;
}
public String getAuthPassPhrase() {
return authPassPhrase;
}
public void setAuthPassPhrase(String authPassPhrase) {
this.authPassPhrase = authPassPhrase;
}
public String getAuthProtocol() {
return authProtocol;
}
public void setAuthProtocol(String authProtocol) {
this.authProtocol = authProtocol;
}
public String getPrivPassPhrase() {
return privPassPhrase;
}
public void setPrivPassPhrase(String privPassPhrase) {
this.privPassPhrase = privPassPhrase;
}
public String getPrivprotocol() {
return privprotocol;
}
public void setPrivprotocol(String privprotocol) {
this.privprotocol = privprotocol;
}
}