Exemple #1
0
    def __init__(self, id=None, volume=None, snapshot=None):
        DatabaseObject.__init__(self)

        if id is None:
            self.id = uuid.uuid4().hex
            # Transfer the class attribute to the database
            self.type = self.type
            self.state = None
            self.time = None
            self.volume_id = None
            _task_threads[self.id] = None

        else:
            self.id = id

        if volume is None:
            self.volume = None
        else:
            self.volume_id = volume.id
            self.volume = volume

        if snapshot is not None:
            self.snapshot_id = snapshot.id
            self.snapshot = snapshot

        self.update()
Exemple #2
0
    def __init__(self, id=None, type=None, resource_id=None):
        DatabaseObject.__init__(self)

        if id is None:
            self.id = uuid.uuid4().hex
            self.type = type
            self.resource_id = resource_id
            self.time = int(time.time() * 1000)
        else:
            self.id = id
Exemple #3
0
    def __init__(self, id=None, type=None, message=None):
        DatabaseObject.__init__(self)

        if id is None:
            self.id = uuid.uuid4().hex
            self.type = type or INFO
            self.time = int(time.time())
            self.message = message
            Event(type=LOG_UPDATED)
        else:
            self.id = id
Exemple #4
0
    def __setattr__(self, name, value):
        if name == 'thread':
            if value is None:
                if self.id in _task_threads:
                    del _task_threads[self.id]
            else:
                _task_threads[self.id] = value
        else:
            DatabaseObject.__setattr__(self, name, value)

        if name == 'state' and value:
            Event(volume_id=self.volume_id, type=TASKS_UPDATED)
Exemple #5
0
    def __init__(self, id=None, volume_id=None, type=None):
        DatabaseObject.__init__(self)

        if id is None:
            self.id = uuid.uuid4().hex
            self.type = type
            self.time = int(time.time() * 1000)
            self.volume_id = None
        else:
            self.id = id

        if volume_id is not None:
            self.volume_id = volume_id
Exemple #6
0
 def __getattr__(self, name):
     if name == 'thread':
         if self.id not in _task_threads:
             return None
         return _task_threads[self.id]
     else:
         return DatabaseObject.__getattr__(self, name)
Exemple #7
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)
Exemple #8
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
Exemple #9
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]
Exemple #10
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)
Exemple #11
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
Exemple #12
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
Exemple #13
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