| Trees | Indices | Help |
|
|---|
|
|
1 ##############################################################################
2 #
3 # Copyright (C) Zenoss, Inc. 2007, all rights reserved.
4 #
5 # This content is made available according to terms specified in
6 # License.zenoss under the directory where your Zenoss product is installed.
7 #
8 ##############################################################################
9
10
11 import os
12 import logging
13 log = logging.getLogger('zen.Mibs')
14
15 from Globals import DTMLFile
16 from Globals import InitializeClass
17 from AccessControl import ClassSecurityInfo
18 from AccessControl import Permissions
19 from Products.Jobber.jobs import SubprocessJob
20 from Products.ZenModel.ZenossSecurity import *
21
22 from Products.ZenRelations.RelSchema import *
23 from Products.ZenUtils.Search import makeCaseInsensitiveKeywordIndex
24 from Products.ZenWidgets import messaging
25 from Products.ZenUtils.Utils import binPath
26 from Organizer import Organizer
27 from MibModule import MibModule
28 from ZenPackable import ZenPackable
29
31 """make a device class"""
32 sc = MibOrganizer(id)
33 context._setObject(id, sc)
34 sc = context._getOb(id)
35 if REQUEST is not None:
36 REQUEST['RESPONSE'].redirect(context.absolute_url() + '/manage_main')
37
38 addMibOrganizer = DTMLFile('dtml/addMibOrganizer',globals())
39
40
42 """Return a name for an oid. This function is extracted out of the
43 MibOrganizer class and takes mibSearch as a parameter to make it easier to
44 unit test.
45 """
46 oid = oid.strip('.')
47
48 if exactMatch:
49 brains = mibSearch(oid=oid)
50 if len(brains) > 0:
51 return brains[0].id
52 else:
53 return ""
54
55 oidlist = oid.split('.')
56 for i in range(len(oidlist), 0, -1):
57 brains = mibSearch(oid='.'.join(oidlist[:i]))
58 if len(brains) < 1: continue
59 if len(oidlist[i:]) > 0 and not strip:
60 return "%s.%s" % (brains[0].id, '.'.join(oidlist[i:]))
61 else:
62 return brains[0].id
63 return ""
64
65
67 """
68 DeviceOrganizer is the base class for device organizers.
69 It has lots of methods for rolling up device statistics and information.
70 """
71 meta_type = "MibOrganizer"
72 dmdRootName = "Mibs"
73 default_catalog = 'mibSearch'
74
75 security = ClassSecurityInfo()
76
77 _relations = Organizer._relations + ZenPackable._relations + (
78 ("mibs", ToManyCont(ToOne,"Products.ZenModel.MibModule","miborganizer")),
79 )
80
81
82 # Screen action bindings (and tab definitions)
83 factory_type_information = (
84 {
85 'immediate_view' : 'mibOrganizerOverview',
86 'actions' :
87 (
88 { 'id' : 'overview'
89 , 'name' : 'Overview'
90 , 'action' : 'mibOrganizerOverview'
91 , 'permissions' : ( Permissions.view, )
92 },
93 )
94 },
95 )
96
97
99 if not id: id = self.dmdRootName
100 super(MibOrganizer, self).__init__(id, description)
101 if self.id == self.dmdRootName:
102 self.createCatalog()
103
105 return MibOrganizer
106
108 """Return a count of all our contained children."""
109 count = len(self.mibs())
110 for child in self.children():
111 count += child.countMibs()
112 return count
113
115 """Return a name for an oid.
116 """
117 return _oid2name(self.getDmdRoot("Mibs").mibSearch, oid,
118 exactMatch, strip)
119
120
122 """Return an oid based on a name in the form MIB::name.
123 """
124 brains = self.getDmdRoot("Mibs").mibSearch({'id': name})
125 if len(brains) > 0: return brains[0].oid
126 return ""
127
128
130 """Count all mibs with in a MibOrganizer.
131 """
132 count = self.mibs.countObjects()
133 for group in self.children():
134 count += group.countClasses()
135 return count
136
137
139 """Create a MibModule
140 """
141 mibs = self.getDmdRoot(self.dmdRootName)
142 mod = None
143 if not mod:
144 modorg = mibs.createOrganizer(path)
145 mod = MibModule(name)
146 modorg.mibs._setObject(mod.id, mod)
147 mod = modorg.mibs._getOb(mod.id)
148 return mod
149
150
152 """Create a new service class in this Organizer.
153 """
154 mm = MibModule(id)
155 self.mibs._setObject(id, mm)
156 if REQUEST:
157 messaging.IMessageSender(self).sendToBrowser(
158 'Mib Module Created',
159 'Mib module %s was created.' % id
160 )
161 return self.callZenScreen(REQUEST)
162 else:
163 return self.mibs._getOb(id)
164
165
167 """Remove MibModules from an EventClass.
168 """
169 if not ids: return self()
170 if isinstance(ids, basestring): ids = (ids,)
171 for id in ids:
172 self.mibs._delObject(id)
173 if REQUEST:
174 messaging.IMessageSender(self).sendToBrowser(
175 'Mib Module Deleted',
176 'Mib modules deleted: %s' % ', '.join(ids)
177 )
178 return self()
179
180
182 """Move MibModules from this organizer to moveTarget.
183 """
184 if not moveTarget or not ids: return self()
185 if isinstance(ids, basestring): ids = (ids,)
186 target = self.getChildMoveTarget(moveTarget)
187 for id in ids:
188 rec = self.mibs._getOb(id)
189 rec._operation = 1 # moving object state
190 self.mibs._delObject(id)
191 target.mibs._setObject(id, rec)
192 if REQUEST:
193 messaging.IMessageSender(self).sendToBrowser(
194 'Mib Module Moved',
195 'Mib modules moved to %s.' % moveTarget
196 )
197 REQUEST['RESPONSE'].redirect(target.getPrimaryUrlPath())
198
199
201 """Go through all devices in this tree and reindex them."""
202 zcat = self._getOb(self.default_catalog)
203 zcat.manage_catalogClear()
204 for org in [self,] + self.getSubOrganizers():
205 for mib in org.mibs():
206 for thing in mib.nodes() + mib.notifications():
207 thing.index_object()
208
209
211 """Create a catalog for mibs searching"""
212 from Products.ZCatalog.ZCatalog import manage_addZCatalog
213
214 # XXX update to use ManagableIndex
215 manage_addZCatalog(self, self.default_catalog, self.default_catalog)
216 zcat = self._getOb(self.default_catalog)
217 cat = zcat._catalog
218 cat.addIndex('oid', makeCaseInsensitiveKeywordIndex('oid'))
219 cat.addIndex('id', makeCaseInsensitiveKeywordIndex('id'))
220 cat.addIndex('summary', makeCaseInsensitiveKeywordIndex('summary'))
221 zcat.addColumn('getPrimaryId')
222 zcat.addColumn('id')
223 zcat.addColumn('oid')
224
226 """
227 Assumes the file to be a mib so we need to create a mib module with
228 its contents
229 File will be available with REQUEST.upload
230 """
231 filename = REQUEST.upload.filename
232 mibs = REQUEST.upload.read()
233 # write it to a temp file
234 path = '/tmp/%s' % filename
235 with open(path, 'w') as f:
236 f.write(mibs)
237
238 # create the job
239 mypath = self.absolute_url_path().replace('/zport/dmd/Mibs', '')
240 if not mypath:
241 mypath = '/'
242 commandArgs = [binPath('zenmib'), 'run', path,
243 '--path=%s' % mypath]
244 return self.dmd.JobManager.addJob(SubprocessJob,
245 description="Load MIB at %s" % mypath,
246 kwargs=dict(cmd=commandArgs))
247
248
249 InitializeClass(MibOrganizer)
250
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1.1812 on Mon Jul 30 17:11:43 2012 | http://epydoc.sourceforge.net |