def main(args=None):
    """
    Script to retrieve relevant recomputations requests for a specific date

    :param args: Command line arguments
    """

    # default paths
    fn_ar_cfg = "/etc/ar-compute-engine.conf"
    arcomp_conf = "/etc/ar-compute"

    # Init configuration
    cfg = ArgoConfiguration(fn_ar_cfg)
    cfg.load_tenant_db_conf(os.path.join(arcomp_conf, args.tenant + "_db_conf.json"))
    db_name = cfg.get_mongo_database("ar")
    col_recomputations = "recomputations"

    # Init logging
    log = init_log(cfg.log_mode, cfg.log_file, cfg.log_level, 'argo.mongo_recompute')

    # Get mongo collection
    col = get_mongo_collection(cfg.mongo_host, cfg.mongo_port, db_name, col_recomputations, log)
    results = get_mongo_results(col, args.date, args.job)
    log.info("Date: %s, relevant recomputations found: %s", args.date, len(results))

    # Write results to file
    write_output(results, args.tenant, get_date_under(args.date), cfg.sync_path)
def main(tenant=None):
    """
    Checks if there are any pending recomputation requests and if the running
    requests do not exceed a threshold and queues another one to be recomputed
    :param tenant:
    :return:
    """
    # default paths
    fn_ar_cfg = "/etc/ar-compute-engine.conf"
    argo_exec = "/usr/libexec/ar-compute/bin"
    arcomp_conf = "/etc/ar-compute"
    # Init configuration
    cfg = ArgoConfiguration(fn_ar_cfg)
    cfg.load_tenant_db_conf(os.path.join(arcomp_conf, args.tenant + "_db_conf.json"))
    threshold = cfg.threshold

    # Init logging
    log = init_log(cfg.log_mode, cfg.log_file, cfg.log_level, 'argo.recompute')
    db_name = cfg.get_mongo_database("ar")

    col = get_mongo_collection(cfg.mongo_host, cfg.mongo_port, db_name)
    num_pen, num_run = get_pending_and_running(col)
    log.info("Running recomputations: %s (threshold: %s)", num_run, threshold)
    try:
        run_recomputation(col, tenant, num_run, num_pen, threshold)
        log.info("Below threshold recomputation sent for execution")
    except ValueError as ex:
        log.info(ex)
def recompute(recalculation_id=None, tenant=None):
    """
    Script to execute recomputation

    :param recalculation_id: The id of the job to be recomputed
    :param tenant: tenants name
    """
    # default paths
    fn_ar_cfg = "/etc/ar-compute-engine.conf"
    argo_exec = "/usr/libexec/ar-compute/bin"
    arcomp_conf = "/etc/ar-compute"
    # Init configuration
    cfg = ArgoConfiguration(fn_ar_cfg)
    cfg.load_tenant_db_conf(os.path.join(arcomp_conf, args.tenant + "_db_conf.json"))
    # Init logging
    log = init_log(cfg.log_mode, cfg.log_file, cfg.log_level, 'argo.recompute')

    # Check recomputation
    col = get_mongo_collection(
        cfg.mongo_host, cfg.mongo_port, cfg.get_mongo_database("ar"), "recomputations", log)
    recomputation = get_recomputation(col, recalculation_id, log)
    dates = get_time_period(recomputation)

    update_status(col, recalculation_id, "running", datetime.now(), log)
    loop_recompute(argo_exec, dates, tenant, recomputation["report"], log)
    update_status(col, recalculation_id, "done", datetime.now(), log)