c8cd4226d7
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation.
|
|
# Copyright (C) 2012 Isaku Yamahata <yamahata at valinux co jp>
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
|
|
import gflags
|
|
import logging
|
|
|
|
from ryu.base import app_manager
|
|
from ryu.controller import dispatcher
|
|
from ryu.controller.handler import set_ev_cls
|
|
|
|
LOG = logging.getLogger('ryu.app.event_dumper')
|
|
|
|
FLAGS = gflags.FLAGS
|
|
gflags.DEFINE_multistring('dump_queue', [],
|
|
'list of dispatcher name to dump event: default any')
|
|
gflags.DEFINE_multistring('dump_dispatcher', [],
|
|
'list of dispatcher name to dump event: default any')
|
|
|
|
|
|
class EventDumper(app_manager.RyuApp):
|
|
def __init__(self, *args, **kwargs):
|
|
super(EventDumper, self).__init__(*args, **kwargs)
|
|
# EventDispatcher can be created and cloned before us.
|
|
# So register it explicitly
|
|
for ev_q in dispatcher.EventQueue.all_instances():
|
|
if ev_q == dispatcher.QUEUE_EV_Q:
|
|
continue
|
|
LOG.info('%s: registering q %s dispatcher %s',
|
|
__name__, ev_q.name, ev_q.dispatcher.name)
|
|
self._register_dump_handler(ev_q, ev_q.dispatcher)
|
|
|
|
@staticmethod
|
|
def _need_dump(name, name_list):
|
|
return len(name_list) == 0 or name in name_list
|
|
|
|
def _register_dump_handler(self, ev_q, dispatcher):
|
|
if (self._need_dump(ev_q.name, FLAGS.dump_queue) or
|
|
self._need_dump(dispatcher.name, FLAGS.dump_dispatcher)):
|
|
dispatcher.register_all_handler(self._dump_event)
|
|
|
|
@set_ev_cls(dispatcher.EventQueueCreate, dispatcher.QUEUE_EV_DISPATCHER)
|
|
def queue_create(self, ev):
|
|
if ev.create:
|
|
LOG.info('%s: queue created %s', __name__, ev.ev_q.name)
|
|
else:
|
|
LOG.info('%s: queue deleted %s', __name__, ev.ev_q.name)
|
|
|
|
self._dump_event(ev)
|
|
self._register_dump_handler(ev.ev_q, ev.dispatcher)
|
|
|
|
@set_ev_cls(dispatcher.EventDispatcherChange,
|
|
dispatcher.QUEUE_EV_DISPATCHER)
|
|
def dispatcher_change(self, ev):
|
|
LOG.info('%s: dispatcher change q %s dispatcher %s -> %s', __name__,
|
|
ev.ev_q.name, ev.old_dispatcher.name, ev.new_dispatcher.name)
|
|
|
|
self._dump_event(ev)
|
|
self._register_dump_handler(ev.ev_q, ev.new_dispatcher)
|
|
|
|
def _dump_event(self, ev):
|
|
LOG.info('%s: event %s', __name__, ev)
|