diff options
author | Lars Wirzenius <liw@liw.fi> | 2013-04-11 20:40:32 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2013-04-11 20:40:32 +0100 |
commit | 9ef617317c1b51209aa41b523c122b61c9b23aaf (patch) | |
tree | 0019a1e1bad4c1e0da783787d26b895e70f80309 /desktop-cronish | |
parent | b4601ba1ddf6d3442555b719478e1d60f1a36dd1 (diff) | |
download | desktop-cronish-9ef617317c1b51209aa41b523c122b61c9b23aaf.tar.gz |
Simple implementation
Diffstat (limited to 'desktop-cronish')
-rwxr-xr-x | desktop-cronish | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/desktop-cronish b/desktop-cronish index a67af1e..f69d16e 100755 --- a/desktop-cronish +++ b/desktop-cronish @@ -16,6 +16,8 @@ import cliapp +import time +import yaml __version__ = '0.0' @@ -31,7 +33,48 @@ class DesktopCronish(cliapp.Application): default=0) def process_args(self, args): - pass + self.jobs = {} + self.previously = {} + self.process_inputs(args) + self.execute_jobs() + + def process_input(self, filename): + with self.open_input(filename, 'r') as f: + job_dict = yaml.safe_load(f) + self.jobs.update(job_dict) + + def execute_jobs(self): + n = 0 + max_jobs = self.settings['max-jobs'] + while max_jobs == 0 or n < max_jobs: + job_name, when = self.choose_job() + self.wait_until(when) + self.execute_job(job_name) + n += 1 + + def choose_job(self): + next_job_name = None + next_when = 0 + for job_name, job in self.jobs.items(): + job_when = self.previously.get(job_name, 0) + job['interval'] + if next_job_name is None or job_when <= next_when: + next_job_name = job_name + next_when = job_when + return next_job_name, next_when + + def wait_until(self, when): + while self.now() < when: + time.sleep(when - self.now()) + + def execute_job(self, job_name): + job = self.jobs[job_name] + exit, out, err = cliapp.runcmd_unchecked(['sh', '-c', job['command']]) + self.output.write(out) + if exit != 0: + sys.stderr.write(err) + self.previously[job_name] = self.now() + def now(self): + return time.time() DesktopCronish(version=__version__).run() |