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,102 @@
1
+ """
2
+ 任务领域模型
3
+
4
+ 定义Task相关的领域模型类
5
+ """
6
+ from typing import (
7
+ Dict,
8
+ Any,
9
+ Optional,
10
+ )
11
+ from datetime import datetime
12
+
13
+ from pydantic import (
14
+ BaseModel,
15
+ Field,
16
+ )
17
+
18
+ from cancan_microstack.public.const.operation_consts import (
19
+ OperationType,
20
+ OperationStatus,
21
+ )
22
+
23
+
24
+ class Task(BaseModel):
25
+ """
26
+ 任务数据类
27
+
28
+ Attributes:
29
+ serial_number: 流水号(唯一标识)
30
+ operation: 操作类型
31
+ service_names: 服务名称列表
32
+ params: 其他参数
33
+ status: 任务状态
34
+ created_at: 创建时间
35
+ started_at: 开始执行时间
36
+ finished_at: 完成时间
37
+ result: 执行结果
38
+ error: 错误信息
39
+ retry_count: 重试次数
40
+ """
41
+ serial_number: str
42
+ operation: OperationType
43
+ service_names: list
44
+ params: Dict[str, Any] = Field(default_factory=dict)
45
+ status: OperationStatus = OperationStatus.PENDING
46
+ created_at: datetime = Field(default_factory=datetime.now)
47
+ started_at: Optional[datetime] = None
48
+ finished_at: Optional[datetime] = None
49
+ result: Optional[Dict[str, Any]] = None
50
+ error: Optional[str] = None
51
+ retry_count: int = 0
52
+
53
+ def to_dict(self) -> Dict[str, Any]:
54
+ """转换为字典"""
55
+ return self.model_dump(mode='json')
56
+
57
+ def mark_running(self):
58
+ """标记为运行中"""
59
+ self.status = OperationStatus.RUNNING
60
+ self.started_at = datetime.now()
61
+
62
+ def mark_success(self, result: Dict[str, Any]):
63
+ """标记为成功"""
64
+ self.status = OperationStatus.SUCCESS
65
+ self.finished_at = datetime.now()
66
+ self.result = result
67
+
68
+ def mark_failed(self, error: str):
69
+ """标记为失败"""
70
+ self.status = OperationStatus.FAILED
71
+ self.finished_at = datetime.now()
72
+ self.error = error
73
+
74
+ def mark_timeout(self):
75
+ """标记为超时"""
76
+ self.status = OperationStatus.TIMEOUT
77
+ self.finished_at = datetime.now()
78
+ self.error = "Task execution timeout"
79
+
80
+ def mark_cancelled(self):
81
+ """标记为已取消"""
82
+ self.status = OperationStatus.CANCELLED
83
+ self.finished_at = datetime.now()
84
+ self.error = "Task cancelled"
85
+
86
+ def is_finished(self) -> bool:
87
+ """是否已完成(无论成功还是失败)"""
88
+ return self.status in {
89
+ OperationStatus.SUCCESS,
90
+ OperationStatus.FAILED,
91
+ OperationStatus.TIMEOUT,
92
+ OperationStatus.CANCELLED,
93
+ }
94
+
95
+ def execution_time(self) -> Optional[float]:
96
+ """计算执行时间(秒)"""
97
+ if self.started_at and self.finished_at:
98
+ return (self.finished_at - self.started_at).total_seconds()
99
+ elif self.started_at:
100
+ # 正在执行中
101
+ return (datetime.now() - self.started_at).total_seconds()
102
+ return None
@@ -0,0 +1,23 @@
1
+ """
2
+ controllersrv 验证相关模型
3
+
4
+ 定义服务验证结果等模型
5
+ """
6
+ from typing import List
7
+
8
+ from pydantic import BaseModel
9
+
10
+
11
+ class ValidationResult(BaseModel):
12
+ """服务验证结果模型
13
+
14
+ Attributes:
15
+ valid: 是否验证通过
16
+ invalid_services: 无效的服务名称列表
17
+ non_operable_services: 不可操作的服务名称列表
18
+ valid_services: 有效的服务名称列表
19
+ """
20
+ valid: bool
21
+ invalid_services: List[str]
22
+ non_operable_services: List[str]
23
+ valid_services: List[str]
@@ -0,0 +1,124 @@
1
+ """
2
+ 钩子指标相关的 Pydantic 模型
3
+ Hook metrics related Pydantic models
4
+ """
5
+ from typing import (
6
+ Dict,
7
+ List,
8
+ )
9
+ from datetime import datetime
10
+ from pydantic import (
11
+ BaseModel,
12
+ Field,
13
+ )
14
+
15
+ from cancan_microstack.public.const.metrics_enums import MetricType
16
+
17
+
18
+ class Metric(BaseModel):
19
+ """指标数据类"""
20
+ name: str = Field(description="指标名称")
21
+ metric_type: MetricType = Field(description="指标类型")
22
+ description: str = Field(default="", description="指标描述")
23
+ value: float = Field(default=0.0, description="指标值")
24
+ labels: Dict[str, str] = Field(default_factory=dict, description="标签")
25
+ timestamp: datetime = Field(default_factory=datetime.now, description="时间戳")
26
+
27
+
28
+ class MetricValue(BaseModel):
29
+ """指标值 / Metric value"""
30
+ value: float = Field(description="指标值 / Metric value")
31
+ labels: Dict[str, str] = Field(default_factory=dict, description="标签 / Labels")
32
+ timestamp: datetime = Field(description="时间戳 / Timestamp")
33
+
34
+
35
+ class MetricData(BaseModel):
36
+ """指标数据 / Metric data"""
37
+ name: str = Field(description="指标名称 / Metric name")
38
+ type: str = Field(description="指标类型 / Metric type")
39
+ description: str = Field(description="指标描述 / Metric description")
40
+ values: List[MetricValue] = Field(default_factory=list, description="指标值列表 / Metric values")
41
+
42
+
43
+ class HookExecutionHistoryItem(BaseModel):
44
+ """钩子执行历史项 / Hook execution history item"""
45
+ hook_name: str = Field(description="钩子名称 / Hook name")
46
+ result: str = Field(description="执行结果 / Execution result")
47
+ message: str = Field(description="消息 / Message")
48
+ execution_time: float = Field(description="执行时间(秒) / Execution time (seconds)")
49
+ has_modified_service_info: bool = Field(description="是否修改了服务信息 / Whether service info was modified")
50
+
51
+
52
+ class HookInfo(BaseModel):
53
+ """钩子信息 / Hook information"""
54
+ name: str = Field(description="钩子名称 / Hook name")
55
+ priority: str = Field(description="优先级 / Priority")
56
+ type: str = Field(description="钩子类型 / Hook type")
57
+
58
+
59
+ class HooksByPriority(BaseModel):
60
+ """按优先级分组的钩子 / Hooks grouped by priority"""
61
+ CRITICAL: List[HookInfo] = Field(default_factory=list, description="关键优先级钩子 / Critical priority hooks")
62
+ HIGH: List[HookInfo] = Field(default_factory=list, description="高优先级钩子 / High priority hooks")
63
+ MEDIUM: List[HookInfo] = Field(default_factory=list, description="中优先级钩子 / Medium priority hooks")
64
+ LOW: List[HookInfo] = Field(default_factory=list, description="低优先级钩子 / Low priority hooks")
65
+
66
+
67
+ class HookTypeStatus(BaseModel):
68
+ """钩子类型状态 / Hook type status"""
69
+ count: int = Field(description="钩子数量 / Hook count")
70
+ hooks_by_priority: HooksByPriority = Field(description="按优先级分组的钩子 / Hooks by priority")
71
+
72
+
73
+ class MetricSummary(BaseModel):
74
+ """指标摘要 / Metric summary"""
75
+ type: str = Field(description="指标类型 / Metric type")
76
+ description: str = Field(description="指标描述 / Metric description")
77
+ latest_value: float = Field(description="最新值 / Latest value")
78
+ latest_timestamp: datetime = Field(description="最新时间戳 / Latest timestamp")
79
+
80
+
81
+ class HookPerformance(BaseModel):
82
+ """钩子性能统计 / Hook performance statistics"""
83
+ total_executions: int = Field(default=0, description="总执行次数 / Total executions")
84
+ successful_executions: int = Field(default=0, description="成功执行次数 / Successful executions")
85
+ failed_executions: int = Field(default=0, description="失败执行次数 / Failed executions")
86
+ total_execution_time: float = Field(default=0.0, description="总执行时间 / Total execution time")
87
+ min_execution_time: float = Field(default=float('inf'), description="最小执行时间 / Min execution time")
88
+ max_execution_time: float = Field(default=0.0, description="最大执行时间 / Max execution time")
89
+ avg_execution_time: float = Field(default=0.0, description="平均执行时间 / Average execution time")
90
+
91
+
92
+ class OverallPerformanceStats(BaseModel):
93
+ """整体性能统计 / Overall performance statistics"""
94
+ total_executions: int = Field(description="总执行次数 / Total executions")
95
+ successful_executions: int = Field(description="成功执行次数 / Successful executions")
96
+ failed_executions: int = Field(description="失败执行次数 / Failed executions")
97
+ success_rate: float = Field(description="成功率(%) / Success rate (%)")
98
+
99
+
100
+ class BaseMetricLabels(BaseModel):
101
+ """指标标签基类"""
102
+ hook_name: str
103
+ hook_type: str
104
+
105
+
106
+ class HookExecutionLabels(BaseMetricLabels):
107
+ """hook_executions_total 指标的标签"""
108
+ result: str
109
+
110
+
111
+ class HookFailureLabels(BaseMetricLabels):
112
+ """hook_failures_total 指标的标签"""
113
+ error_type: str
114
+
115
+
116
+ class ActiveHooksLabels(BaseModel):
117
+ """active_hooks 指标的标签"""
118
+ hook_type: str
119
+
120
+
121
+ class HookRejectionLabels(BaseModel):
122
+ """hook_rejections_total 指标的标签"""
123
+ hook_name: str
124
+ reason: str
@@ -0,0 +1,39 @@
1
+ from datetime import datetime
2
+ from typing import (
3
+ Any,
4
+ Dict,
5
+ Optional,
6
+ )
7
+
8
+ from pydantic import (
9
+ BaseModel,
10
+ Field,
11
+ )
12
+
13
+ from cancan_microstack.public.schemas.infra.enums import HookExecutionResult as HookResult
14
+
15
+
16
+ class HookContext(BaseModel):
17
+ """钩子执行上下文"""
18
+ service_name: str = Field(description="服务名称")
19
+ service_type: str = Field(description="服务类型")
20
+ instance_id: str = Field(description="实例ID")
21
+ host: Optional[str] = Field(default=None, description="主机地址")
22
+ port: Optional[int] = Field(default=None, description="端口号")
23
+ metadata: Dict[str, Any] = Field(default_factory=dict, description="元数据")
24
+ created_at: datetime = Field(default_factory=datetime.now, description="创建时间")
25
+ retry_count: int = Field(default=0, description="重试次数")
26
+ max_retries: int = Field(default=3, description="最大重试次数")
27
+ timeout: int = Field(default=30, description="超时时间")
28
+ dry_run: bool = Field(default=False, description="是否为试运行")
29
+
30
+
31
+ class HookExecutionResult(BaseModel):
32
+ """钩子执行结果"""
33
+ hook_name: str = Field(description="钩子名称")
34
+ result: HookResult = Field(description="执行结果")
35
+ message: str = Field(default="", description="消息")
36
+ execution_time: float = Field(default=0.0, description="执行时间")
37
+ error: Optional[str] = Field(default=None, description="错误信息")
38
+ timestamp: datetime = Field(default_factory=datetime.now, description="时间戳")
39
+ retry_count: int = Field(default=0, description="重试次数")
File without changes
@@ -0,0 +1,25 @@
1
+ from typing import (
2
+ List,
3
+ Optional,
4
+ )
5
+ from datetime import datetime
6
+
7
+ from pydantic import (
8
+ BaseModel,
9
+ Field,
10
+ )
11
+
12
+
13
+ class CleanupDetail(BaseModel):
14
+ service_name: str = Field(...)
15
+ instance_id: str = Field(...)
16
+ action: str = Field(...)
17
+ reason: Optional[str] = None
18
+ last_heartbeat: Optional[datetime] = None
19
+
20
+
21
+ class CleanupResult(BaseModel):
22
+ total_checked: int = Field(...)
23
+ cleaned: int = Field(default=0)
24
+ kept: int = Field(default=0)
25
+ details: List[CleanupDetail] = Field(default_factory=list)
@@ -0,0 +1,74 @@
1
+ """
2
+ Container related types
3
+ """
4
+ from typing import Optional
5
+ from datetime import datetime
6
+
7
+ from pydantic import (
8
+ BaseModel,
9
+ Field,
10
+ )
11
+
12
+
13
+ class ContainerState(BaseModel):
14
+ """Represents the state of a container at a point in time."""
15
+ name: str = Field(description="容器名称")
16
+ status: str = Field(description="容器状态 (e.g., 'running', 'exited', 'unknown', 'error')")
17
+ running: bool = Field(description="容器是否正在运行")
18
+ is_healthy: bool = Field(default=False, description="容器是否健康")
19
+ error: Optional[str] = Field(default=None, description="检查时发生的错误信息")
20
+ checked_at: datetime = Field(default_factory=datetime.now, description="状态检查时间")
21
+
22
+ # Fields from container_info.to_dict() that might be useful
23
+ id: Optional[str] = None
24
+ paused: bool = False
25
+ restarting: bool = False
26
+ oom_killed: bool = False
27
+ exit_code: int = 0
28
+ started_at: Optional[str] = None
29
+ finished_at: Optional[str] = None
30
+ health: Optional[dict] = None
31
+ network_settings: Optional[dict] = None
32
+ ports: Optional[dict] = None
33
+ labels: Optional[dict] = None
34
+ created: Optional[str] = None
35
+
36
+ class Config:
37
+ from_attributes = True
38
+
39
+
40
+ class FullContainerState(ContainerState):
41
+ """Represents the combined state of a container and its service instance."""
42
+ instance_id: Optional[str] = None
43
+ service_name: Optional[str] = None
44
+ expected_status: Optional[str] = None
45
+ db_status: Optional[str] = None
46
+
47
+
48
+ class ContainerStateCacheEntry(BaseModel):
49
+ """Represents a cache entry for a container's state."""
50
+ state: ContainerState
51
+ timestamp: datetime
52
+
53
+
54
+ class InconsistentInstanceInfo(BaseModel):
55
+ """Represents information about an instance with inconsistent state."""
56
+ instance_id: str
57
+ service_name: str
58
+ container_name: str
59
+ db_status: str
60
+ expected_status: str
61
+ container_status: Optional[str] = None
62
+ container_running: bool
63
+ container_healthy: bool
64
+ inconsistency_reason: str
65
+
66
+
67
+ class CleanedInstanceInfo(BaseModel):
68
+ """Represents information about a cleaned-up instance."""
69
+ instance_id: str
70
+ service_name: str
71
+ container_name: str
72
+ exit_code: Optional[int] = None
73
+ finished_at: Optional[str] = None
74
+ reason: str
@@ -0,0 +1,135 @@
1
+ from enum import (
2
+ StrEnum,
3
+ IntEnum,
4
+ )
5
+
6
+
7
+ class ServiceType(StrEnum):
8
+ """服务类型"""
9
+ INFRASTRUCTURE = "infrastructure"
10
+ BUSINESS = "business"
11
+ OPS = "ops"
12
+
13
+
14
+ class HookExecutionResult(StrEnum):
15
+ """钩子执行结果"""
16
+ SUCCESS = "SUCCESS"
17
+ FAILURE = "FAILURE"
18
+ TERMINATE = "TERMINATE"
19
+ RETRY = "RETRY"
20
+
21
+
22
+ class HookPriority(IntEnum):
23
+ """钩子优先级"""
24
+ HIGHEST = 1
25
+ HIGH = 2
26
+ NORMAL = 3
27
+ LOW = 4
28
+ LOWEST = 5
29
+
30
+
31
+ class WorkflowStatus(StrEnum):
32
+ PENDING = "PENDING"
33
+ RUNNING = "RUNNING"
34
+ SUCCESS = "SUCCESS"
35
+ FAILURE = "FAILURE"
36
+ CANCELLED = "CANCELLED"
37
+ PAUSED = "PAUSED"
38
+
39
+
40
+ class NodeStatus(StrEnum):
41
+ PENDING = "PENDING"
42
+ RUNNING = "RUNNING"
43
+ SUCCESS = "SUCCESS"
44
+ FAILURE = "FAILURE"
45
+ SKIPPED = "SKIPPED"
46
+ SUSPENDED = "SUSPENDED" # 等待回调
47
+ RETRYING = "RETRYING"
48
+ CANCELLED = "CANCELLED" # 跟随流程取消
49
+
50
+
51
+ class TriggerType(StrEnum):
52
+ MANUAL = "MANUAL"
53
+ SCHEDULE = "SCHEDULE"
54
+ API = "API"
55
+
56
+
57
+ class NodeType(StrEnum):
58
+ START = "START"
59
+ ACTION = "ACTION"
60
+ TRANSFORM = "TRANSFORM"
61
+ LOGIC = "LOGIC"
62
+ FORK = "FORK" # 并行分支节点 / Parallel fork node
63
+ JOIN = "JOIN"
64
+ LOOP = "LOOP"
65
+ END = "END"
66
+
67
+
68
+ class ConditionTruth(StrEnum):
69
+ """条件求值标准化枚举 / Normalized enum for condition evaluations"""
70
+
71
+ TRUE = "true"
72
+ FALSE = "false"
73
+
74
+
75
+ class JoinMode(StrEnum):
76
+ ALL = "ALL"
77
+ ANY = "ANY"
78
+
79
+ class EndStatus(StrEnum):
80
+ SUCCESS = "SUCCESS"
81
+ FAILURE = "FAILURE"
82
+
83
+ class TransformEngine(StrEnum):
84
+ """数据转换引擎枚举 / Enumerates transform engines"""
85
+
86
+ JINJA2 = "JINJA2"
87
+ JMESPATH = "JMESPATH"
88
+
89
+
90
+ class ExecutionLogStatus(StrEnum):
91
+ """执行日志状态 / Execution log status"""
92
+
93
+ PENDING = "PENDING"
94
+ SUCCESS = "SUCCESS"
95
+ FAILURE = "FAILURE"
96
+ TIMEOUT = "TIMEOUT"
97
+
98
+
99
+ class TriggerDispatchStatus(StrEnum):
100
+ """工作流触发指令状态 / Workflow trigger dispatch status"""
101
+
102
+ DISPATCHED = "DISPATCHED"
103
+ QUEUED_NO_ENTRY = "QUEUED_NO_ENTRY"
104
+
105
+
106
+ class CallbackAckStatus(StrEnum):
107
+ """回调确认结果 / Callback acknowledgement status"""
108
+
109
+ ACCEPTED = "ACCEPTED"
110
+ IGNORED = "IGNORED"
111
+
112
+
113
+ class WorkflowEngineAlertStatus(StrEnum):
114
+ """工作流引擎告警状态枚举 / Workflow engine alert lifecycle status"""
115
+
116
+ OPEN = "OPEN"
117
+ ACKED = "ACKED"
118
+ RESOLVED = "RESOLVED"
119
+
120
+
121
+ class WorkflowEngineAlertSeverity(StrEnum):
122
+ """工作流引擎告警严重程度 / Workflow engine alert severity"""
123
+
124
+ CRITICAL = "CRITICAL"
125
+ MAJOR = "MAJOR"
126
+ MINOR = "MINOR"
127
+
128
+
129
+ class WorkflowEngineAlertCategory(StrEnum):
130
+ """告警分类,便于前端筛选 / Alert category for filtering"""
131
+
132
+ ORCHESTRATOR_GUARD = "ORCHESTRATOR_GUARD"
133
+ TRANSPORT_PIPELINE = "TRANSPORT_PIPELINE"
134
+ CALLBACK = "CALLBACK"
135
+ DATA_INTEGRITY = "DATA_INTEGRITY"
@@ -0,0 +1,42 @@
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.const.health_consts import InstanceHealthStatus
12
+
13
+
14
+ class InstanceHealthDetail(BaseModel):
15
+ """单个实例的健康检查详情模型"""
16
+ instance_id: str = Field(..., description="实例ID")
17
+ service_name: str = Field(..., description="服务名称")
18
+ host: str = Field(..., description="主机")
19
+ port: int = Field(..., description="端口")
20
+ status: str = Field(..., description="实例运行状态")
21
+ health_status: InstanceHealthStatus = Field(
22
+ InstanceHealthStatus.UNKNOWN, description="健康状态"
23
+ )
24
+ consecutive_failures: int = Field(0, description="连续失败次数")
25
+ exempted: bool = Field(False, description="是否被豁免")
26
+ exemption_reason: Optional[str] = Field(None, description="豁免原因")
27
+ expected_stopped: bool = Field(False, description="是否期望停止")
28
+ action_taken: Optional[str] = Field(None, description="采取的自动动作标识")
29
+ # 使用 Optional[str] 接受 ISO 字符串或 datetime,方便与现有代码兼容
30
+ last_heartbeat: Optional[str] = Field(None, description="最后心跳时间 (ISO string)")
31
+
32
+
33
+ class HealthCheckSummary(BaseModel):
34
+ """整体健康检查汇总结果模型"""
35
+ total: int = Field(..., description="实例总数")
36
+ healthy: int = Field(default=0, description="健康实例数")
37
+ unhealthy: int = Field(default=0, description="不健康实例数")
38
+ degraded: int = Field(default=0, description="降级实例数")
39
+ exempted: int = Field(default=0, description="豁免实例数")
40
+ expected_stopped: int = Field(default=0, description="期望停止实例数")
41
+ details: List[InstanceHealthDetail] = Field(default_factory=list, description="实例详情列表")
42
+
@@ -0,0 +1,42 @@
1
+ """
2
+ Hook 日志数据模型
3
+ Hook logging data models
4
+ """
5
+ from typing import (
6
+ Dict,
7
+ Any,
8
+ Optional,
9
+ )
10
+
11
+ from pydantic import (
12
+ BaseModel,
13
+ Field,
14
+ )
15
+
16
+
17
+ class HookInfo(BaseModel):
18
+ """
19
+ 钩子信息模型
20
+ Hook information model
21
+ """
22
+ name: str = Field(..., description="钩子名称 / Hook name")
23
+ type: str = Field(..., description="钩子类型 / Hook type")
24
+ priority: Optional[str] = Field(None, description="钩子优先级 / Hook priority")
25
+
26
+
27
+ class HookLogData(BaseModel):
28
+ """
29
+ 钩子日志数据模型,用于结构化日志输出
30
+ Hook log data model for structured logging
31
+ """
32
+ timestamp: str = Field(..., description="时间戳 (ISO格式) / Timestamp (ISO format)")
33
+ hook: HookInfo = Field(..., description="钩子信息 / Hook information")
34
+ message: str = Field(..., description="日志消息 / Log message")
35
+ context: Optional[Dict[str, Any]] = Field(None, description="上下文数据 / Context data")
36
+ execution_time: Optional[float] = Field(None, description="执行时间(秒)/ Execution time (seconds)")
37
+ error: Optional[str] = Field(None, description="错误信息 / Error message")
38
+ rejection_reason: Optional[str] = Field(None, description="拒绝原因 / Rejection reason")
39
+ modifications: Optional[Dict[str, Any]] = Field(None, description="修改内容 / Modifications")
40
+
41
+ class Config:
42
+ from_attributes = True