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.
Files changed (440) hide show
  1. cancan_microstack/__init__.py +14 -0
  2. cancan_microstack/__version__.py +10 -0
  3. cancan_microstack/assets/__init__.py +6 -0
  4. cancan_microstack/assets/builds/caddy/Caddyfile +187 -0
  5. cancan_microstack/assets/builds/caddy/DEPLOYMENT.md +303 -0
  6. cancan_microstack/assets/builds/caddy/Dockerfile +46 -0
  7. cancan_microstack/assets/builds/caddy/README.md +343 -0
  8. cancan_microstack/assets/builds/caddy/geoip/README.md +5 -0
  9. cancan_microstack/assets/builds/caddy/start.sh +78 -0
  10. cancan_microstack/assets/builds/caddy/waf/coraza.conf +179 -0
  11. cancan_microstack/assets/builds/service/Dockerfile +59 -0
  12. cancan_microstack/assets/builds/service/README.md +13 -0
  13. cancan_microstack/assets/ddl/create_db.sql +22 -0
  14. cancan_microstack/assets/ddl/infra/execution_log_tbl.sql +46 -0
  15. cancan_microstack/assets/ddl/infra/node_instance_tbl.sql +56 -0
  16. cancan_microstack/assets/ddl/infra/service_action_log_tbl.sql +36 -0
  17. cancan_microstack/assets/ddl/infra/service_config_tbl.sql +26 -0
  18. cancan_microstack/assets/ddl/infra/service_info_tbl.sql +45 -0
  19. cancan_microstack/assets/ddl/infra/service_instance_tbl.sql +54 -0
  20. cancan_microstack/assets/ddl/infra/service_operation_tbl.sql +47 -0
  21. cancan_microstack/assets/ddl/infra/workflow_definition_tbl.sql +60 -0
  22. cancan_microstack/assets/ddl/infra/workflow_definition_version_tbl.sql +35 -0
  23. cancan_microstack/assets/ddl/infra/workflow_engine_alert_tbl.sql +34 -0
  24. cancan_microstack/assets/ddl/infra/workflow_run_tbl.sql +52 -0
  25. cancan_microstack/assets/ddl/ops/admin_user_tbl.sql +34 -0
  26. cancan_microstack/assets/ddl/ops/caddy_access_log_tbl.sql +91 -0
  27. cancan_microstack/assets/ddl/ops/caddy_certificate_tbl.sql +59 -0
  28. cancan_microstack/assets/ddl/ops/caddy_rate_limit_tbl.sql +64 -0
  29. cancan_microstack/assets/ddl/ops/caddy_route_tbl.sql +63 -0
  30. cancan_microstack/assets/ddl/ops/caddy_stats_tbl.sql +77 -0
  31. cancan_microstack/assets/ddl/trigger.sql +21 -0
  32. cancan_microstack/assets/docker/docker-compose.infra.yml +401 -0
  33. cancan_microstack/assets/scripts/README.md +195 -0
  34. cancan_microstack/assets/scripts/docker/build_images.sh +44 -0
  35. cancan_microstack/assets/scripts/docker/force_rebuild_images.sh +38 -0
  36. cancan_microstack/assets/scripts/docker/rebuild_all.sh +34 -0
  37. cancan_microstack/assets/scripts/docker/rebuild_compose.sh +61 -0
  38. cancan_microstack/assets/scripts/docker/restart.sh +35 -0
  39. cancan_microstack/assets/scripts/docker/restart_compose.sh +35 -0
  40. cancan_microstack/assets/scripts/docker/start.sh +78 -0
  41. cancan_microstack/assets/scripts/docker/start_all.sh +46 -0
  42. cancan_microstack/assets/scripts/docker/start_compose.sh +66 -0
  43. cancan_microstack/assets/scripts/docker/stop.sh +67 -0
  44. cancan_microstack/assets/scripts/docker/stop_all.sh +38 -0
  45. cancan_microstack/assets/scripts/docker/stop_compose.sh +38 -0
  46. cancan_microstack/assets/scripts/podman/build_images_podman.sh +59 -0
  47. cancan_microstack/assets/scripts/podman/cleanup_podman.sh +25 -0
  48. cancan_microstack/assets/scripts/podman/force_rebuild_images_podman.sh +56 -0
  49. cancan_microstack/assets/scripts/podman/rebuild_all_podman.sh +37 -0
  50. cancan_microstack/assets/scripts/podman/rebuild_compose_podman.sh +60 -0
  51. cancan_microstack/assets/scripts/podman/restart_compose_podman.sh +73 -0
  52. cancan_microstack/assets/scripts/podman/start_all_podman.sh +66 -0
  53. cancan_microstack/assets/scripts/podman/start_compose_podman.sh +80 -0
  54. cancan_microstack/assets/scripts/podman/start_podman.sh +91 -0
  55. cancan_microstack/assets/scripts/podman/stop.sh +73 -0
  56. cancan_microstack/assets/scripts/podman/stop_all_podman.sh +34 -0
  57. cancan_microstack/assets/scripts/podman/stop_compose_podman.sh +58 -0
  58. cancan_microstack/assets/scripts/start_controllersrv.sh +9 -0
  59. cancan_microstack/assets/scripts/utils/check_all_db_tables.sh +104 -0
  60. cancan_microstack/assets/scripts/utils/check_env.sh +177 -0
  61. cancan_microstack/assets/scripts/utils/check_service_management_deployment.sh +225 -0
  62. cancan_microstack/assets/scripts/utils/deploy_service_management.sh +176 -0
  63. cancan_microstack/assets/scripts/utils/force_reload_infrasrv.sh +52 -0
  64. cancan_microstack/assets/scripts/utils/monitor_service_management.sh +187 -0
  65. cancan_microstack/assets/scripts/utils/reset_postgres_volume.sh +68 -0
  66. cancan_microstack/assets/scripts/utils/test_async_operations.sh +141 -0
  67. cancan_microstack/assets/scripts/utils/verify_real_operations.sh +76 -0
  68. cancan_microstack/assets/service/Dockerfile +65 -0
  69. cancan_microstack/assets/www/adminops/assets/AppEmpty.vue_vue_type_script_setup_true_lang-BOKUurnM.js +1 -0
  70. cancan_microstack/assets/www/adminops/assets/ConfigManage-DKV5YOUz.js +1 -0
  71. cancan_microstack/assets/www/adminops/assets/ConfigManage-Y5bhy7wG.css +1 -0
  72. cancan_microstack/assets/www/adminops/assets/ConsoleManage-8ljYvCW2.js +1 -0
  73. cancan_microstack/assets/www/adminops/assets/ConsoleManage-BWpyqbuQ.css +1 -0
  74. cancan_microstack/assets/www/adminops/assets/DashboardNew-B9Nf1OPl.js +1 -0
  75. cancan_microstack/assets/www/adminops/assets/DashboardNew-DYWZKQ1V.css +1 -0
  76. cancan_microstack/assets/www/adminops/assets/LogSearch-CA0Jhe78.js +1 -0
  77. cancan_microstack/assets/www/adminops/assets/LogSearch-CCZfTNPF.css +1 -0
  78. cancan_microstack/assets/www/adminops/assets/LoginView-BId3kP3M.css +1 -0
  79. cancan_microstack/assets/www/adminops/assets/LoginView-BQZTV_Qy.js +1 -0
  80. cancan_microstack/assets/www/adminops/assets/OperationProgressDialog-BdEYwqFq.js +1 -0
  81. cancan_microstack/assets/www/adminops/assets/OperationProgressDialog-D-pASR8G.css +1 -0
  82. cancan_microstack/assets/www/adminops/assets/PageContainer-Byss-yUC.js +1 -0
  83. cancan_microstack/assets/www/adminops/assets/PageContainer-C3nSZwM7.css +1 -0
  84. cancan_microstack/assets/www/adminops/assets/RateLimitManage-BDI8jLpC.css +1 -0
  85. cancan_microstack/assets/www/adminops/assets/RateLimitManage-DJY4NiF-.js +1 -0
  86. cancan_microstack/assets/www/adminops/assets/RouteManage-DaUQ4QLw.css +1 -0
  87. cancan_microstack/assets/www/adminops/assets/RouteManage-w9XCU0UA.js +1 -0
  88. cancan_microstack/assets/www/adminops/assets/ServiceCard-BFzHe6Tw.css +1 -0
  89. cancan_microstack/assets/www/adminops/assets/ServiceCard-BJUhWnA-.js +1 -0
  90. cancan_microstack/assets/www/adminops/assets/ServiceDetail-Cw24WuKp.js +1 -0
  91. cancan_microstack/assets/www/adminops/assets/ServiceDetail-Yum47zdB.css +1 -0
  92. cancan_microstack/assets/www/adminops/assets/ServiceList-C7ryvbhE.js +1 -0
  93. cancan_microstack/assets/www/adminops/assets/ServiceList-Cgd01fUx.css +1 -0
  94. cancan_microstack/assets/www/adminops/assets/ServiceLogs-COpG9H0h.js +1 -0
  95. cancan_microstack/assets/www/adminops/assets/ServiceLogs-H_Alq0cf.css +1 -0
  96. cancan_microstack/assets/www/adminops/assets/StatsOverview-D0TwMQkA.js +39 -0
  97. cancan_microstack/assets/www/adminops/assets/StatsOverview-lqAN6pqM.css +1 -0
  98. cancan_microstack/assets/www/adminops/assets/TotpBindView-CWlAmzFt.js +1 -0
  99. cancan_microstack/assets/www/adminops/assets/TotpBindView-HoQC1lhx.css +1 -0
  100. cancan_microstack/assets/www/adminops/assets/TotpVerifyView-BHN1VtX1.css +1 -0
  101. cancan_microstack/assets/www/adminops/assets/TotpVerifyView-D3w_lZk8.js +1 -0
  102. cancan_microstack/assets/www/adminops/assets/WorkflowCenter-DU_mpIA0.css +1 -0
  103. cancan_microstack/assets/www/adminops/assets/WorkflowCenter-i50rZyxN.js +1 -0
  104. cancan_microstack/assets/www/adminops/assets/WorkflowDesigner-CnHokPL9.js +1 -0
  105. cancan_microstack/assets/www/adminops/assets/WorkflowDesigner-DaZaZpLd.css +1 -0
  106. cancan_microstack/assets/www/adminops/assets/WorkflowRuns-B09hK48c.js +1 -0
  107. cancan_microstack/assets/www/adminops/assets/WorkflowRuns-wGutKIIU.css +1 -0
  108. cancan_microstack/assets/www/adminops/assets/caddy-nnCKf8fG.js +1 -0
  109. cancan_microstack/assets/www/adminops/assets/format-Cuzxgna9.js +1 -0
  110. cancan_microstack/assets/www/adminops/assets/index-CiFlm8oc.js +64 -0
  111. cancan_microstack/assets/www/adminops/assets/index-UW0T1Dkc.css +1 -0
  112. cancan_microstack/assets/www/adminops/assets/service-BYlgGPs_.js +1 -0
  113. cancan_microstack/assets/www/adminops/assets/service-operation-6GzLw2Z1.js +1 -0
  114. cancan_microstack/assets/www/adminops/assets/style-CcIXnQ5y.css +1 -0
  115. cancan_microstack/assets/www/adminops/assets/style-lRnStdGu.js +39 -0
  116. cancan_microstack/assets/www/adminops/assets/useDebounce-BRlqfXqf.js +1 -0
  117. cancan_microstack/assets/www/adminops/assets/workflow-CUXs39Ac.js +1 -0
  118. cancan_microstack/assets/www/adminops/index.html +16 -0
  119. cancan_microstack/assets/www/adminops/vite.svg +1 -0
  120. cancan_microstack/cli/__init__.py +14 -0
  121. cancan_microstack/cli/__main__.py +9 -0
  122. cancan_microstack/cli/main.py +552 -0
  123. cancan_microstack/cmd/__init__.py +54 -0
  124. cancan_microstack/cmd/cancan/__init__.py +12 -0
  125. cancan_microstack/cmd/cancan/run.py +395 -0
  126. cancan_microstack/cmd/controllersrv/__init__.py +0 -0
  127. cancan_microstack/cmd/controllersrv/run.py +131 -0
  128. cancan_microstack/cmd/infrasrv/__init__.py +5 -0
  129. cancan_microstack/cmd/infrasrv/run.py +100 -0
  130. cancan_microstack/cmd/opsbffsrv/__init__.py +5 -0
  131. cancan_microstack/cmd/opsbffsrv/run.py +96 -0
  132. cancan_microstack/core/__init__.py +5 -0
  133. cancan_microstack/core/assets.py +123 -0
  134. cancan_microstack/core/compose_builder.py +102 -0
  135. cancan_microstack/core/doctor.py +152 -0
  136. cancan_microstack/core/microstack.py +71 -0
  137. cancan_microstack/core/runner.py +56 -0
  138. cancan_microstack/core/stack_manager.py +186 -0
  139. cancan_microstack/public/__init__.py +7 -0
  140. cancan_microstack/public/api/__init__.py +1 -0
  141. cancan_microstack/public/api/controllersrv_client.py +277 -0
  142. cancan_microstack/public/api/infrasrv_client.py +404 -0
  143. cancan_microstack/public/const/__init__.py +1 -0
  144. cancan_microstack/public/const/action_consts.py +18 -0
  145. cancan_microstack/public/const/app_consts.py +42 -0
  146. cancan_microstack/public/const/caddy_consts.py +22 -0
  147. cancan_microstack/public/const/controllersrv_consts.py +163 -0
  148. cancan_microstack/public/const/docker_consts.py +15 -0
  149. cancan_microstack/public/const/error.py +56 -0
  150. cancan_microstack/public/const/health_consts.py +52 -0
  151. cancan_microstack/public/const/hook_enums.py +56 -0
  152. cancan_microstack/public/const/logging_enums.py +13 -0
  153. cancan_microstack/public/const/metrics_enums.py +36 -0
  154. cancan_microstack/public/const/monitor_enums.py +26 -0
  155. cancan_microstack/public/const/operation_consts.py +53 -0
  156. cancan_microstack/public/const/opsbffsrv_error.py +92 -0
  157. cancan_microstack/public/const/overrides_consts.py +13 -0
  158. cancan_microstack/public/const/redis.py +17 -0
  159. cancan_microstack/public/const/service_consts.py +15 -0
  160. cancan_microstack/public/const/workflow_consts.py +65 -0
  161. cancan_microstack/public/error.py +41 -0
  162. cancan_microstack/public/logging/__init__.py +0 -0
  163. cancan_microstack/public/logging/initializer.py +109 -0
  164. cancan_microstack/public/logging/mq_handler.py +279 -0
  165. cancan_microstack/public/schemas/__init__.py +1 -0
  166. cancan_microstack/public/schemas/caddy/__init__.py +381 -0
  167. cancan_microstack/public/schemas/caddy/analysis.py +90 -0
  168. cancan_microstack/public/schemas/caddy/route.py +18 -0
  169. cancan_microstack/public/schemas/common.py +79 -0
  170. cancan_microstack/public/schemas/controllersrv/__init__.py +3 -0
  171. cancan_microstack/public/schemas/controllersrv/async_requests.py +30 -0
  172. cancan_microstack/public/schemas/controllersrv/compose_models.py +47 -0
  173. cancan_microstack/public/schemas/controllersrv/const.py +24 -0
  174. cancan_microstack/public/schemas/controllersrv/docker_models.py +45 -0
  175. cancan_microstack/public/schemas/controllersrv/docker_responses.py +104 -0
  176. cancan_microstack/public/schemas/controllersrv/requests.py +54 -0
  177. cancan_microstack/public/schemas/controllersrv/responses.py +124 -0
  178. cancan_microstack/public/schemas/controllersrv/task_models.py +102 -0
  179. cancan_microstack/public/schemas/controllersrv/validation.py +23 -0
  180. cancan_microstack/public/schemas/hook_metrics.py +124 -0
  181. cancan_microstack/public/schemas/hooks.py +39 -0
  182. cancan_microstack/public/schemas/infra/__init__.py +0 -0
  183. cancan_microstack/public/schemas/infra/cleanup.py +25 -0
  184. cancan_microstack/public/schemas/infra/container.py +74 -0
  185. cancan_microstack/public/schemas/infra/enums.py +135 -0
  186. cancan_microstack/public/schemas/infra/health_check.py +42 -0
  187. cancan_microstack/public/schemas/infra/hook_log.py +42 -0
  188. cancan_microstack/public/schemas/infra/operation.py +90 -0
  189. cancan_microstack/public/schemas/infra/overview.py +25 -0
  190. cancan_microstack/public/schemas/infra/push.py +33 -0
  191. cancan_microstack/public/schemas/infra/service_action_log.py +47 -0
  192. cancan_microstack/public/schemas/infra/service_config.py +10 -0
  193. cancan_microstack/public/schemas/infra/service_info.py +69 -0
  194. cancan_microstack/public/schemas/infra/service_instance.py +93 -0
  195. cancan_microstack/public/schemas/infra/service_management.py +152 -0
  196. cancan_microstack/public/schemas/infra/service_operation.py +79 -0
  197. cancan_microstack/public/schemas/infra/service_registry.py +158 -0
  198. cancan_microstack/public/schemas/infra/status_types.py +19 -0
  199. cancan_microstack/public/schemas/infra/workflow.py +566 -0
  200. cancan_microstack/public/schemas/logging/__init__.py +1 -0
  201. cancan_microstack/public/schemas/logging/log_event.py +121 -0
  202. cancan_microstack/public/schemas/opsbffsrv/__init__.py +1 -0
  203. cancan_microstack/public/schemas/opsbffsrv/async_ops.py +17 -0
  204. cancan_microstack/public/schemas/opsbffsrv/db_admin.py +147 -0
  205. cancan_microstack/public/schemas/opsbffsrv/db_init.py +48 -0
  206. cancan_microstack/public/schemas/opsbffsrv/service_config.py +89 -0
  207. cancan_microstack/public/schemas/opsbffsrv/service_logs.py +54 -0
  208. cancan_microstack/public/schemas/service_operation.py +24 -0
  209. cancan_microstack/public/schemas/service_registry.py +40 -0
  210. cancan_microstack/public/types/__init__.py +7 -0
  211. cancan_microstack/public/web/__init__.py +0 -0
  212. cancan_microstack/public/web/config_value.py +105 -0
  213. cancan_microstack/public/web/server.py +385 -0
  214. cancan_microstack/py.typed +0 -0
  215. cancan_microstack/runtime/__init__.py +0 -0
  216. cancan_microstack/runtime/compose_cmd.py +228 -0
  217. cancan_microstack/runtime/host_daemon.py +318 -0
  218. cancan_microstack/runtime/overrides.py +103 -0
  219. cancan_microstack/runtime/resources.py +25 -0
  220. cancan_microstack/runtime/workspace.py +94 -0
  221. cancan_microstack/services/__init__.py +0 -0
  222. cancan_microstack/services/controllersrv/__init__.py +8 -0
  223. cancan_microstack/services/controllersrv/application/__init__.py +0 -0
  224. cancan_microstack/services/controllersrv/application/docker_compose_app.py +427 -0
  225. cancan_microstack/services/controllersrv/conf/__init__.py +0 -0
  226. cancan_microstack/services/controllersrv/conf/config.py +76 -0
  227. cancan_microstack/services/controllersrv/conf/settings.py +54 -0
  228. cancan_microstack/services/controllersrv/domain/__init__.py +0 -0
  229. cancan_microstack/services/controllersrv/domain/docker_compose/__init__.py +0 -0
  230. cancan_microstack/services/controllersrv/domain/docker_compose/docker_compose_domain.py +278 -0
  231. cancan_microstack/services/controllersrv/domain/service_validator.py +327 -0
  232. cancan_microstack/services/controllersrv/domain/task/__init__.py +17 -0
  233. cancan_microstack/services/controllersrv/domain/task/task_queue.py +286 -0
  234. cancan_microstack/services/controllersrv/domain/task/task_worker.py +495 -0
  235. cancan_microstack/services/controllersrv/infrastructure/__init__.py +0 -0
  236. cancan_microstack/services/controllersrv/interface/__init__.py +0 -0
  237. cancan_microstack/services/controllersrv/interface/api/__init__.py +0 -0
  238. cancan_microstack/services/controllersrv/interface/api/docker_control_api.py +470 -0
  239. cancan_microstack/services/controllersrv/router.py +132 -0
  240. cancan_microstack/services/infrasrv/__init__.py +4 -0
  241. cancan_microstack/services/infrasrv/application/__init__.py +0 -0
  242. cancan_microstack/services/infrasrv/application/health_check_app.py +24 -0
  243. cancan_microstack/services/infrasrv/application/logging/__init__.py +1 -0
  244. cancan_microstack/services/infrasrv/application/logging/log_ingestion_service.py +183 -0
  245. cancan_microstack/services/infrasrv/application/service_config.py +22 -0
  246. cancan_microstack/services/infrasrv/application/service_logs_app.py +53 -0
  247. cancan_microstack/services/infrasrv/application/service_management_app.py +689 -0
  248. cancan_microstack/services/infrasrv/application/service_operation_tracker.py +251 -0
  249. cancan_microstack/services/infrasrv/application/service_registry.py +53 -0
  250. cancan_microstack/services/infrasrv/application/workflow/__init__.py +0 -0
  251. cancan_microstack/services/infrasrv/application/workflow/workflow_app.py +991 -0
  252. cancan_microstack/services/infrasrv/application/workflow/workflow_queue.py +302 -0
  253. cancan_microstack/services/infrasrv/application/workflow/workflow_tasks.py +46 -0
  254. cancan_microstack/services/infrasrv/application/workflow/workflow_worker_runtime.py +122 -0
  255. cancan_microstack/services/infrasrv/conf/__init__.py +0 -0
  256. cancan_microstack/services/infrasrv/conf/config.py +98 -0
  257. cancan_microstack/services/infrasrv/domain/__init__.py +0 -0
  258. cancan_microstack/services/infrasrv/domain/health_check/__init__.py +3 -0
  259. cancan_microstack/services/infrasrv/domain/health_check/health_check_domain.py +576 -0
  260. cancan_microstack/services/infrasrv/domain/hooks/__init__.py +19 -0
  261. cancan_microstack/services/infrasrv/domain/hooks/builtin_hooks.py +308 -0
  262. cancan_microstack/services/infrasrv/domain/hooks/hook_registry.py +43 -0
  263. cancan_microstack/services/infrasrv/domain/hooks/hooks_log_utils.py +275 -0
  264. cancan_microstack/services/infrasrv/domain/hooks/init.py +17 -0
  265. cancan_microstack/services/infrasrv/domain/hooks/metrics.py +205 -0
  266. cancan_microstack/services/infrasrv/domain/hooks/pre_registration_hooks.py +490 -0
  267. cancan_microstack/services/infrasrv/domain/registry/__init__.py +0 -0
  268. cancan_microstack/services/infrasrv/domain/registry/service_registry.py +509 -0
  269. cancan_microstack/services/infrasrv/domain/service_config/__init__.py +0 -0
  270. cancan_microstack/services/infrasrv/domain/service_config/service_config.py +50 -0
  271. cancan_microstack/services/infrasrv/domain/service_logs/__init__.py +0 -0
  272. cancan_microstack/services/infrasrv/domain/service_logs/service_logs_domain.py +51 -0
  273. cancan_microstack/services/infrasrv/domain/workflow/__init__.py +4 -0
  274. cancan_microstack/services/infrasrv/domain/workflow/engine.py +159 -0
  275. cancan_microstack/services/infrasrv/domain/workflow/node_handlers.py +509 -0
  276. cancan_microstack/services/infrasrv/domain/workflow/workflow_domain.py +164 -0
  277. cancan_microstack/services/infrasrv/infrastructure/__init__.py +0 -0
  278. cancan_microstack/services/infrasrv/infrastructure/api/__init__.py +0 -0
  279. cancan_microstack/services/infrasrv/infrastructure/api/controllersrv_api.py +165 -0
  280. cancan_microstack/services/infrasrv/infrastructure/cache/__init__.py +0 -0
  281. cancan_microstack/services/infrasrv/infrastructure/cache/service_registry_cache.py +174 -0
  282. cancan_microstack/services/infrasrv/infrastructure/db/__init__.py +0 -0
  283. cancan_microstack/services/infrasrv/infrastructure/db/model/__init__.py +0 -0
  284. cancan_microstack/services/infrasrv/infrastructure/db/model/execution_log_tbl.py +53 -0
  285. cancan_microstack/services/infrasrv/infrastructure/db/model/node_instance_tbl.py +55 -0
  286. cancan_microstack/services/infrasrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
  287. cancan_microstack/services/infrasrv/infrastructure/db/model/service_config_tbl.py +30 -0
  288. cancan_microstack/services/infrasrv/infrastructure/db/model/service_info_tbl.py +59 -0
  289. cancan_microstack/services/infrasrv/infrastructure/db/model/service_instance_tbl.py +88 -0
  290. cancan_microstack/services/infrasrv/infrastructure/db/model/service_operation_tbl.py +73 -0
  291. cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_definition_tbl.py +55 -0
  292. cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_definition_version_tbl.py +43 -0
  293. cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_engine_alert_tbl.py +57 -0
  294. cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_run_tbl.py +56 -0
  295. cancan_microstack/services/infrasrv/infrastructure/db/operate/__init__.py +0 -0
  296. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_action_log_op.py +239 -0
  297. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_config.py +80 -0
  298. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_config_manager.py +198 -0
  299. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_info_op.py +297 -0
  300. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_instance_op.py +688 -0
  301. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_operation_op.py +387 -0
  302. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_registry.py +124 -0
  303. cancan_microstack/services/infrasrv/infrastructure/db/operate/workflow_op.py +804 -0
  304. cancan_microstack/services/infrasrv/infrastructure/ddl_manager.py +31 -0
  305. cancan_microstack/services/infrasrv/infrastructure/mongo/__init__.py +1 -0
  306. cancan_microstack/services/infrasrv/infrastructure/mongo/log_repository.py +129 -0
  307. cancan_microstack/services/infrasrv/interface/__init__.py +0 -0
  308. cancan_microstack/services/infrasrv/interface/api/__init__.py +0 -0
  309. cancan_microstack/services/infrasrv/interface/api/health_check_api.py +29 -0
  310. cancan_microstack/services/infrasrv/interface/api/hooks.py +284 -0
  311. cancan_microstack/services/infrasrv/interface/api/internal.py +49 -0
  312. cancan_microstack/services/infrasrv/interface/api/internal_instance_api.py +265 -0
  313. cancan_microstack/services/infrasrv/interface/api/internal_operation_api.py +206 -0
  314. cancan_microstack/services/infrasrv/interface/api/service_config.py +50 -0
  315. cancan_microstack/services/infrasrv/interface/api/service_logs_api.py +49 -0
  316. cancan_microstack/services/infrasrv/interface/api/service_management_api.py +113 -0
  317. cancan_microstack/services/infrasrv/interface/api/service_registry.py +117 -0
  318. cancan_microstack/services/infrasrv/interface/api/workflow_api.py +303 -0
  319. cancan_microstack/services/infrasrv/interface/schedule/__init__.py +0 -0
  320. cancan_microstack/services/infrasrv/interface/schedule/cleanup.py +13 -0
  321. cancan_microstack/services/infrasrv/interface/schedule/health_check.py +27 -0
  322. cancan_microstack/services/infrasrv/interface/schedule/log_cleanup.py +26 -0
  323. cancan_microstack/services/infrasrv/interface/schedule/operation_tracker.py +25 -0
  324. cancan_microstack/services/infrasrv/interface/schedule/scheduler.py +39 -0
  325. cancan_microstack/services/infrasrv/interface/schedule/workflow_scheduler.py +115 -0
  326. cancan_microstack/services/infrasrv/router.py +341 -0
  327. cancan_microstack/services/opsbffsrv/__init__.py +4 -0
  328. cancan_microstack/services/opsbffsrv/application/__init__.py +0 -0
  329. cancan_microstack/services/opsbffsrv/application/async_operation_app.py +150 -0
  330. cancan_microstack/services/opsbffsrv/application/auth_app.py +285 -0
  331. cancan_microstack/services/opsbffsrv/application/caddy/__init__.py +0 -0
  332. cancan_microstack/services/opsbffsrv/application/caddy/access_log_analysis_app.py +344 -0
  333. cancan_microstack/services/opsbffsrv/application/caddy/access_log_ingestion_service.py +169 -0
  334. cancan_microstack/services/opsbffsrv/application/caddy/certificate_management_app.py +355 -0
  335. cancan_microstack/services/opsbffsrv/application/caddy/rate_limit_management_app.py +496 -0
  336. cancan_microstack/services/opsbffsrv/application/caddy/route_management_app.py +401 -0
  337. cancan_microstack/services/opsbffsrv/application/caddy/stats_aggregation_app.py +364 -0
  338. cancan_microstack/services/opsbffsrv/application/db_admin_app.py +103 -0
  339. cancan_microstack/services/opsbffsrv/application/db_init_app.py +283 -0
  340. cancan_microstack/services/opsbffsrv/application/logging/__init__.py +1 -0
  341. cancan_microstack/services/opsbffsrv/application/logging/log_query_app.py +28 -0
  342. cancan_microstack/services/opsbffsrv/application/service_config.py +158 -0
  343. cancan_microstack/services/opsbffsrv/application/service_logs_app.py +74 -0
  344. cancan_microstack/services/opsbffsrv/application/service_registry.py +36 -0
  345. cancan_microstack/services/opsbffsrv/application/workflow_ops_app.py +730 -0
  346. cancan_microstack/services/opsbffsrv/conf/__init__.py +0 -0
  347. cancan_microstack/services/opsbffsrv/conf/config.py +224 -0
  348. cancan_microstack/services/opsbffsrv/domain/__init__.py +0 -0
  349. cancan_microstack/services/opsbffsrv/domain/auth/__init__.py +0 -0
  350. cancan_microstack/services/opsbffsrv/domain/auth/admin_init.py +38 -0
  351. cancan_microstack/services/opsbffsrv/domain/auth/auth_domain.py +108 -0
  352. cancan_microstack/services/opsbffsrv/domain/caddy/__init__.py +0 -0
  353. cancan_microstack/services/opsbffsrv/domain/caddy/access_log_analysis.py +358 -0
  354. cancan_microstack/services/opsbffsrv/domain/caddy/certificate_management.py +325 -0
  355. cancan_microstack/services/opsbffsrv/domain/caddy/default_routes.py +53 -0
  356. cancan_microstack/services/opsbffsrv/domain/caddy/rate_limit_management.py +308 -0
  357. cancan_microstack/services/opsbffsrv/domain/caddy/route_management.py +279 -0
  358. cancan_microstack/services/opsbffsrv/domain/caddy/stats_aggregation.py +654 -0
  359. cancan_microstack/services/opsbffsrv/domain/db_admin/__init__.py +0 -0
  360. cancan_microstack/services/opsbffsrv/domain/db_admin/db_admin_domain.py +118 -0
  361. cancan_microstack/services/opsbffsrv/domain/db_init/__init__.py +3 -0
  362. cancan_microstack/services/opsbffsrv/domain/db_init/db_init_domain.py +358 -0
  363. cancan_microstack/services/opsbffsrv/domain/logging/__init__.py +1 -0
  364. cancan_microstack/services/opsbffsrv/domain/logging/log_query_domain.py +99 -0
  365. cancan_microstack/services/opsbffsrv/domain/service_config/__init__.py +0 -0
  366. cancan_microstack/services/opsbffsrv/domain/service_config/service_config.py +81 -0
  367. cancan_microstack/services/opsbffsrv/domain/service_registry/__init__.py +0 -0
  368. cancan_microstack/services/opsbffsrv/domain/service_registry/service_registry.py +292 -0
  369. cancan_microstack/services/opsbffsrv/infrastructure/__init__.py +0 -0
  370. cancan_microstack/services/opsbffsrv/infrastructure/api/__init__.py +0 -0
  371. cancan_microstack/services/opsbffsrv/infrastructure/api/infrasrv_api.py +242 -0
  372. cancan_microstack/services/opsbffsrv/infrastructure/auth/__init__.py +0 -0
  373. cancan_microstack/services/opsbffsrv/infrastructure/auth/captcha_service.py +67 -0
  374. cancan_microstack/services/opsbffsrv/infrastructure/auth/password_service.py +12 -0
  375. cancan_microstack/services/opsbffsrv/infrastructure/auth/redis_store.py +131 -0
  376. cancan_microstack/services/opsbffsrv/infrastructure/auth/totp_service.py +59 -0
  377. cancan_microstack/services/opsbffsrv/infrastructure/caddy/__init__.py +0 -0
  378. cancan_microstack/services/opsbffsrv/infrastructure/caddy/access_log_parser.py +307 -0
  379. cancan_microstack/services/opsbffsrv/infrastructure/caddy/admin_api_client.py +678 -0
  380. cancan_microstack/services/opsbffsrv/infrastructure/caddy/ip_geo_locator.py +176 -0
  381. cancan_microstack/services/opsbffsrv/infrastructure/db/__init__.py +0 -0
  382. cancan_microstack/services/opsbffsrv/infrastructure/db/model/__init__.py +0 -0
  383. cancan_microstack/services/opsbffsrv/infrastructure/db/model/admin_user_tbl.py +33 -0
  384. cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_access_log_tbl.py +90 -0
  385. cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_certificate_tbl.py +65 -0
  386. cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_rate_limit_tbl.py +69 -0
  387. cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_route_tbl.py +66 -0
  388. cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_stats_tbl.py +78 -0
  389. cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
  390. cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_config_tbl.py +30 -0
  391. cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_info_tbl.py +51 -0
  392. cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_instance_tbl.py +68 -0
  393. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/__init__.py +0 -0
  394. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/admin_user_operate.py +59 -0
  395. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_access_log.py +531 -0
  396. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_certificate.py +451 -0
  397. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_rate_limit.py +360 -0
  398. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_route.py +271 -0
  399. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_stats.py +343 -0
  400. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_action_log_op.py +57 -0
  401. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_config.py +86 -0
  402. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_info_op.py +79 -0
  403. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_instance.py +58 -0
  404. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_registry.py +138 -0
  405. cancan_microstack/services/opsbffsrv/infrastructure/ddl_manager.py +31 -0
  406. cancan_microstack/services/opsbffsrv/infrastructure/mongo/__init__.py +1 -0
  407. cancan_microstack/services/opsbffsrv/infrastructure/mongo/log_query_repository.py +87 -0
  408. cancan_microstack/services/opsbffsrv/interface/__init__.py +0 -0
  409. cancan_microstack/services/opsbffsrv/interface/api/__init__.py +0 -0
  410. cancan_microstack/services/opsbffsrv/interface/api/async_operation_api.py +137 -0
  411. cancan_microstack/services/opsbffsrv/interface/api/auth_api.py +113 -0
  412. cancan_microstack/services/opsbffsrv/interface/api/caddy/__init__.py +3 -0
  413. cancan_microstack/services/opsbffsrv/interface/api/caddy/access_log_api.py +174 -0
  414. cancan_microstack/services/opsbffsrv/interface/api/caddy/certificate_api.py +235 -0
  415. cancan_microstack/services/opsbffsrv/interface/api/caddy/rate_limit_api.py +302 -0
  416. cancan_microstack/services/opsbffsrv/interface/api/caddy/route_api.py +250 -0
  417. cancan_microstack/services/opsbffsrv/interface/api/caddy/stats_api.py +243 -0
  418. cancan_microstack/services/opsbffsrv/interface/api/db_admin_api.py +62 -0
  419. cancan_microstack/services/opsbffsrv/interface/api/db_init_api.py +109 -0
  420. cancan_microstack/services/opsbffsrv/interface/api/instance_management_api.py +165 -0
  421. cancan_microstack/services/opsbffsrv/interface/api/log_query_api.py +41 -0
  422. cancan_microstack/services/opsbffsrv/interface/api/mongo_express_proxy_api.py +181 -0
  423. cancan_microstack/services/opsbffsrv/interface/api/pgweb_proxy_api.py +154 -0
  424. cancan_microstack/services/opsbffsrv/interface/api/rabbitmq_mgmt_proxy_api.py +518 -0
  425. cancan_microstack/services/opsbffsrv/interface/api/redis_commander_proxy_api.py +133 -0
  426. cancan_microstack/services/opsbffsrv/interface/api/service_config.py +146 -0
  427. cancan_microstack/services/opsbffsrv/interface/api/service_logs_api.py +81 -0
  428. cancan_microstack/services/opsbffsrv/interface/api/service_registry.py +66 -0
  429. cancan_microstack/services/opsbffsrv/interface/api/workflow_ops_api.py +413 -0
  430. cancan_microstack/services/opsbffsrv/interface/middleware/__init__.py +0 -0
  431. cancan_microstack/services/opsbffsrv/interface/middleware/auth_middleware.py +52 -0
  432. cancan_microstack/services/opsbffsrv/router.py +901 -0
  433. cancan_microstack/utils/__init__.py +1 -0
  434. cancan_microstack/utils/container_env.py +218 -0
  435. cancan_microstack-0.0.1.dist-info/METADATA +155 -0
  436. cancan_microstack-0.0.1.dist-info/RECORD +440 -0
  437. cancan_microstack-0.0.1.dist-info/WHEEL +5 -0
  438. cancan_microstack-0.0.1.dist-info/entry_points.txt +2 -0
  439. cancan_microstack-0.0.1.dist-info/licenses/LICENSE +21 -0
  440. cancan_microstack-0.0.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,90 @@
1
+ """
2
+ Pydantic models for Caddy log analysis.
3
+ """
4
+ from typing import (
5
+ Any,
6
+ Dict,
7
+ List,
8
+ Optional,
9
+ Tuple,
10
+ )
11
+ from pydantic import BaseModel
12
+
13
+
14
+ class SuspiciousIP(BaseModel):
15
+ """Data model for a suspicious IP address."""
16
+ ip: str
17
+ count: int
18
+
19
+
20
+ class ErrorPatternAnalysis(BaseModel):
21
+ """Data model for error pattern analysis results."""
22
+ total_errors: int
23
+ error_rate: float
24
+ top_error_paths: List[Tuple[str, int]]
25
+ error_by_status: Dict[int, int]
26
+
27
+
28
+ class RealtimeStatsMetadata(BaseModel):
29
+ """实时统计元数据
30
+ Realtime statistics metadata
31
+ """
32
+
33
+ realtime_window_minutes: int
34
+
35
+
36
+ class TopCountryStatsMetadata(BaseModel):
37
+ """Top 国家统计元数据
38
+ Top country statistics metadata
39
+ """
40
+
41
+ country: str
42
+ country_name: str
43
+ country_code: str
44
+ count: int
45
+ percentage: float
46
+
47
+
48
+ class TopIPStatsMetadata(BaseModel):
49
+ """Top IP 统计元数据
50
+ Top IP statistics metadata
51
+ """
52
+
53
+ client_ip: str
54
+ country: str
55
+ city: str
56
+ count: int
57
+ percentage: float
58
+
59
+
60
+ class StatsAggregationPayload(BaseModel):
61
+ """统计聚合载荷模型
62
+ Typed payload for CaddyStats numeric fields
63
+ """
64
+
65
+ total_requests: int = 0
66
+ success_requests: int = 0
67
+ client_error_requests: int = 0
68
+ server_error_requests: int = 0
69
+ total_bytes_sent: int = 0
70
+ total_bytes_received: int = 0
71
+ avg_response_time: Optional[int] = 0
72
+ min_response_time: Optional[int] = 0
73
+ max_response_time: Optional[int] = 0
74
+ p50_response_time: Optional[int] = 0
75
+ p95_response_time: Optional[int] = 0
76
+ p99_response_time: Optional[int] = 0
77
+ waf_blocked_requests: int = 0
78
+ waf_logged_requests: int = 0
79
+ rate_limited_requests: int = 0
80
+ tls_requests: int = 0
81
+ non_tls_requests: int = 0
82
+ unique_ips: int = 0
83
+ unique_user_agents: int = 0
84
+
85
+ def to_stats_dict(self) -> Dict[str, Any]:
86
+ """导出 CaddyStats 可用字段字典
87
+ Export payload as CaddyStats-compatible dict
88
+ """
89
+
90
+ return self.model_dump()
@@ -0,0 +1,18 @@
1
+ from typing import (
2
+ Optional,
3
+ )
4
+
5
+ from pydantic import (
6
+ BaseModel,
7
+ Field,
8
+ )
9
+
10
+
11
+
12
+ class ToggleRoutePayload(BaseModel):
13
+ """切换路由状态请求体 / Toggle route state request payload"""
14
+
15
+ enabled: Optional[bool] = Field(
16
+ default=None,
17
+ description="目标启用状态,为空时自动取反 / Desired enabled state, auto-toggle when omitted",
18
+ )
@@ -0,0 +1,79 @@
1
+ """优化后的标准 API 响应 / Optimized Standard API Response."""
2
+ from typing import (
3
+ Generic,
4
+ Optional,
5
+ TypeVar,
6
+ )
7
+
8
+ from pydantic import (
9
+ BaseModel,
10
+ Field,
11
+ )
12
+
13
+ T = TypeVar("T")
14
+
15
+
16
+ class APIError(BaseModel):
17
+ """API 错误信息模型 / API error information model"""
18
+ code: str = Field(default="0", description="错误代码 / Error code")
19
+ msg: str = Field(default="", description="错误消息 / Error message")
20
+
21
+
22
+ class APIResponse(BaseModel, Generic[T]):
23
+ """标准 API 响应模型 / Standard API response model"""
24
+
25
+ success: bool = Field(..., description="操作是否成功 / Whether operation succeeded")
26
+ error: APIError = Field(default_factory=APIError, description="错误信息 / Error details")
27
+ data: Optional[T] = Field(default=None, description="响应数据 / Response payload")
28
+
29
+ @classmethod
30
+ def create(
31
+ cls,
32
+ data: Optional[T] = None,
33
+ code: str = "0",
34
+ msg: str = "",
35
+ error: Optional[APIError] = None,
36
+ success: Optional[bool] = None,
37
+ ) -> "APIResponse[Optional[T]]":
38
+ """
39
+ 通用构建方法 (替代 build_api_response)
40
+ """
41
+ resolved_error = error or APIError(code=str(code), msg=str(msg))
42
+ # 如果 success 未指定,根据 code 是否为 "0" 自动判断
43
+ resolved_success = success if success is not None else resolved_error.code == "0"
44
+
45
+ return cls(
46
+ success=resolved_success,
47
+ error=resolved_error,
48
+ data=data
49
+ )
50
+
51
+ @classmethod
52
+ def success_resp(cls, data: Optional[T] = None) -> "APIResponse[Optional[T]]":
53
+ """
54
+ 快速构建成功响应 (替代 build_success_response)
55
+ """
56
+ return cls.create(data=data, code="0", msg="", success=True)
57
+
58
+ @classmethod
59
+ def error_resp(cls, code: str, msg: str) -> "APIResponse[Optional[T]]":
60
+ """
61
+ 快速构建错误响应 (替代 build_error_response)
62
+ """
63
+ return cls.create(data=None, code=code, msg=msg, success=False)
64
+
65
+
66
+ class MessageResp(BaseModel):
67
+ """
68
+ 通用消息响应
69
+ General message response
70
+ """
71
+ message: str = Field(..., description="消息内容 / Message content")
72
+
73
+
74
+ class ErrorMessage(BaseModel):
75
+ """
76
+ 错误消息模型 / Error message model
77
+ """
78
+ message: str = Field(..., description="错误消息 / Error message")
79
+ detail: Optional[str] = Field(default=None, description="错误详情 / Error detail")
@@ -0,0 +1,3 @@
1
+ """
2
+ controllersrv API 类型定义
3
+ """
@@ -0,0 +1,30 @@
1
+ """
2
+ controllersrv 异步 API 请求模型
3
+ """
4
+ from typing import (
5
+ Optional,
6
+ )
7
+
8
+ from pydantic import (
9
+ BaseModel,
10
+ Field,
11
+ )
12
+
13
+ from cancan_microstack.public.const.operation_consts import (
14
+ InitiatedBy,
15
+ InitiatedFrom,
16
+ )
17
+
18
+
19
+ class AsyncOperationParams(BaseModel):
20
+ """异步操作参数"""
21
+ instance_id: Optional[str] = Field(default=None, description="实例ID")
22
+ reason: str = Field(..., description="操作原因")
23
+
24
+
25
+ class AsyncServiceOperationPayload(BaseModel):
26
+ """异步服务操作请求体"""
27
+ service_name: str = Field(..., description="服务名称, e.g., 'infrasrv.service'")
28
+ operation_params: AsyncOperationParams = Field(..., description="操作参数")
29
+ initiated_by: InitiatedBy = Field(..., description="操作发起者")
30
+ initiated_from: InitiatedFrom = Field(..., description="发起来源")
@@ -0,0 +1,47 @@
1
+ """
2
+ Docker Compose 相关的模型
3
+
4
+ 定义了与 Docker Compose 操作相关的数据模型,用于 controllersrv 的领域层。
5
+ """
6
+ from typing import List
7
+
8
+ from pydantic import (
9
+ BaseModel,
10
+ Field,
11
+ )
12
+
13
+ from cancan_microstack.public.schemas.controllersrv.docker_models import ContainerHealthDetail
14
+
15
+
16
+ class CommandResult(BaseModel):
17
+ """表示已执行的 shell 命令的结果。"""
18
+ success: bool
19
+ output: str = ""
20
+ error: str = ""
21
+ returncode: int
22
+
23
+
24
+ class ServiceListResult(BaseModel):
25
+ """表示服务列表,用于状态和配置列表。"""
26
+ success: bool
27
+ services: List[str] = Field(default_factory=list)
28
+ error: str = ""
29
+
30
+
31
+ class ContainerHealthResult(BaseModel):
32
+ """表示服务的容器健康状态。"""
33
+ success: bool
34
+ containers: List[ContainerHealthDetail] = Field(default_factory=list)
35
+ error: str = ""
36
+
37
+
38
+ class ComposeStatusResult(BaseModel):
39
+ """表示 Docker Compose 项目的整体状态。"""
40
+ success: bool = True
41
+ is_running: bool
42
+ project_name: str
43
+ compose_file: str
44
+ engine_type: str
45
+ available_services: List[str] = Field(default_factory=list)
46
+ running_services: List[str] = Field(default_factory=list)
47
+ error: str = ""
@@ -0,0 +1,24 @@
1
+ """
2
+ controllersrv API 常量定义
3
+ """
4
+ from enum import Enum
5
+
6
+
7
+ class ErrorCode(str, Enum):
8
+ """错误代码枚举"""
9
+ SUCCESS = "0"
10
+ INVALID_PARAMETER = "1001"
11
+ MISSING_PARAMETER = "1002"
12
+ INVALID_SERVICE_NAME = "1003"
13
+ DUPLICATE_SERIAL_NUMBER = "1004"
14
+ OPERATION_FAILED = "1005"
15
+ SERVICE_NOT_FOUND = "1006"
16
+ INTERNAL_ERROR = "1999"
17
+
18
+
19
+ class ValidationResultKey(str, Enum):
20
+ """验证结果键枚举"""
21
+ VALID = "valid"
22
+ INVALID_SERVICES = "invalid_services"
23
+ NON_OPERABLE_SERVICES = "non_operable_services"
24
+ VALID_SERVICES = "valid_services"
@@ -0,0 +1,45 @@
1
+ """
2
+ Docker-specific domain models for controllersrv.
3
+ """
4
+ from typing import (
5
+ Any,
6
+ Dict,
7
+ List,
8
+ Optional,
9
+ )
10
+
11
+ from pydantic import (
12
+ BaseModel,
13
+ Field,
14
+ )
15
+
16
+
17
+ class HealthCheck(BaseModel):
18
+ """Container health check status."""
19
+ status: str = Field(..., alias='Status')
20
+ failing_streak: int = Field(..., alias='FailingStreak')
21
+ log: List[Dict[str, Any]] = Field(..., alias='Log')
22
+
23
+
24
+ class ContainerState(BaseModel):
25
+ """Container state information."""
26
+ status: str = Field(..., alias='Status')
27
+ running: bool = Field(..., alias='Running')
28
+ paused: bool = Field(..., alias='Paused')
29
+ restarting: bool = Field(..., alias='Restarting')
30
+ oom_killed: bool = Field(..., alias='OOMKilled')
31
+ dead: bool = Field(..., alias='Dead')
32
+ pid: int = Field(..., alias='Pid')
33
+ exit_code: int = Field(..., alias='ExitCode')
34
+ error: str = Field(..., alias='Error')
35
+ started_at: str = Field(..., alias='StartedAt')
36
+ finished_at: str = Field(..., alias='FinishedAt')
37
+ health: Optional[HealthCheck] = Field(None, alias='Health')
38
+
39
+
40
+ class ContainerHealthDetail(BaseModel):
41
+ """Detailed container health information."""
42
+ id: str
43
+ name: str
44
+ state: Optional[ContainerState] = None
45
+ health: Optional[HealthCheck] = None
@@ -0,0 +1,104 @@
1
+ """
2
+ Docker 操作相关的 API 响应模型
3
+ """
4
+ from typing import (
5
+ Any,
6
+ Dict,
7
+ List,
8
+ Optional,
9
+ )
10
+
11
+ from pydantic import BaseModel
12
+
13
+
14
+ class ContainerInfo(BaseModel):
15
+ """容器基本信息"""
16
+ id: str
17
+ name: str
18
+ status: str
19
+ image: Any
20
+ created: Optional[str] = None
21
+ ports: Any
22
+ labels: Dict[str, str]
23
+
24
+
25
+ class ContainerListResponse(BaseModel):
26
+ """容器列表响应"""
27
+ success: bool
28
+ containers: Optional[List[ContainerInfo]] = None
29
+ error: Optional[str] = None
30
+
31
+
32
+ class ContainerDetailResponse(BaseModel):
33
+ """容器详情响应"""
34
+ success: bool
35
+ container: Optional[Dict[str, Any]] = None
36
+ error: Optional[str] = None
37
+
38
+
39
+ class ContainerLogsResponse(BaseModel):
40
+ """容器日志响应"""
41
+ success: bool
42
+ logs: Optional[Any] = None
43
+ error: Optional[str] = None
44
+
45
+
46
+ class ImageInfo(BaseModel):
47
+ """镜像基本信息"""
48
+ id: str
49
+ tags: List[str]
50
+ size: int
51
+ created: Optional[str] = None
52
+
53
+
54
+ class ImageListResponse(BaseModel):
55
+ """镜像列表响应"""
56
+ success: bool
57
+ images: Optional[List[ImageInfo]] = None
58
+ error: Optional[str] = None
59
+
60
+
61
+ class NetworkInfo(BaseModel):
62
+ """网络基本信息"""
63
+ id: str
64
+ name: str
65
+ driver: str
66
+ scope: str
67
+ containers: List[Any]
68
+
69
+
70
+ class NetworkListResponse(BaseModel):
71
+ """网络列表响应"""
72
+ success: bool
73
+ networks: Optional[List[NetworkInfo]] = None
74
+ error: Optional[str] = None
75
+
76
+
77
+ class VolumeInfo(BaseModel):
78
+ """卷基本信息"""
79
+ name: str
80
+ driver: str
81
+ mountpoint: str
82
+
83
+
84
+ class VolumeListResponse(BaseModel):
85
+ """卷列表响应"""
86
+ success: bool
87
+ volumes: Optional[List[VolumeInfo]] = None
88
+ error: Optional[str] = None
89
+
90
+
91
+ class EngineInfo(BaseModel):
92
+ """引擎信息"""
93
+ version: str
94
+ api_version: str
95
+ os_type: str
96
+ architecture: str
97
+
98
+
99
+ class EngineHealthResponse(BaseModel):
100
+ """引擎健康状态响应"""
101
+ success: bool
102
+ healthy: Optional[bool] = None
103
+ engine_info: Optional[EngineInfo] = None
104
+ error: Optional[str] = None
@@ -0,0 +1,54 @@
1
+ """
2
+ controllersrv API 请求模型
3
+
4
+ 定义了 controllersrv API 的请求模型,以确保一致性和类型安全。
5
+ """
6
+ from typing import (
7
+ Optional,
8
+ List,
9
+ Dict,
10
+ Any,
11
+ )
12
+ from pydantic import (
13
+ BaseModel,
14
+ Field,
15
+ field_validator,
16
+ )
17
+
18
+
19
+ class ServiceOperationRequest(BaseModel):
20
+ """服务操作请求模型"""
21
+ serial_number: str = Field(..., description="流水号,用于防重", min_length=1)
22
+ service_names: List[str] = Field(..., description="服务名称列表", min_length=1)
23
+ params: Optional[Dict[str, Any]] = Field(default_factory=dict, description="额外参数")
24
+
25
+ @field_validator('service_names')
26
+ @classmethod
27
+ def validate_service_names(cls, v):
28
+ """验证服务名称列表"""
29
+ if not v:
30
+ raise ValueError("service_names must not be empty")
31
+ for name in v:
32
+ if not name or not isinstance(name, str) or not name.strip():
33
+ raise ValueError(f"Invalid service name: {name}")
34
+ return v
35
+
36
+ @field_validator('serial_number')
37
+ @classmethod
38
+ def validate_serial_number(cls, v):
39
+ """验证流水号并去除首尾空格"""
40
+ if not v or not v.strip():
41
+ raise ValueError("serial_number must not be empty")
42
+ return v.strip()
43
+
44
+
45
+ class TaskQueryRequest(BaseModel):
46
+ """任务查询请求模型"""
47
+ serial_number: Optional[str] = Field(None, description="流水号")
48
+ status: Optional[str] = Field(None, description="任务状态过滤")
49
+ limit: int = Field(100, description="最大返回数量", ge=1, le=1000)
50
+
51
+
52
+ class ServiceStatusRequest(BaseModel):
53
+ """服务状态查询请求模型"""
54
+ service_names: Optional[List[str]] = Field(None, description="服务名称列表")
@@ -0,0 +1,124 @@
1
+ """
2
+ controllersrv API 响应模型
3
+
4
+ 定义了 controllersrv API 的标准响应模型,以确保一致性和类型安全。
5
+ """
6
+ from typing import (
7
+ Dict,
8
+ Any,
9
+ Optional,
10
+ List,
11
+ )
12
+ from enum import Enum
13
+ from pydantic import (
14
+ BaseModel,
15
+ Field,
16
+ )
17
+
18
+ from cancan_microstack.public.const.operation_consts import (
19
+ OperationStatus,
20
+ )
21
+
22
+
23
+ class ApiResponseKey(str, Enum):
24
+ """API 响应字典的 Key"""
25
+ SUCCESS = "success"
26
+ STATUS = "status"
27
+ SERIAL_NUMBER = "serial_number"
28
+ OPERATION = "operation"
29
+ SERVICE_NAMES = "service_names"
30
+ MESSAGE = "message"
31
+ TASK = "task"
32
+ TASKS = "tasks"
33
+ COUNT = "count"
34
+ STATS = "stats"
35
+
36
+
37
+ class EnqueueSuccessResponse(BaseModel):
38
+ """任务入队成功响应"""
39
+ success: bool = Field(default=True, description="是否成功")
40
+ status: str = Field(default=OperationStatus.PENDING, description="任务状态")
41
+ serial_number: str = Field(..., description="流水号")
42
+ operation: str = Field(..., description="操作类型")
43
+ service_names: List[str] = Field(..., description="服务名称列表")
44
+ message: str = Field(default="Task enqueued successfully", description="响应消息")
45
+
46
+
47
+ class EnqueueErrorResponse(BaseModel):
48
+ """任务入队失败响应"""
49
+ success: bool = Field(default=False, description="是否成功")
50
+ status: str = Field(default="error", description="任务状态")
51
+ serial_number: Optional[str] = Field(None, description="流水号")
52
+ message: str = Field(..., description="错误消息")
53
+
54
+
55
+ class TaskNotFoundResponse(BaseModel):
56
+ """任务未找到响应"""
57
+ success: bool = Field(False, description="是否成功")
58
+ message: str = Field(..., description="响应消息")
59
+
60
+
61
+ class TaskStatusResponse(BaseModel):
62
+ """任务状态查询成功响应"""
63
+ success: bool = Field(default=True, description="是否成功")
64
+ task: Dict[str, Any] = Field(..., description="任务详情")
65
+
66
+
67
+ class TaskListResponse(BaseModel):
68
+ """任务列表响应"""
69
+ success: bool = Field(default=True, description="是否成功")
70
+ tasks: List[Dict[str, Any]] = Field(..., description="任务列表")
71
+ count: int = Field(..., description="任务数量")
72
+
73
+
74
+ class TaskQueueStats(BaseModel):
75
+ """任务队列统计信息"""
76
+ queue_size: int = Field(..., description="当前队列中的任务数")
77
+ total_tasks: int = Field(..., description="历史总任务数(包括已完成)")
78
+ active_serial_numbers: int = Field(..., description="活跃流水号数量")
79
+ status_counts: Dict[str, int] = Field(..., description="按状态统计的任务数量")
80
+ max_queue_size: int = Field(..., description="队列最大容量")
81
+
82
+
83
+ class QueueStatsResponse(BaseModel):
84
+ """队列统计信息响应"""
85
+ success: bool = Field(default=True, description="是否成功")
86
+ stats: TaskQueueStats = Field(..., description="统计信息")
87
+ error: Optional[str] = Field(default=None, description="错误信息")
88
+
89
+
90
+ class ServiceStatusResponse(BaseModel):
91
+ """服务状态响应"""
92
+ success: bool = Field(..., description="是否成功")
93
+ services: List[str] = Field(default_factory=list, description="服务列表")
94
+ error: Optional[str] = Field(default=None, description="错误信息")
95
+
96
+
97
+ class ServiceListResponse(BaseModel):
98
+ """服务列表响应"""
99
+ success: bool = Field(..., description="是否成功")
100
+ services: List[str] = Field(default_factory=list, description="服务列表")
101
+ error: Optional[str] = Field(default=None, description="错误信息")
102
+
103
+
104
+ class ContainerHealthResponse(BaseModel):
105
+ """容器健康状态响应"""
106
+ success: bool = Field(..., description="是否成功")
107
+ service_name: Optional[str] = Field(default=None, description="服务名称")
108
+ containers: List[Dict[str, Any]] = Field(default_factory=list, description="容器健康详情列表")
109
+ error: Optional[str] = Field(default=None, description="错误信息")
110
+
111
+
112
+ class ComposeStatusResponse(BaseModel):
113
+ """Docker Compose 状态响应"""
114
+ success: bool = Field(..., description="是否成功")
115
+ is_running: bool = Field(default=False, description="是否运行中")
116
+ service_count: Optional[int] = Field(default=None, description="服务数量")
117
+ services: List[str] = Field(default_factory=list, description="服务列表")
118
+ error: Optional[str] = Field(default=None, description="错误信息")
119
+
120
+
121
+ class ComposeStatusRequest(BaseModel):
122
+ """Compose 状态查询请求(预留扩展)"""
123
+ # 当前 get_compose_status() 不需要参数,此模型预留供未来使用
124
+ pass