From 4f2cfd5d6bccc742d308585e7b4595b0de3db1a8 Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Tue, 17 Nov 2020 17:46:42 -0500 Subject: [PATCH] 17022: Specify time period in days on command line. Also print timestamps in local time zone. Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- tools/user-activity/arv-user-activity.py | 58 ++++++++++++++---------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/tools/user-activity/arv-user-activity.py b/tools/user-activity/arv-user-activity.py index c8b5365b77..196133dddc 100755 --- a/tools/user-activity/arv-user-activity.py +++ b/tools/user-activity/arv-user-activity.py @@ -8,10 +8,12 @@ import sys import arvados import arvados.util +import datetime +import ciso8601 def parse_arguments(arguments): arg_parser = argparse.ArgumentParser() - arg_parser.add_argument('--timespan', type=str) + arg_parser.add_argument('--days', type=int) args = arg_parser.parse_args(arguments) return args @@ -32,7 +34,7 @@ def getowner(arv, uuid, owners): def getusername(arv, uuid): u = arv.users().get(uuid=uuid).execute() - return "%s %s (%s)" % (u["first_name"], u["last_name"], uuid) + return "%s %s <%s> (%s)" % (u["first_name"], u["last_name"], u["email"], uuid) def getname(u): return "\"%s\" (%s)" % (u["name"], u["uuid"]) @@ -42,7 +44,11 @@ def main(arguments): arv = arvados.api() - events = arvados.util.keyset_list_all(arv.logs().list, filters=[["created_at", ">=", "2020-10-01T14:51:42-05:00"]]) + since = datetime.datetime.utcnow() - datetime.timedelta(days=args.days) + + print("Activity since %s\n" % (datetime.datetime.now() - datetime.timedelta(days=args.days)).isoformat()) + + events = arvados.util.keyset_list_all(arv.logs().list, filters=[["created_at", ">=", since.isoformat()]]) users = {} owners = {} @@ -50,67 +56,73 @@ def main(arguments): for e in events: owner = getowner(arv, e["object_owner_uuid"], owners) users.setdefault(owner, []) + event_at = ciso8601.parse_datetime(e["event_at"]).astimezone().isoformat() + # loguuid = e["uuid"] + loguuid = "" if e["event_type"] == "create" and e["object_uuid"][6:11] == "tpzed": users.setdefault(e["object_uuid"], []) - users[e["object_uuid"]].append("%s User account created" % e["event_at"]) - if e["event_type"] == "update" and e["object_uuid"][6:11] == "tpzed": + users[e["object_uuid"]].append("%s User account created" % event_at) + + elif e["event_type"] == "update" and e["object_uuid"][6:11] == "tpzed": pass - #users.setdefault(e["object_uuid"], []) - #users[e["object_uuid"]].append("%s User account created" % e["event_at"]) + elif e["event_type"] == "create" and e["object_uuid"][6:11] == "xvhdp": if e["properties"]["new_attributes"]["requesting_container_uuid"] is None: - users[owner].append("%s Ran container %s %s" % (e["event_at"], getname(e["properties"]["new_attributes"]), e["uuid"])) + users[owner].append("%s Ran container %s %s" % (event_at, getname(e["properties"]["new_attributes"]), loguuid)) elif e["event_type"] == "update" and e["object_uuid"][6:11] == "xvhdp": pass elif e["event_type"] == "create" and e["object_uuid"][6:11] == "j7d0g": - users[owner].append("%s Created project %s" % (e["event_at"], getname(e["properties"]["new_attributes"]))) + users[owner].append("%s Created project %s" % (event_at, getname(e["properties"]["new_attributes"]))) elif e["event_type"] == "delete" and e["object_uuid"][6:11] == "j7d0g": - users[owner].append("%s Deleted project %s" % (e["event_at"], getname(e["properties"]["old_attributes"]))) + users[owner].append("%s Deleted project %s" % (event_at, getname(e["properties"]["old_attributes"]))) elif e["event_type"] == "update" and e["object_uuid"][6:11] == "j7d0g": - users[owner].append("%s Updated project %s" % (e["event_at"], getname(e["properties"]["new_attributes"]))) + users[owner].append("%s Updated project %s" % (event_at, getname(e["properties"]["new_attributes"]))) elif e["event_type"] in ("create", "update") and e["object_uuid"][6:11] == "gj3su": if len(users[owner]) > 0 and users[owner][-1].endswith("activity"): sp = users[owner][-1].split(" ") - users[owner][-1] = "%s to %s Account activity" % (sp[0], e["event_at"]) + users[owner][-1] = "%s to %s Account activity" % (sp[0], event_at) else: - users[owner].append("%s Account activity" % (e["event_at"])) + users[owner].append("%s Account activity" % (event_at)) elif e["event_type"] == "create" and e["object_uuid"][6:11] == "o0j2j": if e["properties"]["new_attributes"]["link_class"] == "tag": - users[owner].append("%s Tagged %s" % (e["event_at"], e["properties"]["new_attributes"]["head_uuid"])) + users[owner].append("%s Tagged %s" % (event_at, e["properties"]["new_attributes"]["head_uuid"])) elif e["properties"]["new_attributes"]["link_class"] == "permission": - users[owner].append("%s Shared %s with %s" % (e["event_at"], e["properties"]["new_attributes"]["tail_uuid"], e["properties"]["new_attributes"]["head_uuid"])) + users[owner].append("%s Shared %s with %s" % (event_at, e["properties"]["new_attributes"]["tail_uuid"], e["properties"]["new_attributes"]["head_uuid"])) else: - users[owner].append("%s %s %s %s" % (e["event_type"], e["object_kind"], e["object_uuid"], e["uuid"])) + users[owner].append("%s %s %s %s" % (e["event_type"], e["object_kind"], e["object_uuid"], loguuid)) elif e["event_type"] == "delete" and e["object_uuid"][6:11] == "o0j2j": if e["properties"]["old_attributes"]["link_class"] == "tag": - users[owner].append("%s Untagged %s" % (e["event_at"], e["properties"]["old_attributes"]["head_uuid"])) + users[owner].append("%s Untagged %s" % (event_at, e["properties"]["old_attributes"]["head_uuid"])) elif e["properties"]["old_attributes"]["link_class"] == "permission": - users[owner].append("%s Unshared %s with %s" % (e["event_at"], e["properties"]["old_attributes"]["tail_uuid"], e["properties"]["old_attributes"]["head_uuid"])) + users[owner].append("%s Unshared %s with %s" % (event_at, e["properties"]["old_attributes"]["tail_uuid"], e["properties"]["old_attributes"]["head_uuid"])) else: - users[owner].append("%s %s %s %s" % (e["event_type"], e["object_kind"], e["object_uuid"], e["uuid"])) + users[owner].append("%s %s %s %s" % (e["event_type"], e["object_kind"], e["object_uuid"], loguuid)) elif e["event_type"] == "create" and e["object_uuid"][6:11] == "4zz18": if e["properties"]["new_attributes"]["properties"].get("type") in ("log", "output", "intermediate"): pass else: - users[owner].append("%s Created collection %s %s" % (e["event_at"], getname(e["properties"]["new_attributes"]), e["uuid"])) + users[owner].append("%s Created collection %s %s" % (event_at, getname(e["properties"]["new_attributes"]), loguuid)) elif e["event_type"] == "update" and e["object_uuid"][6:11] == "4zz18": - users[owner].append("%s Updated collection %s %s" % (e["event_at"], getname(e["properties"]["new_attributes"]), e["uuid"])) + users[owner].append("%s Updated collection %s %s" % (event_at, getname(e["properties"]["new_attributes"]), loguuid)) elif e["event_type"] == "delete" and e["object_uuid"][6:11] == "4zz18": - users[owner].append("%s Deleted collection %s %s" % (e["event_at"], getname(e["properties"]["old_attributes"]), e["uuid"])) + if e["properties"]["old_attributes"]["properties"].get("type") in ("log", "output", "intermediate"): + pass + else: + users[owner].append("%s Deleted collection %s %s" % (event_at, getname(e["properties"]["old_attributes"]), loguuid)) else: - users[owner].append("%s %s %s %s" % (e["event_type"], e["object_kind"], e["object_uuid"], e["uuid"])) + users[owner].append("%s %s %s %s" % (e["event_type"], e["object_kind"], e["object_uuid"], loguuid)) for k,v in users.items(): if k is None or k.endswith("-tpzed-000000000000000"): -- 2.30.2