import os import subprocess as sp import time import psutil import stat import sys import logging from watchdog.observers.polling import PollingObserver from watchdog.events import FileSystemEventHandler from threading import Thread from CommonCode import wq from CommonCode import kwq from CommonCode.settings import get_logger, LogColorize import argparse publish = kwq.producer.send topic = kwq.TOPICS.videos_to_score_detection def decide_to_put_in_queue(file_name): disqualifiers = list() disqualifiers.append("_reduced" in file_name) disqualifiers.append("_trimmed" in file_name) disqualified = any(disqualifiers) if file_name.endswith(".mp4") and not disqualified: return True else: return False def place_file_in_queue(filef): dirname = os.path.dirname(filef) foldmode = stat.S_IMODE(os.stat(dirname).st_mode) if oct(foldmode) != "0o777": os.system(f"sudo chmod 777 {dirname}") logging.info(f"SETTING_PERMISSIONS: {dirname}") chand = {"root": os.path.dirname(filef), "name": os.path.basename(filef)} try: os.chmod(filef, 0o777) except Exception as e: logging.error(e) logging.info(f"QUEUE_PUT: {filef}") publish(topic, key=filef, value={"filepath": filef}) # %% paths = ['/srv/ftp/sidefeeder','/srv/ftp/ptz'] queued = set() for rt in paths: for root, dirs, files in os.walk(rt): for f in files: new_path = os.path.join(root, f) if decide_to_put_in_queue(new_path): queued.add(new_path) for x in queued: place_file_in_queue(x) # %% if __name__ == "__main__": parser = argparse.ArgumentParser( prog="Watch and Fix Permissions And Push to Kafka Queue" ) parser.add_argument("paths", nargs="+", help="Paths to monitor") args = parser.parse_args() paths = args.paths