summaryrefslogtreecommitdiffstats
path: root/compass-deck/db/api/user_log.py
blob: 70de9db4c606e67f7ca7b8bdee48665cc17b699d (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
# Copyright 2014 Huawei Technologies Co. Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""UserLog database operations."""
import logging

from compass.db.api import database
from compass.db.api import user as user_api
from compass.db.api import utils
from compass.db import exception
from compass.db import models


SUPPORTED_FIELDS = ['user_email', 'timestamp']
USER_SUPPORTED_FIELDS = ['timestamp']
RESP_FIELDS = ['user_id', 'action', 'timestamp']


@database.run_in_session()
def log_user_action(user_id, action, session=None):
    """Log user action."""
    utils.add_db_object(
        session, models.UserLog, True, user_id=user_id, action=action
    )


@utils.supported_filters(optional_support_keys=USER_SUPPORTED_FIELDS)
@database.run_in_session()
@user_api.check_user_admin_or_owner()
@utils.wrap_to_dict(RESP_FIELDS)
def list_user_actions(user_id, user=None, session=None, **filters):
    """list user actions of a user."""
    list_user = user_api.get_user(user_id, user=user, session=session)
    return utils.list_db_objects(
        session, models.UserLog, order_by=['timestamp'],
        user_id=list_user['id'], **filters
    )


@utils.supported_filters(optional_support_keys=SUPPORTED_FIELDS)
@user_api.check_user_admin()
@database.run_in_session()
@utils.wrap_to_dict(RESP_FIELDS)
def list_actions(user=None, session=None, **filters):
    """list actions of all users."""
    return utils.list_db_objects(
        session, models.UserLog, order_by=['timestamp'], **filters
    )


@utils.supported_filters()
@database.run_in_session()
@user_api.check_user_admin_or_owner()
@utils.wrap_to_dict(RESP_FIELDS)
def del_user_actions(user_id, user=None, session=None, **filters):
    """delete actions of a user."""
    del_user = user_api.get_user(user_id, user=user, session=session)
    return utils.del_db_objects(
        session, models.UserLog, user_id=del_user['id'], **filters
    )


@utils.supported_filters()
@database.run_in_session()
@user_api.check_user_admin()
@utils.wrap_to_dict(RESP_FIELDS)
def del_actions(user=None, session=None, **filters):
    """delete actions of all users."""
    return utils.del_db_objects(
        session, models.UserLog, **filters
    )