monitor-app 2.3.0__tar.gz → 2.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {monitor_app-2.3.0 → monitor_app-2.3.1}/PKG-INFO +29 -4
- {monitor_app-2.3.0 → monitor_app-2.3.1}/README.md +24 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/pyproject.toml +11 -6
- {monitor_app-2.3.0 → monitor_app-2.3.1}/LICENSE +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/__init__.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/__init__.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/deps.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/errors.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/routers/__init__.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/routers/alerts.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/routers/audit.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/routers/auth.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/routers/crud.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/routers/ingest.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/routers/meta.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/routers/pages.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/routers/views.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/api/schemas.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/cli.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/db/__init__.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/db/engine.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/db/ingest_state.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/db/registry.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/db/repository.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/exceptions.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/integrations/__init__.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/integrations/netdiag.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/integrations/network_checker.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/integrations/procdiag.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/logging_conf.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/main.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/scaffold/README.md +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/scaffold/config.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/scaffold/csv/orders.csv +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/scaffold/csv/products.csv +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/scaffold/csv/users.csv +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/scaffold/env.example +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/__init__.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/alert_scheduler.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/alert_service.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/audit_service.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/coercion.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/connectors.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/crud_service.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/importer.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/ingest_watcher.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/kpi_service.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/notifiers/__init__.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/notifiers/base.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/notifiers/email.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/notifiers/webhook.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/view_cache.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/services/view_service.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/settings/__init__.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/settings/declarative.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/settings/loader.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/settings/runtime.py +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/css/app.css +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/css/bootstrap.min.css +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/css/dashboard.css +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/css/kiosk.css +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/img/background.webp +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/img/favicon.ico +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/img/logo.webp +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/js/alerts-ui.js +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/js/app.js +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/js/chart-view.js +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/js/chart.umd.min.js +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/js/dashboard.js +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/js/form.js +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/js/kiosk.js +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/js/kpis.js +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/js/table-render.js +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/static/js/theme.js +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/templates/base.html +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/templates/form.html +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/templates/index.html +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/templates/kiosk.html +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/templates/login.html +0 -0
- {monitor_app-2.3.0 → monitor_app-2.3.1}/monitor_app/web/templates/table.html +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: monitor-app
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.1
|
|
4
4
|
Summary: Drop in a CSV, write one config file, and get a live-updating Web UI + REST API. FastAPI-based data monitoring for shop floors and small teams.
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -25,16 +25,17 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
25
25
|
Classifier: Programming Language :: Python :: 3.13
|
|
26
26
|
Provides-Extra: xlsx
|
|
27
27
|
Requires-Dist: click (>=8.1,<8.2)
|
|
28
|
-
Requires-Dist: fastapi (>=0.
|
|
28
|
+
Requires-Dist: fastapi (>=0.133,<1.0)
|
|
29
29
|
Requires-Dist: jinja2 (>=3.1,<4.0)
|
|
30
30
|
Requires-Dist: openpyxl (>=3.1,<4.0) ; extra == "xlsx"
|
|
31
|
-
Requires-Dist: pg8000 (>=1.
|
|
31
|
+
Requires-Dist: pg8000 (>=1.31.5,<2.0)
|
|
32
32
|
Requires-Dist: pydantic (>=2.7,<3.0)
|
|
33
33
|
Requires-Dist: pydantic-settings (>=2.3,<3.0)
|
|
34
34
|
Requires-Dist: pymysql (>=1.1,<2.0)
|
|
35
|
-
Requires-Dist: python-multipart (>=0.0.
|
|
35
|
+
Requires-Dist: python-multipart (>=0.0.31)
|
|
36
36
|
Requires-Dist: sqlalchemy (>=2.0,<3.0)
|
|
37
37
|
Requires-Dist: sse-starlette (>=2.1,<3.0)
|
|
38
|
+
Requires-Dist: starlette (>=1.3.1,<2.0)
|
|
38
39
|
Requires-Dist: typer (>=0.12,<1.0)
|
|
39
40
|
Requires-Dist: uvicorn[standard] (>=0.30,<1.0)
|
|
40
41
|
Project-URL: Changelog, https://github.com/mikawa-bushi/monitor-app/blob/main/CHANGELOG.md
|
|
@@ -234,6 +235,30 @@ poetry install
|
|
|
234
235
|
poetry run pytest
|
|
235
236
|
```
|
|
236
237
|
|
|
238
|
+
### Pre-push security & quality checks
|
|
239
|
+
|
|
240
|
+
A [pre-commit](https://pre-commit.com/) config scans for **secrets** and enforces
|
|
241
|
+
formatting locally, before code leaves your machine. Enable it once per clone:
|
|
242
|
+
|
|
243
|
+
```sh
|
|
244
|
+
poetry run pre-commit install # installs the commit + pre-push hooks
|
|
245
|
+
poetry run pre-commit run --all-files # optional: run across the repo now
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
- **gitleaks** — blocks hard-coded secrets (PyPI/AWS/GCP tokens, GitHub PATs, private keys)
|
|
249
|
+
- **detect-private-key / check-added-large-files / check-merge-conflict**, plus **black / ruff** (pinned to the CI versions)
|
|
250
|
+
- **check-commit-identity** (pre-push) — rejects commits whose author/committer e-mail is off the allowlist, keeping work/other identities out of history (`scripts/check_commit_identity.py`; extend via the `MONITOR_ALLOWED_EMAILS` env var)
|
|
251
|
+
- **check-ai-traces** (commit + pre-push) — flags traces of AI-agent tools (config dirs, file content, commit metadata) so they don't leak into the repo. Tool patterns are data-driven in `scripts/check_ai_traces.py` (extend the `TOOLS` list or `MONITOR_AI_TRACE_EXTRA`; ignore paths via `.ai-trace-ignore`)
|
|
252
|
+
|
|
253
|
+
Audit the **whole working tree and full git history** on demand:
|
|
254
|
+
|
|
255
|
+
```sh
|
|
256
|
+
python3 scripts/check_ai_traces.py --all # exit 0 = no traces found
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
> ⚠️ Local hooks can be skipped with `git commit/push --no-verify`. For an
|
|
260
|
+
> unbypassable gate, also make `gitleaks` a required GitHub Actions check.
|
|
261
|
+
|
|
237
262
|
Contributions are welcome — see [CONTRIBUTING.md](https://github.com/mikawa-bushi/monitor-app/blob/main/CONTRIBUTING.md).
|
|
238
263
|
|
|
239
264
|
## 📜 License
|
|
@@ -189,6 +189,30 @@ poetry install
|
|
|
189
189
|
poetry run pytest
|
|
190
190
|
```
|
|
191
191
|
|
|
192
|
+
### Pre-push security & quality checks
|
|
193
|
+
|
|
194
|
+
A [pre-commit](https://pre-commit.com/) config scans for **secrets** and enforces
|
|
195
|
+
formatting locally, before code leaves your machine. Enable it once per clone:
|
|
196
|
+
|
|
197
|
+
```sh
|
|
198
|
+
poetry run pre-commit install # installs the commit + pre-push hooks
|
|
199
|
+
poetry run pre-commit run --all-files # optional: run across the repo now
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
- **gitleaks** — blocks hard-coded secrets (PyPI/AWS/GCP tokens, GitHub PATs, private keys)
|
|
203
|
+
- **detect-private-key / check-added-large-files / check-merge-conflict**, plus **black / ruff** (pinned to the CI versions)
|
|
204
|
+
- **check-commit-identity** (pre-push) — rejects commits whose author/committer e-mail is off the allowlist, keeping work/other identities out of history (`scripts/check_commit_identity.py`; extend via the `MONITOR_ALLOWED_EMAILS` env var)
|
|
205
|
+
- **check-ai-traces** (commit + pre-push) — flags traces of AI-agent tools (config dirs, file content, commit metadata) so they don't leak into the repo. Tool patterns are data-driven in `scripts/check_ai_traces.py` (extend the `TOOLS` list or `MONITOR_AI_TRACE_EXTRA`; ignore paths via `.ai-trace-ignore`)
|
|
206
|
+
|
|
207
|
+
Audit the **whole working tree and full git history** on demand:
|
|
208
|
+
|
|
209
|
+
```sh
|
|
210
|
+
python3 scripts/check_ai_traces.py --all # exit 0 = no traces found
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
> ⚠️ Local hooks can be skipped with `git commit/push --no-verify`. For an
|
|
214
|
+
> unbypassable gate, also make `gitleaks` a required GitHub Actions check.
|
|
215
|
+
|
|
192
216
|
Contributions are welcome — see [CONTRIBUTING.md](https://github.com/mikawa-bushi/monitor-app/blob/main/CONTRIBUTING.md).
|
|
193
217
|
|
|
194
218
|
## 📜 License
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "monitor-app"
|
|
3
|
-
version = "2.3.
|
|
3
|
+
version = "2.3.1"
|
|
4
4
|
description = "Drop in a CSV, write one config file, and get a live-updating Web UI + REST API. FastAPI-based data monitoring for shop floors and small teams."
|
|
5
5
|
authors = [{ name = "hardwork9047", email = "tomatosimple1104@gmail.com" }]
|
|
6
6
|
readme = "README.md"
|
|
@@ -25,7 +25,9 @@ classifiers = [
|
|
|
25
25
|
"Programming Language :: Python :: 3.13",
|
|
26
26
|
]
|
|
27
27
|
dependencies = [
|
|
28
|
-
|
|
28
|
+
# fastapi <0.133 は starlette を <1.0 に固定しており、starlette の脆弱性修正
|
|
29
|
+
# (>=1.3.1) と両立しない。0.133 で starlette の上限が外れた
|
|
30
|
+
"fastapi (>=0.133,<1.0)",
|
|
29
31
|
"uvicorn[standard] (>=0.30,<1.0)",
|
|
30
32
|
"pydantic (>=2.7,<3.0)",
|
|
31
33
|
"pydantic-settings (>=2.3,<3.0)",
|
|
@@ -34,10 +36,12 @@ dependencies = [
|
|
|
34
36
|
# typer 0.12 系は click 8.2 の API 変更と非互換
|
|
35
37
|
"click (>=8.1,<8.2)",
|
|
36
38
|
"jinja2 (>=3.1,<4.0)",
|
|
37
|
-
|
|
39
|
+
# CORSMiddleware を直接 import するため明示宣言。複数 CVE のため下限を固定
|
|
40
|
+
"starlette (>=1.3.1,<2.0)",
|
|
41
|
+
"python-multipart (>=0.0.31)",
|
|
38
42
|
"sse-starlette (>=2.1,<3.0)",
|
|
39
43
|
"pymysql (>=1.1,<2.0)", # MySQL 対応
|
|
40
|
-
"pg8000 (>=1.
|
|
44
|
+
"pg8000 (>=1.31.5,<2.0)", # PostgreSQL 対応(CVE-2025-61385 修正)
|
|
41
45
|
]
|
|
42
46
|
|
|
43
47
|
[project.optional-dependencies]
|
|
@@ -61,11 +65,12 @@ include = [
|
|
|
61
65
|
]
|
|
62
66
|
|
|
63
67
|
[tool.poetry.group.dev.dependencies]
|
|
64
|
-
pytest = "^
|
|
68
|
+
pytest = "^9.0.3"
|
|
65
69
|
pytest-cov = "^7.0"
|
|
66
70
|
httpx = "^0.27.0"
|
|
67
|
-
black = "^
|
|
71
|
+
black = "^26.3.1"
|
|
68
72
|
ruff = "^0.15"
|
|
73
|
+
pre-commit = "^4.0"
|
|
69
74
|
|
|
70
75
|
[tool.pytest.ini_options]
|
|
71
76
|
testpaths = ["tests"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|