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"