Spaces:
Sleeping
Sleeping
| # from fastapi import FastAPI | |
| # app = FastAPI() | |
| # @app.get("/") | |
| # def greet_json(): | |
| # return {"Hello": "World!"} | |
| from fastapi import FastAPI, WebSocket, WebSocketDisconnect | |
| from fastapi.middleware.cors import CORSMiddleware | |
| import json | |
| import asyncio | |
| from google.analytics.data_v1beta import BetaAnalyticsDataClient, RunReportRequest, Metric, DateRange, FilterExpression, Filter | |
| from google.oauth2 import service_account | |
| import os, base64 | |
| from dotenv import load_dotenv | |
| from datetime import datetime | |
| # # Build Docker image | |
| # docker build -t portfolio-api . | |
| # # Run the container | |
| # docker run -p 8000:8000 portfolio-api | |
| # uvicorn app:app --host 0.0.0.0 --port 8000 --reload | |
| app = FastAPI() | |
| load_dotenv() | |
| # CORS for frontend access | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # Google Analytics setup | |
| key_b64 = os.getenv("GOOGLE_KEY_B64") | |
| property_id = os.getenv("PROPERTY_ID") | |
| creds_dict = json.loads(base64.b64decode(key_b64).decode("utf-8")) | |
| credentials = service_account.Credentials.from_service_account_info(creds_dict) | |
| client = BetaAnalyticsDataClient(credentials=credentials) | |
| clients = [] | |
| def get_metrics(): | |
| chatbot_filter = FilterExpression( | |
| filter=Filter( | |
| field_name="eventName", | |
| string_filter=Filter.StringFilter(match_type=Filter.StringFilter.MatchType.EXACT, value="chatbot_toggle") | |
| ) | |
| ) | |
| return { | |
| "timestamp": datetime.utcnow().isoformat(), | |
| "total_users": client.run_report( | |
| RunReportRequest( | |
| property=f"properties/{property_id}", | |
| metrics=[Metric(name="totalUsers")], | |
| date_ranges=[DateRange(start_date="2015-08-14", end_date="today")] | |
| ) | |
| ).rows[0].metric_values[0].value, | |
| "today_active_users": client.run_report( | |
| RunReportRequest( | |
| property=f"properties/{property_id}", | |
| metrics=[Metric(name="activeUsers")], | |
| date_ranges=[DateRange(start_date="today", end_date="today")] | |
| ) | |
| ).rows[0].metric_values[0].value, | |
| "total_chatbot_users": client.run_report( | |
| RunReportRequest( | |
| property=f"properties/{property_id}", | |
| metrics=[Metric(name="totalUsers")], | |
| dimension_filter=chatbot_filter, | |
| date_ranges=[DateRange(start_date="2015-08-14", end_date="today")] | |
| ) | |
| ).rows[0].metric_values[0].value, | |
| "today_chatbot_users": client.run_report( | |
| RunReportRequest( | |
| property=f"properties/{property_id}", | |
| metrics=[Metric(name="activeUsers")], | |
| dimension_filter=chatbot_filter, | |
| date_ranges=[DateRange(start_date="today", end_date="today")] | |
| ) | |
| ).rows[0].metric_values[0].value, | |
| "total_chatbot_events": client.run_report( | |
| RunReportRequest( | |
| property=f"properties/{property_id}", | |
| metrics=[Metric(name="eventCount")], | |
| dimension_filter=chatbot_filter, | |
| date_ranges=[DateRange(start_date="2015-08-14", end_date="today")] | |
| ) | |
| ).rows[0].metric_values[0].value, | |
| "today_chatbot_events": client.run_report( | |
| RunReportRequest( | |
| property=f"properties/{property_id}", | |
| metrics=[Metric(name="eventCount")], | |
| dimension_filter=chatbot_filter, | |
| date_ranges=[DateRange(start_date="today", end_date="today")] | |
| ) | |
| ).rows[0].metric_values[0].value, | |
| } | |
| # WebSocket endpoint | |
| # @app.websocket("/ws") | |
| # async def websocket_endpoint(websocket: WebSocket): | |
| # await websocket.accept() | |
| # clients.append(websocket) | |
| # try: | |
| # while True: | |
| # await asyncio.sleep(10) | |
| # data = get_metrics() | |
| # await websocket.send_text(json.dumps(data)) | |
| #except WebSocketDisconnect: | |
| # clients.remove(websocket) | |
| # Optional: test HTTP route | |
| def read_root(): | |
| return {"message": "Hello from FastAPI"} | |