Harden worker queue and restore drill defaults
This commit is contained in:
@@ -14,6 +14,7 @@ import sys
|
|||||||
import tempfile
|
import tempfile
|
||||||
from collections.abc import Callable, Iterable
|
from collections.abc import Callable, Iterable
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
from datetime import UTC, datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
from typing import Any
|
from typing import Any
|
||||||
@@ -65,6 +66,11 @@ def main() -> int:
|
|||||||
parser.add_argument("--runtime-root", type=Path, help="Directory for temporary drill runtimes. Defaults to a new temp directory.")
|
parser.add_argument("--runtime-root", type=Path, help="Directory for temporary drill runtimes. Defaults to a new temp directory.")
|
||||||
parser.add_argument("--keep-runtime", action="store_true", help="Keep the temporary drill runtime after completion.")
|
parser.add_argument("--keep-runtime", action="store_true", help="Keep the temporary drill runtime after completion.")
|
||||||
parser.add_argument("--format", choices=("json", "text"), default="text", help="Output format.")
|
parser.add_argument("--format", choices=("json", "text"), default="text", help="Output format.")
|
||||||
|
parser.add_argument(
|
||||||
|
"--evidence-path",
|
||||||
|
type=Path,
|
||||||
|
help="Write an atomic machine-readable drill result for the Ops health surface.",
|
||||||
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
runtime_root = args.runtime_root or Path(tempfile.mkdtemp(prefix="govoplan-installer-drill-"))
|
runtime_root = args.runtime_root or Path(tempfile.mkdtemp(prefix="govoplan-installer-drill-"))
|
||||||
@@ -88,7 +94,14 @@ def main() -> int:
|
|||||||
if not args.keep_runtime and args.runtime_root is None:
|
if not args.keep_runtime and args.runtime_root is None:
|
||||||
shutil.rmtree(runtime_root, ignore_errors=True)
|
shutil.rmtree(runtime_root, ignore_errors=True)
|
||||||
|
|
||||||
payload = {"ok": ok, "runtime_root": str(runtime_root), "scenarios": results}
|
payload = {
|
||||||
|
"ok": ok,
|
||||||
|
"completed_at": datetime.now(tz=UTC).isoformat(),
|
||||||
|
"runtime_root": str(runtime_root),
|
||||||
|
"scenarios": results,
|
||||||
|
}
|
||||||
|
if args.evidence_path:
|
||||||
|
_write_evidence(args.evidence_path, payload)
|
||||||
if args.format == "json":
|
if args.format == "json":
|
||||||
print(json.dumps(payload, indent=2, sort_keys=True))
|
print(json.dumps(payload, indent=2, sort_keys=True))
|
||||||
else:
|
else:
|
||||||
@@ -105,6 +118,18 @@ def main() -> int:
|
|||||||
return 0 if ok else 1
|
return 0 if ok else 1
|
||||||
|
|
||||||
|
|
||||||
|
def _write_evidence(path: Path, payload: dict[str, object]) -> None:
|
||||||
|
path = path.expanduser()
|
||||||
|
path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
temporary = path.with_suffix(path.suffix + ".tmp")
|
||||||
|
temporary.write_text(
|
||||||
|
json.dumps(payload, indent=2, sort_keys=True) + "\n",
|
||||||
|
encoding="utf-8",
|
||||||
|
)
|
||||||
|
temporary.chmod(0o600)
|
||||||
|
temporary.replace(path)
|
||||||
|
|
||||||
|
|
||||||
def package_failure(root: Path) -> dict[str, object]:
|
def package_failure(root: Path) -> dict[str, object]:
|
||||||
database_url, database = _sqlite_database(root)
|
database_url, database = _sqlite_database(root)
|
||||||
plan = _saved_install_plan(database, "package-failure-example")
|
plan = _saved_install_plan(database, "package-failure-example")
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ def reconcile_runtime_environment(
|
|||||||
"ENABLED_MODULES": ",".join(spec.enabled_modules),
|
"ENABLED_MODULES": ",".join(spec.enabled_modules),
|
||||||
"CELERY_ENABLED": "true" if redis.mode != "disabled" else "false",
|
"CELERY_ENABLED": "true" if redis.mode != "disabled" else "false",
|
||||||
"CELERY_QUEUES": (
|
"CELERY_QUEUES": (
|
||||||
"send_email,append_sent,notifications,calendar,dataflow,workflow,events,default"
|
"send_email,append_sent,notifications,mail,calendar,dataflow,workflow,postbox,events,idm,default"
|
||||||
),
|
),
|
||||||
"CORS_ORIGINS": spec.public_url,
|
"CORS_ORIGINS": spec.public_url,
|
||||||
"GOVOPLAN_TRUSTED_HOSTS": public.hostname or "",
|
"GOVOPLAN_TRUSTED_HOSTS": public.hostname or "",
|
||||||
@@ -465,8 +465,8 @@ def render_compose(spec: InstallationSpec) -> dict[str, object]:
|
|||||||
"worker",
|
"worker",
|
||||||
"--queues",
|
"--queues",
|
||||||
(
|
(
|
||||||
"send_email,append_sent,notifications,calendar,"
|
"send_email,append_sent,notifications,mail,calendar,"
|
||||||
"dataflow,events,default"
|
"dataflow,workflow,postbox,events,idm,default"
|
||||||
),
|
),
|
||||||
"--loglevel",
|
"--loglevel",
|
||||||
"INFO",
|
"INFO",
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ export DATABASE_URL="${DATABASE_URL:-${GOVOPLAN_PRODUCTION_LIKE_DATABASE_URL:-po
|
|||||||
export GOVOPLAN_DATABASE_URL_PGTOOLS="${GOVOPLAN_DATABASE_URL_PGTOOLS:-${GOVOPLAN_PRODUCTION_LIKE_DATABASE_URL_PGTOOLS:-postgresql://govoplan:govoplan-dev@127.0.0.1:55433/govoplan}}"
|
export GOVOPLAN_DATABASE_URL_PGTOOLS="${GOVOPLAN_DATABASE_URL_PGTOOLS:-${GOVOPLAN_PRODUCTION_LIKE_DATABASE_URL_PGTOOLS:-postgresql://govoplan:govoplan-dev@127.0.0.1:55433/govoplan}}"
|
||||||
export REDIS_URL="${REDIS_URL:-${GOVOPLAN_PRODUCTION_LIKE_REDIS_URL:-redis://127.0.0.1:56379/0}}"
|
export REDIS_URL="${REDIS_URL:-${GOVOPLAN_PRODUCTION_LIKE_REDIS_URL:-redis://127.0.0.1:56379/0}}"
|
||||||
export CELERY_ENABLED="${CELERY_ENABLED:-true}"
|
export CELERY_ENABLED="${CELERY_ENABLED:-true}"
|
||||||
export CELERY_QUEUES="${CELERY_QUEUES:-send_email,append_sent,notifications,calendar,workflow,default}"
|
export CELERY_QUEUES="${CELERY_QUEUES:-send_email,append_sent,notifications,mail,calendar,dataflow,workflow,postbox,events,idm,default}"
|
||||||
export FILE_STORAGE_BACKEND="${FILE_STORAGE_BACKEND:-local}"
|
export FILE_STORAGE_BACKEND="${FILE_STORAGE_BACKEND:-local}"
|
||||||
export FILE_STORAGE_LOCAL_ROOT="${FILE_STORAGE_LOCAL_ROOT:-$META_ROOT/runtime/production-like/files}"
|
export FILE_STORAGE_LOCAL_ROOT="${FILE_STORAGE_LOCAL_ROOT:-$META_ROOT/runtime/production-like/files}"
|
||||||
export DEV_AUTO_MIGRATE_ENABLED="${DEV_AUTO_MIGRATE_ENABLED:-false}"
|
export DEV_AUTO_MIGRATE_ENABLED="${DEV_AUTO_MIGRATE_ENABLED:-false}"
|
||||||
|
|||||||
Reference in New Issue
Block a user