mirror of
				https://github.com/StefBuwalda/dashboard_test.git
				synced 2025-10-30 03:09:59 +00:00 
			
		
		
		
	MAJOR REFACTOR P3
This commit is contained in:
		| @@ -9,7 +9,8 @@ __all__ = ["app"] | ||||
| db = SQLAlchemy(app=app) | ||||
|  | ||||
| # Set up migration | ||||
| migration = Migrate(app=app, db=db) | ||||
| migrations_dir = Path(__file__).parent / "migrations" | ||||
| migration = Migrate(app=app, db=db, directory=str(migrations_dir)) | ||||
|  | ||||
| # Init and upgrade | ||||
| with app.app_context(): | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| from sqlalchemy.orm import sessionmaker | ||||
| from app.config import timeout as timeout_ | ||||
| from config import timeout as timeout_ | ||||
| import aiohttp | ||||
| import asyncio | ||||
| import time | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| from flask import Blueprint, render_template, abort, jsonify, send_file, json | ||||
| from typing import cast, Optional, Any | ||||
| from datetime import datetime, timedelta, timezone | ||||
| from app.config import timeout | ||||
| from config import timeout | ||||
| from ..models import service, log | ||||
| from app import app, db | ||||
|  | ||||
|   | ||||
							
								
								
									
										95
									
								
								app/routes.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								app/routes.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,95 @@ | ||||
| from flask import Blueprint, render_template, abort, jsonify, send_file, json | ||||
| from typing import cast, Optional, Any | ||||
| from datetime import datetime, timedelta, timezone | ||||
| from config import timeout | ||||
| from ..models import service, log | ||||
| from app import app, db | ||||
|  | ||||
| bp = Blueprint( | ||||
|     "api", | ||||
|     "__name__", | ||||
|     url_prefix="/api", | ||||
|     static_folder="static", | ||||
| ) | ||||
|  | ||||
|  | ||||
| # Prepares log data for chart.js chart | ||||
| def prepare_chart_data( | ||||
|     logs: list[log], | ||||
| ) -> tuple[list[str], list[Optional[int]]]: | ||||
|     if len(logs) <= 0:  # Return empty if there are no logs | ||||
|         return ([], []) | ||||
|  | ||||
|     x = [logs[0].dateCreatedUTC().isoformat()] | ||||
|     y = [logs[0].ping] | ||||
|  | ||||
|     for i in range(1, len(logs)): | ||||
|         log1 = logs[i] | ||||
|         log2 = logs[i - 1] | ||||
|  | ||||
|         # Check if the gap in points exceeds a threshold | ||||
|         if (abs(log1.dateCreatedUTC() - log2.dateCreatedUTC())) > timedelta( | ||||
|             milliseconds=1.5 * (timeout + 1000) | ||||
|         ): | ||||
|             x.append(log2.dateCreatedUTC().isoformat()) | ||||
|             y.append(None) | ||||
|  | ||||
|         x.append(log1.dateCreatedUTC().isoformat()) | ||||
|         y.append(log1.ping) | ||||
|     return (x, y) | ||||
|  | ||||
|  | ||||
| @bp.route("/") | ||||
| def homepage(): | ||||
|     return render_template("home.html") | ||||
|  | ||||
|  | ||||
| @bp.route("/chart/<int:id>") | ||||
| def chart(id: int): | ||||
|     with app.app_context(): | ||||
|         logs = [] | ||||
|         s = db.session.query(service).filter_by(id=id).first() | ||||
|         if s: | ||||
|             logs = cast( | ||||
|                 list[log], | ||||
|                 s.logs.order_by(log.dateCreated.desc())  # type: ignore | ||||
|                 .limit(300) | ||||
|                 .all(), | ||||
|             ) | ||||
|         else: | ||||
|             return abort(code=403) | ||||
|     x, y = prepare_chart_data(logs=logs) | ||||
|  | ||||
|     now = datetime.now(timezone.utc) | ||||
|     max_ = now | ||||
|     min_ = now - timedelta(hours=1) | ||||
|     return render_template( | ||||
|         "chart.html", | ||||
|         dates=x, | ||||
|         values=json.dumps(y), | ||||
|         min=min_.isoformat(), | ||||
|         max=max_.isoformat(), | ||||
|     ) | ||||
|  | ||||
|  | ||||
| @bp.route("/status") | ||||
| def status(): | ||||
|     results: list[dict[str, Any]] = [] | ||||
|     with app.app_context(): | ||||
|         a = db.session.query(service).all() | ||||
|         for s in a: | ||||
|             b = cast( | ||||
|                 Optional[log], | ||||
|                 s.logs.order_by( | ||||
|                     log.dateCreated.desc()  # type: ignore | ||||
|                 ).first(), | ||||
|             ) | ||||
|             if b: | ||||
|                 results.append(s.to_dict() | b.to_dict()) | ||||
|  | ||||
|     return jsonify(results) | ||||
|  | ||||
|  | ||||
| @bp.route("/favicon.svg") | ||||
| def favicon(): | ||||
|     return send_file("/static/favicon.svg") | ||||
		Reference in New Issue
	
	Block a user