cancan-microstack 0.0.1__py3-none-any.whl
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.
- cancan_microstack/__init__.py +14 -0
- cancan_microstack/__version__.py +10 -0
- cancan_microstack/assets/__init__.py +6 -0
- cancan_microstack/assets/builds/caddy/Caddyfile +187 -0
- cancan_microstack/assets/builds/caddy/DEPLOYMENT.md +303 -0
- cancan_microstack/assets/builds/caddy/Dockerfile +46 -0
- cancan_microstack/assets/builds/caddy/README.md +343 -0
- cancan_microstack/assets/builds/caddy/geoip/README.md +5 -0
- cancan_microstack/assets/builds/caddy/start.sh +78 -0
- cancan_microstack/assets/builds/caddy/waf/coraza.conf +179 -0
- cancan_microstack/assets/builds/service/Dockerfile +59 -0
- cancan_microstack/assets/builds/service/README.md +13 -0
- cancan_microstack/assets/ddl/create_db.sql +22 -0
- cancan_microstack/assets/ddl/infra/execution_log_tbl.sql +46 -0
- cancan_microstack/assets/ddl/infra/node_instance_tbl.sql +56 -0
- cancan_microstack/assets/ddl/infra/service_action_log_tbl.sql +36 -0
- cancan_microstack/assets/ddl/infra/service_config_tbl.sql +26 -0
- cancan_microstack/assets/ddl/infra/service_info_tbl.sql +45 -0
- cancan_microstack/assets/ddl/infra/service_instance_tbl.sql +54 -0
- cancan_microstack/assets/ddl/infra/service_operation_tbl.sql +47 -0
- cancan_microstack/assets/ddl/infra/workflow_definition_tbl.sql +60 -0
- cancan_microstack/assets/ddl/infra/workflow_definition_version_tbl.sql +35 -0
- cancan_microstack/assets/ddl/infra/workflow_engine_alert_tbl.sql +34 -0
- cancan_microstack/assets/ddl/infra/workflow_run_tbl.sql +52 -0
- cancan_microstack/assets/ddl/ops/admin_user_tbl.sql +34 -0
- cancan_microstack/assets/ddl/ops/caddy_access_log_tbl.sql +91 -0
- cancan_microstack/assets/ddl/ops/caddy_certificate_tbl.sql +59 -0
- cancan_microstack/assets/ddl/ops/caddy_rate_limit_tbl.sql +64 -0
- cancan_microstack/assets/ddl/ops/caddy_route_tbl.sql +63 -0
- cancan_microstack/assets/ddl/ops/caddy_stats_tbl.sql +77 -0
- cancan_microstack/assets/ddl/trigger.sql +21 -0
- cancan_microstack/assets/docker/docker-compose.infra.yml +401 -0
- cancan_microstack/assets/scripts/README.md +195 -0
- cancan_microstack/assets/scripts/docker/build_images.sh +44 -0
- cancan_microstack/assets/scripts/docker/force_rebuild_images.sh +38 -0
- cancan_microstack/assets/scripts/docker/rebuild_all.sh +34 -0
- cancan_microstack/assets/scripts/docker/rebuild_compose.sh +61 -0
- cancan_microstack/assets/scripts/docker/restart.sh +35 -0
- cancan_microstack/assets/scripts/docker/restart_compose.sh +35 -0
- cancan_microstack/assets/scripts/docker/start.sh +78 -0
- cancan_microstack/assets/scripts/docker/start_all.sh +46 -0
- cancan_microstack/assets/scripts/docker/start_compose.sh +66 -0
- cancan_microstack/assets/scripts/docker/stop.sh +67 -0
- cancan_microstack/assets/scripts/docker/stop_all.sh +38 -0
- cancan_microstack/assets/scripts/docker/stop_compose.sh +38 -0
- cancan_microstack/assets/scripts/podman/build_images_podman.sh +59 -0
- cancan_microstack/assets/scripts/podman/cleanup_podman.sh +25 -0
- cancan_microstack/assets/scripts/podman/force_rebuild_images_podman.sh +56 -0
- cancan_microstack/assets/scripts/podman/rebuild_all_podman.sh +37 -0
- cancan_microstack/assets/scripts/podman/rebuild_compose_podman.sh +60 -0
- cancan_microstack/assets/scripts/podman/restart_compose_podman.sh +73 -0
- cancan_microstack/assets/scripts/podman/start_all_podman.sh +66 -0
- cancan_microstack/assets/scripts/podman/start_compose_podman.sh +80 -0
- cancan_microstack/assets/scripts/podman/start_podman.sh +91 -0
- cancan_microstack/assets/scripts/podman/stop.sh +73 -0
- cancan_microstack/assets/scripts/podman/stop_all_podman.sh +34 -0
- cancan_microstack/assets/scripts/podman/stop_compose_podman.sh +58 -0
- cancan_microstack/assets/scripts/start_controllersrv.sh +9 -0
- cancan_microstack/assets/scripts/utils/check_all_db_tables.sh +104 -0
- cancan_microstack/assets/scripts/utils/check_env.sh +177 -0
- cancan_microstack/assets/scripts/utils/check_service_management_deployment.sh +225 -0
- cancan_microstack/assets/scripts/utils/deploy_service_management.sh +176 -0
- cancan_microstack/assets/scripts/utils/force_reload_infrasrv.sh +52 -0
- cancan_microstack/assets/scripts/utils/monitor_service_management.sh +187 -0
- cancan_microstack/assets/scripts/utils/reset_postgres_volume.sh +68 -0
- cancan_microstack/assets/scripts/utils/test_async_operations.sh +141 -0
- cancan_microstack/assets/scripts/utils/verify_real_operations.sh +76 -0
- cancan_microstack/assets/service/Dockerfile +65 -0
- cancan_microstack/assets/www/adminops/assets/AppEmpty.vue_vue_type_script_setup_true_lang-BOKUurnM.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ConfigManage-DKV5YOUz.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ConfigManage-Y5bhy7wG.css +1 -0
- cancan_microstack/assets/www/adminops/assets/ConsoleManage-8ljYvCW2.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ConsoleManage-BWpyqbuQ.css +1 -0
- cancan_microstack/assets/www/adminops/assets/DashboardNew-B9Nf1OPl.js +1 -0
- cancan_microstack/assets/www/adminops/assets/DashboardNew-DYWZKQ1V.css +1 -0
- cancan_microstack/assets/www/adminops/assets/LogSearch-CA0Jhe78.js +1 -0
- cancan_microstack/assets/www/adminops/assets/LogSearch-CCZfTNPF.css +1 -0
- cancan_microstack/assets/www/adminops/assets/LoginView-BId3kP3M.css +1 -0
- cancan_microstack/assets/www/adminops/assets/LoginView-BQZTV_Qy.js +1 -0
- cancan_microstack/assets/www/adminops/assets/OperationProgressDialog-BdEYwqFq.js +1 -0
- cancan_microstack/assets/www/adminops/assets/OperationProgressDialog-D-pASR8G.css +1 -0
- cancan_microstack/assets/www/adminops/assets/PageContainer-Byss-yUC.js +1 -0
- cancan_microstack/assets/www/adminops/assets/PageContainer-C3nSZwM7.css +1 -0
- cancan_microstack/assets/www/adminops/assets/RateLimitManage-BDI8jLpC.css +1 -0
- cancan_microstack/assets/www/adminops/assets/RateLimitManage-DJY4NiF-.js +1 -0
- cancan_microstack/assets/www/adminops/assets/RouteManage-DaUQ4QLw.css +1 -0
- cancan_microstack/assets/www/adminops/assets/RouteManage-w9XCU0UA.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceCard-BFzHe6Tw.css +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceCard-BJUhWnA-.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceDetail-Cw24WuKp.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceDetail-Yum47zdB.css +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceList-C7ryvbhE.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceList-Cgd01fUx.css +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceLogs-COpG9H0h.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceLogs-H_Alq0cf.css +1 -0
- cancan_microstack/assets/www/adminops/assets/StatsOverview-D0TwMQkA.js +39 -0
- cancan_microstack/assets/www/adminops/assets/StatsOverview-lqAN6pqM.css +1 -0
- cancan_microstack/assets/www/adminops/assets/TotpBindView-CWlAmzFt.js +1 -0
- cancan_microstack/assets/www/adminops/assets/TotpBindView-HoQC1lhx.css +1 -0
- cancan_microstack/assets/www/adminops/assets/TotpVerifyView-BHN1VtX1.css +1 -0
- cancan_microstack/assets/www/adminops/assets/TotpVerifyView-D3w_lZk8.js +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowCenter-DU_mpIA0.css +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowCenter-i50rZyxN.js +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowDesigner-CnHokPL9.js +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowDesigner-DaZaZpLd.css +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowRuns-B09hK48c.js +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowRuns-wGutKIIU.css +1 -0
- cancan_microstack/assets/www/adminops/assets/caddy-nnCKf8fG.js +1 -0
- cancan_microstack/assets/www/adminops/assets/format-Cuzxgna9.js +1 -0
- cancan_microstack/assets/www/adminops/assets/index-CiFlm8oc.js +64 -0
- cancan_microstack/assets/www/adminops/assets/index-UW0T1Dkc.css +1 -0
- cancan_microstack/assets/www/adminops/assets/service-BYlgGPs_.js +1 -0
- cancan_microstack/assets/www/adminops/assets/service-operation-6GzLw2Z1.js +1 -0
- cancan_microstack/assets/www/adminops/assets/style-CcIXnQ5y.css +1 -0
- cancan_microstack/assets/www/adminops/assets/style-lRnStdGu.js +39 -0
- cancan_microstack/assets/www/adminops/assets/useDebounce-BRlqfXqf.js +1 -0
- cancan_microstack/assets/www/adminops/assets/workflow-CUXs39Ac.js +1 -0
- cancan_microstack/assets/www/adminops/index.html +16 -0
- cancan_microstack/assets/www/adminops/vite.svg +1 -0
- cancan_microstack/cli/__init__.py +14 -0
- cancan_microstack/cli/__main__.py +9 -0
- cancan_microstack/cli/main.py +552 -0
- cancan_microstack/cmd/__init__.py +54 -0
- cancan_microstack/cmd/cancan/__init__.py +12 -0
- cancan_microstack/cmd/cancan/run.py +395 -0
- cancan_microstack/cmd/controllersrv/__init__.py +0 -0
- cancan_microstack/cmd/controllersrv/run.py +131 -0
- cancan_microstack/cmd/infrasrv/__init__.py +5 -0
- cancan_microstack/cmd/infrasrv/run.py +100 -0
- cancan_microstack/cmd/opsbffsrv/__init__.py +5 -0
- cancan_microstack/cmd/opsbffsrv/run.py +96 -0
- cancan_microstack/core/__init__.py +5 -0
- cancan_microstack/core/assets.py +123 -0
- cancan_microstack/core/compose_builder.py +102 -0
- cancan_microstack/core/doctor.py +152 -0
- cancan_microstack/core/microstack.py +71 -0
- cancan_microstack/core/runner.py +56 -0
- cancan_microstack/core/stack_manager.py +186 -0
- cancan_microstack/public/__init__.py +7 -0
- cancan_microstack/public/api/__init__.py +1 -0
- cancan_microstack/public/api/controllersrv_client.py +277 -0
- cancan_microstack/public/api/infrasrv_client.py +404 -0
- cancan_microstack/public/const/__init__.py +1 -0
- cancan_microstack/public/const/action_consts.py +18 -0
- cancan_microstack/public/const/app_consts.py +42 -0
- cancan_microstack/public/const/caddy_consts.py +22 -0
- cancan_microstack/public/const/controllersrv_consts.py +163 -0
- cancan_microstack/public/const/docker_consts.py +15 -0
- cancan_microstack/public/const/error.py +56 -0
- cancan_microstack/public/const/health_consts.py +52 -0
- cancan_microstack/public/const/hook_enums.py +56 -0
- cancan_microstack/public/const/logging_enums.py +13 -0
- cancan_microstack/public/const/metrics_enums.py +36 -0
- cancan_microstack/public/const/monitor_enums.py +26 -0
- cancan_microstack/public/const/operation_consts.py +53 -0
- cancan_microstack/public/const/opsbffsrv_error.py +92 -0
- cancan_microstack/public/const/overrides_consts.py +13 -0
- cancan_microstack/public/const/redis.py +17 -0
- cancan_microstack/public/const/service_consts.py +15 -0
- cancan_microstack/public/const/workflow_consts.py +65 -0
- cancan_microstack/public/error.py +41 -0
- cancan_microstack/public/logging/__init__.py +0 -0
- cancan_microstack/public/logging/initializer.py +109 -0
- cancan_microstack/public/logging/mq_handler.py +279 -0
- cancan_microstack/public/schemas/__init__.py +1 -0
- cancan_microstack/public/schemas/caddy/__init__.py +381 -0
- cancan_microstack/public/schemas/caddy/analysis.py +90 -0
- cancan_microstack/public/schemas/caddy/route.py +18 -0
- cancan_microstack/public/schemas/common.py +79 -0
- cancan_microstack/public/schemas/controllersrv/__init__.py +3 -0
- cancan_microstack/public/schemas/controllersrv/async_requests.py +30 -0
- cancan_microstack/public/schemas/controllersrv/compose_models.py +47 -0
- cancan_microstack/public/schemas/controllersrv/const.py +24 -0
- cancan_microstack/public/schemas/controllersrv/docker_models.py +45 -0
- cancan_microstack/public/schemas/controllersrv/docker_responses.py +104 -0
- cancan_microstack/public/schemas/controllersrv/requests.py +54 -0
- cancan_microstack/public/schemas/controllersrv/responses.py +124 -0
- cancan_microstack/public/schemas/controllersrv/task_models.py +102 -0
- cancan_microstack/public/schemas/controllersrv/validation.py +23 -0
- cancan_microstack/public/schemas/hook_metrics.py +124 -0
- cancan_microstack/public/schemas/hooks.py +39 -0
- cancan_microstack/public/schemas/infra/__init__.py +0 -0
- cancan_microstack/public/schemas/infra/cleanup.py +25 -0
- cancan_microstack/public/schemas/infra/container.py +74 -0
- cancan_microstack/public/schemas/infra/enums.py +135 -0
- cancan_microstack/public/schemas/infra/health_check.py +42 -0
- cancan_microstack/public/schemas/infra/hook_log.py +42 -0
- cancan_microstack/public/schemas/infra/operation.py +90 -0
- cancan_microstack/public/schemas/infra/overview.py +25 -0
- cancan_microstack/public/schemas/infra/push.py +33 -0
- cancan_microstack/public/schemas/infra/service_action_log.py +47 -0
- cancan_microstack/public/schemas/infra/service_config.py +10 -0
- cancan_microstack/public/schemas/infra/service_info.py +69 -0
- cancan_microstack/public/schemas/infra/service_instance.py +93 -0
- cancan_microstack/public/schemas/infra/service_management.py +152 -0
- cancan_microstack/public/schemas/infra/service_operation.py +79 -0
- cancan_microstack/public/schemas/infra/service_registry.py +158 -0
- cancan_microstack/public/schemas/infra/status_types.py +19 -0
- cancan_microstack/public/schemas/infra/workflow.py +566 -0
- cancan_microstack/public/schemas/logging/__init__.py +1 -0
- cancan_microstack/public/schemas/logging/log_event.py +121 -0
- cancan_microstack/public/schemas/opsbffsrv/__init__.py +1 -0
- cancan_microstack/public/schemas/opsbffsrv/async_ops.py +17 -0
- cancan_microstack/public/schemas/opsbffsrv/db_admin.py +147 -0
- cancan_microstack/public/schemas/opsbffsrv/db_init.py +48 -0
- cancan_microstack/public/schemas/opsbffsrv/service_config.py +89 -0
- cancan_microstack/public/schemas/opsbffsrv/service_logs.py +54 -0
- cancan_microstack/public/schemas/service_operation.py +24 -0
- cancan_microstack/public/schemas/service_registry.py +40 -0
- cancan_microstack/public/types/__init__.py +7 -0
- cancan_microstack/public/web/__init__.py +0 -0
- cancan_microstack/public/web/config_value.py +105 -0
- cancan_microstack/public/web/server.py +385 -0
- cancan_microstack/py.typed +0 -0
- cancan_microstack/runtime/__init__.py +0 -0
- cancan_microstack/runtime/compose_cmd.py +228 -0
- cancan_microstack/runtime/host_daemon.py +318 -0
- cancan_microstack/runtime/overrides.py +103 -0
- cancan_microstack/runtime/resources.py +25 -0
- cancan_microstack/runtime/workspace.py +94 -0
- cancan_microstack/services/__init__.py +0 -0
- cancan_microstack/services/controllersrv/__init__.py +8 -0
- cancan_microstack/services/controllersrv/application/__init__.py +0 -0
- cancan_microstack/services/controllersrv/application/docker_compose_app.py +427 -0
- cancan_microstack/services/controllersrv/conf/__init__.py +0 -0
- cancan_microstack/services/controllersrv/conf/config.py +76 -0
- cancan_microstack/services/controllersrv/conf/settings.py +54 -0
- cancan_microstack/services/controllersrv/domain/__init__.py +0 -0
- cancan_microstack/services/controllersrv/domain/docker_compose/__init__.py +0 -0
- cancan_microstack/services/controllersrv/domain/docker_compose/docker_compose_domain.py +278 -0
- cancan_microstack/services/controllersrv/domain/service_validator.py +327 -0
- cancan_microstack/services/controllersrv/domain/task/__init__.py +17 -0
- cancan_microstack/services/controllersrv/domain/task/task_queue.py +286 -0
- cancan_microstack/services/controllersrv/domain/task/task_worker.py +495 -0
- cancan_microstack/services/controllersrv/infrastructure/__init__.py +0 -0
- cancan_microstack/services/controllersrv/interface/__init__.py +0 -0
- cancan_microstack/services/controllersrv/interface/api/__init__.py +0 -0
- cancan_microstack/services/controllersrv/interface/api/docker_control_api.py +470 -0
- cancan_microstack/services/controllersrv/router.py +132 -0
- cancan_microstack/services/infrasrv/__init__.py +4 -0
- cancan_microstack/services/infrasrv/application/__init__.py +0 -0
- cancan_microstack/services/infrasrv/application/health_check_app.py +24 -0
- cancan_microstack/services/infrasrv/application/logging/__init__.py +1 -0
- cancan_microstack/services/infrasrv/application/logging/log_ingestion_service.py +183 -0
- cancan_microstack/services/infrasrv/application/service_config.py +22 -0
- cancan_microstack/services/infrasrv/application/service_logs_app.py +53 -0
- cancan_microstack/services/infrasrv/application/service_management_app.py +689 -0
- cancan_microstack/services/infrasrv/application/service_operation_tracker.py +251 -0
- cancan_microstack/services/infrasrv/application/service_registry.py +53 -0
- cancan_microstack/services/infrasrv/application/workflow/__init__.py +0 -0
- cancan_microstack/services/infrasrv/application/workflow/workflow_app.py +991 -0
- cancan_microstack/services/infrasrv/application/workflow/workflow_queue.py +302 -0
- cancan_microstack/services/infrasrv/application/workflow/workflow_tasks.py +46 -0
- cancan_microstack/services/infrasrv/application/workflow/workflow_worker_runtime.py +122 -0
- cancan_microstack/services/infrasrv/conf/__init__.py +0 -0
- cancan_microstack/services/infrasrv/conf/config.py +98 -0
- cancan_microstack/services/infrasrv/domain/__init__.py +0 -0
- cancan_microstack/services/infrasrv/domain/health_check/__init__.py +3 -0
- cancan_microstack/services/infrasrv/domain/health_check/health_check_domain.py +576 -0
- cancan_microstack/services/infrasrv/domain/hooks/__init__.py +19 -0
- cancan_microstack/services/infrasrv/domain/hooks/builtin_hooks.py +308 -0
- cancan_microstack/services/infrasrv/domain/hooks/hook_registry.py +43 -0
- cancan_microstack/services/infrasrv/domain/hooks/hooks_log_utils.py +275 -0
- cancan_microstack/services/infrasrv/domain/hooks/init.py +17 -0
- cancan_microstack/services/infrasrv/domain/hooks/metrics.py +205 -0
- cancan_microstack/services/infrasrv/domain/hooks/pre_registration_hooks.py +490 -0
- cancan_microstack/services/infrasrv/domain/registry/__init__.py +0 -0
- cancan_microstack/services/infrasrv/domain/registry/service_registry.py +509 -0
- cancan_microstack/services/infrasrv/domain/service_config/__init__.py +0 -0
- cancan_microstack/services/infrasrv/domain/service_config/service_config.py +50 -0
- cancan_microstack/services/infrasrv/domain/service_logs/__init__.py +0 -0
- cancan_microstack/services/infrasrv/domain/service_logs/service_logs_domain.py +51 -0
- cancan_microstack/services/infrasrv/domain/workflow/__init__.py +4 -0
- cancan_microstack/services/infrasrv/domain/workflow/engine.py +159 -0
- cancan_microstack/services/infrasrv/domain/workflow/node_handlers.py +509 -0
- cancan_microstack/services/infrasrv/domain/workflow/workflow_domain.py +164 -0
- cancan_microstack/services/infrasrv/infrastructure/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/api/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/api/controllersrv_api.py +165 -0
- cancan_microstack/services/infrasrv/infrastructure/cache/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/cache/service_registry_cache.py +174 -0
- cancan_microstack/services/infrasrv/infrastructure/db/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/execution_log_tbl.py +53 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/node_instance_tbl.py +55 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/service_config_tbl.py +30 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/service_info_tbl.py +59 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/service_instance_tbl.py +88 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/service_operation_tbl.py +73 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_definition_tbl.py +55 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_definition_version_tbl.py +43 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_engine_alert_tbl.py +57 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_run_tbl.py +56 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_action_log_op.py +239 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_config.py +80 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_config_manager.py +198 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_info_op.py +297 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_instance_op.py +688 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_operation_op.py +387 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_registry.py +124 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/workflow_op.py +804 -0
- cancan_microstack/services/infrasrv/infrastructure/ddl_manager.py +31 -0
- cancan_microstack/services/infrasrv/infrastructure/mongo/__init__.py +1 -0
- cancan_microstack/services/infrasrv/infrastructure/mongo/log_repository.py +129 -0
- cancan_microstack/services/infrasrv/interface/__init__.py +0 -0
- cancan_microstack/services/infrasrv/interface/api/__init__.py +0 -0
- cancan_microstack/services/infrasrv/interface/api/health_check_api.py +29 -0
- cancan_microstack/services/infrasrv/interface/api/hooks.py +284 -0
- cancan_microstack/services/infrasrv/interface/api/internal.py +49 -0
- cancan_microstack/services/infrasrv/interface/api/internal_instance_api.py +265 -0
- cancan_microstack/services/infrasrv/interface/api/internal_operation_api.py +206 -0
- cancan_microstack/services/infrasrv/interface/api/service_config.py +50 -0
- cancan_microstack/services/infrasrv/interface/api/service_logs_api.py +49 -0
- cancan_microstack/services/infrasrv/interface/api/service_management_api.py +113 -0
- cancan_microstack/services/infrasrv/interface/api/service_registry.py +117 -0
- cancan_microstack/services/infrasrv/interface/api/workflow_api.py +303 -0
- cancan_microstack/services/infrasrv/interface/schedule/__init__.py +0 -0
- cancan_microstack/services/infrasrv/interface/schedule/cleanup.py +13 -0
- cancan_microstack/services/infrasrv/interface/schedule/health_check.py +27 -0
- cancan_microstack/services/infrasrv/interface/schedule/log_cleanup.py +26 -0
- cancan_microstack/services/infrasrv/interface/schedule/operation_tracker.py +25 -0
- cancan_microstack/services/infrasrv/interface/schedule/scheduler.py +39 -0
- cancan_microstack/services/infrasrv/interface/schedule/workflow_scheduler.py +115 -0
- cancan_microstack/services/infrasrv/router.py +341 -0
- cancan_microstack/services/opsbffsrv/__init__.py +4 -0
- cancan_microstack/services/opsbffsrv/application/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/application/async_operation_app.py +150 -0
- cancan_microstack/services/opsbffsrv/application/auth_app.py +285 -0
- cancan_microstack/services/opsbffsrv/application/caddy/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/application/caddy/access_log_analysis_app.py +344 -0
- cancan_microstack/services/opsbffsrv/application/caddy/access_log_ingestion_service.py +169 -0
- cancan_microstack/services/opsbffsrv/application/caddy/certificate_management_app.py +355 -0
- cancan_microstack/services/opsbffsrv/application/caddy/rate_limit_management_app.py +496 -0
- cancan_microstack/services/opsbffsrv/application/caddy/route_management_app.py +401 -0
- cancan_microstack/services/opsbffsrv/application/caddy/stats_aggregation_app.py +364 -0
- cancan_microstack/services/opsbffsrv/application/db_admin_app.py +103 -0
- cancan_microstack/services/opsbffsrv/application/db_init_app.py +283 -0
- cancan_microstack/services/opsbffsrv/application/logging/__init__.py +1 -0
- cancan_microstack/services/opsbffsrv/application/logging/log_query_app.py +28 -0
- cancan_microstack/services/opsbffsrv/application/service_config.py +158 -0
- cancan_microstack/services/opsbffsrv/application/service_logs_app.py +74 -0
- cancan_microstack/services/opsbffsrv/application/service_registry.py +36 -0
- cancan_microstack/services/opsbffsrv/application/workflow_ops_app.py +730 -0
- cancan_microstack/services/opsbffsrv/conf/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/conf/config.py +224 -0
- cancan_microstack/services/opsbffsrv/domain/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/auth/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/auth/admin_init.py +38 -0
- cancan_microstack/services/opsbffsrv/domain/auth/auth_domain.py +108 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/access_log_analysis.py +358 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/certificate_management.py +325 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/default_routes.py +53 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/rate_limit_management.py +308 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/route_management.py +279 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/stats_aggregation.py +654 -0
- cancan_microstack/services/opsbffsrv/domain/db_admin/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/db_admin/db_admin_domain.py +118 -0
- cancan_microstack/services/opsbffsrv/domain/db_init/__init__.py +3 -0
- cancan_microstack/services/opsbffsrv/domain/db_init/db_init_domain.py +358 -0
- cancan_microstack/services/opsbffsrv/domain/logging/__init__.py +1 -0
- cancan_microstack/services/opsbffsrv/domain/logging/log_query_domain.py +99 -0
- cancan_microstack/services/opsbffsrv/domain/service_config/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/service_config/service_config.py +81 -0
- cancan_microstack/services/opsbffsrv/domain/service_registry/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/service_registry/service_registry.py +292 -0
- cancan_microstack/services/opsbffsrv/infrastructure/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/api/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/api/infrasrv_api.py +242 -0
- cancan_microstack/services/opsbffsrv/infrastructure/auth/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/auth/captcha_service.py +67 -0
- cancan_microstack/services/opsbffsrv/infrastructure/auth/password_service.py +12 -0
- cancan_microstack/services/opsbffsrv/infrastructure/auth/redis_store.py +131 -0
- cancan_microstack/services/opsbffsrv/infrastructure/auth/totp_service.py +59 -0
- cancan_microstack/services/opsbffsrv/infrastructure/caddy/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/caddy/access_log_parser.py +307 -0
- cancan_microstack/services/opsbffsrv/infrastructure/caddy/admin_api_client.py +678 -0
- cancan_microstack/services/opsbffsrv/infrastructure/caddy/ip_geo_locator.py +176 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/admin_user_tbl.py +33 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_access_log_tbl.py +90 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_certificate_tbl.py +65 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_rate_limit_tbl.py +69 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_route_tbl.py +66 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_stats_tbl.py +78 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_config_tbl.py +30 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_info_tbl.py +51 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_instance_tbl.py +68 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/admin_user_operate.py +59 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_access_log.py +531 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_certificate.py +451 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_rate_limit.py +360 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_route.py +271 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_stats.py +343 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_action_log_op.py +57 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_config.py +86 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_info_op.py +79 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_instance.py +58 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_registry.py +138 -0
- cancan_microstack/services/opsbffsrv/infrastructure/ddl_manager.py +31 -0
- cancan_microstack/services/opsbffsrv/infrastructure/mongo/__init__.py +1 -0
- cancan_microstack/services/opsbffsrv/infrastructure/mongo/log_query_repository.py +87 -0
- cancan_microstack/services/opsbffsrv/interface/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/interface/api/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/interface/api/async_operation_api.py +137 -0
- cancan_microstack/services/opsbffsrv/interface/api/auth_api.py +113 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/__init__.py +3 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/access_log_api.py +174 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/certificate_api.py +235 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/rate_limit_api.py +302 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/route_api.py +250 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/stats_api.py +243 -0
- cancan_microstack/services/opsbffsrv/interface/api/db_admin_api.py +62 -0
- cancan_microstack/services/opsbffsrv/interface/api/db_init_api.py +109 -0
- cancan_microstack/services/opsbffsrv/interface/api/instance_management_api.py +165 -0
- cancan_microstack/services/opsbffsrv/interface/api/log_query_api.py +41 -0
- cancan_microstack/services/opsbffsrv/interface/api/mongo_express_proxy_api.py +181 -0
- cancan_microstack/services/opsbffsrv/interface/api/pgweb_proxy_api.py +154 -0
- cancan_microstack/services/opsbffsrv/interface/api/rabbitmq_mgmt_proxy_api.py +518 -0
- cancan_microstack/services/opsbffsrv/interface/api/redis_commander_proxy_api.py +133 -0
- cancan_microstack/services/opsbffsrv/interface/api/service_config.py +146 -0
- cancan_microstack/services/opsbffsrv/interface/api/service_logs_api.py +81 -0
- cancan_microstack/services/opsbffsrv/interface/api/service_registry.py +66 -0
- cancan_microstack/services/opsbffsrv/interface/api/workflow_ops_api.py +413 -0
- cancan_microstack/services/opsbffsrv/interface/middleware/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/interface/middleware/auth_middleware.py +52 -0
- cancan_microstack/services/opsbffsrv/router.py +901 -0
- cancan_microstack/utils/__init__.py +1 -0
- cancan_microstack/utils/container_env.py +218 -0
- cancan_microstack-0.0.1.dist-info/METADATA +155 -0
- cancan_microstack-0.0.1.dist-info/RECORD +440 -0
- cancan_microstack-0.0.1.dist-info/WHEEL +5 -0
- cancan_microstack-0.0.1.dist-info/entry_points.txt +2 -0
- cancan_microstack-0.0.1.dist-info/licenses/LICENSE +21 -0
- cancan_microstack-0.0.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
List,
|
|
3
|
+
Mapping,
|
|
4
|
+
Optional,
|
|
5
|
+
)
|
|
6
|
+
from typing_extensions import Literal
|
|
7
|
+
|
|
8
|
+
from pydantic import (
|
|
9
|
+
BaseModel,
|
|
10
|
+
Field,
|
|
11
|
+
ConfigDict,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class SchemaApplyRequest(BaseModel):
|
|
16
|
+
"""Request payload for ensuring canonical schema state."""
|
|
17
|
+
|
|
18
|
+
databases: Optional[List[str]] = Field(default=None, description="Target database names; defaults to all")
|
|
19
|
+
tables: Optional[List[str]] = Field(default=None, description="Optional subset of tables to process")
|
|
20
|
+
dry_run: bool = Field(default=False, description="When true, report drift without applying changes")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class SchemaRebuildDatabaseRequest(BaseModel):
|
|
24
|
+
"""Request payload for rebuilding an entire database."""
|
|
25
|
+
|
|
26
|
+
database: str = Field(..., description="Database name to rebuild")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class SchemaRebuildTablesRequest(BaseModel):
|
|
30
|
+
"""Request payload for rebuilding specific tables."""
|
|
31
|
+
|
|
32
|
+
database: str = Field(..., description="Database containing the tables")
|
|
33
|
+
tables: List[str] = Field(..., description="One or more table names to rebuild")
|
|
34
|
+
cascade: bool = Field(default=True, description="Cascade when dropping tables (drops dependent objects)")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class SchemaDiffRequest(BaseModel):
|
|
38
|
+
"""Request payload for schema drift inspection."""
|
|
39
|
+
|
|
40
|
+
databases: Optional[List[str]] = Field(default=None, description="Databases to inspect")
|
|
41
|
+
tables: Optional[List[str]] = Field(default=None, description="Optional subset of tables to inspect")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class SchemaOperationSummary(BaseModel):
|
|
45
|
+
"""模式操作概要信息 / Summary produced by schema operations."""
|
|
46
|
+
|
|
47
|
+
databases: int = Field(..., description="处理的数据库数量 / Number of databases processed")
|
|
48
|
+
created_tables: int = Field(..., description="新建或重建的数据表数量 / Count of created or recreated tables")
|
|
49
|
+
skipped_tables: int = Field(..., description="跳过的数据表数量 / Count of skipped tables")
|
|
50
|
+
tables_with_drift: int = Field(..., description="存在偏差的数据表数量 / Count of tables with schema drift")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class SchemaColumnMismatch(BaseModel):
|
|
54
|
+
"""数据列差异细节 / Detailed description of a column mismatch."""
|
|
55
|
+
|
|
56
|
+
model_config = ConfigDict(extra="ignore")
|
|
57
|
+
|
|
58
|
+
column: str = Field(..., description="数据列名称 / Column name")
|
|
59
|
+
expected_type: Optional[str] = Field(default=None, description="预期数据类型 / Expected data type")
|
|
60
|
+
actual_type: Optional[str] = Field(default=None, description="实际数据类型 / Actual data type")
|
|
61
|
+
expected_not_null: Optional[bool] = Field(default=None, description="预期非空约束 / Expected NOT NULL constraint")
|
|
62
|
+
actual_not_null: Optional[bool] = Field(default=None, description="实际非空约束 / Actual NOT NULL constraint")
|
|
63
|
+
expected_default: Optional[str] = Field(default=None, description="预期默认值 / Expected default value")
|
|
64
|
+
actual_default: Optional[str] = Field(default=None, description="实际默认值 / Actual default value")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class SchemaColumnDiff(BaseModel):
|
|
68
|
+
"""数据列差异汇总 / Aggregated column difference summary."""
|
|
69
|
+
|
|
70
|
+
missing_columns: List[str] = Field(default_factory=list, description="缺失列列表 / Missing column names")
|
|
71
|
+
extra_columns: List[str] = Field(default_factory=list, description="多余列列表 / Extra column names")
|
|
72
|
+
mismatched_columns: List[SchemaColumnMismatch] = Field(default_factory=list,
|
|
73
|
+
description="列差异详情 / Column mismatch details")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class SchemaTableDiff(BaseModel):
|
|
77
|
+
"""数据表差异信息 / Table-level diff information."""
|
|
78
|
+
|
|
79
|
+
table_exists: bool = Field(..., description="数据表是否存在 / Whether the table exists")
|
|
80
|
+
comment_hash_matches: bool = Field(..., description="注释 Hash 是否匹配 / Whether the comment hash matches")
|
|
81
|
+
column_diff: SchemaColumnDiff = Field(..., description="列差异信息 / Column difference information")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class SchemaStatementReport(BaseModel):
|
|
85
|
+
"""单条 SQL 语句执行结果 / Execution report for a single SQL statement."""
|
|
86
|
+
|
|
87
|
+
kind: str = Field(..., description="语句类型 / Statement kind")
|
|
88
|
+
action: str = Field(..., description="执行动作 / Execution action")
|
|
89
|
+
name: Optional[str] = Field(default=None, description="对象名称 / Optional object name")
|
|
90
|
+
message: Optional[str] = Field(default=None, description="附加信息 / Optional execution message")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class SchemaTableResult(BaseModel):
|
|
94
|
+
"""数据表执行结果 / Result of applying canonical DDL to a table."""
|
|
95
|
+
|
|
96
|
+
table: str = Field(..., description="数据表名称 / Table name")
|
|
97
|
+
ddl_path: str = Field(..., description="DDL 文件路径 / DDL file path")
|
|
98
|
+
hash: str = Field(..., description="DDL 文件 Hash / Hash of the DDL file")
|
|
99
|
+
status: str = Field(..., description="执行状态 / Execution status")
|
|
100
|
+
statements: List[SchemaStatementReport] = Field(..., description="语句执行报告 / Statement execution reports")
|
|
101
|
+
diff: SchemaTableDiff = Field(..., description="数据表差异信息 / Table difference details")
|
|
102
|
+
warnings: List[str] = Field(default_factory=list, description="警告信息列表 / Warning messages")
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class SchemaDatabaseResult(BaseModel):
|
|
106
|
+
"""数据库执行结果 / Result of schema operations for a database."""
|
|
107
|
+
|
|
108
|
+
database: str = Field(..., description="数据库名称 / Database name")
|
|
109
|
+
database_created: bool = Field(..., description="是否新创建数据库 / Whether the database was created")
|
|
110
|
+
warnings: List[str] = Field(default_factory=list, description="数据库级警告 / Database level warnings")
|
|
111
|
+
tables: List[SchemaTableResult] = Field(..., description="数据表执行结果列表 / Table results")
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class SchemaOperationData(BaseModel):
|
|
115
|
+
"""模式操作核心数据 / Core payload returned by schema operations."""
|
|
116
|
+
|
|
117
|
+
summary: SchemaOperationSummary = Field(..., description="概要信息 / Summary information")
|
|
118
|
+
databases: List[SchemaDatabaseResult] = Field(..., description="数据库执行结果列表 / Database results")
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class SchemaOperationCLIResult(BaseModel):
|
|
122
|
+
"""dbadmin CLI 返回结果封装 / Wrapper for dbadmin CLI payload."""
|
|
123
|
+
|
|
124
|
+
model_config = ConfigDict(extra="ignore")
|
|
125
|
+
|
|
126
|
+
status: Literal["success"] = Field(..., description="执行状态 / Execution status")
|
|
127
|
+
data: SchemaOperationData = Field(..., description="操作数据 / Operation data")
|
|
128
|
+
warnings: Optional[List[str]] = Field(default=None, description="全局警告信息 / Optional global warnings")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class SchemaOperationResponse(BaseModel):
|
|
132
|
+
"""API 返回的模式操作结果 / Schema operation response returned to clients."""
|
|
133
|
+
|
|
134
|
+
summary: SchemaOperationSummary = Field(..., description="概要信息 / Summary information")
|
|
135
|
+
databases: List[SchemaDatabaseResult] = Field(..., description="数据库执行结果列表 / Database results")
|
|
136
|
+
warnings: List[str] = Field(default_factory=list, description="全局警告信息 / Global warning messages")
|
|
137
|
+
|
|
138
|
+
@classmethod
|
|
139
|
+
def from_cli_payload(cls, payload: Mapping[str, object]) -> "SchemaOperationResponse":
|
|
140
|
+
"""从 CLI 原始数据构建响应 / Build response from raw CLI payload."""
|
|
141
|
+
|
|
142
|
+
parsed = SchemaOperationCLIResult.model_validate(payload)
|
|
143
|
+
return cls(
|
|
144
|
+
summary=parsed.data.summary,
|
|
145
|
+
databases=parsed.data.databases,
|
|
146
|
+
warnings=parsed.warnings or [],
|
|
147
|
+
)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""
|
|
2
|
+
数据库初始化相关的类型定义
|
|
3
|
+
"""
|
|
4
|
+
from typing import (
|
|
5
|
+
List,
|
|
6
|
+
Optional,
|
|
7
|
+
Dict,
|
|
8
|
+
Any,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from pydantic import (
|
|
12
|
+
BaseModel,
|
|
13
|
+
Field,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class DatabaseInitRequest(BaseModel):
|
|
18
|
+
"""数据库初始化请求"""
|
|
19
|
+
force: bool = Field(default=False, description="是否强制重建数据库(会删除已有数据)")
|
|
20
|
+
databases: Optional[List[str]] = Field(default=None, description="要初始化的数据库列表,None 表示全部")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class DatabaseIncrementalBuildRequest(BaseModel):
|
|
24
|
+
"""数据库增量构建请求"""
|
|
25
|
+
databases: Optional[List[str]] = Field(default=None, description="要增量构建的数据库列表,None 表示全部")
|
|
26
|
+
tables: Optional[List[str]] = Field(default=None, description="要增量构建的表列表,None 表示全部")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class DatabaseBuildResult(BaseModel):
|
|
30
|
+
"""数据库构建结果"""
|
|
31
|
+
success: bool = Field(..., description="是否成功")
|
|
32
|
+
message: str = Field(..., description="构建信息")
|
|
33
|
+
databases_created: List[str] = Field(default_factory=list, description="新创建的数据库")
|
|
34
|
+
tables_created: List[str] = Field(default_factory=list, description="新创建的表")
|
|
35
|
+
errors: List[Dict[str, Any]] = Field(default_factory=list, description="错误信息列表")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class DatabaseInfo(BaseModel):
|
|
39
|
+
"""数据库信息"""
|
|
40
|
+
name: str = Field(..., description="数据库名称")
|
|
41
|
+
exists: bool = Field(..., description="是否存在")
|
|
42
|
+
tables: List[str] = Field(default_factory=list, description="表列表")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class DatabaseStatus(BaseModel):
|
|
46
|
+
"""数据库状态"""
|
|
47
|
+
databases: List[DatabaseInfo] = Field(default_factory=list, description="数据库列表")
|
|
48
|
+
ddl_path: str = Field(..., description="DDL 文件路径")
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
from enum import StrEnum
|
|
2
|
+
from typing import (
|
|
3
|
+
List,
|
|
4
|
+
Optional,
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
from pydantic import (
|
|
8
|
+
BaseModel,
|
|
9
|
+
Field,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from cancan_microstack.public.schemas.infra.push import PushResult
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ServiceConfigEntry(BaseModel):
|
|
16
|
+
"""
|
|
17
|
+
服务配置条目数据模型
|
|
18
|
+
Service configuration entry data model
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
key: str = Field(..., description="配置键 / Configuration key")
|
|
22
|
+
value: str = Field(..., description="配置值 / Configuration value")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ServiceConfigDetail(BaseModel):
|
|
26
|
+
"""
|
|
27
|
+
指定服务的配置详情
|
|
28
|
+
Detailed configuration values for a specific service
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
service_name: str = Field(..., description="服务名称 / Service name")
|
|
32
|
+
items: List[ServiceConfigEntry] = Field(
|
|
33
|
+
default_factory=list,
|
|
34
|
+
description="配置项列表 / Collection of configuration entries",
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class ServiceConfigOverview(BaseModel):
|
|
39
|
+
"""
|
|
40
|
+
所有服务的配置汇总
|
|
41
|
+
Aggregated configuration overview for all services
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
services: List[ServiceConfigDetail] = Field(
|
|
45
|
+
default_factory=list,
|
|
46
|
+
description="所有服务配置详情 / Detailed configurations for each service",
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class ConfigPushStatus(StrEnum):
|
|
51
|
+
"""
|
|
52
|
+
配置推送操作的状态枚举
|
|
53
|
+
Status enumeration for config push execution
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
SUCCESS = "success"
|
|
57
|
+
FAILED = "failed"
|
|
58
|
+
ERROR = "error"
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class ConfigPushExecutionResult(BaseModel):
|
|
62
|
+
"""
|
|
63
|
+
配置推送执行结果模型
|
|
64
|
+
Config push execution result model
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
status: ConfigPushStatus = Field(..., description="执行状态 / Execution status")
|
|
68
|
+
summary: Optional[PushResult] = Field(
|
|
69
|
+
default=None,
|
|
70
|
+
description="推送结果汇总 / Summary of push execution",
|
|
71
|
+
)
|
|
72
|
+
error_message: Optional[str] = Field(
|
|
73
|
+
default=None,
|
|
74
|
+
description="错误信息 / Error message when execution failed",
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class ServiceConfigOperationSummary(BaseModel):
|
|
79
|
+
"""
|
|
80
|
+
服务配置操作结果模型
|
|
81
|
+
Service configuration operation result model
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
service_name: str = Field(..., description="服务名称 / Target service name")
|
|
85
|
+
message: str = Field(..., description="操作说明 / Operation message")
|
|
86
|
+
push_result: Optional[ConfigPushExecutionResult] = Field(
|
|
87
|
+
default=None,
|
|
88
|
+
description="配置推送执行情况 / Config push execution outcome",
|
|
89
|
+
)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
List,
|
|
3
|
+
Optional,
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
from pydantic import (
|
|
7
|
+
BaseModel,
|
|
8
|
+
Field,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from cancan_microstack.public.schemas.infra.service_action_log import ServiceActionLog
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ServiceLogsQueryContext(BaseModel):
|
|
15
|
+
"""
|
|
16
|
+
服务日志查询上下文
|
|
17
|
+
Context metadata describing the service log query
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
service_name: Optional[str] = Field(
|
|
21
|
+
default=None,
|
|
22
|
+
description="服务名称 / Target service name",
|
|
23
|
+
)
|
|
24
|
+
action_type: Optional[str] = Field(
|
|
25
|
+
default=None,
|
|
26
|
+
description="操作类型 / Filtered action type",
|
|
27
|
+
)
|
|
28
|
+
action_status: Optional[str] = Field(
|
|
29
|
+
default=None,
|
|
30
|
+
description="操作状态 / Filtered action status",
|
|
31
|
+
)
|
|
32
|
+
limit: int = Field(
|
|
33
|
+
default=100,
|
|
34
|
+
description="返回记录上限 / Maximum number of records returned",
|
|
35
|
+
ge=1,
|
|
36
|
+
le=1000,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class ServiceLogsPayload(ServiceLogsQueryContext):
|
|
41
|
+
"""
|
|
42
|
+
服务日志查询结果载体
|
|
43
|
+
Payload containing fetched service action logs
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
logs: List[ServiceActionLog] = Field(
|
|
47
|
+
default_factory=list,
|
|
48
|
+
description="服务操作日志列表 / Collection of service action logs",
|
|
49
|
+
)
|
|
50
|
+
total: int = Field(
|
|
51
|
+
default=0,
|
|
52
|
+
description="日志数量 / Number of logs returned",
|
|
53
|
+
ge=0,
|
|
54
|
+
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from enum import StrEnum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class OperationType(StrEnum):
|
|
5
|
+
"""服务操作类型"""
|
|
6
|
+
START = "start"
|
|
7
|
+
STOP = "stop"
|
|
8
|
+
RESTART = "restart"
|
|
9
|
+
# SCALE 仅作记录/占位用途,扩缩容动作未实现:
|
|
10
|
+
# infrasrv 只记录 desired/actual 副本数(见 internal_update_service_replicas_handler),
|
|
11
|
+
# controllersrv 没有 scale 执行能力,不会真正增减容器。
|
|
12
|
+
SCALE = "scale"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class InitiatedFrom(StrEnum):
|
|
16
|
+
"""操作发起来源"""
|
|
17
|
+
FRONTEND = "frontend"
|
|
18
|
+
SYSTEM = "system"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class InitiatedBy(StrEnum):
|
|
22
|
+
"""操作发起者"""
|
|
23
|
+
OPSBFFSRV = "opsbffsrv"
|
|
24
|
+
INFRASRV = "infrasrv"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class InstanceMetadata(BaseModel):
|
|
7
|
+
"""
|
|
8
|
+
服务实例的元数据
|
|
9
|
+
Metadata for a service instance.
|
|
10
|
+
"""
|
|
11
|
+
container_hostname: Optional[str] = None
|
|
12
|
+
network_alias: str
|
|
13
|
+
register_host_source: str
|
|
14
|
+
app_host_binding: str
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ServiceMetadata(BaseModel):
|
|
18
|
+
"""
|
|
19
|
+
服务的元数据
|
|
20
|
+
Metadata for a service.
|
|
21
|
+
"""
|
|
22
|
+
version: str
|
|
23
|
+
environment: str
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ServiceRegistryPayload(BaseModel):
|
|
27
|
+
"""
|
|
28
|
+
向 infrasrv 注册服务时发送的 payload
|
|
29
|
+
Payload sent to infrasrv when registering a service.
|
|
30
|
+
"""
|
|
31
|
+
service_name: str
|
|
32
|
+
instance_id: str
|
|
33
|
+
host: str
|
|
34
|
+
port: int
|
|
35
|
+
internal_port: int
|
|
36
|
+
health_check_url: str
|
|
37
|
+
container_name: str
|
|
38
|
+
compose_service_name: str
|
|
39
|
+
service_metadata: ServiceMetadata
|
|
40
|
+
instance_metadata: InstanceMetadata
|
|
File without changes
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"""配置值扩展 / Config value extension.
|
|
2
|
+
|
|
3
|
+
提供一个轻量的配置值壳类与解析器:
|
|
4
|
+
- 业务配置可直接写具体值(Linglong 原方式)
|
|
5
|
+
- 也可写 ConfigValue 壳对象以声明目标类型/反序列化逻辑
|
|
6
|
+
|
|
7
|
+
Provide a lightweight config wrapper and resolver:
|
|
8
|
+
- Keep plain-value config style (Linglong default)
|
|
9
|
+
- Support ConfigValue wrapper for typed conversion and custom deserialization
|
|
10
|
+
"""
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from typing import (
|
|
13
|
+
Any,
|
|
14
|
+
Callable,
|
|
15
|
+
Dict,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
import orjson
|
|
19
|
+
from pydantic import (
|
|
20
|
+
TypeAdapter,
|
|
21
|
+
ValidationError,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass(frozen=True)
|
|
26
|
+
class ConfigValue:
|
|
27
|
+
"""配置项壳对象 / Typed config wrapper."""
|
|
28
|
+
|
|
29
|
+
default: Any
|
|
30
|
+
value_type: Any
|
|
31
|
+
deserializer: Callable[[str], Any] | None = None
|
|
32
|
+
|
|
33
|
+
def __init__(
|
|
34
|
+
self,
|
|
35
|
+
default: Any,
|
|
36
|
+
value_type: Any | None = None,
|
|
37
|
+
deserializer: Callable[[str], Any] | None = None,
|
|
38
|
+
) -> None:
|
|
39
|
+
resolved_type = value_type if value_type is not None else type(default)
|
|
40
|
+
object.__setattr__(self, "default", default)
|
|
41
|
+
object.__setattr__(self, "value_type", resolved_type)
|
|
42
|
+
object.__setattr__(self, "deserializer", deserializer)
|
|
43
|
+
|
|
44
|
+
def parse(self, raw_value: Any) -> Any:
|
|
45
|
+
"""将远程配置值解析为声明类型 / Parse remote value into declared type."""
|
|
46
|
+
if self.deserializer:
|
|
47
|
+
if isinstance(raw_value, str):
|
|
48
|
+
return self.deserializer(raw_value)
|
|
49
|
+
return self.deserializer(str(raw_value))
|
|
50
|
+
|
|
51
|
+
adapter = TypeAdapter(self.value_type)
|
|
52
|
+
|
|
53
|
+
if isinstance(raw_value, str):
|
|
54
|
+
if self.value_type is str:
|
|
55
|
+
return adapter.validate_python(raw_value)
|
|
56
|
+
try:
|
|
57
|
+
return adapter.validate_json(raw_value)
|
|
58
|
+
except ValidationError:
|
|
59
|
+
return adapter.validate_python(raw_value)
|
|
60
|
+
|
|
61
|
+
return adapter.validate_python(raw_value)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class ConfigValueResolver:
|
|
65
|
+
"""配置值解析器 / Resolver for plain config values and ConfigValue wrappers."""
|
|
66
|
+
|
|
67
|
+
def __init__(self, wrappers: Dict[str, ConfigValue] | None = None) -> None:
|
|
68
|
+
self._wrappers = wrappers or {}
|
|
69
|
+
|
|
70
|
+
@classmethod
|
|
71
|
+
def from_snapshot(cls, config_snapshot: Dict[str, Any]) -> "ConfigValueResolver":
|
|
72
|
+
wrappers: Dict[str, ConfigValue] = {}
|
|
73
|
+
for key, value in config_snapshot.items():
|
|
74
|
+
if isinstance(value, ConfigValue):
|
|
75
|
+
wrappers[key] = value
|
|
76
|
+
return cls(wrappers=wrappers)
|
|
77
|
+
|
|
78
|
+
def get_wrapper(self, config_key: str) -> ConfigValue | None:
|
|
79
|
+
return self._wrappers.get(config_key)
|
|
80
|
+
|
|
81
|
+
def materialize_defaults(self) -> Dict[str, Any]:
|
|
82
|
+
"""提取壳对象默认值用于运行态配置 / Materialize wrapper defaults for runtime config."""
|
|
83
|
+
return {
|
|
84
|
+
key: wrapper.default
|
|
85
|
+
for key, wrapper in self._wrappers.items()
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
def resolve_update_value(self, config_key: str, current_value: Any, raw_value: Any) -> Any:
|
|
89
|
+
"""解析更新值 / Resolve updated value by key type strategy."""
|
|
90
|
+
wrapper = self.get_wrapper(config_key)
|
|
91
|
+
if wrapper is not None:
|
|
92
|
+
return wrapper.parse(raw_value)
|
|
93
|
+
|
|
94
|
+
# Linglong 默认兼容策略:
|
|
95
|
+
# 非字符串配置项接收字符串时,先尝试 JSON 反序列化;失败则原样字符串赋值。
|
|
96
|
+
# Linglong-compatible behavior:
|
|
97
|
+
# For non-str config receiving str input, try JSON deserialize first;
|
|
98
|
+
# fallback to raw string on failure.
|
|
99
|
+
if isinstance(raw_value, str) and not isinstance(current_value, str):
|
|
100
|
+
try:
|
|
101
|
+
return orjson.loads(raw_value)
|
|
102
|
+
except orjson.JSONDecodeError:
|
|
103
|
+
return raw_value
|
|
104
|
+
|
|
105
|
+
return raw_value
|