diff --git a/main.py b/main.py index 41a2aab..113c259 100644 --- a/main.py +++ b/main.py @@ -14,81 +14,69 @@ from datetime import datetime from fastapi.exceptions import RequestValidationError from starlette.exceptions import HTTPException as StarletteHTTPException from fastapi.exceptions import RequestValidationError -from fastapi.responses import PlainTextResponse +from fastapi.responses import PlainTextResponse, JSONResponse from fastapi.exception_handlers import ( http_exception_handler, request_validation_exception_handler, ) +import threading +import socket +import struct +from zoneinfo import ZoneInfo temp_dir = r"/home/td/WebTemp" tempfile.tempdir = temp_dir -con = psycopg2.connect("host=127.0.0.1 dbname=test user=alfred password='Alf red'") - app = FastAPI(title="user manager", description="User session management.", version="0.0.0.1", docs_url="/server/docs", redoc_url="/server/redoc", openapi_url="/server/openapi.json") app.mount("/server/static", StaticFiles(directory="static"), name="static") templates = Jinja2Templates(directory="templates") +distance_value = 0.0 +last_updated = None +distance_value_rev = 0.0 -@app.get("/server", response_class=HTMLResponse) -async def get_server(request: Request): - ip = request.headers['X-Real-IP'] - c = request.cookies.get("failed_reason", None) - if c is None: - return templates.TemplateResponse(request=request, name='index.html',context={"status":""}) - else: - return templates.TemplateResponse(request=request, name='index.html',context={"status":f"Failed to login: {c}"}) +def get_udp_water_value(): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + count = 0 + while True: + try: + sock.bind(('', 8176)) + sock.settimeout(5.0) + break + except Exception as e: + count+=1 + print("Exception: e", e) + time.sleep(5) + if count >= 100: + raise e + zone = ZoneInfo("Asia/Kolkata"); + print("Bound to address: 8176") + global distance_value + global last_updated + global distance_value_rev + while True: + try: + data, addr = sock.recvfrom(4) + print(f"Got data: {data.hex()}") + distance_value = struct.unpack('>f', data) + distance_value_rev = struct.unpack(' list[list]: - active_users = [] - cur = con.cursor() - cur.execute("Select * from API_USERS where session_status = 'ACTIVE'") - results = cur.fetchall() - print(f"Results -> {len(results)}") - for i in results: - j = [i[0], i[3]] - active_users.append(j) - print("Active users: ", active_users) - return active_users - - -def validate_session_key(username, session_key) -> bool: - cur = con.cursor() - cur.execute(f"Select username, session_key, session_status, expiry_time from API_USERS where session_status='ACTIVE' and username='{username}'") - results = cur.fetchall() - if len(results) <= 0: - return False - (q_username, q_session_key, q_session_status, q_expiry_time) = results[0] - print("Len ->", len(results)) - if q_username == username and q_session_key == session_key: - now_time = datetime.now() - q_expiry_time = q_expiry_time - print("Expiry time", q_expiry_time, now_time) - if q_expiry_time < now_time: - return False - return True - else: - return False - +@app.get("/server/waterlevel", response_class=JSONResponse) +async def get_water_level(request: Request): + global distance_value + global last_updated + global distance_value_rev + return {"water_level": distance_value, "water_level_rev": distance_value_rev, "updated_on": last_updated} # @app.post("/api/users/create", response_class=RedirectResponse) diff --git a/templates/user.html b/templates/user.html index 99b8681..75aea5d 100644 --- a/templates/user.html +++ b/templates/user.html @@ -33,9 +33,11 @@ if (parts.length === 2) return parts.pop().split(';').shift(); } +
+ Logout +

Server Manager, Welcome {{ username }}

- Logout