def METHOD_NAME(parser: argparse.ArgumentParser) -> None:
    """Given cli args, sets up Elasticsearch and aggregates all data.
    Creates Elasticsearch instance and PbenchCombinedDataCollection
    object, which it then adds all the data to for the months generated
    from _month_gen given the args passed in.
    Parameters
    ----------
    parser : argparse.ArgumentParser
        arguments passed in stored with easily accessible
        variable names, can be accessed by calling parse_args on it.
    Returns
    -------
    None
    """
    args = parser.parse_args()
    if args.profile_memory_usage:
        from guppy import hpy
        memprof = hpy()
    else:
        memprof = None
    if memprof:
        print(f"Initial memory profile ... {memprof.heap()}", flush=True)
    es = Elasticsearch(
        [f"{args.es_host}:{args.es_port}"], timeout=200
    )  # to prevent read timeout errors (60 is arbitrary)
    session = requests.Session()
    ua = session.headers["User-Agent"]
    session.headers.update({"User-Agent": f"{ua} -- {parser.prog}"})
    pbench_data = PbenchCombinedDataCollection(
        args.url_prefix,
        args.sos_host_server,
        session,
        es,
        args.record_limit,
        args.cpu_n,
    )
    scan_start = time.time()
    end_time = datetime.utcfromtimestamp(scan_start)
    # pbench_data.sync_add_months(
    #     _year_month_gen(end_time, args.start_months_prior, args.end_months_prior)
    # )
    pbench_data.aggregate_data(
        _year_month_gen(end_time, args.start_months_prior, args.end_months_prior)
    )
    scan_end = time.time()
    duration = scan_end - scan_start
    pbench_data.print_report()
    pbench_data.emit_csv()
    print(f"--- merging run and result data took {duration:0.2f} seconds", flush=True)
    if memprof:
        print(
            f"Final memory profile ... {memprof.heap()}",
            flush=True,
        )