Example #1
0
def update_proccer_job(session, result):
    'Create or update proccer_job row returning the updated row.'

    stamp = datetime.utcfromtimestamp(timegm(strptime(result['stamp'],
                                                      '%Y-%m-%dT%H:%M:%SZ')))
    new_state = 'ok' if result['result']['ok'] else 'error'

    # Find existing proccer_job
    job = Job.get_or_create(session,
                            host=result['host'],
                            login=result['login'],
                            name=result['name'])
    if job.deleted:
        log.info('Reviving zombie-job %r', job.id)
        job.deleted = None
    job.last_seen = stamp
    old_state, job.state = job.state, new_state

    config = result.get('config', {})
    job.warn_after = parse_interval(config.get('warn-after'))

    job.notify = config.get('notify')

    log.debug('old/new state for job %r: %s/%s',
              job.id, old_state, new_state)

    if old_state != new_state:
        job.last_stamp = datetime.utcnow()
        update_job_history(job)
        job_state_changed(job, result)

    return job
Example #2
0
def read_configuration(fp):
    parsed = yaml.load(fp)

    overrides = parsed.pop('overrides', [])
    for override in overrides:
        m = re.compile(override.pop('match'))
        for name, desc in parsed['commands'].items():
            job_id = '%s@%s/%s' % (os.environ.get('USER', ''),
                                   gethostname(),
                                   name)
            if m.match(job_id):
                desc.update(override)

    default_timeout = parsed.pop('default-timeout', None)

    for desc in parsed['commands'].values():
        if not default_timeout and 'timeout' not in desc:
            continue
        td = parse_interval(desc.get('timeout', default_timeout))
        desc['timeout'] = int(td.total_seconds())  # alarm only uses ints

    return parsed
Example #3
0
def test_int_interval():
    got = parse_interval(1)
    eq_(got.total_seconds(), 1)
Example #4
0
def test_bad_interval():
    parse_interval('1s')
Example #5
0
def test_str_interval():
    got = parse_interval('1 hours')
    eq_(got.total_seconds(), 3600)