From 165f8fa4a79cad0544e5a403f850f1a1bc32cef2 Mon Sep 17 00:00:00 2001 From: James Lu Date: Wed, 11 Jan 2017 23:35:10 -0800 Subject: [PATCH 1/2] world: start tracking daemon start time (#381) --- world.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/world.py b/world.py index 9e20c9e..a37de98 100644 --- a/world.py +++ b/world.py @@ -4,6 +4,7 @@ world.py: Stores global variables for PyLink, including lists of active IRC obje from collections import defaultdict import threading +import time # This indicates whether we're running in tests mode. What it actually does # though is control whether IRC connections should be threaded or not. @@ -21,6 +22,7 @@ exttarget_handlers = {} # Trigger to be set when all IRC objects are initially created. started = threading.Event() +start_ts = time.time() # Source address. source = "https://github.com/GLolol/PyLink" # CHANGE THIS IF YOU'RE FORKING!! From b1918f5392620e174b474e500537d2192b809371 Mon Sep 17 00:00:00 2001 From: James Lu Date: Wed, 11 Jan 2017 23:35:35 -0800 Subject: [PATCH 2/2] Initial pass at a Stats plugin (#121, #381) --- docs/permissions-reference.md | 3 +++ plugins/stats.py | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 plugins/stats.py diff --git a/docs/permissions-reference.md b/docs/permissions-reference.md index 78eb755..956d46d 100644 --- a/docs/permissions-reference.md +++ b/docs/permissions-reference.md @@ -89,3 +89,6 @@ Remote versions of the `manage`, `list`, `sync`, and `clear` commands also exist ## Servermaps - `servermaps.map` - Allows access to the `map` and `localmap` commands. + +## Stats +- `stats.uptime` - Allows access to the `stats` command. diff --git a/plugins/stats.py b/plugins/stats.py new file mode 100644 index 0000000..50705b4 --- /dev/null +++ b/plugins/stats.py @@ -0,0 +1,36 @@ +""" +stats.py: Simple statistics for PyLink IRC Services. +""" +import time +import datetime + +from pylinkirc import utils, world +from pylinkirc.log import log +from pylinkirc.coremods import permissions + +def _timesince(before, now): + return str(datetime.timedelta(seconds=now-before)) + +@utils.add_cmd +def uptime(irc, source, args): + """[] + + Returns the uptime for PyLink and the given network's connection (or the current network if not specified).""" + permissions.checkPermissions(irc, source, ['stats.uptime']) + + try: + network = args[0] + except IndexError: + network = irc.name + + try: + ircobj = world.networkobjects[network] + except KeyError: + irc.error("No such network %r." % network) + return + + current_time = int(time.time()) + + irc.reply("PyLink uptime: \x02%s\x02, Connected to %s: \x02%s\x02" % \ + (_timesince(world.start_ts, current_time), network, _timesince(irc.start_ts, current_time))) +