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 模型
3
+
4
+ 供 opsbffsrv 和 infrasrv 之间通信使用
5
+ """
6
+ from typing import (
7
+ Optional,
8
+ Dict,
9
+ Any,
10
+ )
11
+ from datetime import datetime
12
+ from pydantic import (
13
+ BaseModel,
14
+ ConfigDict,
15
+ Field,
16
+ )
17
+
18
+ from cancan_microstack.public.const.operation_consts import (
19
+ OperationType,
20
+ OperationStatus,
21
+ InitiatedBy,
22
+ InitiatedFrom,
23
+ )
24
+
25
+
26
+ class OperationCreateRequest(BaseModel):
27
+ """创建操作记录请求"""
28
+ operation_id: str = Field(..., description="操作ID")
29
+ operation_type: OperationType = Field(..., description="操作类型")
30
+ service_name: str = Field(..., description="服务名称(带 .service 后缀)")
31
+ operation_params: Dict[str, Any] = Field(default_factory=dict, description="操作参数")
32
+ status: OperationStatus = Field(default=OperationStatus.PENDING, description="操作状态")
33
+ initiated_by: InitiatedBy = Field(default=InitiatedBy.OPSBFFSRV, description="操作发起者")
34
+ initiated_from: InitiatedFrom = Field(default=InitiatedFrom.FRONTEND, description="发起来源")
35
+
36
+
37
+ class OperationUpdateRequest(BaseModel):
38
+ """更新操作记录请求"""
39
+ operation_id: str = Field(..., description="操作ID")
40
+ status: Optional[OperationStatus] = Field(default=None, description="操作状态")
41
+ started_at: Optional[datetime] = Field(default=None, description="开始时间")
42
+ completed_at: Optional[datetime] = Field(default=None, description="完成时间")
43
+ result: Optional[Dict[str, Any]] = Field(default=None, description="操作结果")
44
+ error_message: Optional[str] = Field(default=None, description="错误信息")
45
+
46
+
47
+ class OperationQueryRequest(BaseModel):
48
+ """查询操作记录请求"""
49
+ operation_id: Optional[str] = Field(default=None, description="操作ID")
50
+ service_name: Optional[str] = Field(default=None, description="服务名称")
51
+ status: Optional[OperationStatus] = Field(default=None, description="操作状态")
52
+ limit: int = Field(default=50, ge=1, le=1000, description="返回记录数")
53
+ offset: int = Field(default=0, ge=0, description="偏移量")
54
+
55
+
56
+ class Operation(BaseModel):
57
+ """操作记录"""
58
+
59
+ model_config = ConfigDict(from_attributes=True)
60
+
61
+ id: Optional[int] = None
62
+ operation_id: str
63
+ operation_type: str # 保持字符串以兼容数据库
64
+ service_name: str
65
+ operation_params: Dict[str, Any] = Field(default_factory=dict)
66
+ status: str = "pending" # 保持字符串以兼容数据库
67
+ started_at: Optional[datetime] = None
68
+ completed_at: Optional[datetime] = None
69
+ result: Dict[str, Any] = Field(default_factory=dict)
70
+ error_message: Optional[str] = None
71
+ retry_count: int = 0
72
+ max_retries: int = 3
73
+ last_retry_at: Optional[datetime] = None
74
+ initiated_by: str = "system" # 保持字符串以兼容数据库
75
+ initiated_from: str = "unknown" # 保持字符串以兼容数据库
76
+ flag: int = 0
77
+ created_time: Optional[datetime] = None
78
+ update_time: Optional[datetime] = None
79
+
80
+
81
+
82
+ class OperationResponse(BaseModel):
83
+ """操作响应"""
84
+ operation: Optional[Operation] = None
85
+
86
+
87
+ class OperationListResponse(BaseModel):
88
+ """操作列表响应"""
89
+ operations: list[Operation] = Field(default_factory=list)
90
+ count: int = 0
@@ -0,0 +1,25 @@
1
+ """
2
+ Service overview related Pydantic models.
3
+ """
4
+ from pydantic import BaseModel
5
+
6
+ from cancan_microstack.public.const.health_consts import (
7
+ HealthOverallStatus,
8
+ ServiceRuntimeStatus,
9
+ )
10
+
11
+
12
+ class ServiceOverview(BaseModel):
13
+ """Service overview data model."""
14
+ service_name: str
15
+ description: str = ""
16
+ service_type: str = "business"
17
+ expected_status: ServiceRuntimeStatus = ServiceRuntimeStatus.RUNNING
18
+ actual_status: ServiceRuntimeStatus = ServiceRuntimeStatus.STOPPED
19
+ status_matches_expected: bool = False
20
+ desired_replicas: int = 1
21
+ actual_replicas: int = 0
22
+ total_instances: int = 0
23
+ healthy_instances: int = 0
24
+ unhealthy_instances: int = 0
25
+ overall_status: HealthOverallStatus = HealthOverallStatus.DOWN
@@ -0,0 +1,33 @@
1
+ from typing import (
2
+ List,
3
+ Optional,
4
+ )
5
+
6
+ from pydantic import (
7
+ BaseModel,
8
+ Field,
9
+ )
10
+
11
+
12
+ class PushDetail(BaseModel):
13
+ """
14
+ 配置推送单实例结果模型
15
+ Result model for a single push-to-service attempt
16
+ """
17
+ instance_id: str = Field(..., description="Instance ID")
18
+ host: str = Field(..., description="Host")
19
+ port: int = Field(..., description="Port")
20
+ status: str = Field(..., description="Result status, see OperationStatus")
21
+ error: Optional[str] = Field(default=None, description="Error message if failed")
22
+
23
+
24
+ class PushResult(BaseModel):
25
+ """
26
+ 配置推送汇总结果模型
27
+ Summary model for push-to-service operations
28
+ """
29
+ service_name: str = Field(..., description="Service name")
30
+ total_instances: int = Field(..., description="Total target instances")
31
+ success: int = Field(default=0, description="Successful pushes")
32
+ failed: int = Field(default=0, description="Failed pushes")
33
+ details: List[PushDetail] = Field(default_factory=list, description="Per-instance push details")
@@ -0,0 +1,47 @@
1
+ """
2
+ 服务行为日志相关的 Pydantic 类型定义
3
+ """
4
+ from typing import (
5
+ Optional,
6
+ Dict,
7
+ Any,
8
+ )
9
+ from datetime import datetime
10
+
11
+ from pydantic import (
12
+ BaseModel,
13
+ ConfigDict,
14
+ Field,
15
+ )
16
+
17
+
18
+ class ServiceActionLog(BaseModel):
19
+ """服务行为日志数据模型"""
20
+
21
+ model_config = ConfigDict(from_attributes=True)
22
+
23
+ id: Optional[int] = None
24
+ service_name: str = Field(..., description="服务名称")
25
+ instance_id: Optional[str] = Field(default=None, description="实例ID")
26
+ action_type: str = Field(..., description="行为类型")
27
+ action_status: str = Field(..., description="行为状态")
28
+ action_detail: Optional[Dict[str, Any]] = Field(default=None, description="行为详情")
29
+ error_message: Optional[str] = Field(default=None, description="错误信息")
30
+ triggered_by: str = Field(default="system", description="触发者")
31
+ action_metadata: Optional[Dict[str, Any]] = Field(default=None, description="行为附加元数据")
32
+ flag: int = Field(default=0, description="标志位")
33
+ created_time: Optional[datetime] = None
34
+ update_time: Optional[datetime] = None
35
+
36
+
37
+
38
+ class ServiceActionLogCreate(BaseModel):
39
+ """创建服务行为日志的请求模型"""
40
+ service_name: str = Field(..., description="服务名称")
41
+ instance_id: Optional[str] = Field(default=None, description="实例ID")
42
+ action_type: str = Field(..., description="行为类型:register, deregister, heartbeat, health_check_fail, restart, scale, rebuild")
43
+ action_status: str = Field(..., description="行为状态:success, failed, in_progress")
44
+ action_detail: Optional[Dict[str, Any]] = Field(default=None, description="行为详情")
45
+ error_message: Optional[str] = Field(default=None, description="错误信息")
46
+ triggered_by: str = Field(default="system", description="触发者:system, user, auto")
47
+ action_metadata: Optional[Dict[str, Any]] = Field(default=None, description="行为附加元数据")
@@ -0,0 +1,10 @@
1
+ from pydantic import (
2
+ BaseModel,
3
+ Field,
4
+ )
5
+
6
+
7
+ class ServiceConfig(BaseModel):
8
+ service_name: str = Field(..., description="The name of the service")
9
+ conf_key: str = Field(..., description="The configuration key")
10
+ conf_value: str = Field(..., description="The configuration value")
@@ -0,0 +1,69 @@
1
+ """
2
+ 服务信息相关的 Pydantic 类型定义
3
+ """
4
+ from typing import (
5
+ Optional,
6
+ Dict,
7
+ Any,
8
+ )
9
+ from datetime import datetime
10
+
11
+ from pydantic import (
12
+ BaseModel,
13
+ ConfigDict,
14
+ Field,
15
+ )
16
+
17
+
18
+ class ServiceInfo(BaseModel):
19
+ """服务信息数据模型"""
20
+
21
+ model_config = ConfigDict(from_attributes=True)
22
+
23
+ id: Optional[int] = None
24
+ service_name: str = Field(..., description="服务名称")
25
+ description: Optional[str] = Field(default=None, description="服务描述")
26
+ service_type: str = Field(default="business", description="服务类型")
27
+ health_check_path: str = Field(default="/internal/health", description="默认健康检查路径")
28
+ service_metadata: Dict[str, Any] = Field(
29
+ default_factory=dict,
30
+ description="服务附加元数据(聚合 owner/deploy_region/config_version/labels 等信息)",
31
+ )
32
+ expected_status: str = Field(default="running", description="期望状态: running|stopped")
33
+ # 注意:以下副本数/扩缩容相关字段仅作"记录期望状态"用途,系统不会据此真正增减容器(扩缩容执行未实现)。
34
+ desired_replicas: int = Field(default=1, description="期望副本数(仅记录,不触发扩缩容)")
35
+ actual_replicas: int = Field(default=0, description="实际副本数(由上游上报回填)")
36
+ last_scale_at: Optional[datetime] = Field(default=None, description="最后记录副本数变更的时间(非真实扩缩容动作)")
37
+ scale_policy: Dict[str, Any] = Field(default_factory=dict, description="扩缩容策略(占位,未实现自动扩缩容)")
38
+ registered_time: Optional[datetime] = Field(default=None, description="首次注册时间")
39
+ last_registered_time: Optional[datetime] = Field(default=None, description="最近注册时间")
40
+ flag: int = Field(default=0, description="标志位")
41
+ created_time: Optional[datetime] = None
42
+ update_time: Optional[datetime] = None
43
+
44
+
45
+
46
+ class ServiceInfoCreate(BaseModel):
47
+ """创建服务信息的请求模型"""
48
+
49
+ service_name: str = Field(..., description="服务名称", min_length=1, max_length=100)
50
+ description: Optional[str] = Field(default=None, description="服务描述")
51
+ service_type: str = Field(default="business", description="服务类型:infrastructure, business, ops")
52
+ health_check_path: str = Field(default="/internal/health", description="健康检查路径")
53
+ service_metadata: Dict[str, Any] = Field(default_factory=dict, description="服务附加元数据")
54
+ desired_replicas: int = Field(default=1, ge=1, description="期望副本数")
55
+ actual_replicas: int = Field(default=0, ge=0, description="当前副本数")
56
+ expected_status: str = Field(default="running", description="期望状态")
57
+ scale_policy: Dict[str, Any] = Field(default_factory=dict, description="扩缩容策略")
58
+
59
+
60
+ class ServiceInfoUpdate(BaseModel):
61
+ """更新服务信息的请求模型"""
62
+ description: Optional[str] = Field(default=None, description="服务描述")
63
+ service_type: Optional[str] = Field(default=None, description="服务类型")
64
+ health_check_path: Optional[str] = Field(default=None, description="健康检查路径")
65
+ service_metadata: Optional[Dict[str, Any]] = Field(default=None, description="服务附加元数据")
66
+ expected_status: Optional[str] = Field(default=None, description="期望状态")
67
+ desired_replicas: Optional[int] = Field(default=None, ge=1, description="期望副本数")
68
+ actual_replicas: Optional[int] = Field(default=None, ge=0, description="当前副本数")
69
+ scale_policy: Optional[Dict[str, Any]] = Field(default=None, description="扩缩容策略")
@@ -0,0 +1,93 @@
1
+ """
2
+ 服务实例相关的 Pydantic 类型定义
3
+ """
4
+ from typing import (
5
+ Optional,
6
+ Dict,
7
+ Any,
8
+ )
9
+ from datetime import datetime
10
+
11
+ from pydantic import (
12
+ BaseModel,
13
+ ConfigDict,
14
+ Field,
15
+ )
16
+
17
+
18
+ class ServiceInstance(BaseModel):
19
+ """
20
+ 服务实例
21
+
22
+ 表示一个服务实例的完整信息,包括网络配置、健康状态、生命周期等。
23
+ """
24
+ id: Optional[int] = None
25
+ service_name: str = Field(..., description="服务名称")
26
+ instance_id: str = Field(..., description="实例ID")
27
+ container_name: Optional[str] = Field(default=None, description="Docker容器名 / Docker container name")
28
+ compose_service_name: Optional[str] = Field(default=None, description="Docker Compose服务名 / Compose service name")
29
+ host: str = Field(..., description="宿主机地址")
30
+ port: int = Field(..., description="服务端口")
31
+ internal_port: int = Field(default=8080, description="容器内部端口")
32
+ status: str = Field(..., description="实例状态 (UP|DOWN|UNHEALTHY) / Instance status")
33
+ expected_status: str = Field(default="UP", description="期望状态 (UP|DOWN) / Desired status")
34
+ health_check_url: Optional[str] = Field(default=None, description="健康检查URL / Health check URL")
35
+ health_status: Optional[str] = Field(None, description="健康状态: healthy|unhealthy|unknown")
36
+ last_health_check: Optional[datetime] = Field(None, description="最后健康检查时间")
37
+ last_heartbeat: Optional[datetime] = Field(None, description="最后心跳时间")
38
+ consecutive_failures: int = Field(default=0, description="连续失败次数")
39
+ last_health_error: Optional[str] = Field(None, description="最后健康检查错误")
40
+ started_at: Optional[datetime] = Field(None, description="启动时间")
41
+ stopped_at: Optional[datetime] = Field(None, description="停止时间")
42
+ restart_count: int = Field(default=0, description="重启次数")
43
+ cpu_limit: Optional[str] = Field(None, description="CPU限制")
44
+ memory_limit: Optional[str] = Field(None, description="内存限制")
45
+ instance_metadata: Dict[str, Any] = Field(default_factory=dict, description="实例元数据 / Instance metadata")
46
+ flag: int = Field(default=0)
47
+ created_time: Optional[datetime] = None
48
+ update_time: Optional[datetime] = None
49
+
50
+ model_config = ConfigDict(from_attributes=True)
51
+
52
+
53
+ class ServiceInstanceCreate(BaseModel):
54
+ """创建服务实例的请求模型"""
55
+ service_name: str
56
+ instance_id: str
57
+ container_name: Optional[str] = None
58
+ compose_service_name: Optional[str] = None
59
+ host: str
60
+ port: int
61
+ internal_port: int = 8080
62
+ status: str = "UP"
63
+ expected_status: str = "UP"
64
+ health_check_url: Optional[str] = None
65
+ health_status: str = "unknown"
66
+ instance_metadata: Dict[str, Any] = Field(default_factory=dict, description="实例元数据")
67
+
68
+
69
+ class ServiceInstanceUpdate(BaseModel):
70
+ """更新服务实例的请求模型"""
71
+ status: Optional[str] = None
72
+ expected_status: Optional[str] = None
73
+ health_status: Optional[str] = None
74
+ health_check_url: Optional[str] = None
75
+ last_health_check: Optional[datetime] = None
76
+ last_heartbeat: Optional[datetime] = None
77
+ consecutive_failures: Optional[int] = None
78
+ last_health_error: Optional[str] = None
79
+ started_at: Optional[datetime] = None
80
+ stopped_at: Optional[datetime] = None
81
+ restart_count: Optional[int] = None
82
+ instance_metadata: Optional[Dict[str, Any]] = None
83
+
84
+
85
+ class ServiceInstanceQuery(BaseModel):
86
+ """查询服务实例的请求模型"""
87
+ service_name: Optional[str] = None
88
+ instance_id: Optional[str] = None
89
+ status: Optional[str] = None
90
+ expected_status: Optional[str] = None
91
+ health_status: Optional[str] = None
92
+ limit: int = Field(default=100, le=1000, description="返回结果数量限制")
93
+ offset: int = Field(default=0, description="分页偏移量")
@@ -0,0 +1,152 @@
1
+ """
2
+ 服务管理相关的 Pydantic 模型 / Service Management Related Pydantic Models
3
+
4
+ 供 infrasrv 和 opsbffsrv 之间通信使用 / Used for communication between infrasrv and opsbffsrv
5
+ """
6
+ from typing import (
7
+ Dict,
8
+ Any,
9
+ Optional,
10
+ )
11
+ from datetime import datetime
12
+ from pydantic import (
13
+ BaseModel,
14
+ Field,
15
+ )
16
+
17
+ from cancan_microstack.public.const.operation_consts import (
18
+ OperationType,
19
+ OperationStatus,
20
+ InitiatedBy,
21
+ InitiatedFrom,
22
+ )
23
+
24
+
25
+ class ServiceManagementRequest(BaseModel):
26
+ """
27
+ 服务管理请求模型 / Service Management Request Model
28
+
29
+ 统一的服务管理请求格式,适用于所有操作类型(start/stop/restart)
30
+ Unified service management request format for supported operation types
31
+ """
32
+ operation_id: str = Field(..., description="操作ID,用于跟踪操作生命周期 / Operation ID for tracking lifecycle")
33
+ service_name: str = Field(..., description="服务名称(带 .service 后缀)/ Service name (with .service suffix)")
34
+ operation_type: OperationType = Field(..., description="操作类型 / Operation type")
35
+ operation_params: Dict[str, Any] = Field(
36
+ default_factory=dict,
37
+ description="操作参数(按需使用)/ Operation parameters (optional)"
38
+ )
39
+ initiated_by: InitiatedBy = Field(
40
+ default=InitiatedBy.OPSBFFSRV,
41
+ description="操作发起者 / Operation initiator"
42
+ )
43
+ initiated_from: InitiatedFrom = Field(
44
+ default=InitiatedFrom.FRONTEND,
45
+ description="发起来源 / Initiation source"
46
+ )
47
+
48
+
49
+ class ServiceManagementResponse(BaseModel):
50
+ """
51
+ 服务管理响应模型 / Service Management Response Model
52
+
53
+ 包含操作执行结果和当前状态 / Contains operation execution result and current status
54
+ """
55
+ operation_id: str = Field(..., description="操作ID / Operation ID")
56
+ status: OperationStatus = Field(..., description="操作状态 / Operation status")
57
+ service_name: str = Field(..., description="服务名称 / Service name")
58
+ message: str = Field(default="", description="响应消息 / Response message")
59
+ result: Optional[Dict[str, Any]] = Field(
60
+ default=None,
61
+ description="操作结果详情(可选)/ Operation result details (optional)"
62
+ )
63
+ error_message: Optional[str] = Field(
64
+ default=None,
65
+ description="错误信息(如果操作失败)/ Error message (if operation failed)"
66
+ )
67
+ started_at: Optional[datetime] = Field(
68
+ default=None,
69
+ description="操作开始时间 / Operation start time"
70
+ )
71
+ completed_at: Optional[datetime] = Field(
72
+ default=None,
73
+ description="操作完成时间 / Operation completion time"
74
+ )
75
+
76
+
77
+ class ServiceOperationResult(BaseModel):
78
+ """
79
+ 服务操作结果模型(用于 controllersrv 返回)/ Service Operation Result Model (for controllersrv response)
80
+
81
+ 解析 controllersrv 返回的详细操作结果 / Parse detailed operation results from controllersrv
82
+ """
83
+ success: bool = Field(..., description="操作是否成功 / Whether operation succeeded")
84
+ message: str = Field(default="", description="结果消息 / Result message")
85
+ service_names: list[str] = Field(default_factory=list, description="涉及的服务列表 / List of involved services")
86
+ details: Dict[str, Any] = Field(
87
+ default_factory=dict,
88
+ description="详细信息(容器状态、日志等)/ Detailed info (container status, logs, etc.)"
89
+ )
90
+
91
+
92
+ class ServiceManagementStats(BaseModel):
93
+ """
94
+ 服务管理统计信息 / Service Management Statistics
95
+
96
+ 用于监控和分析服务管理操作的性能和结果 / Used for monitoring and analyzing service management performance
97
+ """
98
+ total_operations: int = Field(default=0, description="总操作数 / Total operations")
99
+ success_count: int = Field(default=0, description="成功次数 / Success count")
100
+ failed_count: int = Field(default=0, description="失败次数 / Failed count")
101
+
102
+
103
+ class HookResult(BaseModel):
104
+ """
105
+ 钩子执行结果模型 / Hook Execution Result Model
106
+
107
+ 用于预操作钩子返回结果 / Used for pre-operation hook return results
108
+ """
109
+ allow: bool = Field(default=True, description="是否允许操作继续 / Whether to allow operation to continue")
110
+ reason: str = Field(default="", description="拒绝原因(如果 allow=False)/ Rejection reason (if allow=False)")
111
+
112
+
113
+ class ControllerSrvResult(BaseModel):
114
+ """
115
+ ControllerSrv 调用结果模型 / ControllerSrv Call Result Model
116
+
117
+ 统一 controllersrv 返回的结果格式 / Unified result format from controllersrv
118
+ """
119
+ success: bool = Field(..., description="操作是否成功 / Whether operation succeeded")
120
+ message: str = Field(default="", description="结果消息 / Result message")
121
+ error: Optional[str] = Field(default=None, description="错误信息 / Error message")
122
+ retry_count: Optional[int] = Field(default=None, description="重试次数 / Retry count")
123
+ pending_count: int = Field(default=0, description="待处理次数 / Pending count")
124
+ avg_duration_seconds: float = Field(default=0.0, description="平均耗时(秒)/ Average duration (seconds)")
125
+
126
+
127
+ class ServiceManagementAPIResponse(BaseModel):
128
+ """
129
+ 服务管理 API 响应 DTO / Service Management API Response DTO
130
+
131
+ 用于 API 层返回给客户端的响应格式 / Used for API layer to return response to client
132
+ """
133
+ operation_id: str = Field(..., description="操作ID / Operation ID")
134
+ status: str = Field(..., description="操作状态 / Operation status")
135
+ service_name: str = Field(..., description="服务名称 / Service name")
136
+ message: str = Field(default="", description="响应消息 / Response message")
137
+ result: Optional[Dict[str, Any]] = Field(
138
+ default=None,
139
+ description="操作结果详情(可选)/ Operation result details (optional)"
140
+ )
141
+ error_message: Optional[str] = Field(
142
+ default=None,
143
+ description="错误信息(如果操作失败)/ Error message (if operation failed)"
144
+ )
145
+ started_at: Optional[str] = Field(
146
+ default=None,
147
+ description="操作开始时间(ISO格式)/ Operation start time (ISO format)"
148
+ )
149
+ completed_at: Optional[str] = Field(
150
+ default=None,
151
+ description="操作完成时间(ISO格式)/ Operation completion time (ISO format)"
152
+ )
@@ -0,0 +1,79 @@
1
+ """
2
+ 服务操作相关的 Pydantic 类型定义
3
+ """
4
+ from typing import (
5
+ Optional,
6
+ Dict,
7
+ Any,
8
+ )
9
+ from datetime import datetime
10
+ from pydantic import (
11
+ BaseModel,
12
+ ConfigDict,
13
+ Field,
14
+ )
15
+
16
+ from cancan_microstack.public.const.operation_consts import (
17
+ OperationStatus,
18
+ )
19
+
20
+
21
+ class ServiceOperation(BaseModel):
22
+ """
23
+ 服务操作记录
24
+
25
+ 表示一个服务操作的完整信息,包括操作状态、执行时间、结果等。
26
+ """
27
+ id: Optional[int] = None
28
+ operation_id: str = Field(..., description="唯一操作ID")
29
+ operation_type: str = Field(..., description="操作类型: start|stop|restart|scale")
30
+ service_name: str = Field(..., description="服务名称")
31
+ operation_params: Dict[str, Any] = Field(default_factory=dict, description="操作参数")
32
+ status: str = Field(..., description="操作状态: pending|running|success|failed|timeout")
33
+ started_at: Optional[datetime] = Field(None, description="开始执行时间")
34
+ completed_at: Optional[datetime] = Field(None, description="完成时间")
35
+ result: Dict[str, Any] = Field(default_factory=dict, description="执行结果详情")
36
+ error_message: Optional[str] = Field(None, description="错误信息")
37
+ retry_count: int = Field(default=0, description="已重试次数")
38
+ max_retries: int = Field(default=3, description="最大重试次数")
39
+ last_retry_at: Optional[datetime] = Field(None, description="最后重试时间")
40
+ initiated_by: Optional[str] = Field(None, description="操作发起者")
41
+ initiated_from: Optional[str] = Field(None, description="发起来源")
42
+ flag: int = Field(default=0)
43
+ created_time: Optional[datetime] = None
44
+ update_time: Optional[datetime] = None
45
+
46
+ model_config = ConfigDict(from_attributes=True)
47
+
48
+
49
+ class ServiceOperationCreate(BaseModel):
50
+ """创建服务操作的请求模型"""
51
+ operation_id: str
52
+ operation_type: str
53
+ service_name: str
54
+ operation_params: Dict[str, Any] = Field(default_factory=dict)
55
+ status: str = OperationStatus.PENDING
56
+ initiated_by: Optional[str] = None
57
+ initiated_from: Optional[str] = None
58
+ max_retries: int = 3
59
+
60
+
61
+ class ServiceOperationUpdate(BaseModel):
62
+ """更新服务操作的请求模型"""
63
+ status: Optional[str] = None
64
+ started_at: Optional[datetime] = None
65
+ completed_at: Optional[datetime] = None
66
+ result: Optional[Dict[str, Any]] = None
67
+ error_message: Optional[str] = None
68
+ retry_count: Optional[int] = None
69
+ last_retry_at: Optional[datetime] = None
70
+
71
+
72
+ class ServiceOperationQuery(BaseModel):
73
+ """查询服务操作的请求模型"""
74
+ operation_id: Optional[str] = None
75
+ service_name: Optional[str] = None
76
+ operation_type: Optional[str] = None
77
+ status: Optional[str] = None
78
+ limit: int = Field(default=10, le=100, description="返回结果数量限制")
79
+ offset: int = Field(default=0, description="分页偏移量")