| Trees | Indices | Help |
|
|---|
|
|
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__="""ManufacturerRoot
15
16 The Manufacturer classification class. default identifiers and screens,
17 live here.
18
19 $Id: ManufacturerRoot.py,v 1.10 2004/04/22 02:14:12 edahl Exp $"""
20
21 __version__ = "$Revision: 1.10 $"[11:-2]
22
23 import logging
24 log = logging.getLogger('zen')
25
26 import transaction
27
28 from Globals import InitializeClass
29 from Acquisition import aq_base
30 from AccessControl import Permissions as permissions
31 from Products.ZenModel.ZenossSecurity import *
32
33 from Products.ZenRelations.PrimaryPathObjectManager import \
34 PrimaryPathBTreeFolder2
35
36 from ZenModelItem import ZenModelItem
37 from ZenPacker import ZenPacker
38 from Products.ZenUtils.Search import \
39 makeCaseSensitiveKeywordIndex, makeCaseInsensitiveFieldIndex
40 from Products.ManagableIndex import FieldIndex
41
43 """make a Manufacturer class"""
44 m = ManufacturerRoot()
45 context._setObject(m.getId(), m)
46 m = context._getOb(m.dmdRootName)
47 if REQUEST is not None:
48 REQUEST['RESPONSE'].redirect(context.absolute_url() + '/manage_main')
49
50
51 #addManufacturerRoot = DTMLFile('dtml/addManufacturerRoot',globals())
52
53
55 """
56 The root organizer for manufacturers. May become a BtreeFolder2 at
57 some point (to scale better). Has interface to manage Manufacturers
58 and the products that they create.
59 """
60 dmdRootName = "Manufacturers"
61 meta_type = "ManufacturerRoot"
62 sub_classes = ('Manufacturer',)
63 default_catalog = "productSearch"
64
65 # Screen action bindings (and tab definitions)
66 factory_type_information = (
67 {
68 'id' : 'Manufacturer',
69 'meta_type' : 'Manufacturer',
70 'description' : """Arbitrary device grouping class""",
71 'icon' : 'Manufacturer_icon.gif',
72 'product' : 'ZenModel',
73 'factory' : 'manage_addManufacturer',
74 'immediate_view' : 'viewManufacturers',
75 'actions' :
76 (
77 { 'id' : 'overview'
78 , 'name' : 'Overview'
79 , 'action' : 'viewManufacturers'
80 , 'permissions' : (
81 permissions.view, )
82 },
83 { 'id' : 'viewHistory'
84 , 'name' : 'Modifications'
85 , 'action' : 'viewHistory'
86 , 'permissions' : (ZEN_VIEW_MODIFICATIONS,)
87 },
88 )
89 },
90 )
91
92
94 if not id: id = self.dmdRootName
95 super(ManufacturerRoot, self).__init__(id)
96 PrimaryPathBTreeFolder2.__init__(self, id)
97 self.createCatalog()
98 self.buildzProperties()
99
100
102 """Add a manufacturer from UI code.
103 """
104 if manufacturerName:
105 self.createManufacturer(manufacturerName)
106 if REQUEST: return self.callZenScreen(REQUEST)
107
108
110 """Delete a list of manufacturers from UI.
111 """
112 if not ids: return self.callZenScreen(REQUEST)
113 for id in ids: self._delObject(id)
114 if REQUEST: return self.callZenScreen(REQUEST)
115
116
118 """Return and create if nessesary manufacturerName.
119 """
120 from Products.ZenModel.Manufacturer import manage_addManufacturer
121 if manufacturerName and not self.has_key(manufacturerName):
122 logging.info("Creating Manufacturer %s" % manufacturerName)
123 manage_addManufacturer(self, manufacturerName)
124 if manufacturerName:
125 return self._getOb(manufacturerName)
126 return None
127
128
130 """
131 Return manufacturerName. If it doesn't exist, create it.
132 """
133 if self.has_key(manufacturerName):
134 man = self._getOb(manufacturerName)
135 else:
136 man = self.createManufacturer(manufacturerName)
137
138 return man
139
140
144
145
147 """return a list of all products this Manufacturer makes"""
148 productFilter = dict(getManufacturerName=mname)
149 if type == "OS":
150 productFilter['meta_type'] = "SoftwareClass"
151 productFilter['isOS'] = True
152 elif type:
153 productFilter['meta_type'] = type
154
155 cat = getattr(self, self.default_catalog)
156 return sorted([''] + [ entry.id for entry in cat(productFilter) ])
157
158
160 """Find a product by is productKey.
161 """
162 cat = getattr(self, self.default_catalog)
163 brains = cat({'productKeys': query})
164 if not brains: return None
165 try:
166 return self.getObjByPath(brains[0].getPrimaryId)
167 except KeyError:
168 log.warn("bad path '%s' index '%s'",
169 brains[0].getPrimaryId, self.default_catalog)
170
171
173 """Return and create if nessesary a HardwareClass object.
174 """
175 from Products.ZenModel.HardwareClass import HardwareClass
176 return self._getProduct(prodName, manufacturer, HardwareClass, **kwargs)
177
178
180 """Return and create if nesseary a SoftwareClass object.
181 """
182 from Products.ZenModel.SoftwareClass import SoftwareClass
183 prod = self._getProduct(prodName, manufacturer, SoftwareClass, **kwargs)
184 prod.isOS = isOS
185 return prod
186
187
189 prod = self.findProduct(prodName)
190 if prod:
191 # Product already exists. Return it.
192 return prod
193
194 # Product doesn't already exist. Create it.
195 prodid = self.prepId(prodName)
196 manufobj = self.getManufacturer(manufacturer)
197 prod = manufobj._getOb(prodid, None)
198 if prod is None:
199 prod = factory(prodid, prodName=prodName, **kwargs)
200 manufobj.products._setObject(prodid, prod)
201 prod = manufobj.products._getOb(prodid)
202 return prod
203
204
206 """Return a generator that gets all products.
207 """
208 for manuf in self.values(spec="Manufacturer"):
209 for prod in manuf.products.objectValuesGen():
210 yield prod
211
212
214 """Go through all devices in this tree and reindex them."""
215 zcat = self._getOb(self.default_catalog)
216 zcat.manage_catalogClear()
217 transaction.savepoint()
218 for i, prod in enumerate(self.getProductsGen()):
219 prod.index_object()
220 if not i % 1000: transaction.savepoint()
221
222
224 """Create a catalog for EventClassRecord searching"""
225 from Products.ZCatalog.ZCatalog import manage_addZCatalog
226
227 # XXX update to use ManagableIndex
228 manage_addZCatalog(self, self.default_catalog, self.default_catalog)
229 zcat = self._getOb(self.default_catalog)
230 cat = zcat._catalog
231 cat.addIndex('productKeys',
232 makeCaseSensitiveKeywordIndex('productKeys'))
233 cat.addIndex('meta_type',
234 makeCaseInsensitiveFieldIndex('meta_type'))
235 cat.addIndex('getManufacturerName',
236 makeCaseInsensitiveFieldIndex('getManufacturerName'))
237 cat.addIndex('isOS', FieldIndex('isOS'))
238 zcat.addColumn('getPrimaryId')
239 zcat.addColumn('id')
240
241
243 """Return an xml based representation of a RelationshipManager
244 <object id='/Devices/Servers/Windows/dhcp160.confmon.loc'
245 module='Products.Confmon.IpInterface' class='IpInterface'>
246 <property id='name'>jim</property>
247 <toone></toone>
248 <tomany></tomany>
249 <tomanycont></tomanycont>
250 </object>
251 """
252 modname = self.__class__.__module__
253 classname = self.__class__.__name__
254 id = root and self.getPrimaryId() or self.id
255 stag = "<object id='%s' module='%s' class='%s'>\n" % (
256 id , modname, classname)
257 ofile.write(stag)
258 for obj in self.objectValues():
259 if getattr(aq_base(obj), 'exportXml', False):
260 obj.exportXml(ofile, ignorerels)
261 ofile.write("</object>\n")
262
263
265 if getattr(aq_base(self), "zDeviceClass", False): return
266 self._setProperty("zDeviceClass", "")
267 self._setProperty("zDeviceGroup", "")
268 self._setProperty("zSystem", "")
269
270
271 InitializeClass(ManufacturerRoot)
272
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Fri Aug 28 03:05:31 2009 | http://epydoc.sourceforge.net |