2 # Copyright (C) The Arvados Authors. All rights reserved.
4 # SPDX-License-Identifier: AGPL-3.0
14 def parse_arguments(arguments):
15 arg_parser = argparse.ArgumentParser()
16 arg_parser.add_argument('--days', type=int, required=True)
17 args = arg_parser.parse_args(arguments)
20 def getowner(arv, uuid, owners):
23 if uuid[6:11] == "tpzed":
26 if uuid not in owners:
28 gp = arv.groups().get(uuid=uuid).execute()
29 owners[uuid] = gp["owner_uuid"]
33 return getowner(arv, owners[uuid], owners)
35 def getusername(arv, uuid):
36 u = arv.users().get(uuid=uuid).execute()
37 return "%s %s <%s> (%s)" % (u["first_name"], u["last_name"], u["email"], uuid)
40 return "\"%s\" (%s)" % (u["name"], u["uuid"])
42 def main(arguments=None):
44 arguments = sys.argv[1:]
46 args = parse_arguments(arguments)
50 since = datetime.datetime.utcnow() - datetime.timedelta(days=args.days)
52 print("Activity since %s\n" % (datetime.datetime.now() - datetime.timedelta(days=args.days)).isoformat())
54 events = arvados.util.keyset_list_all(arv.logs().list, filters=[["created_at", ">=", since.isoformat()]])
60 owner = getowner(arv, e["object_owner_uuid"], owners)
61 users.setdefault(owner, [])
62 event_at = ciso8601.parse_datetime(e["event_at"]).astimezone().isoformat()
66 if e["event_type"] == "create" and e["object_uuid"][6:11] == "tpzed":
67 users.setdefault(e["object_uuid"], [])
68 users[e["object_uuid"]].append("%s User account created" % event_at)
70 elif e["event_type"] == "update" and e["object_uuid"][6:11] == "tpzed":
73 elif e["event_type"] == "create" and e["object_uuid"][6:11] == "xvhdp":
74 if e["properties"]["new_attributes"]["requesting_container_uuid"] is None:
75 users[owner].append("%s Ran container %s %s" % (event_at, getname(e["properties"]["new_attributes"]), loguuid))
77 elif e["event_type"] == "update" and e["object_uuid"][6:11] == "xvhdp":
80 elif e["event_type"] == "create" and e["object_uuid"][6:11] == "j7d0g":
81 users[owner].append("%s Created project %s" % (event_at, getname(e["properties"]["new_attributes"])))
83 elif e["event_type"] == "delete" and e["object_uuid"][6:11] == "j7d0g":
84 users[owner].append("%s Deleted project %s" % (event_at, getname(e["properties"]["old_attributes"])))
86 elif e["event_type"] == "update" and e["object_uuid"][6:11] == "j7d0g":
87 users[owner].append("%s Updated project %s" % (event_at, getname(e["properties"]["new_attributes"])))
89 elif e["event_type"] in ("create", "update") and e["object_uuid"][6:11] == "gj3su":
90 if len(users[owner]) > 0 and users[owner][-1].endswith("activity"):
91 sp = users[owner][-1].split(" ")
92 users[owner][-1] = "%s to %s Account activity" % (sp[0], event_at)
94 users[owner].append("%s Account activity" % (event_at))
96 elif e["event_type"] == "create" and e["object_uuid"][6:11] == "o0j2j":
97 if e["properties"]["new_attributes"]["link_class"] == "tag":
98 users[owner].append("%s Tagged %s" % (event_at, e["properties"]["new_attributes"]["head_uuid"]))
99 elif e["properties"]["new_attributes"]["link_class"] == "permission":
100 users[owner].append("%s Shared %s with %s" % (event_at, e["properties"]["new_attributes"]["tail_uuid"], e["properties"]["new_attributes"]["head_uuid"]))
102 users[owner].append("%s %s %s %s" % (e["event_type"], e["object_kind"], e["object_uuid"], loguuid))
104 elif e["event_type"] == "delete" and e["object_uuid"][6:11] == "o0j2j":
105 if e["properties"]["old_attributes"]["link_class"] == "tag":
106 users[owner].append("%s Untagged %s" % (event_at, e["properties"]["old_attributes"]["head_uuid"]))
107 elif e["properties"]["old_attributes"]["link_class"] == "permission":
108 users[owner].append("%s Unshared %s with %s" % (event_at, e["properties"]["old_attributes"]["tail_uuid"], e["properties"]["old_attributes"]["head_uuid"]))
110 users[owner].append("%s %s %s %s" % (e["event_type"], e["object_kind"], e["object_uuid"], loguuid))
112 elif e["event_type"] == "create" and e["object_uuid"][6:11] == "4zz18":
113 if e["properties"]["new_attributes"]["properties"].get("type") in ("log", "output", "intermediate"):
116 users[owner].append("%s Created collection %s %s" % (event_at, getname(e["properties"]["new_attributes"]), loguuid))
118 elif e["event_type"] == "update" and e["object_uuid"][6:11] == "4zz18":
119 users[owner].append("%s Updated collection %s %s" % (event_at, getname(e["properties"]["new_attributes"]), loguuid))
121 elif e["event_type"] == "delete" and e["object_uuid"][6:11] == "4zz18":
122 if e["properties"]["old_attributes"]["properties"].get("type") in ("log", "output", "intermediate"):
125 users[owner].append("%s Deleted collection %s %s" % (event_at, getname(e["properties"]["old_attributes"]), loguuid))
128 users[owner].append("%s %s %s %s" % (e["event_type"], e["object_kind"], e["object_uuid"], loguuid))
130 for k,v in users.items():
131 if k is None or k.endswith("-tpzed-000000000000000"):
133 print("%s:" % getusername(arv, k))
138 if __name__ == "__main__":