Skip to content

Commit ea443b0

Browse files
authored
0.0.4
Added a few new functions.
2 parents 31c47c8 + a0a68bf commit ea443b0

10 files changed

Lines changed: 91 additions & 10 deletions

File tree

dashboard/helpers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import datetime
22
import json
3-
43
import synapse_graph as synapse_graph
54
from django.core.cache import cache
65
import synapse_admin
76
import math
87
from django.conf import settings
98

9+
from project.helpers import spent_time_counter
10+
1011

1112
def convert_size(size_bytes: int):
1213
if size_bytes == 0:
@@ -19,6 +20,7 @@ def convert_size(size_bytes: int):
1920
return '%s %s' % (s, size_name[i])
2021

2122

23+
@spent_time_counter
2224
def load_media_statistics(access_token: str, server_name: str) -> None:
2325
media_manager: synapse_admin.Media = synapse_admin.Media(
2426
server_addr=server_name,
@@ -44,6 +46,7 @@ def load_media_statistics(access_token: str, server_name: str) -> None:
4446
cache.set(settings.CACHED_USERS, users, 60 * 60 * 60 * 24) # 1 day
4547

4648

49+
@spent_time_counter
4750
def load_server_map(access_token: str, server_name: str) -> None:
4851
try:
4952
graph = synapse_graph.SynapseGraph(

dashboard/views.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ def get_context_data(self, **kwargs):
8383

8484
context['dashboard_page_active'] = True
8585

86+
context['operations'] = list(reversed(cache.get(settings.CACHED_OPERATIONS_MESSAGES, [])))
87+
8688
return context
8789

8890

project/helpers.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import datetime
12
from django.conf import settings
3+
from django.core.cache import cache
24

35

46
def assemble_mxc_url(mxc_url: str) -> (str, str):
@@ -23,3 +25,34 @@ def get_download_url_for_media(media_id: str, server_name: str | None = None, ac
2325
access_token = settings.MATRIX_ADMIN_TOKEN
2426

2527
return f'https://{settings.MATRIX_DOMAIN}/_matrix/media/v3/download/{server_name}/{media_id}?access_token={access_token}'
28+
29+
30+
def make_operation_message(func_name: str, spent_time: datetime.timedelta) -> None:
31+
"""
32+
Make operation object and then save to cache.
33+
"""
34+
35+
operation_message: dict = {
36+
'name': func_name,
37+
'spent_time': spent_time.seconds,
38+
'made_at': datetime.datetime.now()
39+
}
40+
41+
operations_messages: list = cache.get(settings.CACHED_OPERATIONS_MESSAGES, [])
42+
operations_messages.append(operation_message)
43+
44+
cache.set(settings.CACHED_OPERATIONS_MESSAGES, operations_messages, 60*60*60*24*7)
45+
46+
47+
def spent_time_counter(func):
48+
"""
49+
Record spent time and save to cached operations.
50+
"""
51+
52+
def wrapper(*args, **kwargs):
53+
start_time: datetime.datetime = datetime.datetime.now()
54+
result = func(*args, **kwargs)
55+
make_operation_message(func_name=func.__name__, spent_time=datetime.datetime.now() - start_time)
56+
return result
57+
58+
return wrapper

project/settings.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@
139139
CACHED_MEDIA_STATISTICS: str = 'media_statistics'
140140
CACHED_MEDIA_STATISTICS_UPDATED_AT: str = 'media_statistics_updated_at'
141141

142+
CACHED_OPERATIONS_MESSAGES: str = 'operations_messages'
143+
142144
# CELERY
143145
CELERY_BEAT_SCHEDULE = {
144146
'update_users_info_every_30m': {
@@ -149,10 +151,6 @@
149151
'task': 'rooms.tasks.update_rooms_info',
150152
'schedule': 60 * 30
151153
},
152-
'update_media_statistics_info_every_1h': {
153-
'task': 'dashboard.tasks.update_media_statistics_info',
154-
'schedule': 60 * 60
155-
},
156154
'update_server_map_every_12h': {
157155
'task': 'users.tasks.dashboard.tasks.update_server_map',
158156
'schedule': 60 * 60 * 12

rooms/helpers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
from django.core.cache import cache
55
from synapse_admin.base import SynapseException
66

7-
from project.helpers import assemble_mxc_url, get_download_url_for_media
7+
from project.helpers import assemble_mxc_url, get_download_url_for_media, spent_time_counter
88

99

10+
@spent_time_counter
1011
def load_rooms(access_token: str, server_name: str) -> None:
1112
"""
1213
Load rooms and cache it to redis.

server_notices/helpers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import markdown as markdown
22
import requests
33

4+
from project.helpers import spent_time_counter
45

6+
7+
@spent_time_counter
58
def send_server_notice(access_token: str, server_name: str, payload: str, user_id: str) -> bool:
69
response = requests.post(url=f'https://{server_name}/_synapse/admin/v1/send_server_notice',
710
headers={

templates/dashboard/dashboard.html

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,35 @@
7272
The amount of memory used: Error
7373
{% endif %}
7474
</div>
75+
<div class="table-responsive">
76+
<table class="table table-dark table-striped">
77+
<caption>Executed tasks.</caption>
78+
<thead>
79+
<tr>
80+
<th>TASK</th>
81+
<th>EXECUTED AT</th>
82+
<th>SPENT TIME</th>
83+
</tr>
84+
</thead>
85+
<tbody>
86+
{% if operations %}
87+
{% for operation in operations %}
88+
<tr>
89+
<td>{{ operation.name }}</td>
90+
<td>{{ operation.made_at }}</td>
91+
<td>{{ operation.spent_time }} seconds</td>
92+
</tr>
93+
{% endfor %}
94+
{% else %}
95+
<tr>
96+
<td>-</td>
97+
<td>-</td>
98+
<td>-</td>
99+
</tr>
100+
{% endif %}
101+
</tbody>
102+
</table>
103+
</div>
75104
</div>
76105
{% endblock %}
77106

templates/rooms/room.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<li class="list-group-item">Federatable: {% if room.federatable %} Yes {% else %} No {% endif %}</li>
2020
<li class="list-group-item">Version: {{ room.version }}</li>
2121
<li class="list-group-item">Creator: {{ room.creator }}</li>
22-
<li class="list-group-item">Public: {{ room.public }}</li>
22+
<li class="list-group-item">Public: {% if room.public %} Yes {% else %} No {% endif %}</li>
2323
{% if room.local_members %}
2424
<li class="list-group-item text-center">LOCAL MEMBERS</li>
2525
{% for member in room.local_members %}

templates/users/user.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<li class="list-group-item">Created at: {{ user.created_at }}</li>
2727
<li class="list-group-item">Last seen IP: {{ user.last_seen_ip }} - {{ user.last_seen_country }}</li>
2828
<li class="list-group-item">Last seen at: {{ user.last_seen_at }}</li>
29+
<li class="list-group-item">Last seen user agent: {{ user.last_seen_user_agent }}</li>
2930
<li class="list-group-item">Is admin: {% if user.is_admin %} Yes {% else %} No {% endif %}</li>
3031
<li class="list-group-item">Is deactivated: {% if user.is_deactivated %} Yes {% else %}
3132
No {% endif %}</li>

users/helpers.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import synapse_admin
66
from django.conf import settings
77

8-
from project.helpers import get_download_url_for_media, assemble_mxc_url
8+
from project.helpers import get_download_url_for_media, assemble_mxc_url, spent_time_counter
9+
from dashboard.helpers import load_media_statistics
910

1011

1112
def get_country_by_ip(ip: str) -> str:
@@ -24,7 +25,8 @@ def get_last_seen_info(access_token: str, server_name: str, user_id: str) -> dic
2425
last_seen: dict = {
2526
'last_seen_ip': 'Unknown',
2627
'last_seen_at': 'Unknown',
27-
'last_seen_country': 'Unknown'
28+
'last_seen_country': 'Unknown',
29+
'last_seen_user_agent': 'Unknown'
2830
}
2931

3032
user_manager: synapse_admin.User = synapse_admin.User(
@@ -40,12 +42,14 @@ def get_last_seen_info(access_token: str, server_name: str, user_id: str) -> dic
4042
last_seen = {
4143
'last_seen_ip': active_sessions[0]['ip'],
4244
'last_seen_at': datetime.fromtimestamp(active_sessions[0]['last_seen'] / 1000),
43-
'last_seen_country': get_country_by_ip(active_sessions[0]['ip'])
45+
'last_seen_country': get_country_by_ip(active_sessions[0]['ip']),
46+
'last_seen_user_agent': active_sessions[0]['user_agent']
4447
}
4548

4649
return last_seen
4750

4851

52+
@spent_time_counter
4953
def load_users(access_token: str, server_name: str) -> None:
5054
"""
5155
Load users and cache it to redis.
@@ -88,7 +92,11 @@ def load_users(access_token: str, server_name: str) -> None:
8892
cache.set(settings.CACHED_USERS_UPDATED_AT, datetime.now(), 60 * 60 * 60 * 24)
8993
cache.set(settings.CACHED_USERS, users, 60 * 60 * 60 * 24)
9094

95+
# Also update media statistics
96+
load_media_statistics(access_token=access_token, server_name=server_name)
9197

98+
99+
@spent_time_counter
92100
def deactivate_user(access_token: str, server_name: str, user_id: str) -> bool:
93101
"""
94102
Deactivate user in the server.
@@ -114,6 +122,7 @@ def deactivate_user(access_token: str, server_name: str, user_id: str) -> bool:
114122
return result
115123

116124

125+
@spent_time_counter
117126
def activate_user(access_token: str, server_name: str, user_id: str, new_password: str) -> bool:
118127
"""
119128
Activate user in the server.
@@ -139,6 +148,7 @@ def activate_user(access_token: str, server_name: str, user_id: str, new_passwor
139148
return result
140149

141150

151+
@spent_time_counter
142152
def set_admin(access_token: str, server_name: str, user_id: str) -> bool:
143153
"""
144154
Set admin of the server.
@@ -164,6 +174,7 @@ def set_admin(access_token: str, server_name: str, user_id: str) -> bool:
164174
return result
165175

166176

177+
@spent_time_counter
167178
def revoke_admin(access_token: str, server_name: str, user_id: str) -> bool:
168179
"""
169180
Revoke admin of the server.

0 commit comments

Comments
 (0)