import argparse
from pathlib import Path
import sys

from backup_core import private_directory
from metrics_core import MetricsJob
from transport import ComposeStack, OperationsError


def main():
    parser = argparse.ArgumentParser(description="Collect aggregate Post76 metrics through the local Docker socket")
    parser.add_argument("--project", required=True)
    parser.add_argument("--env-file", required=True)
    parser.add_argument("--work-dir", default=str(Path(__file__).resolve().parent / "workspace"))
    parser.add_argument("--compose-file", action="append", default=[])
    args = parser.parse_args()
    workspace = private_directory(args.work_dir)
    stack = ComposeStack(Path(__file__).resolve().parent.parent, args.project, args.env_file, workspace,
                         args.compose_file, operations=False)
    job = MetricsJob(stack, workspace)
    with job.lock():
        job.collect()
    print("Aggregate metrics collected")


if __name__ == "__main__":
    try:
        main()
    except (OperationsError, ValueError, OSError) as error:
        print("Post76 metrics failed: " + str(error), file=sys.stderr)
        raise SystemExit(1)
