Пример #1
0
 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')
Пример #2
0
 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
Пример #3
0
 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)
Пример #4
0
 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
Пример #5
0
 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')
Пример #6
0
 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
Пример #7
0
 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)
Пример #8
0
 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
Пример #9
0
 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
Пример #10
0
 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)
Пример #11
0
 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
Пример #12
0
 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
Пример #13
0
 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
Пример #14
0
 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
Пример #15
0
 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
Пример #16
0
 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
Пример #17
0
 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
Пример #18
0
 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
Пример #19
0
 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)
Пример #20
0
 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
Пример #21
0
 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
Пример #22
0
 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
Пример #23
0
 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
Пример #24
0
 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)
Пример #25
0
 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
Пример #26
0
 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)
Пример #27
0
 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
Пример #28
0
 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
Пример #29
0
 def stop(self):
     # this is where we need to cancel our schedule entry.
     self._change_state('stop')
     Calculator.stop(self)
Пример #30
0
 def stop(self):
     # this is where we need to cancel our schedule entry.
     self._change_state('stop')
     Calculator.stop(self)