Spaces:
Sleeping
Sleeping
File size: 4,139 Bytes
f748244 08071a4 f748244 caa0006 f748244 a361233 08071a4 f748244 08071a4 f748244 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | # 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
@app.get("/")
def read_root():
return {"message": "Hello from FastAPI"}
|