simple web log viewing for admins

This commit is contained in:
Aaron Kimbre 2022-02-11 21:08:06 -06:00
parent d3c8c5d77b
commit 121c407cdb
2 changed files with 48 additions and 0 deletions

View File

@ -6,6 +6,7 @@ from wand import image
from app.models import Account, AccountInvitation, CharacterInfo
from app.schemas import AccountSchema, CharacterInfoSchema
from app.luclient import query_cdclient
from app import gm_level
main_blueprint = Blueprint('main', __name__)
@ -40,3 +41,37 @@ def favicon():
'favicon.ico',
mimetype='image/vnd.microsoft.icon'
)
@main_blueprint.route('/logs')
@gm_level(9)
def logs():
with open('nexus_dashboard.log', 'r') as file:
logs = tail(file, 100)
return render_template('main/logs.html.j2', logs=logs)
def tail( f, lines=20 ):
total_lines_wanted = lines
BLOCK_SIZE = 1024
f.seek(0, 2)
block_end_byte = f.tell()
lines_to_go = total_lines_wanted
block_number = -1
blocks = [] # blocks of size BLOCK_SIZE, in reverse order starting
# from the end of the file
while lines_to_go > 0 and block_end_byte > 0:
if (block_end_byte - BLOCK_SIZE > 0):
# read the last block we haven't yet read
f.seek(block_number*BLOCK_SIZE, 2)
blocks.append(f.read(BLOCK_SIZE))
else:
# file too small, start from begining
f.seek(0,0)
# only read what was not read
blocks.append(f.read(block_end_byte))
lines_found = blocks[-1].count('\n')
lines_to_go -= lines_found
block_end_byte -= BLOCK_SIZE
block_number -= 1
all_read_text = ''.join(reversed(blocks))
return '</br>'.join(all_read_text.splitlines()[-total_lines_wanted:])

View File

@ -0,0 +1,13 @@
{% extends 'base.html.j2' %}
{% block title %}LOGS{% endblock %}
{% block content_before %}
LOGS - {{ config.APP_NAME }}
{% endblock %}
{% block content_override %}
<code>
{{ logs }}
</code>
{% endblock %}