Source code for chaosmonkey.dal.executor_model
from flask import request
from chaosmonkey.api.hal import BaseDocument, Link
from chaosmonkey.dal.database import db
[docs]class Executor(db.Model):
"""
Executors are persistent representations of scheduled jobs.
This model is shared between the cme and apscheduler.
"""
__tablename__ = 'cme_executors'
id = db.Column(db.String(80), primary_key=True) #: unique identifier
next_run_time = db.Column(db.DateTime, index=True) #: DateTime for the executor to be executed
job_state = db.Column(db.LargeBinary, nullable=False) #: store the full state of the executor (with pickle)
plan_id = db.Column(db.Integer, db.ForeignKey('cme_plans.id')) #: plan id reference
executed = db.Column(db.Boolean) #: if the job was executed
def __init__(self, job_id, next_run_time, plan_id, job_state=None):
self.id = job_id
self.next_run_time = next_run_time
self.job_state = job_state
self.plan_id = plan_id
self.executed = False
[docs] def to_dict(self):
"""
Return a :meth:`chaosmonkey.api.hal.document` representation for the Executor
:return: :meth:`chaosmonkey.dal.executor_model.HalExecutor`
"""
return HalExecutor(data={
"id": self.id,
"next_run_time": self.next_run_time.strftime('%Y-%m-%dT%H:%M:%s'),
"plan_id": self.plan_id,
"executed": self.executed
}).to_dict()
def __repr__(self):
return '<Executor %r>' % self.id
[docs]class HalExecutor(BaseDocument):
"""
Class to represent an Executor as a :meth:`chaosmonkey.api.hal.document`
"""
def __init__(self, data=None, links=None, embedded=None):
super(HalExecutor, self).__init__(data, links, embedded)
self.links.append(Link("self", request.path + data["id"]))
self.links.append(Link("update", request.path + data["id"]))
self.links.append(Link("delete", request.path + data["id"]))