-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebapp.py
61 lines (50 loc) · 2.17 KB
/
webapp.py
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
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import requests
from datetime import datetime
import uvicorn
app = FastAPI()
# Grafana Cloud API URL
GRAFANA_CLOUD_API_URL = "https://graphite-prod-13-prod-us-east-0.grafana.net/graphite"
# Grafana Cloud API authentication
GRAFANA_CLOUD_API_AUTH = ("977486", "")
# Models for request body
class DistanceData(BaseModel):
distance: float
timestamp: int
class PhData(BaseModel):
ph: float
timestamp: int
# Routes
@app.post('/distance_data')
def post_distance_data(distance_data: DistanceData):
try:
# Prepare data for Grafana Cloud API
data = f"distance_data value={distance_data.distance} {distance_data.timestamp}\n"
# Send data to Grafana Cloud API
response = requests.post(GRAFANA_CLOUD_API_URL, data=data, auth=GRAFANA_CLOUD_API_AUTH)
response.raise_for_status()
return {'message': 'Data added to Grafana Cloud for distance_data'}
except requests.exceptions.RequestException as e:
raise HTTPException(status_code=500, detail=f'Error adding data to Grafana Cloud: {str(e)}')
@app.post('/ph_data')
def post_ph_data(ph_data: PhData):
try:
# Prepare data for Grafana Cloud API
data = f"ph_data value={ph_data.ph} {ph_data.timestamp}\n"
# Send data to Grafana Cloud API
response = requests.post(GRAFANA_CLOUD_API_URL, data=data, auth=GRAFANA_CLOUD_API_AUTH)
response.raise_for_status()
return {'message': 'Data added to Grafana Cloud for ph_data'}
except requests.exceptions.RequestException as e:
raise HTTPException(status_code=500, detail=f'Error adding data to Grafana Cloud: {str(e)}')
# Check Grafana Cloud API on startup
@app.on_event('startup')
def startup_event():
try:
# TODO: Check if data source for distance_data exists and create it if it doesn't
# TODO: Check if data source for ph_data exists and create it if it doesn't
pass
except requests.exceptions.RequestException as e:
raise HTTPException(status_code=500, detail=f'Error checking Grafana Cloud API: {str(e)}')
uvicorn.run(app, host="0.0.0.0", port=8080) #set host to local ip address