Example #1
0
 def get_processor_by_name(self, name: str) -> Processor:
     if name == 'ffmpeg':
         return FFmpeg(self.ffmpeg_path)
     if self.hbcli_path:
         return Handbrake(self.hbcli_path)
     print(f'Unknown processor type "{name}" for host "{self.name}"')
     sys.exit(1)
Example #2
0
 def get_processor_by_name(self, name: str) -> Processor:
     if name == 'ffmpeg':
         return FFmpeg(self.ffmpeg_path)
     if self.hbcli_path:
         return Handbrake(self.hbcli_path)
     print('Missing "ffmpeg" or "hbcli" path')
     sys.exit(1)
Example #3
0
 def __init__(self, configfile: ConfigFile):
     self.queues = dict()
     self.configfile = configfile
     self.ffmpeg = FFmpeg(self.configfile.ffmpeg_path)
     #
     # initialize the queues
     #
     self.queues['_default_'] = Queue()
     for qname in configfile.queues.keys():
         self.queues[qname] = Queue()
Example #4
0
 def __init__(self, queuename, queue: Queue, configfile: ConfigFile, manager):
     """
     :param queuename:   Name of the queue, for thread naming purposes only
     :param queue:       Thread-safe queue containing files to be encoded
     :param configfile:  Instance of the parsed configuration (transcode.yml)
     :param manager:     Reference to object that manages this thread
     """
     super().__init__(name=queuename, group=None, daemon=True)
     self.queue = queue
     self.config = configfile
     self._manager = manager
     self.ffmpeg = FFmpeg(self.config.ffmpeg_path)
Example #5
0
 def __init__(self, hostname, props, queue, cluster):
     """
     :param hostname:    name of host from config/clusters
     :param props:       dictionary of properties from config/clusters
     :param queue:       Work queue assigned to this thread, could be many-to-one in the future.
     :param cluster:     Reference to parent Cluster object
     """
     super().__init__(name=hostname, group=None, daemon=True)
     self.hostname = hostname
     self.props = props
     self.queue = queue
     self._complete = list()
     self._manager = cluster
     self.ffmpeg = FFmpeg(props.ffmpeg_path)
Example #6
0
    def __init__(self, name, configs: Dict, config: ConfigFile, ssh: str):
        """
        :param name:        Cluster name, used only for thread naming
        :param configs:     The "clusters" section of the global config
        :param config:      The full configuration object
        :param ssh:         Path to local ssh
        """
        super().__init__(name=name, group=None, daemon=True)
        self.queues: Dict[str, Queue] = dict()
        self.ssh = ssh
        self.hosts: List[ManagedHost] = list()
        self.config = config
        self.verbose = verbose
        self.ffmpeg = FFmpeg(config.ffmpeg_path)
        self.lock = Cluster.terminal_lock
        self.completed: List = list()

        for host, props in configs.items():
            hostprops = RemoteHostProperties(host, props)
            if not hostprops.is_enabled:
                continue
            hosttype = hostprops.host_type

            #
            # make sure Queue exists for name
            #
            host_queues: Dict = hostprops.queues
            if len(host_queues) > 0:
                for host_queue in host_queues:
                    if host_queue not in self.queues:
                        self.queues[host_queue] = Queue()

            _h = None
            if hosttype == 'local':
                # special case - using pytranscoder host also as cluster host
                for host_queue, slots in host_queues.items():
                    #
                    # for each queue configured for this host create a dedicated thread for each slot
                    #
                    for slot in range(0, slots):
                        _h = LocalHost(host, hostprops,
                                       self.queues[host_queue], self)
                        if not _h.validate_settings():
                            sys.exit(1)
                        self.hosts.append(_h)

            elif hosttype == 'mounted':
                for host_queue, slots in host_queues.items():
                    #
                    # for each queue configured for this host create a dedicated thread for each slot
                    #
                    for slot in range(0, slots):
                        _h = MountedManagedHost(host, hostprops,
                                                self.queues[host_queue], self)
                        if not _h.validate_settings():
                            sys.exit(1)
                        self.hosts.append(_h)

            elif hosttype == 'streaming':
                for host_queue, slots in host_queues.items():
                    #
                    # for each queue configured for this host create a dedicated thread for each slot
                    #
                    for slot in range(0, slots):
                        _h = StreamingManagedHost(host, hostprops,
                                                  self.queues[host_queue],
                                                  self)
                        if not _h.validate_settings():
                            sys.exit(1)
                        self.hosts.append(_h)

            else:
                print(
                    crayons.red(
                        f'Unknown cluster host type "{hosttype}" - skipping'))