示例#1
0
  def get_tasks(self, release_id):
    """Retrieve all task information.

    Args:
      release_id: str, unique release identifier

    Returns:
      Dictionary of Task objects.
    """
    if release_id in self._releases:
      tasks = json.loads(self._releases['release_id'].tasks)
      task_objects = []
      for k, v in tasks:
        task_objects.append(Task(v))
      return task_objects
    dag_id, execution_date = release_id_parser(release_id)
    execution_date = time.mktime(execution_date.timetuple())
    # build SQl query
    task_query = to_sql_tasks(execution_date)
    # get data from SQL
    task_objects = {}
    for config in self._configs:
      raw_task_data = config.db.query(task_query)  # it's a tuple, so no .append()
      if len(raw_task_data):
        # package the data into release objects with all neccessary info
        task_object = read_tasks(raw_task_data)

    return task_objects
示例#2
0
    def __init__(self, releases_file, tasks_file):
        with open(releases_file) as f:
            json_releases = f.read()
        releases_dict = json.loads(json_releases)
        self._releases = {}
        for key in releases_dict:
            releases_dict[key]['id'] = releases_dict[key]['name']
            release = Release(releases_dict[key])
            self._releases[key] = release

        with open(tasks_file) as f:
            json_tasks = f.read()
        tasks_dict = json.loads(json_tasks)
        self._tasks = {}
        for key in tasks_dict:
            task = Task(tasks_dict[key])
            self._tasks[key] = task

        branches = set()
        for release in self._releases:
            branches.add(self._releases[release].branch)
        self._branches = list(branches)

        release_types = set()
        for release in self._releases:
            release_types.add(self._releases[release].release_type)
        self._release_types = list(release_types)
示例#3
0
    def from_string(self, string):
        sequence = json.loads(string)

        self.id = self._get_id()
        self.user_id = sequence['user_id']
        self.service_type = sequence['service_type']
        self.type = sequence['type']
        self.status = sequence['status']
        self.command = sequence['command']
        self.args = sequence['args']

        for task_index in sequence['tasks']:
            task = Task()
            task.seq_id = self.id
            task.queue = task_index['queue']
            task.command = task_index['command']
            task.args = task_index['args']
            self.tasks.append(task)

        for task in self.tasks:
            task.id = self._get_id()

        for i in range(len(self.tasks) - 1):
            self.tasks[i].next_task_id = self.tasks[i + 1].id

        return self
示例#4
0
    def from_string(self, string):
        sequence = json.loads(string)

        self.id = self._get_id()
        self.user_id = sequence['user_id']
        self.service_type = sequence['service_type']
        self.type = sequence['type']
        self.status = sequence['status']
        self.command = sequence['command']
        self.args = sequence['args']

        for task_index in sequence['tasks']:
            task = Task()
            task.seq_id = self.id
            task.queue = task_index['queue']
            task.command = task_index['command']
            task.args = task_index['args']
            self.tasks.append(task)

        for task in self.tasks:
            task.id = self._get_id()

        for i in range(len(self.tasks) - 1):
            self.tasks[i].next_task_id = self.tasks[i + 1].id

        return self
示例#5
0
  def _load_dump(self, filename):
    with open(filename) as f:
      releases = f.read()
    releases = json.loads(releases)

    for k, v in releases.iteritems():
      task_ids = []
      for task in v['tasks']:
        task_id = task['task_name'] + '@' + k
        self._tasks[task_id] = Task(task)
        task_ids.append(task_id)
      v['tasks'] = task_ids
      self._releases[k] = Release(v)
    logging.info('Releases read from %s' % filename)
示例#6
0
def task_add(subject_id, section_id):
    if not (available("subjects", subject_id)
            and available("section", section_id)):
        return redirect("index")
    form = TaskForm()
    if form.validate_on_submit():
        db_sess = db_session.create_session()
        task = Task(name=form.name.data,
                    section_id=section_id,
                    condition=form.condition.data,
                    formula=form.formula.data)
        db_sess.add(task)
        db_sess.commit()
        return redirect(f"/task/{subject_id}/{section_id}")
    return render_template('form_add.html',
                           title='Добавление задачи',
                           form=form)
示例#7
0
    def test_getters(self):
        task = Task({
            'status': 3,
            'log_url': 'https://youtu.be/dQw4w9WgXcQ',
            'started': 47752289,
            'dependent_on': [],
            'last_modified': 637147117,
            'task_name': 'task-2',
            'error': 'error number 990'
        })

        self.assertEqual(task.task_name, 'task-2')
        self.assertEqual(task.status, State.FAILED)
        self.assertEqual(task.log_url, 'https://youtu.be/dQw4w9WgXcQ')
        self.assertEqual(task.started, datetime.fromtimestamp(47752289))
        self.assertEqual(task.dependent_on, [])
        self.assertEqual(task.last_modified, datetime.fromtimestamp(637147117))
        self.assertEqual(task.error, 'error number 990')
示例#8
0
def read_tasks(task_data):
    """Reads the tasks, transforms them into objects.

  Args:
    task_data: a tuple of tuples with task info

  Returns:
    task_objects
  """
    task_named_tuple = namedtuple('Row', [
        'task_id', 'dag_id', 'execution_date', 'start_date', 'end_date',
        'state'
    ])
    task_objects = []
    for item in task_data:
        task = Task()
        logging.debug(item)
        item = task_named_tuple(*item)
        task.task_name = item.task_id
        task.add_dependency = None  # TODO(dommarques): figure out how to get this - dag info?
        if item.start_date is None:
            execution_date = item.execution_date
            task.started = int(time.mktime(execution_date.timetuple()))
        else:
            start_date = item.start_date
            task.started = int(time.mktime(start_date.timetuple()))
        task.log_url = construct_log_link(
            item.dag_id, item.execution_date, item.task_id
        )  # TODO(dommarques): figure out how to get the log in here
        if item.end_date is None:
            if item.start_date is None:
                execution_date = item.execution_date
                task.last_modified = int(
                    time.mktime(execution_date.timetuple()))
            else:
                start_date = item.start_date
                task.last_modified = int(time.mktime(start_date.timetuple()))
        else:
            end_date = item.end_date
            task.last_modified = int(time.mktime(end_date.timetuple()))
        if item.state is None:
            task.status = STATE_FROM_STRING.get('not_started')
            task.error = 'not started'
        elif item.state == 'running':
            task.status = STATE_FROM_STRING.get('running')
            task.error = STRING_FROM_STATE.get(task.status)
        elif item.start_date is None:
            task.status = STATE_FROM_STRING.get('queued')
            task.error = item.state
        else:
            task.error = item.state
            if str(item.state) in STATE_FROM_STRING:
                task.status = STATE_FROM_STRING.get(str(item.state))
            else:
                task.status = STATE_FROM_STRING.get('none')
        task_objects.append(task)
    return task_objects
示例#9
0
    def test_setters(self):
        task = Task()

        task.task_name = 'new task'
        self.assertEqual(task.task_name, 'new task')
        with self.assertRaises(ValueError):
            task.task_name = 0

        task.status = 0
        self.assertEqual(task.status, State.UNUSED_STATUS)
        with self.assertRaises(ValueError):
            task.status = ['task1', 'task2']

        task.log_url = 'url'
        self.assertEqual(task.log_url, 'url')
        with self.assertRaises(ValueError):
            task.log_url = 0

        task.started = 0
        self.assertEqual(task.started, datetime.fromtimestamp(0))
        with self.assertRaises(ValueError):
            task.started = 'started'

        task.add_dependency('task1')
        self.assertEqual(task.dependent_on, ['task1'])
        with self.assertRaises(ValueError):
            task.add_dependency(0)

        task.last_modified = 0
        self.assertEqual(task.last_modified, datetime.fromtimestamp(0))
        with self.assertRaises(ValueError):
            task.last_modified = 'last_modified'

        task.error = 'error'
        self.assertEqual(task.error, 'error')
        with self.assertRaises(ValueError):
            task.error = 0