From b9e08735a8046d9e4970df09ccf064927fc1a6c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Fri, 9 Jan 2026 14:45:36 +0100 Subject: [PATCH] Install gunicorn --- conmorfeusz/conmorfeusz/cli/__init__.py | 22 +++++++++++++++++----- conmorfeusz/conmorfeusz/server/__init__.py | 15 +++++++++++++++ conmorfeusz/conmorfeusz/web/__init__.py | 2 +- conmorfeusz/default.nix | 6 +++--- conmorfeusz/pyproject.toml | 3 ++- 5 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 conmorfeusz/conmorfeusz/server/__init__.py diff --git a/conmorfeusz/conmorfeusz/cli/__init__.py b/conmorfeusz/conmorfeusz/cli/__init__.py index 0620489..fc94063 100644 --- a/conmorfeusz/conmorfeusz/cli/__init__.py +++ b/conmorfeusz/conmorfeusz/cli/__init__.py @@ -1,16 +1,22 @@ import os import click +import subprocess import conmorfeusz.web as web import conmorfeusz.concraft as ccpl +from conmorfeusz.web import create_app +from conmorfeusz.server import StandaloneApplication + @click.command() -@click.option('--port', default=5000, help='Port on which the application will be listening to.') -@click.option('--ccpl-port', default=3000, help='Port on which internal concraft-pl server will be listening to.') +@click.option("--host", default="0.0.0.0", help='Default host on which the application will be listening on.') +@click.option('--port', default=5000, help='Port which the application will be listening on.') +@click.option("--workers", default=4, help='Number of workers used to handle incoming requests.') +@click.option('--ccpl-port', default=3000, help='Port which internal concraft-pl server will be listening on.') @click.option('--ccpl-model', default=None, help='Model used by concraft-pl. It will fallback to CONCRAFT_PL_MODEL envvar if not specified.') @click.option('--ccpl-bin', default=None, help='Concraft-pl binary file. It will fallback to CONCRAFT_PL_BIN envvar if not specified.') @click.option('--ccpl-core-num', default=1, help='Number of cores used to run Concraft-pl logic.') @click.option('--ccpl-alloc-size', default=64, help='Allocation size for Concraft-pl.') -def run(port, ccpl_port, ccpl_model, ccpl_bin, ccpl_core_num, ccpl_alloc_size): +def run(host, port, workers, ccpl_port, ccpl_model, ccpl_bin, ccpl_core_num, ccpl_alloc_size): """ Glues all services together and starts the holistic app. """ @@ -26,5 +32,11 @@ def run(port, ccpl_port, ccpl_model, ccpl_bin, ccpl_core_num, ccpl_alloc_size): concraft_cfg = (ccpl_model, ccpl_bin, ccpl_port, ccpl_core_num, ccpl_alloc_size) - with ccpl.start_server(*concraft_cfg): - web.start(port) + with ccpl.start_server(*concraft_cfg): + options = { + 'bind': f'{host}:{port}', + 'workers': workers, + } + + StandaloneApplication(create_app, options).run() + diff --git a/conmorfeusz/conmorfeusz/server/__init__.py b/conmorfeusz/conmorfeusz/server/__init__.py new file mode 100644 index 0000000..1f113c1 --- /dev/null +++ b/conmorfeusz/conmorfeusz/server/__init__.py @@ -0,0 +1,15 @@ +from gunicorn.app.base import BaseApplication + +class StandaloneApplication(BaseApplication): + def __init__(self, app_factory, options=None): + self.options = options or {} + self.app_factory = app_factory + super().__init__() + + def load_config(self): + for key, value in self.options.items(): + if key in self.cfg.settings and value is not None: + self.cfg.set(key.lower(), value) + + def load(self): + return self.app_factory() \ No newline at end of file diff --git a/conmorfeusz/conmorfeusz/web/__init__.py b/conmorfeusz/conmorfeusz/web/__init__.py index cf26804..75607d2 100644 --- a/conmorfeusz/conmorfeusz/web/__init__.py +++ b/conmorfeusz/conmorfeusz/web/__init__.py @@ -1,5 +1,5 @@ from flask import Flask -from conmorfeusz.web import analyzer +from . import analyzer def create_app(): app = Flask(__name__, instance_relative_config=True) diff --git a/conmorfeusz/default.nix b/conmorfeusz/default.nix index b8e2420..b6e84aa 100644 --- a/conmorfeusz/default.nix +++ b/conmorfeusz/default.nix @@ -1,13 +1,12 @@ { self, - system, pkgs, fetchurl, libgcc, stdenv, autoPatchelfHook, makeWrapper, - defaultModel ? self.packages.${system}.concraft-pl-sgjp-model, + defaultModel ? self.packages.${stdenv.hostPlatform.system}.concraft-pl-sgjp-model, ... }: let python = pkgs.python311; # Możesz zmienić wersję Python @@ -49,6 +48,7 @@ in flask requests click + gunicorn ]; nativeBuildInputs = with pythonPackages; [ @@ -60,6 +60,6 @@ in postInstall = '' wrapProgram $out/bin/conmorfeusz \ --set CONCRAFT_PL_MODEL "${defaultModel}" \ - --set CONCRAFT_PL_BIN "${self.packages.${system}.concraft-pl}/bin/concraft-pl" + --set CONCRAFT_PL_BIN "${self.packages.${stdenv.hostPlatform.system}.concraft-pl}/bin/concraft-pl" ''; } diff --git a/conmorfeusz/pyproject.toml b/conmorfeusz/pyproject.toml index 9642be3..f41591b 100644 --- a/conmorfeusz/pyproject.toml +++ b/conmorfeusz/pyproject.toml @@ -12,7 +12,8 @@ dependencies = [ "morfeusz2==1.99.12", "flask", "requests", - "click" + "click", + "gunicorn>=21.0.0" ] [tool.setuptools.packages.find]