Skip to content
Snippets Groups Projects
Commit ad8384a4 authored by Nicolas Schmid's avatar Nicolas Schmid
Browse files

feat: improve scripts to create database and debug

parent ba06c243
No related branches found
No related tags found
3 merge requests!34deploy v1.0 to bedretto hydws,!33deploy to bedretto environment,!32Feature/datamodel
Pipeline #2840 passed
...@@ -46,4 +46,5 @@ COPY --chown=python:python . . ...@@ -46,4 +46,5 @@ COPY --chown=python:python . .
EXPOSE 8000 EXPOSE 8000
CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "-c", "python:config.gunicorn", "hydws.main:app"] # CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "-c", "python:config.gunicorn", "hydws.main:app"]
CMD ["uvicorn", "hydws.main:app", "--port", "8000", "--workers", "1", "--timeout-keep-alive", "300", "--host", "0.0.0.0"]
...@@ -2,13 +2,14 @@ ...@@ -2,13 +2,14 @@
import multiprocessing import multiprocessing
import os import os
from distutils.util import strtobool from distutils.util import strtobool
bind = f"0.0.0.0:{os.getenv('PORT', '8000')}" bind = f"0.0.0.0:{os.getenv('PORT', '8000')}"
accesslog = "-" accesslog = "-"
access_log_format = "%(h)s %(l)s %(u)s %(t)s '%(r)s' %(s)s %(b)s '%(f)s' '%(a)s' in %(D)sµs" # noqa: E501 access_log_format = "%(h)s %(l)s %(u)s %(t)s '%(r)s' %(s)s %(b)s '%(f)s' '%(a)s' in %(D)sµs" # noqa: E501
timeout = "600"
workers = int(os.getenv("WEB_CONCURRENCY", multiprocessing.cpu_count() * 2)) workers = int(os.getenv("WEB_CONCURRENCY", multiprocessing.cpu_count() * 2))
threads = int(os.getenv("PYTHON_MAX_THREADS", 1)) threads = int(os.getenv("PYTHON_MAX_THREADS", 1))
......
#!/bin/bash
set -e
set -a
. .env
set +a
psql -d $DB_NAME -U $DB_USER --host $POSTGRES_HOST -f $(pwd)/db/partition.sql
psql -d $DB_NAME -U $DB_USER --host $POSTGRES_HOST -c "CREATE OR REPLACE TRIGGER partition_daily_function
BEFORE INSERT
ON hydraulicsample
FOR EACH ROW
WHEN (pg_trigger_depth() < 1)
EXECUTE FUNCTION partition_daily_function($DB_USER);"
\ No newline at end of file
-- CREATE TABLE hydraulicsample_default PARTITION OF hydraulicsample DEFAULT; CREATE TABLE hydraulicsample_default PARTITION OF hydraulicsample DEFAULT;
CREATE OR REPLACE FUNCTION partition_daily_function() CREATE OR REPLACE FUNCTION partition_daily_function()
RETURNS TRIGGER AS $$ RETURNS TRIGGER AS $$
...@@ -21,6 +21,7 @@ THEN ...@@ -21,6 +21,7 @@ THEN
RAISE NOTICE 'A partition has been created'; RAISE NOTICE 'A partition has been created';
BEGIN BEGIN
EXECUTE format(E'CREATE TABLE %I (LIKE hydraulicsample INCLUDING INDEXES)', partition_name); EXECUTE format(E'CREATE TABLE %I (LIKE hydraulicsample INCLUDING INDEXES)', partition_name);
EXECUTE format(E'ALTER TABLE %I OWNER TO %s', partition_name, TG_ARGV[0]);
EXECUTE format(E'NOTIFY hydraulicsample, %L', partition_date); EXECUTE format(E'NOTIFY hydraulicsample, %L', partition_date);
EXCEPTION EXCEPTION
WHEN duplicate_table THEN WHEN duplicate_table THEN
...@@ -32,10 +33,3 @@ RETURN NULL; ...@@ -32,10 +33,3 @@ RETURN NULL;
END; END;
$$ $$
LANGUAGE plpgsql; LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER partition_daily_function
BEFORE INSERT
ON hydraulicsample
FOR EACH ROW
WHEN (pg_trigger_depth() < 1)
EXECUTE FUNCTION partition_daily_function();
import psycopg2
import asyncio import asyncio
import enum import enum
import functools import functools
import uuid import uuid
from datetime import datetime, timedelta from datetime import datetime, timedelta
import psycopg2
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
from sqlalchemy import (Boolean, Column, DateTime, Float, Integer, String, from sqlalchemy import (Boolean, Column, DateTime, Float, Integer, String,
create_engine) create_engine)
......
# import logging
from fastapi import FastAPI from fastapi import FastAPI
# from fastapi.logger import logger as fastapi_logger
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from hydws.datamodel.base import ORMBase, engine
from hydws.datamodel.base import ORMBase, engine
from hydws.routers.v1 import boreholes from hydws.routers.v1 import boreholes
# gunicorn_error_logger = logging.getLogger("gunicorn.error")
# gunicorn_logger = logging.getLogger("gunicorn")
# uvicorn_access_logger = logging.getLogger("uvicorn.access")
# uvicorn_access_logger.handlers = gunicorn_error_logger.handlers
# fastapi_logger.handlers = gunicorn_error_logger.handlers
# if __name__ != "__main__":
# fastapi_logger.setLevel(gunicorn_logger.level)
# else:
# fastapi_logger.setLevel(logging.DEBUG)
ORMBase.metadata.create_all(bind=engine) ORMBase.metadata.create_all(bind=engine)
......
...@@ -3,6 +3,7 @@ autopep8>=1.6.0 ...@@ -3,6 +3,7 @@ autopep8>=1.6.0
fastapi[all]>=0.92.0 fastapi[all]>=0.92.0
flake8>=4.0.1 flake8>=4.0.1
gunicorn>=20.1.0 gunicorn>=20.1.0
orjson>=3.9.0
pandas>=2.0.0rc1 pandas>=2.0.0rc1
psycopg2>=2.9.3 psycopg2>=2.9.3
pytest>=7.0.1 pytest>=7.0.1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment