def start(self): self.STATE = {} self.STATE.update(self.__class__.STATE) if self.require_acknowledge: self.STATE[self.__class__.SENT]['clear'] = self.__class__.SENT Calculator.start(self) variables = [] self._message = '' message = self.message while '$' in message: index = message.index('$') try: if message[index + 1] == '{': end = string.find(message, '}', index) if end > -1: var = message[index:end + 1] variable = var[2:-1] if '$' not in variable and '{' not in variable: message = string.replace(message, var, '%s') variables.append(variable) except IndexError: pass self._message += message[0:index + 1] message = message[index + 1:] self._message += message self._message_vars = tuple(variables) self._change_state('start')
def __init__(self, *args): _Trigger.__init__(self, *args) Calculator.__init__(self) self.state = self.INITIALIZING self.scheduled = None self._running = Flag() self._start_failed = False
def configure(self, config): set_attribute(self, 'node', REQUIRED, config) config['function'] = 'mpx.lib.node.as_node("%s").get' % self.node PeriodicColumn.configure(self, config) set_attribute(self, 'delta', 0, config, as_boolean) if self.delta: c = Calculator() c.configure({ 'name': 'delta', 'parent': self, 'statement': 'value-last_value', 'variables': [{ 'vn': 'value', 'node_reference': '$value' }, { 'vn': 'last_value', 'node_reference': '$last_value' }] }) set_attribute(self, 'meter_description', self.name, config) set_attribute(self, 'account', REQUIRED, config) set_attribute(self, 'meter_number', REQUIRED, config) set_attribute(self, 'units', '', config)
def start(self): self.STATE = {} self.STATE.update(self.__class__.STATE) if self.require_acknowledge: self.STATE[self.__class__.SENT]['clear'] = self.__class__.SENT Calculator.start(self) variables = [] self._message = '' message = self.message while '$' in message: index = message.index('$') try: if message[index+1] == '{': end = string.find(message,'}',index) if end > -1: var = message[index:end+1] variable = var[2:-1] if '$' not in variable and '{' not in variable: message = string.replace(message,var,'%s') variables.append(variable) except IndexError: pass self._message += message[0:index+1] message = message[index+1:] self._message += message self._message_vars = tuple(variables) self._change_state('start')
def _create_calculator(self,statement,variables,start=1): config = {'name':'test','parent':self.get_fake_ion(start), 'statement':statement,'variables':[]} for name in variables.keys(): variable = {'vn':name,'node_reference':variables[name]} config['variables'].append(variable) calc = Calculator() calc.configure(config) return calc
def stop(self): self.synclock.acquire() try: self._running.clear() self.state = self.STATES[self.state]['stop'] finally: self.synclock.release() self.reschedule() Calculator.stop(self) _Trigger.stop(self)
def __init__(self): Calculator.__init__(self) EventProducerMixin.__init__(self) self._state = self.INITIALIZING self._current_id = None self._scheduled = None self._state_lock = Lock() self._schedule_lock = Lock() self.require_acknowledge = 0 return
def _create_calculator(self, statement, variables, start=1): config = { 'name': 'test', 'parent': self.get_fake_ion(start), 'statement': statement, 'variables': [] } for name in variables.keys(): variable = {'vn': name, 'node_reference': variables[name]} config['variables'].append(variable) calc = Calculator() calc.configure(config) return calc
def configure(self, config): PeriodicColumn.configure(self, config) if not self.has_child("delta"): c = Calculator() c.configure( { "name": "delta", "parent": self, "statement": "value - last_value", "variables": [ {"vn": "value", "node_reference": "$value"}, {"vn": "last_value", "node_reference": "$last_value"}, ], } ) return
def configuration(self): config = Calculator.configuration(self) get_attribute(self,'message', config) get_attribute(self, 'poll_period', config, str) get_attribute(self, 'critical_input', config) get_attribute(self, 'send_retries', config) get_attribute(self, 'enabled', config, str) return config
def configuration(self): config = Calculator.configuration(self) get_attribute(self, 'message', config) get_attribute(self, 'poll_period', config, str) get_attribute(self, 'critical_input', config) get_attribute(self, 'send_retries', config) get_attribute(self, 'enabled', config, str) return config
def configure(self, config): Calculator.configure(self, config) message = '' if not (config.has_key('message') and config['message']): for var in self.variables: if message: message += ', ' message += '%s = ${%s}' % (var['vn'], var['vn']) set_attribute(self, 'message', message, {}) else: set_attribute(self, 'message', REQUIRED, config) set_attribute(self, 'poll_period', 0.1, config, float) set_attribute(self, 'critical_input', '', config) set_attribute(self, 'send_retries', 3, config, int) set_attribute(self, 'enabled', 1, config, as_boolean) set_attribute(self, 'require_acknowledge', 0, config, as_boolean) self._manager = self.parent.parent
def configure(self,config): PeriodicColumn.configure(self, config) if not self.has_child('average'): c = Calculator() c.configure({'name':'average', 'parent':self, 'statement':'(value + last_value)/2.0', 'variables':[{'vn':'value', 'node_reference':'$value'}, {'vn':'last_value', 'node_reference':'$last_value'}, {'vn':'last_time', 'node_reference':'$last_time'}, {'vn':'now','node_reference':'$now'}, {'vn':'period', 'node_reference':'$period'}]}) return
def configure(self,config): Calculator.configure(self, config) message = '' if not (config.has_key('message') and config['message']): for var in self.variables: if message: message += ', ' message += '%s = ${%s}' % (var['vn'],var['vn']) set_attribute(self, 'message', message, {}) else: set_attribute(self, 'message', REQUIRED, config) set_attribute(self, 'poll_period', 0.1, config, float) set_attribute(self, 'critical_input', '', config) set_attribute(self, 'send_retries', 3, config, int) set_attribute(self, 'enabled', 1, config, as_boolean) set_attribute(self, 'require_acknowledge', 0, config, as_boolean) self._manager = self.parent.parent
def test_get_1(self): la = Calculator() config = { 'parent': self.get_fake_ion(), 'name': 'linear_adjustor', 'statement': '(x+y)/z', 'variables': [{ 'vn': 'x', 'node_reference': '1.0' }, { 'vn': 'y', 'node_reference': '2' }, { 'vn': 'z', 'node_reference': '3' }] } la.configure(config) la.start() value = la.get() if value != 1.0: self.fail( 'wrong value returned from simple get. Value returned: ' + str(value)) return
def configure(self,config): set_attribute(self,'node',REQUIRED,config) config['function'] = 'mpx.lib.node.as_node("%s").get' % self.node PeriodicColumn.configure(self,config) set_attribute(self,'delta',0,config,as_boolean) if self.delta: c = Calculator() c.configure({'name':'delta', 'parent':self, 'statement':'value-last_value', 'variables':[{'vn':'value', 'node_reference':'$value'}, {'vn':'last_value', 'node_reference':'$last_value'}]}) set_attribute(self,'meter_description',self.name,config) set_attribute(self,'account',REQUIRED,config) set_attribute(self,'meter_number',REQUIRED,config) set_attribute(self,'units','',config)
def configuration(self): config = Calculator.configuration(self) config.update(_Trigger.configuration(self)) get_attribute(self,'message', config) get_attribute(self, 'poll_period', config, str) get_attribute(self, 'critical_input', config) get_attribute(self,'description', config) get_attribute(self, 'enabled', config, str) return config
def configuration(self): config = Calculator.configuration(self) config.update(_Trigger.configuration(self)) get_attribute(self, 'message', config) get_attribute(self, 'poll_period', config, str) get_attribute(self, 'critical_input', config) get_attribute(self, 'description', config) get_attribute(self, 'enabled', config, str) return config
def configure(self, config): PeriodicColumn.configure(self, config) if not self.has_child("average"): c = Calculator() c.configure( { "name": "average", "parent": self, "statement": "(value + last_value)/2.0", "variables": [ {"vn": "value", "node_reference": "$value"}, {"vn": "last_value", "node_reference": "$last_value"}, {"vn": "last_time", "node_reference": "$last_time"}, {"vn": "now", "node_reference": "$now"}, {"vn": "period", "node_reference": "$period"}, ], } ) return
def configure(self, config): PeriodicColumn.configure(self, config) if not self.has_child('delta'): c = Calculator() c.configure({ 'name': 'delta', 'parent': self, 'statement': 'value - last_value', 'variables': [{ 'vn': 'value', 'node_reference': '$value' }, { 'vn': 'last_value', 'node_reference': '$last_value' }] }) return
def start(self): if not self._running.isSet(): _Trigger.start(self) variables = [] self._message = '' message = self.message while '$' in message: index = message.index('$') try: if message[index+1] == '{': end = string.find(message,'}',index) if end > -1: var = message[index:end+1] variable = var[2:-1] if '$' not in variable and '{' not in variable: message = string.replace(message,var,'%s') variables.append(variable) except IndexError: pass self._message += message[0:index+1] message = message[index+1:] self._message += message self._message_vars = tuple(variables) self.state = self.STATES[self.state]['start'] self._running.set() try: Calculator.start(self) except: message = "Failed to start Trigger %r. Will retry in 30 secs." msglog.error(message % self.name) if not self._start_failed: msglog.exception(prefix="handled") self._start_failed = True else: message = "Trigger %r started. Evaluation runs in 30 seconds." msglog.inform(message % self.name) self._start_failed = False finally: self.reschedule(30)
def configure(self,config): Calculator.configure(self, config) _Trigger.configure(self, config) message = '' if 'poll_period' in config: try: policy = float(config['poll_period']) except ValueError: raise ValueError('Value of field \'Poll period\' is not numeric') if not (config.has_key('message') and config['message']): for var in self.variables: if message: message += ', ' message += '%s = ${%s}' % (var['vn'],var['vn']) set_attribute(self, 'message', message, {}) else: set_attribute(self, 'message', REQUIRED, config) set_attribute(self, 'poll_period', 2, config, float) set_attribute(self, 'critical_input', '', config) set_attribute(self, 'description', '', config) set_attribute(self, 'enabled', 1, config, as_boolean) self.manager = self.parent
def start(self): if not self._running.isSet(): _Trigger.start(self) variables = [] self._message = '' message = self.message while '$' in message: index = message.index('$') try: if message[index + 1] == '{': end = string.find(message, '}', index) if end > -1: var = message[index:end + 1] variable = var[2:-1] if '$' not in variable and '{' not in variable: message = string.replace(message, var, '%s') variables.append(variable) except IndexError: pass self._message += message[0:index + 1] message = message[index + 1:] self._message += message self._message_vars = tuple(variables) self.state = self.STATES[self.state]['start'] self._running.set() try: Calculator.start(self) except: message = "Failed to start Trigger %r. Will retry in 30 secs." msglog.error(message % self.name) if not self._start_failed: msglog.exception(prefix="handled") self._start_failed = True else: message = "Trigger %r started. Evaluation runs in 30 seconds." msglog.inform(message % self.name) self._start_failed = False finally: self.reschedule(30)
def configure(self, config): Calculator.configure(self, config) _Trigger.configure(self, config) message = '' if 'poll_period' in config: try: policy = float(config['poll_period']) except ValueError: raise ValueError( 'Value of field \'Poll period\' is not numeric') if not (config.has_key('message') and config['message']): for var in self.variables: if message: message += ', ' message += '%s = ${%s}' % (var['vn'], var['vn']) set_attribute(self, 'message', message, {}) else: set_attribute(self, 'message', REQUIRED, config) set_attribute(self, 'poll_period', 2, config, float) set_attribute(self, 'critical_input', '', config) set_attribute(self, 'description', '', config) set_attribute(self, 'enabled', 1, config, as_boolean) self.manager = self.parent
def test_get_1(self): la = Calculator() config = {'parent':self.get_fake_ion(), 'name':'linear_adjustor', 'statement':'(x+y)/z', 'variables':[{'vn':'x','node_reference':'1.0'}, {'vn':'y','node_reference':'2'}, {'vn':'z','node_reference':'3'}]} la.configure(config) la.start() value = la.get() if value != 1.0: self.fail('wrong value returned from simple get. Value returned: ' + str(value)) return
def stop(self): # this is where we need to cancel our schedule entry. self._change_state('stop') Calculator.stop(self)