Package ZenModel :: Module DmdBuilder
[hide private]
[frames] | no frames]

Source Code for Module ZenModel.DmdBuilder

  1  ########################################################################### 
  2  # 
  3  # This program is part of Zenoss Core, an open source monitoring platform. 
  4  # Copyright (C) 2007, Zenoss Inc. 
  5  # 
  6  # This program is free software; you can redistribute it and/or modify it 
  7  # under the terms of the GNU General Public License version 2 as published by 
  8  # the Free Software Foundation. 
  9  # 
 10  # For complete information please visit: http://www.zenoss.com/oss/ 
 11  # 
 12  ########################################################################### 
 13   
 14  __doc__="""DmdBuilder 
 15  DmdBuilder builds out the core containment structure used in the dmd database. 
 16   
 17  Devices 
 18  Groups 
 19  Locations 
 20  Networks 
 21  ServiceAreas 
 22  Services 
 23  Systems 
 24   
 25  """ 
 26   
 27  from Products.ZenModel.DeviceClass import DeviceClass 
 28  from Products.ZenModel.Location import Location 
 29  from Products.ZenModel.DeviceGroup import DeviceGroup 
 30  from Products.ZenModel.IpNetwork import manage_addIpNetwork 
 31  from Products.ZenModel.ManufacturerRoot import ManufacturerRoot 
 32  from Products.ZenModel.MibOrganizer import MibOrganizer 
 33  from Products.ZenModel.OSProcessOrganizer import OSProcessOrganizer 
 34  from Products.ZenModel.ServiceOrganizer import ServiceOrganizer 
 35  from Products.ZenModel.System import System 
 36  from Products.ZenModel.MonitorClass import MonitorClass 
 37  from Products.ZenModel.ReportClass import ReportClass 
 38  from Products.ZenModel.DeviceReportClass import DeviceReportClass 
 39  from Products.ZenModel.CustomDeviceReportClass import CustomDeviceReportClass 
 40  from Products.ZenModel.GraphReportClass import GraphReportClass 
 41  from Products.ZenModel.MultiGraphReportClass import MultiGraphReportClass 
 42  from Products.ZenModel.DataRoot import DataRoot 
 43  from Products.ZenModel.ZDeviceLoader import manage_addZDeviceLoader 
 44  from Products.ZenModel.ZenossInfo import manage_addZenossInfo 
 45  from Products.ZenWidgets.ZenTableManager import manage_addZenTableManager 
 46  from Products.ZenModel.PerformanceConf import manage_addPerformanceConf 
 47  from Products.ZenRRD.RenderServer import manage_addRenderServer 
 48  from Products.ZenReports.ReportServer import manage_addReportServer 
 49  from Products.ZenEvents.MySqlEventManager import manage_addMySqlEventManager 
 50  from Products.ZenEvents.EventClass import manage_addEventClass 
 51  from Products.CMFCore.DirectoryView import manage_addDirectoryView 
 52  from Products.ZenModel.UserSettings import manage_addUserSettingsManager 
 53  from Products.ZenModel.LinkManager import manage_addLinkManager 
 54  from Products.ZenWidgets.PortletManager import manage_addPortletManager 
 55  from Products.ZenWidgets.ZenossPortlets import ZenossPortlets 
 56  from Products.ZenModel.ZenPackManager import manage_addZenPackManager 
 57  from Products.Jobber.manager import manage_addJobManager 
 58  from Products.ZenModel.ZenPackPersistence import CreateZenPackPersistenceCatalog 
 59  from Products.ZenModel.RRDTemplate import CreateRRDTemplatesCatalog 
 60  from Products.ZenModel.MaintenanceWindow import createMaintenanceWindowCatalog 
 61  from Products.ZenModel.ZenossSecurity import \ 
 62       MANAGER_ROLE, ZEN_MANAGER_ROLE, ZEN_USER_ROLE, OWNER_ROLE 
 63   
 64  classifications = { 
 65      'Devices':          DeviceClass, 
 66      'Groups':           DeviceGroup, 
 67      'Locations':        Location, 
 68      'Systems':          System, 
 69      'Services':         ServiceOrganizer, 
 70      'Manufacturers':    ManufacturerRoot, 
 71      'Mibs':             MibOrganizer, 
 72      'Processes':        OSProcessOrganizer, 
 73      'Monitors':         MonitorClass, 
 74      'Reports':          ReportClass, 
 75  } 
 76   
77 -class DmdBuilder:
78 79 # Top level organizers for dmd 80 dmdroots = ( 81 'Devices', 82 'Groups', 83 'Locations', 84 'Systems', 85 'Services', 86 'Processes', 87 'Manufacturers', 88 'Mibs', 89 'Monitors', 90 'Reports', 91 ) 92 93 # default monitor classes 94 monRoots = ('Performance',) 95 96
97 - def __init__(self, portal, evthost, evtuser, evtpass, evtdb, evtport, 98 smtphost, smtpport, pagecommand):
99 self.portal = portal 100 self.evthost = evthost 101 self.evtuser = evtuser 102 self.evtpass = evtpass 103 self.evtport = evtport 104 self.evtdb = evtdb 105 dmd = DataRoot('dmd') 106 self.portal._setObject(dmd.id, dmd) 107 self.dmd = self.portal._getOb('dmd') 108 self.dmd._rq = False 109 self.dmd.smtpHost = smtphost 110 self.dmd.smtpPort = smtpport 111 self.dmd.pageCommand = pagecommand 112 self.dmd.manage_permission('Access contents information', 113 ['Authenticated', 114 MANAGER_ROLE, 115 ZEN_MANAGER_ROLE, 116 ZEN_USER_ROLE, 117 OWNER_ROLE], 118 0)
119 120
121 - def buildRoots(self):
122 self.addroots(self.dmd, self.dmdroots, isInTree=True) 123 self.dmd.Devices.buildDeviceTreeProperties()
124 125
126 - def buildMonitors(self):
127 mons = self.dmd.Monitors 128 self.addroots(mons, self.monRoots, "Monitors") 129 mons.Performance.sub_class = 'PerformanceConf' 130 manage_addPerformanceConf(mons.Performance, "localhost") 131 crk = mons.Performance._getOb("localhost") 132 crk.renderurl = "/zport/RenderServer"
133 134
135 - def buildUserCommands(self):
136 for id, cmd, desc in ( 137 ('ping', 'ping -c2 ${device/manageIp}', 138 "Is the device responding to ping?"), 139 ('traceroute', 'traceroute -q 1 -w 2 ${device/manageIp}', 140 "Show the route to the device"), 141 ('DNS forward', 'host ${device/id}', 142 "Name to IP address lookup"), 143 ('DNS reverse', 'host ${device/manageIp}', 144 "IP address to name lookup"), 145 ('snmpwalk', 'snmpwalk -v1 -c${device/zSnmpCommunity}' 146 ' ${here/manageIp} system', 147 "Display the OIDs available on a device"), 148 ): 149 self.dmd.manage_addUserCommand(id, cmd=cmd, desc=desc)
150 151
152 - def addroots(self, base, rlist, classType=None, isInTree=False):
153 for rname in rlist: 154 ctype = classType or rname 155 if not hasattr(base, rname): 156 dr = classifications[ctype](rname) 157 base._setObject(dr.id, dr) 158 dr = base._getOb(dr.id) 159 dr.isInTree = isInTree 160 if dr.id in ('Devices'): 161 dr.createCatalog()
162 163
164 - def buildReportClasses(self):
165 if not hasattr(self.dmd.Reports, 'Device Reports'): 166 rc = DeviceReportClass('Device Reports') 167 self.dmd.Reports._setObject(rc.id, rc) 168 if not hasattr(self.dmd.Reports, 'Custom Device Reports'): 169 rc = CustomDeviceReportClass('Custom Device Reports') 170 self.dmd.Reports._setObject(rc.id, rc) 171 if not hasattr(self.dmd.Reports, 'Graph Reports'): 172 rc = GraphReportClass('Graph Reports') 173 self.dmd.Reports._setObject(rc.id, rc) 174 if not hasattr(self.dmd.Reports, 'Multi-Graph Reports'): 175 rc = MultiGraphReportClass('Multi-Graph Reports') 176 self.dmd.Reports._setObject(rc.id, rc)
177
178 - def buildPortlets(self):
179 manage_addPortletManager(self.portal) 180 zpmgr = self.portal.ZenPortletManager 181 ZenossPortlets.register_default_portlets(zpmgr)
182
183 - def build(self):
184 self.buildRoots() 185 self.buildMonitors() 186 self.buildUserCommands() 187 self.buildReportClasses() 188 self.buildPortlets() 189 manage_addEventClass(self.dmd) 190 manage_addZDeviceLoader(self.dmd) 191 manage_addZenTableManager(self.portal) 192 manage_addZenossInfo(self.portal) 193 manage_addDirectoryView(self.portal,'ZenUtils/js', 'js') 194 manage_addRenderServer(self.portal, "RenderServer") 195 manage_addReportServer(self.portal, "ReportServer") 196 manage_addMySqlEventManager(self.dmd, evthost=self.evthost, 197 evtuser=self.evtuser, evtpass=self.evtpass, 198 evtdb=self.evtdb, evtport=self.evtport) 199 manage_addMySqlEventManager(self.dmd, evthost=self.evthost, 200 evtuser=self.evtuser, evtpass=self.evtpass, 201 evtdb=self.evtdb, evtport=self.evtport, 202 history=True) 203 manage_addUserSettingsManager(self.dmd) 204 manage_addLinkManager(self.dmd) 205 manage_addJobManager(self.dmd) 206 manage_addIpNetwork(self.dmd, "Networks") 207 manage_addZenPackManager(self.dmd) 208 CreateZenPackPersistenceCatalog(self.dmd) 209 CreateRRDTemplatesCatalog(self.dmd) 210 createMaintenanceWindowCatalog(self.dmd)
211