Beispiel #1
0
 def test_hook(self):
     em = hook.HookManager(
         'stevedore.test.extension',
         't1',
         invoke_on_load=True,
         invoke_args=('a',),
         invoke_kwds={'b': 'B'},
     )
     self.assertEqual(len(em.extensions), 1)
     self.assertEqual(em.names(), ['t1'])
Beispiel #2
0
def test_hook():
    em = hook.HookManager(
        'stevedore.test.extension',
        't1',
        invoke_on_load=True,
        invoke_args=('a', ),
        invoke_kwds={'b': 'B'},
    )
    assert len(em.extensions) == 1
    assert em.names() == ['t1']
def stevedore_hook(namespace, name):
    print "--- hook.HookManager(%s,%s) ---" % (namespace,name)
    mgr = hook.HookManager(
        namespace = namespace,
        name = name,
        invoke_on_load = True,
    ) 
    
    def catch_all(ext):
        return (ext.name, ext.obj.catch())
    
    results = mgr.map(catch_all)
Beispiel #4
0
 def test_get_by_name(self):
     em = hook.HookManager(
         'stevedore.test.extension',
         't1',
         invoke_on_load=True,
         invoke_args=('a',),
         invoke_kwds={'b': 'B'},
     )
     e_list = em['t1']
     self.assertEqual(len(e_list), 1)
     e = e_list[0]
     self.assertEqual(e.name, 't1')
Beispiel #5
0
def test_get_by_name():
    em = hook.HookManager(
        'stevedore.test.extension',
        't1',
        invoke_on_load=True,
        invoke_args=('a', ),
        invoke_kwds={'b': 'B'},
    )
    e_list = em['t1']
    assert len(e_list) == 1
    e = e_list[0]
    assert e.name == 't1'
Beispiel #6
0
 def test_get_by_name_missing(self):
     em = hook.HookManager(
         'stevedore.test.extension',
         't1',
         invoke_on_load=True,
         invoke_args=('a',),
         invoke_kwds={'b': 'B'},
     )
     try:
         em['t2']
     except KeyError:
         pass
     else:
         assert False, 'Failed to raise KeyError'
    def __init__(self, conf):
        self._conf = conf
        module = Module.ALARM_GENERATOR
        self._moduleid = ModuleNames[module]
        node_type = Module2NodeType[module]
        self._node_type_name = NodeTypeNames[node_type]
        self._hostname = socket.gethostname()
        self._instance_id = self._conf.worker_id()
        sandesh_global.init_generator(self._moduleid, self._hostname,
                                      self._node_type_name, self._instance_id,
                                      self._conf.collectors(), 
                                      self._node_type_name,
                                      self._conf.http_port(),
                                      ['opserver.sandesh', 'sandesh'])
        sandesh_global.set_logging_params(
            enable_local_log=self._conf.log_local(),
            category=self._conf.log_category(),
            level=self._conf.log_level(),
            file=self._conf.log_file(),
            enable_syslog=self._conf.use_syslog(),
            syslog_facility=self._conf.syslog_facility())
        self._logger = sandesh_global._logger

        # Trace buffer list
        self.trace_buf = [
            {'name':'DiscoveryMsg', 'size':1000}
        ]
        # Create trace buffers 
        for buf in self.trace_buf:
            sandesh_global.trace_buffer_create(name=buf['name'], size=buf['size'])

        tables = [ "ObjectCollectorInfo",
                   "ObjectDatabaseInfo",
                   "ObjectVRouter",
                   "ObjectBgpRouter",
                   "ObjectConfigNode" ] 
        self.mgrs = {}
        self.tab_alarms = {}
        for table in tables:
            self.mgrs[table] = hook.HookManager(
                namespace='contrail.analytics.alarms',
                name=table,
                invoke_on_load=True,
                invoke_args=(),
                on_load_failure_callback=Controller.fail_cb
            )
            
            for extn in self.mgrs[table][table]:
                self._logger.info('Loaded extensions for %s: %s,%s' % \
                    (table, extn.name, extn.entry_point_target))

            self.tab_alarms[table] = {}

        ConnectionState.init(sandesh_global, self._hostname, self._moduleid,
            self._instance_id,
            staticmethod(ConnectionState.get_process_state_cb),
            NodeStatusUVE, NodeStatus)

        self._us = UVEServer(None, self._logger, self._conf.redis_password())

        self._workers = {}

        self.disc = None
        self._libpart_name = self._hostname + ":" + self._instance_id
        self._libpart = None
        self._partset = set()
        if self._conf.discovery()['server']:
            import discoveryclient.client as client 
            data = {
                'ip-address': self._hostname ,
                'port': self._instance_id
            }
            self.disc = client.DiscoveryClient(
                self._conf.discovery()['server'],
                self._conf.discovery()['port'],
                ModuleNames[Module.ALARM_GENERATOR])
            self._logger.info("Disc Publish to %s : %s"
                          % (str(self._conf.discovery()), str(data)))
            self.disc.publish(ALARM_GENERATOR_SERVICE_NAME, data)
        else:
            # If there is no discovery service, use fixed redis_uve list
            redis_uve_list = []
            try:
                for redis_uve in self._conf.redis_uve_list():
                    redis_ip_port = redis_uve.split(':')
                    redis_ip_port = (redis_ip_port[0], int(redis_ip_port[1]))
                    redis_uve_list.append(redis_ip_port)
            except Exception as e:
                self._logger.error('Failed to parse redis_uve_list: %s' % e)
            else:
                self._us.update_redis_uve_list(redis_uve_list)

            # If there is no discovery service, use fixed alarmgen list
            self._libpart = self.start_libpart(self._conf.alarmgen_list())

        PartitionOwnershipReq.handle_request = self.handle_PartitionOwnershipReq
        PartitionStatusReq.handle_request = self.handle_PartitionStatusReq
        UVETableAlarmReq.handle_request = self.handle_UVETableAlarmReq 
Beispiel #8
0
 def hook_manager(self, name):
     LOG.debug('Looking for hooks with: %s %s', self.NAMESPACE, name)
     return hook.HookManager(self.NAMESPACE, name)
Beispiel #9
0
        decorator = ext.plugin(self.group)
        f = decorator(f)
        f._hook_point = self  # add ourselves for inspection
        return f

    def __call__(self, f):
        # Set up all our hook information based on the function or
        # hook point
        self.init_hook(f)

        for h in self.hooks:
            f = self.enable_hook(h, f)
        return f


if __name__ == '__main__':
    # Use this script to find existing hook points.
    hook_names = sys.argv[1:]

    print('Using namespace: %s' % hook_point.NAMESPACE)

    print('pkg_resources has the following entry points:')
    for ep in pkg_resources.iter_entry_points(hook_point.NAMESPACE):
        print(ep)

    print()
    print('stevedore found the following hooks:')
    for name in hook_names:
        for hp in hook.HookManager(hook_point.NAMESPACE, name):
            print(hp)
Beispiel #10
0
    parser.add_argument(
        '--width',
        default=60,
        type=int,
        help='maximum output width for text',
    )
    parsed_args = parser.parse_args()

    data = {
        'a': 'A',
        'b': 'B',
        'long': 'word ' * 80,
    }

    mgr = hook.HookManager(
        namespace='stevedoretest.formatter',
        name=parsed_args.format,
        invoke_on_load=True,
        invoke_args=(parsed_args.width, ),
    )

    def format_data(ext, data):
        return (ext.name, ext.obj.format(data))

    results = mgr.map(format_data, data)

    for name, result in results:
        print('Formatter: %s' % name)
        for chunk in result:
            print(chunk)