from __future__ import absolute_import from neb.plugins import Plugin import calendar import datetime import time from dateutil import parser class TimePlugin(Plugin): """Encodes and decodes timestamps. time encode <date> : Encode <date> as a unix timestamp. time decode <unix timestamp> : Decode the unix timestamp and return the date. """ name="time" def cmd_encode(self, event, *args): """Encode a time. Multiple different formats are supported, e.g. YYYY-MM-DD HH:MM:SS 'time encode <date>'""" # use the body directly so spaces are handled correctly. date_str = event["content"]["body"][len("!time encode "):] if date_str.lower().strip() == "now": now = time.time() return "Parsed as %s\n%s" % (datetime.datetime.utcfromtimestamp(now), now) try: d = parser.parse(date_str) ts = calendar.timegm(d.timetuple()) return "Parsed as %s\n%s" % (d.strftime("%Y-%m-%d %H:%M:%S"), ts) except ValueError: return "Failed to parse '%s'" % date_str def cmd_decode(self, event, timestamp): """Decode from a unix timestamp. 'time decode <timestamp>'""" is_millis = len(timestamp) > 10 try: ts = int(timestamp) if is_millis: return datetime.datetime.utcfromtimestamp(ts/1000.0).strftime("%Y-%m-%d %H:%M:%S.%f") else: return datetime.datetime.utcfromtimestamp(ts).strftime("%Y-%m-%d %H:%M:%S") except ValueError: return "Failed to parse '%s'" % timestamp