diff --git a/cmdtable.py b/cmdtable.py index 99c888bd43..a8739bafa0 100644 --- a/cmdtable.py +++ b/cmdtable.py @@ -60,6 +60,7 @@ ctable = { "@newpassword": (commands_privileged.cmd_newpassword, ("genperms.manage_players")), "@open": (commands_privileged.cmd_open, ("genperms.builder")), "@password": (commands_privileged.cmd_password, None), + "@ps": (commands_privileged.cmd_ps, ("genperms.process_control")), "@reload": (commands_privileged.cmd_reload, ("genperms.process_control")), "@set": (commands_privileged.cmd_set, None), "@shutdown": (commands_privileged.cmd_shutdown, ("genperms.process_control")), diff --git a/commands_privileged.py b/commands_privileged.py index 04633b235d..77141bc15c 100644 --- a/commands_privileged.py +++ b/commands_privileged.py @@ -4,6 +4,7 @@ import resource from django.contrib.auth.models import User from apps.objects.models import Object import defines_global +import scheduler import session_mgr import functions_general import functions_db @@ -22,6 +23,19 @@ def cmd_reload(cdat): session = cdat['session'] server = session.server.reload(session) +def cmd_ps(cdat): + """ + Shows the process/event table. + """ + session = cdat['session'] + session.msg("-- Interval Events --") + for event in scheduler.schedule: + session.msg(" [%d/%d] %s" % (scheduler.get_event_nextfire(event), + scheduler.get_event_interval(event), + scheduler.get_event_description(event))) + session.msg("Totals: %d interval events" % (len(scheduler.schedule),)) + + def cmd_destroy(cdat): """ Destroy an object. diff --git a/scheduler.py b/scheduler.py index fb0f9de9fe..c901b47e36 100644 --- a/scheduler.py +++ b/scheduler.py @@ -1,5 +1,6 @@ -import events +import time from twisted.internet import task +import events """ ADDING AN EVENT: * Create an event function to call. @@ -10,7 +11,7 @@ ADDING AN EVENT: # Dictionary of events with a list in the form of: # [, , , , ] schedule = { - 'check_sessions': [events.check_sessions, 5, None, None, "Session check."] + 'check_sessions': [events.check_sessions, 60, time.time(), None, "Session consistency checks."] } def start_events(): @@ -54,6 +55,30 @@ def get_event_interval(event_name): """ return get_event(event_name)[1] +def get_event_nextfire(event_name): + """ + Returns a value in seconds when the event is going to fire off next. + + event_name: (string) The key of the event in the schedule dictionary. + """ + return (get_event(event_name)[2]+get_event_interval(event_name))-time.time() + +def get_event_taskobj(event_name): + """ + Returns an event's task object. + + event_name: (string) The key of the event in the schedule dictionary. + """ + return get_event(event_name)[3] + +def get_event_description(event_name): + """ + Returns an event's description. + + event_name: (string) The key of the event in the schedule dictionary. + """ + return get_event(event_name)[4] + def set_event_taskobj(event_name, taskobj): """ Sets an event's task object. @@ -62,6 +87,14 @@ def set_event_taskobj(event_name, taskobj): """ get_event(event_name)[3] = taskobj +def set_event_lastfired(event_name): + """ + Sets an event's last fired time. + + event_name: (string) The key of the event in the schedule dictionary. + """ + get_event(event_name)[2] = time.time() + def trigger_event(event_func, event_name): """ Update the last ran time and fire off the event. @@ -69,4 +102,5 @@ def trigger_event(event_func, event_name): event_func: (func_reference) Reference to the event function to fire. eventname: (string) The name of the event (as per schedule dict). """ - event_func() \ No newline at end of file + event_func() + set_event_lastfired(event_name) \ No newline at end of file