from .SimpleService import SimpleService
from ..lib import processes


class PIDCountService(SimpleService):
    pid_defs = [
    ]

    def __init__(self):
        SimpleService.__init__(self)

    def _get_raw_data(self):
        return_list = []
        for process in processes.find_processes():
            if process.state != 'Z' and self.check_process(process):
                return_list.append(process)

        return return_list

    def check_process(self, process):
        if not self.pid_defs:
            return True

        try:
            proc_name = process.status_fields['Name']
            proc_cmdline = process.cmdline
            proc_user = process.user
        except IOError:
            # The process has died
            return False

        for definition in self.pid_defs:
            if definition.get('name') != proc_name:
                continue

            if definition.get('cmdline_contains') not in ' '.join(proc_cmdline):
                continue

            if definition.get('user')  != proc_user:
                continue

            return True

        return False

    def get_data(self):
        return len(self._get_raw_data())

    def check(self):
        return bool(self.get_data())
