diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d13d903 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__ +.venv +/result diff --git a/modules/default.nix b/modules/default.nix index d8b08d3..d5d9d59 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,14 +1,42 @@ package: { + config, lib, + pkgs, ... }: { options.services.lego-monitoring = { enable = lib.mkEnableOption "lego-monitoring service."; + + nonSecretConfigOption = lib.mkOption { + type = lib.types.str; + default = "defaultValue"; + description = "An example non-secret config option."; + }; + + configOptionSecretPath = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + description = "Path to an example secret config option."; + }; }; - config = {}; + config = let + cfg = config.services.lego-monitoring; + json = pkgs.formats.json {}; + serviceConfigFile = json.generate "config.json" { + non_secret_config_option = cfg.nonSecretConfigOption; + config_option_secret_path = cfg.configOptionSecretPath; + }; + in lib.mkIf cfg.enable { + systemd.services.lego-monitoring = { + name = "lego-monitoring.service"; + description = "Lego-monitoring service"; + script = "${package}/bin/service -c ${serviceConfigFile}"; + wantedBy = [ "multi-user.target" ]; + }; + }; } diff --git a/pyproject.toml b/pyproject.toml index 52ead61..ed0e578 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ description = "Monitoring software for the lego server" readme = "README.md" requires-python = ">=3.12" dependencies = [ - #"urllib3>=2.2.3", + "alt-utils>=0.0.6", ] [project.scripts] @@ -14,8 +14,3 @@ service = "lego_monitoring:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" - -[dependency-groups] -dev = [ - #"ruff>=0.6.7", -] diff --git a/src/lego_monitoring/__init__.py b/src/lego_monitoring/__init__.py index 57b015c..15bd42e 100644 --- a/src/lego_monitoring/__init__.py +++ b/src/lego_monitoring/__init__.py @@ -1,6 +1,19 @@ +import argparse import time +from .core.config import load_config + + def main() -> None: + parser = argparse.ArgumentParser( + prog="lego-monitoring", + description="Lego-monitoring service", + ) + parser.add_argument('-c', '--config', required=True) + + config_path = parser.parse_args().config + config = load_config(config_path) + while True: - print("service running...") + print(f"service running... opt 1 is {config.non_secret_config_option}, opt 2 is secret, but if you really wanna know, it's {config.config_option}", flush=True) time.sleep(300) diff --git a/src/lego_monitoring/core/config.py b/src/lego_monitoring/core/config.py new file mode 100644 index 0000000..25566e8 --- /dev/null +++ b/src/lego_monitoring/core/config.py @@ -0,0 +1,32 @@ +import json +from dataclasses import dataclass +from typing import Optional + +from alt_utils import NestedDeserializableDataclass + + +@dataclass +class Config(NestedDeserializableDataclass): + non_secret_config_option: str + config_option: Optional[str] + +def load_config(filepath: str) -> Config: + with open(filepath) as f: + cfg_dict = json.load(f) + + # load secrets from paths + new_cfg_dict = {} + for k in cfg_dict: + if k.endswith('_secret_path'): + actual_opt_key = k[:-12] + secret_path = cfg_dict[k] + if secret_path is None: + new_cfg_dict[actual_opt_key] = None + else: + with open(secret_path) as sf: + new_cfg_dict[actual_opt_key] = sf.read().rstrip() + else: + new_cfg_dict[k] = cfg_dict[k] + + cfg = Config.from_dict(new_cfg_dict) + return cfg diff --git a/uv.lock b/uv.lock index 0d5c92e..7934399 100644 --- a/uv.lock +++ b/uv.lock @@ -1,56 +1,25 @@ version = 1 -revision = 1 requires-python = ">=3.12" [[package]] -name = "hello-world" +name = "alt-utils" +version = "0.0.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/d2/b4a3ea37f773696b07a545e8964c37e98e4939d5f8e3dae949d2cd4e4f53/alt_utils-0.0.6.tar.gz", hash = "sha256:91b8ca633238e819848e1f8b351892f4c148c7fddef120d5e966e3a0b5d06f81", size = 6001 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/27/0c963d6c64150e3fb2f98eb01773e2f9cf9b51f5b65632944bff67a68ec2/alt_utils-0.0.6-py3-none-any.whl", hash = "sha256:e4fd04394827eb49ae0d835f645ea03de1d9637a77acd5674a35890ae22abbef", size = 6260 }, +] + +[[package]] +name = "lego-monitoring" version = "0.1.0" source = { editable = "." } dependencies = [ - { name = "urllib3" }, -] - -[package.dev-dependencies] -dev = [ - { name = "ruff" }, + { name = "alt-utils" }, ] [package.metadata] -requires-dist = [{ name = "urllib3", specifier = ">=2.2.3" }] +requires-dist = [{ name = "alt-utils", specifier = ">=0.0.6" }] [package.metadata.requires-dev] -dev = [{ name = "ruff", specifier = ">=0.6.7" }] - -[[package]] -name = "ruff" -version = "0.11.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/61/fb87430f040e4e577e784e325351186976516faef17d6fcd921fe28edfd7/ruff-0.11.2.tar.gz", hash = "sha256:ec47591497d5a1050175bdf4e1a4e6272cddff7da88a2ad595e1e326041d8d94", size = 3857511 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/99/102578506f0f5fa29fd7e0df0a273864f79af044757aef73d1cae0afe6ad/ruff-0.11.2-py3-none-linux_armv6l.whl", hash = "sha256:c69e20ea49e973f3afec2c06376eb56045709f0212615c1adb0eda35e8a4e477", size = 10113146 }, - { url = "https://files.pythonhosted.org/packages/74/ad/5cd4ba58ab602a579997a8494b96f10f316e874d7c435bcc1a92e6da1b12/ruff-0.11.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2c5424cc1c4eb1d8ecabe6d4f1b70470b4f24a0c0171356290b1953ad8f0e272", size = 10867092 }, - { url = "https://files.pythonhosted.org/packages/fc/3e/d3f13619e1d152c7b600a38c1a035e833e794c6625c9a6cea6f63dbf3af4/ruff-0.11.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:ecf20854cc73f42171eedb66f006a43d0a21bfb98a2523a809931cda569552d9", size = 10224082 }, - { url = "https://files.pythonhosted.org/packages/90/06/f77b3d790d24a93f38e3806216f263974909888fd1e826717c3ec956bbcd/ruff-0.11.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c543bf65d5d27240321604cee0633a70c6c25c9a2f2492efa9f6d4b8e4199bb", size = 10394818 }, - { url = "https://files.pythonhosted.org/packages/99/7f/78aa431d3ddebfc2418cd95b786642557ba8b3cb578c075239da9ce97ff9/ruff-0.11.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20967168cc21195db5830b9224be0e964cc9c8ecf3b5a9e3ce19876e8d3a96e3", size = 9952251 }, - { url = "https://files.pythonhosted.org/packages/30/3e/f11186d1ddfaca438c3bbff73c6a2fdb5b60e6450cc466129c694b0ab7a2/ruff-0.11.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:955a9ce63483999d9f0b8f0b4a3ad669e53484232853054cc8b9d51ab4c5de74", size = 11563566 }, - { url = "https://files.pythonhosted.org/packages/22/6c/6ca91befbc0a6539ee133d9a9ce60b1a354db12c3c5d11cfdbf77140f851/ruff-0.11.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:86b3a27c38b8fce73bcd262b0de32e9a6801b76d52cdb3ae4c914515f0cef608", size = 12208721 }, - { url = "https://files.pythonhosted.org/packages/19/b0/24516a3b850d55b17c03fc399b681c6a549d06ce665915721dc5d6458a5c/ruff-0.11.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3b66a03b248c9fcd9d64d445bafdf1589326bee6fc5c8e92d7562e58883e30f", size = 11662274 }, - { url = "https://files.pythonhosted.org/packages/d7/65/76be06d28ecb7c6070280cef2bcb20c98fbf99ff60b1c57d2fb9b8771348/ruff-0.11.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0397c2672db015be5aa3d4dac54c69aa012429097ff219392c018e21f5085147", size = 13792284 }, - { url = "https://files.pythonhosted.org/packages/ce/d2/4ceed7147e05852876f3b5f3fdc23f878ce2b7e0b90dd6e698bda3d20787/ruff-0.11.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:869bcf3f9abf6457fbe39b5a37333aa4eecc52a3b99c98827ccc371a8e5b6f1b", size = 11327861 }, - { url = "https://files.pythonhosted.org/packages/c4/78/4935ecba13706fd60ebe0e3dc50371f2bdc3d9bc80e68adc32ff93914534/ruff-0.11.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2a2b50ca35457ba785cd8c93ebbe529467594087b527a08d487cf0ee7b3087e9", size = 10276560 }, - { url = "https://files.pythonhosted.org/packages/81/7f/1b2435c3f5245d410bb5dc80f13ec796454c21fbda12b77d7588d5cf4e29/ruff-0.11.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7c69c74bf53ddcfbc22e6eb2f31211df7f65054bfc1f72288fc71e5f82db3eab", size = 9945091 }, - { url = "https://files.pythonhosted.org/packages/39/c4/692284c07e6bf2b31d82bb8c32f8840f9d0627d92983edaac991a2b66c0a/ruff-0.11.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6e8fb75e14560f7cf53b15bbc55baf5ecbe373dd5f3aab96ff7aa7777edd7630", size = 10977133 }, - { url = "https://files.pythonhosted.org/packages/94/cf/8ab81cb7dd7a3b0a3960c2769825038f3adcd75faf46dd6376086df8b128/ruff-0.11.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:842a472d7b4d6f5924e9297aa38149e5dcb1e628773b70e6387ae2c97a63c58f", size = 11378514 }, - { url = "https://files.pythonhosted.org/packages/d9/3a/a647fa4f316482dacf2fd68e8a386327a33d6eabd8eb2f9a0c3d291ec549/ruff-0.11.2-py3-none-win32.whl", hash = "sha256:aca01ccd0eb5eb7156b324cfaa088586f06a86d9e5314b0eb330cb48415097cc", size = 10319835 }, - { url = "https://files.pythonhosted.org/packages/86/54/3c12d3af58012a5e2cd7ebdbe9983f4834af3f8cbea0e8a8c74fa1e23b2b/ruff-0.11.2-py3-none-win_amd64.whl", hash = "sha256:3170150172a8f994136c0c66f494edf199a0bbea7a409f649e4bc8f4d7084080", size = 11373713 }, - { url = "https://files.pythonhosted.org/packages/d6/d4/dd813703af8a1e2ac33bf3feb27e8a5ad514c9f219df80c64d69807e7f71/ruff-0.11.2-py3-none-win_arm64.whl", hash = "sha256:52933095158ff328f4c77af3d74f0379e34fd52f175144cefc1b192e7ccd32b4", size = 10441990 }, -] - -[[package]] -name = "urllib3" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, -] +dev = []