CoolFace
Apppublic

northner/logger

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
main.py60 linesDownload Raw Back to root
1import os2import uuid3import boto34from fastapi import FastAPI, Request,HTTPException, Header,Depends5from pydantic import BaseModel6from dotenv import load_dotenv7from fastapi.responses import JSONResponse8# Setup DynamoDB9dynamodb = boto3.resource(10    'dynamodb',11    region_name=os.getenv("AWS_REGION"),12    aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"),13    aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY")14)15table = dynamodb.Table(os.getenv("DYNAMODB_TABLE"))16token_saved= os.getenv("FAST_API_TOKEN")17API_TOKENS = {token_saved}18 19# FastAPI app20app = FastAPI()21 22async def verify_token(authorization: str = Header(...)):23    if not authorization.startswith("Bearer "):24        raise HTTPException(status_code=401, detail="Invalid authorization header")25 26    token = authorization.split(" ")[1]27    if token not in API_TOKENS:28        raise HTTPException(status_code=403, detail="Invalid or expired token")29# Health check endpoint (fix for 405)30@app.get("/")31async def root():32    return JSONResponse({"status": "ok", "message": "Logger API is running."})33 34# Data model35class LogEntry(BaseModel):36    level: str37    timestamp: str38    message: str39    stack: str40    app: str41    env: str42    userId: str43    email: str44    page: str45    userAgent: str46    platform: str47 48# Log handler49@app.post("/")50async def log_data(entry: LogEntry, request: Request,_: None = Depends(verify_token)):51    log_id = str(uuid.uuid4())52    item = entry.dict()53    item["logId"] = log_id54 55    try:56        table.put_item(Item=item)57        return {"status": "success", "logId": log_id}58    except Exception as e:59        return {"status": "error", "message": str(e)}60