Пример #1
0
    def clean_database():
        tasks_dict = {}
        tasks_time = []

        tasks_query = Task.db.get(Task.column_family)
        for task_id in tasks_query:
            task = tasks_query[task_id]

            # Skip broken events
            if not DatabaseObject.validate(Task, task_id, task):
                continue

            task['time'] = int(task['time'])

            task_time_id = '%s-%s' % (task['time'], task_id)
            tasks_dict[task_time_id] = task_id
            tasks_time.append(task_time_id)

        prune_count = len(tasks_query) - TASK_DB_MAX
        if prune_count <= 0:
            return

        # Remove tasks after limit is reached
        tasks_time = sorted(tasks_time)
        for i in xrange(prune_count):
            task_id = tasks_dict[tasks_time.pop(0)]
            logger.debug('Max task count reached removing task ' + \
                    'from database. %r' % {
                'task_id': task_id,
            })
            Task.db.remove(Task.column_family, task_id)
Пример #2
0
    def get_events(last_time=0):
        events = []
        events_dict = {}
        events_sort = []
        cur_time = int(time.time() * 1000)

        logger.debug('Getting events. %r' % {
            'last_time': last_time,
        })

        events_query = Event.db.get(Event.column_family)
        for event_id in events_query:
            event = events_query[event_id]

            # Skip broken events
            if not DatabaseObject.validate(Event, event_id, event):
                continue

            event['time'] = int(event['time'])

            if event['time'] <= last_time:
                continue

            time_id = '%s_%s' % (event['time'], event_id)
            events_dict[time_id] = Event(id=event_id)
            events_sort.append(time_id)

        for time_id in sorted(events_sort):
            events.append(events_dict[time_id])

        return events
Пример #3
0
    def get_log_entries():
        logs = []
        logs_dict = {}
        logs_sort = []

        logger.debug('Getting log entries.')

        logs_query = LogEntry.db.get(LogEntry.column_family)
        for log_id in logs_query:
            log = logs_query[log_id]

            if not DatabaseObject.validate(LogEntry, log_id, log):
                continue

            log['time'] = int(log['time'])

            time_id = '%s_%s' % (log['time'], log_id)
            logs_dict[time_id] = LogEntry(id=log_id)
            logs_sort.append(time_id)

        for time_id in reversed(sorted(logs_sort)):
            logs.append(logs_dict[time_id])

        for log in logs[DEFAULT_LOG_LIMIT:]:
            logger.debug('Pruning log entry from database. %r' % {
                'log_id': log.id,
            })
            LogEntry.db.remove(LogEntry.column_family, log.id)

        return logs[:DEFAULT_LOG_LIMIT]
Пример #4
0
    def get_task(task_id):
        logger.debug('Getting task. %r' % {
            'task_id': task_id,
        })

        task = Task.db.get(Task.column_family, task_id)
        if task:
            if DatabaseObject.validate(Task, task_id, task):
                return Task(id=task_id)
Пример #5
0
    def clean_database():
        cur_time = int(time.time() * 1000)
        events_query = Event.db.get(Event.column_family)
        for event_id in events_query:
            event = events_query[event_id]

            # Skip broken events
            if not DatabaseObject.validate(Event, event_id, event):
                continue

            event['time'] = int(event['time'])

            # Remove events after ttl
            if (cur_time - event['time']) > EVENT_DB_TTL:
                logger.debug('Removing event past ttl from database. %r' % {
                    'event_id': event_id,
                })
                Event.db.remove(Event.column_family, event_id)
                continue
Пример #6
0
    def _get_tasks(volume, type, states=[]):
        tasks = []
        tasks_dict = {}
        tasks_time = []

        logger.debug('Getting tasks for volume. %r' % {
            'volume_id': volume.id,
        })

        tasks_query = Task.db.get(Task.column_family)
        for task_id in tasks_query:
            task = tasks_query[task_id]

            # Skip broken events
            if not DatabaseObject.validate(Task, task_id, task):
                continue

            task['time'] = int(task['time'])
            if type and task['type'] != type:
                continue
            if task['volume_id'] != volume.id:
                continue
            if states and task['state'] not in states:
                continue
            if not states and not task['state']:
                continue

            # Task update occurs here recheck state
            task = Task(id=task_id)
            if states and task.state not in states:
                continue
            task_time_id = '%s-%s' % (task.time, task_id)
            tasks_dict[task_time_id] = task
            tasks_time.append(task_time_id)

        for task_time_id in sorted(tasks_time):
            tasks.append(tasks_dict[task_time_id])

        return tasks
Пример #7
0
    def get_events(last_time=0):
        events = []
        events_dict = {}
        events_time = []
        cur_time = int(time.time() * 1000)

        logger.debug('Getting global events. %r' % {
            'last_time': last_time,
        })

        events_query = Event.db.get(Event.column_family)
        for event_id in events_query:
            event = events_query[event_id]

            # Skip broken events
            if not DatabaseObject.validate(Event, event_id, event):
                continue

            event['time'] = int(event['time'])

            if event['time'] <= last_time:
                continue

            # Prevent events with the same time from breaking sorted list,
            # event that is sent to client will always have original time
            while True:
                if event['time'] not in events_time:
                    break
                event['time'] += 1

            events_dict[event['time']] = Event(id=event_id)
            events_time.append(event['time'])

        for event_time in sorted(events_time):
            events.append(events_dict[event_time])

        return events