""" entrypoint module for background jobs """ import asyncio import os import sys import traceback from uuid import UUID from .models import BgJobType from .ops import init_ops job_type = os.environ.get("BG_JOB_TYPE") oid = os.environ.get("OID") crawl_type = os.environ.get("CRAWL_TYPE") # ============================================================================ # pylint: disable=too-many-function-args, duplicate-code, too-many-locals, too-many-return-statements async def main(): """run background job with access to ops classes""" # pylint: disable=import-outside-toplevel if not os.environ.get("KUBERNETES_SERVICE_HOST"): print( "Sorry, the Browsertrix Backend must be run inside a Kubernetes environment.\ Kubernetes not detected (KUBERNETES_SERVICE_HOST is not set), Exiting" ) return 1 (org_ops, _, _, _, _, page_ops, coll_ops, _, _, _, _, user_manager) = init_ops() if not oid: print("Org id missing, quitting") return 1 org = await org_ops.get_org_by_id(UUID(oid)) if not org: print("Org id invalid, quitting") return 1 # Run job if job_type == BgJobType.DELETE_ORG: try: await org_ops.delete_org_and_data(org, user_manager) return 0 # pylint: disable=broad-exception-caught except Exception: traceback.print_exc() return 1 if job_type == BgJobType.RECALCULATE_ORG_STATS: try: await org_ops.recalculate_storage(org) return 0 # pylint: disable=broad-exception-caught except Exception: traceback.print_exc() return 1 if job_type == BgJobType.READD_ORG_PAGES: try: await page_ops.re_add_all_crawl_pages(org, crawl_type=crawl_type) await coll_ops.recalculate_org_collection_dates(org) await coll_ops.recalculate_org_collection_counts_tags(org) return 0 # pylint: disable=broad-exception-caught except Exception: traceback.print_exc() return 1 print(f"Provided job type {job_type} not currently supported") return 1 # # ============================================================================ if __name__ == "__main__": return_code = asyncio.run(main()) sys.exit(return_code)