Пример #1
0
 def get_process_priority_args(self, job_spec):
     """Constructs a list of arguments to be prepended to process args
     in order to assign CPU/IO priority.
     """
     cron_job_class = cron_job_registry.get(parse_job_spec(job_spec)[0])
     if (app_settings.CRONMAN_NICE_CMD
             and cron_job_class.worker_cpu_priority is not None):
         cpu_priority_args = [
             app_settings.CRONMAN_NICE_CMD,
             "-n",
             str(cron_job_class.worker_cpu_priority),
         ]
     else:
         cpu_priority_args = []
     if (app_settings.CRONMAN_IONICE_CMD
             and cron_job_class.worker_io_priority is not None):
         io_class, io_class_data = cron_job_class.worker_io_priority
         io_priority_args = [
             app_settings.CRONMAN_IONICE_CMD,
             "-c",
             str(io_class),
         ]
         if io_class_data is not None:
             io_priority_args += ["-n", str(io_class_data)]
     else:
         io_priority_args = []
     return cpu_priority_args + io_priority_args
Пример #2
0
 def test_parse_job_spec_valid_params(self):
     """Test for `parse_job_spec` function - case: valid params"""
     self.assertEqual(
         utils.parse_job_spec('CronJob:42,a=1, b="a: b c"'),
         ("CronJob", ["42"], {
             "a": "1",
             "b": "a: b c"
         }),
     )
Пример #3
0
 def parse_job_spec_with_class(job_spec=None):
     """Converts a string (job spec) into quadruple
     (name, args, kwargs, cron_job_class).
     Raises CronWorkerInvalidParams if string cannot be parsed or
     there is no cron job class for given specification.
     """
     if job_spec:
         try:
             name, args, kwargs = parse_job_spec(job_spec)
             cron_job_class = cron_job_registry.get(name)
         except (ValueError, CronJobNotRegistered) as error:
             raise CronWorkerInvalidParams(format_exception(error))
     else:
         name = args = kwargs = cron_job_class = None
     return name, args, kwargs, cron_job_class
Пример #4
0
 def parse_job_spec_or_pid(job_spec_or_pid=None):
     """Converts a string (job spec or integer - PID) into quadruple
     (name, args, kwargs, pid).
     Raises CronWorkerInvalidParams if string cannot be parsed.
     """
     if job_spec_or_pid:
         if re.match(r"\d+", job_spec_or_pid):
             pid = int(job_spec_or_pid)
             name = args = kwargs = None
         else:
             pid = None
             try:
                 name, args, kwargs = parse_job_spec(job_spec_or_pid)
             except ValueError as error:
                 raise CronWorkerInvalidParams(format_exception(error))
     else:
         name = args = kwargs = pid = None
     return name, args, kwargs, pid
Пример #5
0
 def __init__(
     self,
     data_dir,
     job_spec=None,
     name=None,
     args=None,
     kwargs=None,
     pid=None,
 ):
     if pid:
         file_by_pid = self.file_class.by_pid(data_dir, pid)
         files = [file_by_pid] if file_by_pid else []
     else:
         if job_spec:
             name, args, kwargs = parse_job_spec(job_spec)
         # Files sorted by name:
         files = sorted(
             self.file_class.all(data_dir, name, args, kwargs),
             key=lambda pf: pf.name,
         )
     self.data_dir = data_dir
     self.files = files
     self.logger = logger
Пример #6
0
 def test_parse_job_spec_invalid_params(self):
     """Test for `parse_job_spec` function - case: invalid params"""
     with self.assertRaisesMessage(
             ValueError, "Positional argument after named arguments."):
         utils.parse_job_spec('CronJob:a=1,"test"'),
Пример #7
0
 def test_parse_job_spec_no_params(self):
     """Test for `parse_job_spec` function - case: no params"""
     self.assertEqual(utils.parse_job_spec("CronJob"), ("CronJob", [], {}))