summaryrefslogtreecommitdiffstats
path: root/keystone-moon/keystone/contrib/moon/backends/flat.py
blob: 83ed2a0854b87291df7827ea12147f8b6a06d8ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Copyright 2015 Open Platform for NFV Project, Inc. and its contributors
# This software is distributed under the terms and conditions of the 'Apache-2.0'
# license which can be found in the file 'LICENSE' in this package distribution
# or at 'http://www.apache.org/licenses/LICENSE-2.0'.

from uuid import uuid4
import os
import logging
import re
import time
from keystone import config
from oslo_log import log
# from keystone.contrib.moon.core import SuperExtensionDriver
from keystone.contrib.moon.core import LogDriver


CONF = config.CONF


class LogConnector(LogDriver):

    AUTHZ_FILE = '/var/log/moon/authz.log'
    SYS_FILE = '/var/log/moon/system.log'
    TIME_FORMAT = '%Y-%m-%d-%H:%M:%S'

    def __init__(self):
        # Fixme (dthom): when logging from an other class, the %appname% in the event
        # is always keystone.contrib.moon.backends.flat
        super(LogConnector, self).__init__()

        self.SYS_LOG = logging.getLogger(__name__)
        if not len(self.SYS_LOG.handlers):
            fh = logging.FileHandler(self.SYS_FILE)
            fh.setLevel(logging.DEBUG)
            formatter = logging.Formatter('%(asctime)s ------ %(message)s', self.TIME_FORMAT)
            fh.setFormatter(formatter)
            self.SYS_LOG.addHandler(fh)

        self.AUTHZ_LOG = logging.getLogger("authz")
        if not len(self.AUTHZ_LOG.handlers):
            fh = logging.FileHandler(self.AUTHZ_FILE)
            fh.setLevel(logging.WARNING)
            formatter = logging.Formatter('%(asctime)s ------ %(message)s', self.TIME_FORMAT)
            fh.setFormatter(formatter)
            self.AUTHZ_LOG.addHandler(fh)

    def authz(self, message):
        self.AUTHZ_LOG.warn(message)

    def debug(self, message):
        self.SYS_LOG.debug(message)

    def info(self, message):
        self.SYS_LOG.info(message)

    def warning(self, message):
        self.SYS_LOG.warning(message)

    def error(self, message):
        self.SYS_LOG.error(message)

    def critical(self, message):
        self.SYS_LOG.critical(message)

    def get_logs(self, logger="authz", event_number=None, time_from=None, time_to=None, filter_str=None):
        if logger == "authz":
            _logs = open(self.AUTHZ_FILE).readlines()
        else:
            _logs = open(self.SYS_FILE).readlines()
        if filter_str:
            _logs = filter(lambda x: filter_str in x, _logs)
        if time_from:
            time_from = time.strptime(time_from.split(" ")[0], self.TIME_FORMAT)
            try:
                __logs = []
                for log in _logs:
                    _log = time.strptime(log.split(" ")[0], self.TIME_FORMAT)
                    if time_from <= _log:
                        __logs.append(log)
                _logs = __logs
            except ValueError:
                self.error("Time format error")
        if time_to:
            try:
                time_to = time.strptime(time_to.split(" ")[0], self.TIME_FORMAT)
                __logs = []
                for log in _logs:
                    _log = time.strptime(log.split(" ")[0], self.TIME_FORMAT)
                    if time_to >= _log:
                        __logs.append(log)
                _logs = __logs
            except ValueError:
                self.error("Time format error")
        if event_number:
            _logs = _logs[-event_number:]
        return list(_logs)


# class SuperExtensionConnector(SuperExtensionDriver):
#
#     def __init__(self):
#         super(SuperExtensionConnector, self).__init__()
#         # Super_Extension is loaded every time the server is started
#         self.__uuid = uuid4().hex
#         # self.__super_extension = Extension()
#         _policy_abs_dir = os.path.join(CONF.moon.super_extension_directory, 'policy')
#         # self.__super_extension.load_from_json(_policy_abs_dir)
#
#     def get_super_extensions(self):
#         return None
#
#     def admin(self, sub, obj, act):
#         # return self.__super_extension.authz(sub, obj, act)
#         return True