northner/logger
0
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 