mirror of
				https://github.com/DarkflameUniverse/NexusDashboard.git
				synced 2025-11-04 06:01:53 +00:00 
			
		
		
		
	simple web log viewing for admins
This commit is contained in:
		
							
								
								
									
										35
									
								
								app/main.py
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								app/main.py
									
									
									
									
									
								
							@@ -6,6 +6,7 @@ from wand import image
 | 
				
			|||||||
from app.models import Account, AccountInvitation, CharacterInfo
 | 
					from app.models import Account, AccountInvitation, CharacterInfo
 | 
				
			||||||
from app.schemas import AccountSchema, CharacterInfoSchema
 | 
					from app.schemas import AccountSchema, CharacterInfoSchema
 | 
				
			||||||
from app.luclient import query_cdclient
 | 
					from app.luclient import query_cdclient
 | 
				
			||||||
 | 
					from app import gm_level
 | 
				
			||||||
 | 
					
 | 
				
			||||||
main_blueprint = Blueprint('main', __name__)
 | 
					main_blueprint = Blueprint('main', __name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -40,3 +41,37 @@ def favicon():
 | 
				
			|||||||
        'favicon.ico',
 | 
					        'favicon.ico',
 | 
				
			||||||
        mimetype='image/vnd.microsoft.icon'
 | 
					        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:])
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								app/templates/main/logs.html.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								app/templates/main/logs.html.j2
									
									
									
									
									
										Normal 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 %}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user