nfv/nfv/nfv-common/nfv_common/timers/_timer_module.py

125 lines
3.1 KiB
Python
Executable File

#
# Copyright (c) 2015-2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
import functools
from nfv_common import debug
from nfv_common.timers._timer import Timer
from nfv_common.timers._timer_scheduler import TimerScheduler
DLOG = debug.debug_get_logger('nfv_common.timers.timer_module')
_scheduler = None
_interval_timers = dict()
def interval_timer(name, initial_delay_secs, interval_secs):
"""
Decorator function used to create an interval timer, note decorators
are called at load time
"""
def timer_wrap(func):
def timer_wrapper(*args, **kwargs):
target = func(*args, **kwargs)
target.send(None)
return target
functools.update_wrapper(timer_wrapper, func)
if timer_wrapper not in _interval_timers:
_interval_timers[timer_wrapper] = (name, initial_delay_secs,
interval_secs, timer_wrapper)
return timer_wrapper
return timer_wrap
def timers_create_timer(name, initial_delay_secs, interval_secs,
callback, *callback_args, **callback_kwargs):
"""
Create a timer
"""
global _scheduler
timer = Timer(name, initial_delay_secs, interval_secs,
callback, *callback_args, **callback_kwargs)
_scheduler.add_timer(timer)
DLOG.debug("Timer %s created, name=%s." % (timer.timer_id, name))
return timer.timer_id
def timers_delete_timer(timer_id):
"""
Delete a timer
"""
global _scheduler
_scheduler.delete_timer(timer_id)
DLOG.debug("Timer %s deleted." % timer_id)
def timers_reschedule_timer(timer_id, interval_secs):
"""
Reschedule a timer at a different interval
"""
global _scheduler
_scheduler.reschedule_timer(timer_id, interval_secs)
DLOG.debug("Timer %s rescheduled every %s seconds." % (timer_id,
interval_secs))
def timers_scheduling_on_time():
"""
Determine if we are scheduling timers on time
"""
global _scheduler
return _scheduler.scheduling_on_time
def timers_schedule():
"""
Schedule timers
"""
global _scheduler
_scheduler.schedule()
def timers_register_interval_timers(interval_timers):
"""
Register the given interval timers
"""
for timer_func in interval_timers:
name, initial_delay_secs, interval_secs, func \
= _interval_timers[timer_func]
timers_create_timer(name, initial_delay_secs, interval_secs, func)
def timers_initialize(scheduler_interval_ms, scheduler_max_delay_ms,
scheduler_delay_debounce_ms):
"""
Initializes the timer package
"""
global _scheduler
if _scheduler is not None:
del _scheduler
_scheduler = TimerScheduler(scheduler_interval_ms,
scheduler_max_delay_ms,
scheduler_delay_debounce_ms)
def timers_finalize():
"""
Finalizes the timer package
"""
global _scheduler
if _scheduler is not None:
del _scheduler