/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2010-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.reporting.availability;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import junit.framework.Assert;
import org.opennms.core.utils.InetAddressUtils;
import org.opennms.core.utils.LogUtils;
import org.opennms.netmgt.dao.AcknowledgmentDao;
import org.opennms.netmgt.dao.AlarmDao;
import org.opennms.netmgt.dao.AssetRecordDao;
import org.opennms.netmgt.dao.CategoryDao;
import org.opennms.netmgt.dao.DataLinkInterfaceDao;
import org.opennms.netmgt.dao.DistPollerDao;
import org.opennms.netmgt.dao.EventDao;
import org.opennms.netmgt.dao.IpInterfaceDao;
import org.opennms.netmgt.dao.LocationMonitorDao;
import org.opennms.netmgt.dao.MonitoredServiceDao;
import org.opennms.netmgt.dao.NodeDao;
import org.opennms.netmgt.dao.NotificationDao;
import org.opennms.netmgt.dao.OnmsMapDao;
import org.opennms.netmgt.dao.OnmsMapElementDao;
import org.opennms.netmgt.dao.OutageDao;
import org.opennms.netmgt.dao.ServiceTypeDao;
import org.opennms.netmgt.dao.SnmpInterfaceDao;
import org.opennms.netmgt.dao.UserNotificationDao;
import org.opennms.netmgt.model.NetworkBuilder;
import org.opennms.netmgt.model.OnmsCategory;
import org.opennms.netmgt.model.OnmsDistPoller;
import org.opennms.netmgt.model.OnmsEvent;
import org.opennms.netmgt.model.OnmsMonitoredService;
import org.opennms.netmgt.model.OnmsNode;
import org.opennms.netmgt.model.OnmsOutage;
import org.opennms.netmgt.model.OnmsServiceType;
/**
* Populates a test database with some entities (nodes, interfaces, services).
*
* Example usage:
* <pre>
* private DatabasePopulator m_populator;
*
* @Override
* protected String[] getConfigLocations() {
* return new String[] {
* "classpath:/META-INF/opennms/applicationContext-dao.xml",
* "classpath:/META-INF/opennms/applicationContext-databasePopulator.xml"
* };
* }
*
* @Override
* protected void onSetUpInTransactionIfEnabled() {
* m_populator.populateDatabase();
* }
*
* public void setPopulator(DatabasePopulator populator) {
* m_populator = populator;
* }
* </pre>
*
* @author <a href="mailto:dj@opennms.org">DJ Gregor</a>
*/
public class AvailabilityDatabasePopulator {
private DistPollerDao m_distPollerDao;
private NodeDao m_nodeDao;
private IpInterfaceDao m_ipInterfaceDao;
private SnmpInterfaceDao m_snmpInterfaceDao;
private MonitoredServiceDao m_monitoredServiceDao;
private ServiceTypeDao m_serviceTypeDao;
private AssetRecordDao m_assetRecordDao;
private CategoryDao m_categoryDao;
private OutageDao m_outageDao;
private EventDao m_eventDao;
private AlarmDao m_alarmDao;
private NotificationDao m_notificationDao;
private UserNotificationDao m_userNotificationDao;
private LocationMonitorDao m_locationMonitorDao;
private OnmsMapDao m_onmsMapDao;
private OnmsMapElementDao m_onmsMapElementDao;
private DataLinkInterfaceDao m_dataLinkInterfaceDao;
private AcknowledgmentDao m_acknowledgmentDao;
private OnmsNode m_node1;
public void populateDatabase() {
OnmsDistPoller distPoller = getDistPoller("localhost", "127.0.0.1");
OnmsCategory ac = getCategory("DEV_AC");
OnmsCategory mid = getCategory("IMP_mid");
OnmsCategory ops = getCategory("OPS_Online");
OnmsCategory catRouter = getCategory("Routers");
@SuppressWarnings("unused")
OnmsCategory catSwitches = getCategory("Switches");
OnmsCategory catServers = getCategory("Servers");
getCategory("Production");
getCategory("Test");
getCategory("Development");
getServiceType("ICMP");
getServiceType("SNMP");
getServiceType("HTTP");
// m_db.update("insert into node (nodeID, nodelabel, nodeCreateTime, nodeType) values (1,'test1.availability.opennms.org','2004-03-01 09:00:00','A')");
// m_db.update("insert into node (nodeID, nodelabel, nodeCreateTime, nodeType) values (2,'test2.availability.opennms.org','2004-03-01 09:00:00','A')");
//
// m_db.update("insert into service (serviceid, servicename) values\n"
// + "(1, 'ICMP');");
// m_db.update("insert into service (serviceid, servicename) values\n"
// + "(2, 'HTTP');");
// m_db.update("insert into service (serviceid, servicename) values\n"
// + "(3, 'SNMP');");
//
// m_db.update("insert into ipinterface (id, nodeid, ipaddr, ismanaged) values\n"
// + "(1, 1,'192.168.100.1','M');");
// m_db.update("insert into ipinterface (id, nodeid, ipaddr, ismanaged) values\n"
// + "(2, 2,'192.168.100.2','M');");
// m_db.update("insert into ipinterface (id, nodeid, ipaddr, ismanaged) values\n"
// + "(3, 2,'192.168.100.3','M');");
//
// m_db.update("insert into ifservices (nodeid, ipaddr, serviceid, status, ipInterfaceId) values "
// + "(1,'192.168.100.1',1,'A', 1);");
// m_db.update("insert into ifservices (nodeid, ipaddr, serviceid, status, ipInterfaceId) values "
// + "(2,'192.168.100.2',1,'A', 2);");
// /*
// * m_db.update("insert into ifservices (nodeid, ipaddr, serviceid,
// * status, ipInterfaceId) values " + "(2,'192.168.100.2',2,'A', 2);");
// */
// m_db.update("insert into ifservices (nodeid, ipaddr, serviceid, status, ipInterfaceId) values "
// + "(2,'192.168.100.3',1,'A', 3);");
NetworkBuilder builder = new NetworkBuilder(distPoller);
setNode1(builder.addNode("test1.availability.opennms.org").
setId(1).
setType("A").
getNode());
Assert.assertNotNull("newly built node 1 should not be null", getNode1());
builder.addCategory(ac);
builder.addCategory(mid);
builder.addCategory(ops);
builder.addCategory(catRouter);
builder.setBuilding("HQ");
builder.addInterface("192.168.100.1").setIsManaged("M");
//getNodeDao().save(builder.getCurrentNode());
//getNodeDao().flush();
builder.addService(getServiceType("ICMP")).setStatus("A");
getNodeDao().save(builder.getCurrentNode());
getNodeDao().flush();
builder.addNode("test2.availability.opennms.org").
setId(2).
//setForeignSource("imported:").
//setForeignId("2").
setType("A");
builder.addCategory(mid);
builder.addCategory(catServers);
builder.setBuilding("HQ");
builder.addInterface("192.168.100.2").setIsManaged("M").setIsSnmpPrimary("P");
builder.addService(getServiceType("ICMP")).setStatus("A");
//builder.addService(getServiceType("SNMP")).setStatus("A");;
builder.addInterface("192.168.100.3").setIsManaged("M");
builder.addService(getServiceType("ICMP")).setStatus("A");
//builder.addService(getServiceType("HTTP")).setStatus("A");
getNodeDao().save(builder.getCurrentNode());
getNodeDao().flush();
OnmsEvent event = new OnmsEvent();
event.setDistPoller(distPoller);
event.setEventUei("uei.opennms.org/test");
event.setEventTime(new Date());
event.setEventSource("test");
event.setEventCreateTime(new Date());
event.setEventSeverity(1);
event.setEventLog("Y");
event.setEventDisplay("Y");
getEventDao().save(event);
getEventDao().flush();
// m_db.update("insert into outages (outageid, nodeid, ipaddr, serviceid, ifLostService, ifRegainedService) values "
// + "(1,1,'192.168.100.1',1,'2005-05-01 09:00:00','2005-05-01 09:30:00');");
//m_db.update("insert into outages (outageid, nodeid, ipaddr, serviceid, ifLostService, ifRegainedService) values "
// + "(2,2,'192.168.100.2',1,'2005-05-01 10:00:00','2005-05-02 10:00:00');");
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
OnmsMonitoredService node1If1Svc1 = getMonitoredServiceDao().get(1, InetAddressUtils.addr("192.168.100.1"), "ICMP");
OnmsMonitoredService node2If1Svc1 = getMonitoredServiceDao().get(2, InetAddressUtils.addr("192.168.100.2"), "ICMP");
@SuppressWarnings("unused")
OnmsMonitoredService node2If1Svc2 = getMonitoredServiceDao().get(2, InetAddressUtils.addr("192.168.100.2"), "SNMP");
OnmsMonitoredService node2If2Svc1 = getMonitoredServiceDao().get(2, InetAddressUtils.addr("192.168.100.3"), "ICMP");
@SuppressWarnings("unused")
OnmsMonitoredService node2If2Svc2 = getMonitoredServiceDao().get(2, InetAddressUtils.addr("192.168.100.3"), "HTTP");
OnmsOutage outage1 = new OnmsOutage(df.parse("2005-05-01 09:00:00"), df.parse("2005-05-01 09:30:00"), event, event, node1If1Svc1, null, null);
getOutageDao().save(outage1);
getOutageDao().flush();
OnmsOutage outage2 = new OnmsOutage(df.parse("2005-05-01 10:00:00"),df.parse("2005-05-02 10:00:00"), event, event, node2If1Svc1, null, null);
getOutageDao().save(outage2);
getOutageDao().flush();
// test data for LastMonthsDailyAvailability report
// // insert 30 minute outage on one node - 99.3056% availability
// m_db.update("insert into outages (outageid, nodeid, ipaddr, serviceid, ifLostService, ifRegainedService) values "
// + "(3,1,'192.168.100.1',1,'2005-04-02 10:00:00','2005-04-02 10:30:00');");
OnmsOutage outage3 = new OnmsOutage(df.parse("2005-04-02 10:00:00"),df.parse("2005-04-02 10:30:00"), event, event, node1If1Svc1, null, null);
getOutageDao().save(outage3);
getOutageDao().flush();
// // insert 60 minute outage on one interface and 59 minute outages on
// // another - 97.2454
// m_db.update("insert into outages (outageid, nodeid, ipaddr, serviceid, ifLostService, ifRegainedService) values "
// + "(4,1,'192.168.100.1',1,'2005-04-03 11:30:00','2005-04-03 12:30:00');");
OnmsOutage outage4 = new OnmsOutage(df.parse("2005-04-03 11:30:00"),df.parse("2005-04-03 12:30:00"), event, event, node1If1Svc1, null, null);
getOutageDao().save(outage4);
getOutageDao().flush();
// m_db.update("insert into outages (outageid, nodeid, ipaddr, serviceid, ifLostService, ifRegainedService) values "
// + "(5,2,'192.168.100.2',1,'2005-04-03 23:00:00','2005-04-03 23:59:00');");
OnmsOutage outage5 = new OnmsOutage(df.parse("2005-04-03 23:00:00"),df.parse("2005-04-03 23:59:00"), event, event, node2If1Svc1, null, null);
getOutageDao().save(outage5);
getOutageDao().flush();
// // test an outage that spans 60 minutes across midnight - 99.3056% on
// // each day, well, not exactly
// // its 29 minutes 99.3059 on the fist day and 31 minutes 99.3052 on
// // the second.
// m_db.update("insert into outages (outageid, nodeid, ipaddr, serviceid, ifLostService, ifRegainedService) values "
// + "(6,2,'192.168.100.3',1,'2005-04-04 23:30:00','2005-04-05 00:30:00');");
OnmsOutage outage6 = new OnmsOutage(df.parse("2005-04-04 23:30:00"),df.parse("2005-04-05 00:30:00"), event, event, node2If2Svc1, null, null);
getOutageDao().save(outage6);
getOutageDao().flush();
} catch (final ParseException e) {
LogUtils.warnf(this, e, "populating database failed");
}
}
private OnmsCategory getCategory(String categoryName) {
OnmsCategory cat = getCategoryDao().findByName(categoryName);
if (cat == null) {
cat = new OnmsCategory(categoryName);
cat.getAuthorizedGroups().add(categoryName+"Group");
getCategoryDao().save(cat);
getCategoryDao().flush();
}
return cat;
}
private OnmsDistPoller getDistPoller(String localhost, String localhostIp) {
OnmsDistPoller distPoller = getDistPollerDao().get(localhost);
if (distPoller == null) {
distPoller = new OnmsDistPoller(localhost, localhostIp);
getDistPollerDao().save(distPoller);
getDistPollerDao().flush();
}
return distPoller;
}
private OnmsServiceType getServiceType(String name) {
OnmsServiceType serviceType = getServiceTypeDao().findByName(name);
if (serviceType == null) {
serviceType = new OnmsServiceType(name);
getServiceTypeDao().save(serviceType);
getServiceTypeDao().flush();
}
return serviceType;
}
public AlarmDao getAlarmDao() {
return m_alarmDao;
}
public void setAlarmDao(AlarmDao alarmDao) {
m_alarmDao = alarmDao;
}
public AssetRecordDao getAssetRecordDao() {
return m_assetRecordDao;
}
public void setAssetRecordDao(AssetRecordDao assetRecordDao) {
m_assetRecordDao = assetRecordDao;
}
public CategoryDao getCategoryDao() {
return m_categoryDao;
}
public void setCategoryDao(CategoryDao categoryDao) {
m_categoryDao = categoryDao;
}
public DistPollerDao getDistPollerDao() {
return m_distPollerDao;
}
public void setDistPollerDao(DistPollerDao distPollerDao) {
m_distPollerDao = distPollerDao;
}
public EventDao getEventDao() {
return m_eventDao;
}
public void setEventDao(EventDao eventDao) {
m_eventDao = eventDao;
}
public IpInterfaceDao getIpInterfaceDao() {
return m_ipInterfaceDao;
}
public void setIpInterfaceDao(IpInterfaceDao ipInterfaceDao) {
m_ipInterfaceDao = ipInterfaceDao;
}
public MonitoredServiceDao getMonitoredServiceDao() {
return m_monitoredServiceDao;
}
public void setMonitoredServiceDao(MonitoredServiceDao monitoredServiceDao) {
m_monitoredServiceDao = monitoredServiceDao;
}
public NodeDao getNodeDao() {
return m_nodeDao;
}
public void setNodeDao(NodeDao nodeDao) {
m_nodeDao = nodeDao;
}
public NotificationDao getNotificationDao() {
return m_notificationDao;
}
public void setNotificationDao(NotificationDao notificationDao) {
m_notificationDao = notificationDao;
}
public OutageDao getOutageDao() {
return m_outageDao;
}
public void setOutageDao(OutageDao outageDao) {
m_outageDao = outageDao;
}
public ServiceTypeDao getServiceTypeDao() {
return m_serviceTypeDao;
}
public void setServiceTypeDao(ServiceTypeDao serviceTypeDao) {
m_serviceTypeDao = serviceTypeDao;
}
public SnmpInterfaceDao getSnmpInterfaceDao() {
return m_snmpInterfaceDao;
}
public void setSnmpInterfaceDao(SnmpInterfaceDao snmpInterfaceDao) {
m_snmpInterfaceDao = snmpInterfaceDao;
}
public UserNotificationDao getUserNotificationDao() {
return m_userNotificationDao;
}
public void setUserNotificationDao(UserNotificationDao userNotificationDao) {
m_userNotificationDao = userNotificationDao;
}
public OnmsNode getNode1() {
return m_node1;
}
private void setNode1(OnmsNode node1) {
m_node1 = node1;
}
public LocationMonitorDao getLocationMonitorDao() {
return m_locationMonitorDao;
}
public void setLocationMonitorDao(LocationMonitorDao locationMonitorDao) {
m_locationMonitorDao = locationMonitorDao;
}
public OnmsMapDao getOnmsMapDao() {
return m_onmsMapDao;
}
public void setOnmsMapDao(OnmsMapDao onmsMapDao) {
this.m_onmsMapDao = onmsMapDao;
}
public OnmsMapElementDao getOnmsMapElementDao() {
return m_onmsMapElementDao;
}
public void setOnmsMapElementDao(OnmsMapElementDao onmsMapElementDao) {
this.m_onmsMapElementDao = onmsMapElementDao;
}
public DataLinkInterfaceDao getDataLinkInterfaceDao() {
return m_dataLinkInterfaceDao;
}
public void setDataLinkInterfaceDao(DataLinkInterfaceDao dataLinkInterfaceDao) {
this.m_dataLinkInterfaceDao = dataLinkInterfaceDao;
}
public AcknowledgmentDao getAcknowledgmentDao() {
return m_acknowledgmentDao;
}
public void setAcknowledgmentDao(AcknowledgmentDao acknowledgmentDao) {
m_acknowledgmentDao = acknowledgmentDao;
}
}