-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2 from TrustWiseAgent/health
fix python lint issue
- Loading branch information
Showing
13 changed files
with
191 additions
and
29 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,6 @@ | ||
fastapi[standard] | ||
uvicorn | ||
uvicorn | ||
pydantic | ||
pydantic-settings | ||
ntplib | ||
python-dateutil |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
""" | ||
Configure | ||
""" | ||
from pydantic_settings import BaseSettings | ||
|
||
class Settings(BaseSettings): | ||
""" | ||
Settings | ||
""" | ||
ntp_server: str = "ntp.ntsc.ac.cn" | ||
|
||
settings = Settings() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
""" | ||
The main entry | ||
""" | ||
import logging | ||
from contextlib import asynccontextmanager | ||
|
||
import uvicorn | ||
from fastapi import FastAPI, Depends | ||
from fastapi.middleware.cors import CORSMiddleware | ||
|
||
from .routers import secure, public | ||
from .auth import get_user | ||
from .util import sync_ntp_server | ||
|
||
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s') | ||
LOG = logging.getLogger(__name__) | ||
|
||
@asynccontextmanager | ||
async def lifespan(_:FastAPI): | ||
""" | ||
App lifecycle | ||
""" | ||
LOG.info("Starting Up...") | ||
sync_ntp_server() | ||
yield | ||
LOG.info("Shutting Down...") | ||
|
||
app = FastAPI() | ||
app = FastAPI(lifespan=lifespan) | ||
app.add_middleware( | ||
CORSMiddleware, | ||
allow_origins=["*"], | ||
allow_credentials=True, | ||
allow_methods=["*"], | ||
allow_headers=["*"], | ||
) | ||
|
||
app.include_router( | ||
public.router, | ||
prefix="/api/v1/public" | ||
) | ||
app.include_router( | ||
secure.router, | ||
prefix="/api/v1/secure", | ||
dependencies=[Depends(get_user)] | ||
) | ||
|
||
if __name__ == '__main__': | ||
uvicorn.run(app, host="0.0.0.0", port=8000) |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
""" | ||
Public result API interfaces | ||
""" | ||
import logging | ||
|
||
import time | ||
import datetime | ||
from dateutil.tz import tzlocal | ||
|
||
from fastapi import APIRouter | ||
from pydantic import BaseModel | ||
|
||
from ..util import sync_ntp_server | ||
from ..config import settings | ||
|
||
LOG = logging.getLogger(__name__) | ||
|
||
router = APIRouter() | ||
|
||
@router.get("/") | ||
async def get_testroute(): | ||
""" | ||
Test public interface | ||
""" | ||
return "OK" | ||
|
||
class HealthCheck(BaseModel): | ||
""" | ||
Response model to validate and return when performing a health check. | ||
""" | ||
|
||
status: str = "OK" | ||
|
||
@router.get("/health") | ||
async def get_health() -> HealthCheck: | ||
""" | ||
Check health | ||
""" | ||
return HealthCheck(status="OK") | ||
|
||
@router.get("/settings") | ||
async def get_settings(): | ||
""" | ||
Get server settings | ||
""" | ||
return { | ||
'ntp_server': settings.ntp_server | ||
} | ||
|
||
@router.get("/server_time") | ||
async def get_server_time(): | ||
""" | ||
Get server time | ||
""" | ||
curr_ts = time.time() | ||
now_utc = datetime.datetime.fromtimestamp(curr_ts, datetime.UTC) | ||
tl = tzlocal() | ||
ntp_offset = sync_ntp_server() | ||
|
||
return { | ||
'ntp_offset': ntp_offset, | ||
'timezone_name': tl.tzname(now_utc), | ||
'timezone_offset': tl.utcoffset(now_utc).total_seconds(), | ||
'timestamp_server': int(curr_ts) | ||
} |
8 changes: 7 additions & 1 deletion
8
src/gentrade-server/routers/secure.py → src/gentrade_server/routers/secure.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,14 @@ | ||
""" | ||
Secure API interface | ||
""" | ||
from fastapi import APIRouter, Depends | ||
from ..auth import get_user | ||
|
||
router = APIRouter() | ||
|
||
@router.get("/") | ||
async def get_testroute(user: dict = Depends(get_user)): | ||
return user | ||
""" | ||
Test secure interface | ||
""" | ||
return user |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
""" | ||
Utils | ||
""" | ||
import logging | ||
import ntplib | ||
|
||
LOG = logging.getLogger(__name__) | ||
|
||
def sync_ntp_server() -> float: | ||
""" | ||
Sync with NTP server | ||
:return : offset in seconds | ||
""" | ||
ntp_servers = ['ntp.ntsc.ac.cn', 'ntp.sjtu.edu.cn', 'cn.ntp.org.cn', | ||
'cn.pool.ntp.org', 'ntp.aliyun.com'] | ||
retry = len(ntp_servers) - 1 | ||
client = ntplib.NTPClient() | ||
while retry > 0: | ||
LOG.info("Try to get time from NTP: %s", ntp_servers[retry]) | ||
|
||
try: | ||
ret = client.request(ntp_servers[retry], version=3) | ||
offset = (ret.recv_time - ret.orig_time + | ||
ret.dest_time - ret.tx_time) / 2 | ||
LOG.info("NTP offset: %.2f", offset) | ||
return offset | ||
except ntplib.NTPException: | ||
LOG.error("Fail to get time, try another") | ||
retry -= 1 | ||
continue | ||
return None |