Skip to content

Commit

Permalink
Heartbeat api refactored and ohsome api environment import handled
Browse files Browse the repository at this point in the history
  • Loading branch information
prabinoid committed Sep 9, 2024
1 parent 2cdea48 commit aeb7143
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 49 deletions.
57 changes: 46 additions & 11 deletions backend/api/system/general.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
from backend.services.messaging.smtp_service import SMTPService
from backend.models.postgis.release_version import ReleaseVersion
from fastapi import APIRouter, Depends, Request
from backend.db import get_session
from backend.db import get_db, get_session
from databases import Database

router = APIRouter(
prefix="/system",
Expand Down Expand Up @@ -162,24 +163,58 @@ async def get():
return {"status": "healthy", "release": release}, 200


# class SystemLanguagesAPI():
@router.get("/languages/")
async def get():
# # class SystemLanguagesAPI():
# @router.get("/languages/")
# async def get():
# """
# Gets all supported languages
# ---
# tags:
# - system
# produces:
# - application/json
# responses:
# 200:
# description: Supported Languages
# 500:
# description: Internal Server Error
# """
# languages = SettingsService.get_settings()
# return languages.model_dump(by_alias=True), 200



@router.get("/heartbeat/")
async def get(db: Database = Depends(get_db)):
"""
Gets all supported languages
Simple health-check, if this is unreachable load balancers should be configured to raise an alert
---
tags:
- system
produces:
- application/json
responses:
200:
description: Supported Languages
500:
description: Internal Server Error
200:
description: Service is Healthy
"""
query = """
SELECT tag_name, published_at
FROM release_version
ORDER BY published_at DESC
LIMIT 1
"""
languages = SettingsService.get_settings()
return languages.model_dump(by_alias=True), 200
release = await db.fetch_one(query)

if release:
release_info = {
"version": release["tag_name"],
"published_at": release["published_at"].isoformat(),
}
else:
release_info = None

return {"status": "Fastapi healthy", "release": release_info}, 200



# class SystemContactAdminRestAPI():
Expand Down
80 changes: 42 additions & 38 deletions backend/api/users/statistics.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
# from backend.services.users.authentication_service import token_auth
from backend.services.users.authentication_service import login_required
from backend.api.utils import validate_date_input
from backend.config import EnvironmentConfig
from backend.models.dtos.user_dto import AuthUserDTO
from backend.db import get_db
from databases import Database
from fastapi import APIRouter, Depends, Request
from backend.db import get_session
from starlette.authentication import requires
import os

router = APIRouter(
prefix="/users",
Expand Down Expand Up @@ -165,41 +165,45 @@ async def get(request: Request):
return {"Error": str(e).split("-")[1], "SubCode": str(e).split("-")[0]}, 400


class OhsomeProxyAPI(Resource):
@token_auth.login_required
def get(self):
"""
Get HomePage Stats
---
tags:
- system
produces:
- application/json
parameters:
- in: header
name: Authorization
description: Base64 encoded session token
required: true
type: string
default: Token sessionTokenHere==
- in: query
name: url
type: string
description: get user stats for osm contributions
responses:
200:
description: User stats
500:
description: Internal Server Error
"""
url = request.args.get("url")
if not url:
return {"Error": "URL is None", "SubCode": "URL not provided"}, 400
try:
headers = {"Authorization": f"Basic {EnvironmentConfig.OHSOME_STATS_TOKEN}"}
# class OhsomeProxyAPI(Resource):
# @token_auth.login_required
@router.get("/statistics/ohsome/")
@requires("authenticated")
async def get(request: Request):
"""
Get HomePage Stats
---
tags:
- system
produces:
- application/json
parameters:
- in: header
name: Authorization
description: Base64 encoded session token
required: true
type: string
default: Token sessionTokenHere==
- in: query
name: url
type: string
description: get user stats for osm contributions
responses:
200:
description: User stats
500:
description: Internal Server Error
"""
url = request.args.get("url")
token = os.environ.get("TM_APP_BASE_URL", None)
if not url:
return {"Error": "URL is None", "SubCode": "URL not provided"}, 400
try:
# headers = {"Authorization": f"Basic {EnvironmentConfig.OHSOME_STATS_TOKEN}"}
headers = {"Authorization": f"Basic {token}"}

# Make the GET request with headers
response = requests.get(url, headers=headers)
return response.json(), 200
except Exception as e:
return {"Error": str(e), "SubCode": "Error fetching data"}, 400
# Make the GET request with headers
response = requests.get(url, headers=headers)
return response.json(), 200
except Exception as e:
return {"Error": str(e), "SubCode": "Error fetching data"}, 400

0 comments on commit aeb7143

Please sign in to comment.