Bump hsapi-client version and docker work

This commit is contained in:
Andrea Mistrali 2024-07-04 16:52:35 +02:00
parent 3a6f7af8a3
commit 42e2b884a1
7 changed files with 61 additions and 62 deletions

View File

@ -1,3 +1,4 @@
build.log build.log
.flaskenv .flaskenv
.dockerbuild.env .dockerbuild.env
docker.env

View File

@ -53,6 +53,7 @@ def create_app(environment='development'):
app.logger.info("jinja2 custom filters loaded") app.logger.info("jinja2 custom filters loaded")
filters.init_app(app) filters.init_app(app)
app.logger.info("middleware init: auth")
auth.init_app(app) auth.init_app(app)
# Error handlers. # Error handlers.

View File

@ -1,27 +1,27 @@
# Logging configuration # Logging configuration
[loggers] [loggers]
keys = root, wsgi, app, views, lib, model, sqlalchemy, scheduler, werkzeug, gunicorn keys = root, wsgi, app, views, lib, access, error
[handlers] [handlers]
keys = console, accesslog keys = console
[formatters] [formatters]
keys = generic, colored, accesslog keys = json
[logger_root] [logger_root]
level = INFO level = INFO
handlers = console handlers = console
[logger_gunicorn] [logger_access]
level = INFO level = INFO
handlers = accesslog handlers = console
qualname = gunicorn qualname = gunicorn.access
propagate = 0 propagate = 0
[logger_werkzeug] [logger_error]
level = INFO level = INFO
handlers = accesslog handlers = console
qualname = werkzeug qualname = gunicorn.error
propagate = 0 propagate = 0
[logger_wsgi] [logger_wsgi]
@ -48,47 +48,13 @@ handlers = console
qualname = app.lib qualname = app.lib
propagate = 0 propagate = 0
[logger_model]
level = INFO
handlers = console
qualname = app.models
propagate = 0
[logger_sqlalchemy]
level = WARN
handlers = console
qualname = sqlalchemy.engine.Engine
propagate = 0
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither. (Recommended for production systems.)
[logger_scheduler]
level = INFO
handlers = console
qualname = app.scheduler
propagate = 0
[handler_console] [handler_console]
class = StreamHandler class = StreamHandler
args = (sys.stderr,) args = (sys.stderr,)
level = NOTSET level = NOTSET
; formatter = colored ; formatter = colored
formatter = generic formatter = json
[handler_accesslog] [formatter_json]
class = StreamHandler format={"timestamp": "%(asctime)s.%(msecs)03d", "level": "%(levelname)s", "logger": "%(name)s", "message": "%(message)s"}
args = (sys.stderr,) datefmt = %Y-%m-%dT%H:%M:%S
level = NOTSET
formatter = accesslog
[formatter_generic]
format = %(asctime)s,%(msecs)03d %(levelname)-7.7s [%(name)s/%(filename)s:%(lineno)d]: %(message)s
datefmt = %Y-%m-%d %H:%M:%S
[formatter_colored]
format = %(asctime)s,%(msecs)03d %(levelname)-7.7s [%(name)s/%(filename)s:%(lineno)d]: %(message)s
datefmt = %H:%M:%S
[formatter_accesslog]
format = %(message)s

View File

@ -1,6 +1,6 @@
import logging import logging
from .lib import remote_ip
import datetime import datetime
from flask import current_app
from flask import render_template, Blueprint, request from flask import render_template, Blueprint, request
from flask import redirect, session, url_for from flask import redirect, session, url_for
from app import auth from app import auth
@ -19,6 +19,11 @@ log = logging.getLogger()
main_blueprint = Blueprint('main', __name__) main_blueprint = Blueprint('main', __name__)
@ main_blueprint.route('/health', methods=['GET'])
def health():
return jsonify(dict(status="OK", version=current_app.config['APP_VERSION']))
@ main_blueprint.route('/', methods=['GET', 'POST']) @ main_blueprint.route('/', methods=['GET', 'POST'])
@ auth.access_control('default') @ auth.access_control('default')
def index(): def index():
@ -37,12 +42,6 @@ def token():
return jsonify(user_session.userinfo) return jsonify(user_session.userinfo)
@ main_blueprint.route('/call', methods=['GET', 'POST'])
@ auth.access_control('default')
def call():
return "CALL OK"
@ main_blueprint.route('/logout') @ main_blueprint.route('/logout')
@ auth.oidc_logout @ auth.oidc_logout
def logout(): def logout():
@ -136,8 +135,10 @@ def routeToggle(routeId: int):
route = route[0] route = route[0]
if route.enabled: if route.enabled:
Route().disable(routeId) Route().disable(routeId)
log.info(f"route {route.prefix}/{route.node.givenName} disabled")
else: else:
Route().enable(routeId) Route().enable(routeId)
log.info(f"route {route.prefix}/{route.node.givenName} enabled")
return redirect(url_for("main.routes")) return redirect(url_for("main.routes"))

View File

@ -9,9 +9,9 @@ threads = 4
preload_app = True preload_app = True
worker_class = "uvicorn.workers.UvicornWorker" worker_class = "uvicorn.workers.UvicornWorker"
# logconfig = "app/logging/production.ini"
logconfig = "logging/production.ini" logconfig = "/hsmon/app/logging/production.ini"
access_log_format = "%(h)s %(l)s %(t)s %(r)s %(s)s %(b)s %(f)s %(a)s" # access_log_format = "%(h)s %(l)s %(t)s %(r)s %(s)s %(b)s %(f)s %(a)s"
# Log to stdout. # Log to stdout.
accesslog = "-" accesslog = "-"
errorlog = "-" errorlog = "-"

37
hsman/poetry.lock generated
View File

@ -444,15 +444,26 @@ setproctitle = ["setproctitle"]
testing = ["coverage", "eventlet", "gevent", "pytest", "pytest-cov"] testing = ["coverage", "eventlet", "gevent", "pytest", "pytest-cov"]
tornado = ["tornado (>=0.2)"] tornado = ["tornado (>=0.2)"]
[[package]]
name = "h11"
version = "0.14.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
optional = false
python-versions = ">=3.7"
files = [
{file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
{file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
]
[[package]] [[package]]
name = "hsapi-client" name = "hsapi-client"
version = "0.9.0" version = "0.9.1"
description = "Headscale API client" description = "Headscale API client"
optional = false optional = false
python-versions = "<4.0,>=3.11" python-versions = "<4.0,>=3.11"
files = [ files = [
{file = "hsapi_client-0.9.0-py3-none-any.whl", hash = "sha256:380eabe733f8b22fef38a453d3620deacc32d45a12e1a2f220df6f72434656ca"}, {file = "hsapi_client-0.9.1-py3-none-any.whl", hash = "sha256:1b6531526ed476daaefa16eeb3a16e768372f4bd5d879da7bf4ed75a4bd36a5b"},
{file = "hsapi_client-0.9.0.tar.gz", hash = "sha256:1546af6faf2f64477a288499030cc3eb1055958eeb11bd2599f12e1f39b99c0c"}, {file = "hsapi_client-0.9.1.tar.gz", hash = "sha256:b047a21e642ae4ba108a17f6b68d71af8ba851270421261df92c97acdcfdc907"},
] ]
[package.dependencies] [package.dependencies]
@ -1126,6 +1137,24 @@ h2 = ["h2 (>=4,<5)"]
socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
zstd = ["zstandard (>=0.18.0)"] zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "uvicorn"
version = "0.30.1"
description = "The lightning-fast ASGI server."
optional = false
python-versions = ">=3.8"
files = [
{file = "uvicorn-0.30.1-py3-none-any.whl", hash = "sha256:cd17daa7f3b9d7a24de3617820e634d0933b69eed8e33a516071174427238c81"},
{file = "uvicorn-0.30.1.tar.gz", hash = "sha256:d46cd8e0fd80240baffbcd9ec1012a712938754afcf81bce56c024c1656aece8"},
]
[package.dependencies]
click = ">=7.0"
h11 = ">=0.8"
[package.extras]
standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
[[package]] [[package]]
name = "wcwidth" name = "wcwidth"
version = "0.2.13" version = "0.2.13"
@ -1157,4 +1186,4 @@ watchdog = ["watchdog (>=2.3)"]
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = ">=3.11,<4.0" python-versions = ">=3.11,<4.0"
content-hash = "d5dfc1ee9d87ae7860e29f9bdc9f9a6052a648545d4c8f4d543a93e64132944d" content-hash = "462d0b3a2b307ddc04cb74309f7a1a85679a3a3bf05155a8022d0047d14d2241"

View File

@ -11,10 +11,11 @@ python = ">=3.11,<4.0"
Flask = "^3.0.3" Flask = "^3.0.3"
Flask-pyoidc = "^3.14.3" Flask-pyoidc = "^3.14.3"
gunicorn = "^22.0.0" gunicorn = "^22.0.0"
hsapi-client = "^0.9.0" hsapi-client = "^0.9.1"
flask-mobility = "^2.0.1" flask-mobility = "^2.0.1"
humanize = "^4.9.0" humanize = "^4.9.0"
flask-pydantic = "^0.12.0" flask-pydantic = "^0.12.0"
uvicorn = "^0.30.1"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]