def parse_bag()

in service/app/engine.py [0:0]


def parse_bag(config):

    logging.warning(psutil.disk_usage("/"))
    logging.warning(config)

    local_bag_file, working_dir = download_bag_file(config)

    try:
        # get the bagfile info and  upload to S3 for debug/future reference
        info_filename = (
            config["s3_bag_file_prefix"].split("/")[-1].replace("bag", "info")
        )
        info_filename = f"/root/.ros/{info_filename}"
        info = open(info_filename, "w")
        subprocess.run(
            f"source /opt/ros/melodic/setup.bash; rosbag info {local_bag_file}",
            shell=True,
            stdout=info,
        )
        info.close()

        # Play back at 1/10th speed to avoid overruns
        retcode = subprocess.call(
            f"source /opt/ros/melodic/setup.bash; rosbag play -r 0.5 {local_bag_file}",
            shell=True,
        )
        if retcode < 0:
            print(f"Child was terminated by signal {-retcode} {sys.stderr}")
        else:
            print(f"Child returned  {retcode} {sys.stderr}")

        files = os.listdir("/root/.ros/")
        print(f"list:{files}")
        png_files = [x for x in files if ".png" in x]

        print(f"PNG files:{png_files}")

        # generate mp4 files
#        [
#            subprocess.call(
#                f'ffmpeg -framerate 2 -i ~/.ros/{x} -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p ~/.ros/{x.replace("png","mp4")}',
#                shell=True,
#            )
#            for x in png_files
#        ]
    #        subprocess.call('ffmpeg -framerate 2 -i ~/.ros/rear%04d.png -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv1080p ~/.ros/rear.mp4', shell=True)
    #        subprocess.call('ffmpeg -framerate 2 -i ~/.ros/left%04d.png -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv1080p ~/.ros/left.mp4', shell=True)
    #        subprocess.call('ffmpeg -framerate 2 -i ~/.ros/right%04d.png -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv1080p ~/.ros/right.mp4', shell=True)

    except OSError as e:
        print("Execution failed:", e, file=sys.stderr)

    logging.warning(psutil.disk_usage("/"))
    local_config = make_config_yaml(config["topics_to_extract"], working_dir)

    logging.warning(local_bag_file)

    cmd = "bash parse-file.sh {local_bag_file} {local_config}".format(
        local_bag_file=local_bag_file, local_config=local_config
    )

    logging.warning(cmd)
    subprocess.call(cmd, shell=True)

    logging.warning(psutil.disk_usage("/"))
    logging.warning("Converting to parquet")
    parquet_dir = os.path.join(working_dir, "parquet")
    convert_csv_to_parquet(working_dir, parquet_dir)

    #    s3_output_prefix = '/'.join(config['s3_bag_file_prefix'].split('/')[-2:-1])
    #    print(s3_output_prefix)

    #    s3_output_prefix = os.path.join(s3_output_prefix, local_bag_file.replace('.bag', ''))
    s3_output_prefix = config["s3_bag_file_prefix"].replace(".bag", "")
    print(f"s3-prefix {s3_output_prefix}")

    s3_sync_results(
        config["s3_output_bucket"],
        s3_output_prefix,
        parquet_dir,
    )

    now = working_dir.split("/")
    now = now[len(now) - 1]

    s3_sync_results(
        config["s3_output_bucket"],
        s3_output_prefix,
        "/root/.ros/",
    )

    logging.warning(psutil.disk_usage("/"))
    shutil.rmtree(working_dir, ignore_errors=True)
    logging.warning(psutil.disk_usage("/"))

    return "success"