Package Products :: Package ZenModel :: Module RRDDataPoint
[hide private]
[frames] | no frames]

Source Code for Module Products.ZenModel.RRDDataPoint

  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 or (at your 
  8  # option) any later version as published by the Free Software Foundation. 
  9  # 
 10  # For complete information please visit: http://www.zenoss.com/oss/ 
 11  # 
 12  ########################################################################### 
 13   
 14  __doc__="""RRDDataPoint 
 15   
 16  Defines attributes for how a datasource will be graphed 
 17  and builds the nessesary DEF and CDEF statements for it. 
 18   
 19  """ 
 20   
 21  import logging 
 22  log = logging.getLogger('zen.RRDDatapoint') 
 23   
 24  import Globals 
 25  from AccessControl import ClassSecurityInfo, Permissions 
 26  from Products.ZenModel.ZenossSecurity import ZEN_VIEW, ZEN_MANAGE_DMD 
 27   
 28  from Products.ZenRelations.RelSchema import * 
 29  from Products.ZenWidgets import messaging 
 30   
 31  from ZenModelRM import ZenModelRM 
 32  from ZenPackable import ZenPackable 
 33   
 34  from Products.ZenUtils.Utils import unused 
 35  from Products.ZenModel.RRDDataPointAlias import manage_addDataPointAlias 
 36   
37 -def manage_addRRDDataPoint(context, id, REQUEST = None):
38 """make a RRDDataPoint""" 39 dp = RRDDataPoint(id) 40 context._setObject(dp.id, dp) 41 if REQUEST is not None: 42 REQUEST['RESPONSE'].redirect(context.absolute_url()+'/manage_main')
43
44 -def getDataPointsByAliases( context, aliases ):
45 """ 46 Retrieve the datapoint/alias pairs for the passed aliases. 47 """ 48 if not aliases: return 49 for brains in context.dmd.searchRRDTemplates(): 50 template = brains.getObject() 51 for datasource in template.datasources(): 52 if not hasattr(datasource, 'datapoints'): 53 log.error('The datasource %s on template %s is broken -- skipping', 54 datasource, template.getPrimaryUrlPath()) 55 continue 56 for datapoint in datasource.datapoints(): 57 thisDatapointsAliases = dict((dpAlias.id, dpAlias) 58 for dpAlias in datapoint.aliases()) 59 for alias in aliases: 60 if alias in thisDatapointsAliases: 61 yield thisDatapointsAliases[alias], datapoint 62 if alias == datapoint.id: 63 yield None, datapoint
64
65 -def getDataPointsByAlias( context, alias ):
66 """ 67 Retrieve the datapoint/alias pairs for the passed alias. 68 """ 69 return getDataPointsByAliases( context, [alias] )
70 71 72 #addRRDDataPoint = DTMLFile('dtml/addRRDDataPoint',globals()) 73 74 SEPARATOR = '_' 75
76 -def convertMethodParameter(value, type):
77 __pychecker__='no-returnvalues' 78 if type == "integer": 79 return int(value) 80 elif type == "string": 81 return str(value) 82 elif type == "float": 83 return float(value) 84 else: 85 raise TypeError('Unsupported method parameter type: %s' % type)
86
87 -class RRDDataPointError(Exception): pass
88
89 -class RRDDataPoint(ZenModelRM, ZenPackable):
90 91 meta_type = 'RRDDataPoint' 92 93 rrdtypes = ('COUNTER', 'GAUGE', 'DERIVE', 'ABSOLUTE') 94 95 createCmd = "" 96 rrdtype = 'GAUGE' 97 isrow = True 98 rrdmin = None 99 rrdmax = None 100 101 ## These attributes can be removed post 2.1 102 ## They should remain in 2.1 so the migrate script works correctly 103 linetypes = ('', 'AREA', 'LINE') 104 rpn = "" 105 color = "" 106 linetype = '' 107 limit = -1 108 format = '%5.2lf%s' 109 110 111 _properties = ( 112 {'id':'rrdtype', 'type':'selection', 113 'select_variable' : 'rrdtypes', 'mode':'w'}, 114 {'id':'createCmd', 'type':'text', 'mode':'w'}, 115 {'id':'isrow', 'type':'boolean', 'mode':'w'}, 116 {'id':'rrdmin', 'type':'string', 'mode':'w'}, 117 {'id':'rrdmax', 'type':'string', 'mode':'w'}, 118 {'id':'description', 'type':'string', 'mode':'w'}, 119 ) 120 121 122 _relations = ZenPackable._relations + ( 123 ("datasource", ToOne(ToManyCont,"Products.ZenModel.RRDDataSource","datapoints")), 124 ("aliases", ToManyCont(ToOne, "Products.ZenModel.RRDDataPointAlias","datapoint")) 125 ) 126 127 # Screen action bindings (and tab definitions) 128 factory_type_information = ( 129 { 130 'immediate_view' : 'editRRDDataPoint', 131 'actions' : 132 ( 133 { 'id' : 'edit' 134 , 'name' : 'Data Point' 135 , 'action' : 'editRRDDataPoint' 136 , 'permissions' : ( Permissions.view, ) 137 }, 138 ) 139 }, 140 ) 141 142 security = ClassSecurityInfo() 143 144
145 - def breadCrumbs(self, terminator='dmd'):
146 """Return the breadcrumb links for this object add ActionRules list. 147 [('url','id'), ...] 148 """ 149 from RRDTemplate import crumbspath 150 crumbs = super(RRDDataPoint, self).breadCrumbs(terminator) 151 return crumbspath(self.rrdTemplate(), crumbs, -3)
152 153
154 - def name(self):
155 """Include the data source name in our name, 156 useful for lists of DataPoints""" 157 return '%s%c%s' % (self.datasource().id, SEPARATOR, self.id)
158 159
160 - def getRRDCreateCommand(self, performanceConf):
161 """Get the create command. 162 Return '' for the default from performanceConf""" 163 unused(performanceConf) 164 if self.createCmd: 165 return self.createCmd 166 return ''
167 168
169 - def addAlias(self, id, formula=None):
170 """ 171 Add a new alias to this datapoint 172 """ 173 manage_addDataPointAlias( self, id, formula )
174 175
176 - def hasAlias(self, aliasId):
177 """ 178 Whether this datapoint has an alias of this id 179 """ 180 return hasattr( self.aliases, aliasId )
181 182
183 - def removeAlias(self, aliasId):
184 """ 185 Remove any alias with the given id 186 """ 187 if self.hasAlias( aliasId ): 188 self.aliases._delObject( aliasId )
189 190
191 - def getAliasNames(self):
192 """ 193 Return all the ids of this datapoint's aliases 194 """ 195 return [ alias.id for alias in self.aliases() ]
196 197 198 security.declareProtected(ZEN_MANAGE_DMD, 'manage_addDataPointAlias')
199 - def manage_addDataPointAlias(self, id, formula, REQUEST=None ):
200 """ 201 Add an alias to this datapoint 202 """ 203 alias = manage_addDataPointAlias( self, id, formula ) 204 if REQUEST: 205 return self.callZenScreen(REQUEST) 206 return alias
207 208 209 security.declareProtected(ZEN_MANAGE_DMD, 'manage_removeDataPointAliases')
210 - def manage_removeDataPointAliases(self, ids=(), REQUEST=None ):
211 """ 212 Remove aliases from this datapoint 213 """ 214 for id in ids: 215 self.removeAlias( id ) 216 if REQUEST: 217 return self.callZenScreen(REQUEST)
218 219 220 security.declareProtected(ZEN_MANAGE_DMD, 'zmanage_editProperties')
221 - def zmanage_editProperties(self, REQUEST=None, redirect=False):
222 """Edit a ZenModel object and return its proper page template 223 """ 224 unused(redirect) 225 if REQUEST: 226 msgs = [] 227 for optional in 'rrdmin', 'rrdmax': 228 v = REQUEST.form.get(optional, None) 229 if v: 230 try: 231 REQUEST.form[optional] = long(v) 232 except ValueError: 233 msgs.append('Unable to convert "%s" to a number' % v) 234 msgs = ', '.join(msgs) 235 if msgs: 236 messaging.IMessageSender(self).sendToBrowser( 237 'Properties Saved', 238 msgs[0].capitalize() + msgs[1:] 239 ) 240 return self.callZenScreen(REQUEST, False) 241 242 return ZenModelRM.zmanage_editProperties(self, REQUEST)
243