211c215c654c363993a9d480cbda679de0bbd7e9 hiram Fri May 1 13:59:15 2026 -0700 eliminating stderr information to avoid cron job noise refs #31811 diff --git src/hg/utils/otto/userRequests/galaxyCleanup.py src/hg/utils/otto/userRequests/galaxyCleanup.py index 82b3b29f29b..9de51606345 100755 --- src/hg/utils/otto/userRequests/galaxyCleanup.py +++ src/hg/utils/otto/userRequests/galaxyCleanup.py @@ -1,78 +1,78 @@ #!/usr/bin/env python3 # galaxyCleanup.py - delete a Galaxy invocation and purge its history # # usage: galaxyCleanup.py <profileJson> <invocationId> # # Use only after the workflow is complete and results have been # downloaded -- purging the history is irreversible and frees the # Galaxy-side disk space the workflow consumed. # # Reads galaxy_url and galaxy_user_key from the planemo profile JSON. # Exits 0 on success (or if the invocation is already gone), non-zero # on API error. import json import sys import urllib.error import urllib.request def apiCall(method, url, apiKey): req = urllib.request.Request( url, method=method, headers={"x-api-key": apiKey}) try: with urllib.request.urlopen(req) as r: body = r.read() return json.loads(body) if body else {} except urllib.error.HTTPError as e: if e.code == 404: return None raise def main(): if len(sys.argv) != 3: sys.exit("usage: galaxyCleanup.py <profileJson> <invocationId>") profileJson, invocationId = sys.argv[1], sys.argv[2] with open(profileJson) as f: prof = json.load(f) galaxyUrl = prof["galaxy_url"].rstrip("/") apiKey = prof["galaxy_user_key"] if not galaxyUrl or not apiKey: sys.exit(f"ERROR: could not read galaxy_url or galaxy_user_key " f"from {profileJson}") inv = apiCall("GET", f"{galaxyUrl}/api/invocations/{invocationId}", apiKey) if inv is None: print(f"# invocation {invocationId} already gone", file=sys.stderr) return historyId = inv.get("history_id") # purge first -- this is the step that actually frees disk if historyId: try: apiCall("DELETE", f"{galaxyUrl}/api/histories/{historyId}?purge=true", apiKey) - print(f"# purged history {historyId}", file=sys.stderr) +# print(f"# purged history {historyId}", file=sys.stderr) except urllib.error.HTTPError as e: sys.exit(f"ERROR: failed to purge history {historyId}: {e}") else: print(f"# WARNING: invocation {invocationId} has no history_id", file=sys.stderr) try: apiCall("DELETE", f"{galaxyUrl}/api/invocations/{invocationId}", apiKey) - print(f"# deleted invocation {invocationId}", file=sys.stderr) +# print(f"# deleted invocation {invocationId}", file=sys.stderr) except urllib.error.HTTPError as e: # history is already purged, so disk is reclaimed -- the # invocation row remaining is cosmetic print(f"# WARNING: invocation delete returned {e.code}, " f"history already purged", file=sys.stderr) if __name__ == "__main__": main()