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,56 @@
1
+ import http
2
+ from enum import StrEnum
3
+
4
+
5
+ class ErrorCode(StrEnum):
6
+ SUCCESS = "0"
7
+ INVALID_PARAM = "4000"
8
+ USER_UNLOGIN = "4001"
9
+ HANDLER_NOT_FOUND = "4004"
10
+ REGISTRATION_REJECTED = "4009"
11
+ SYSTEM_ERROR = "5000"
12
+ SERVICE_MANAGEMENT_ERROR = "5001"
13
+ MISSING_REQUIRED_PARAM = "4002"
14
+ NETWORK_ERROR = "5100"
15
+
16
+ @classmethod
17
+ def http_status_to_error_code(cls, http_status_code: int) -> str:
18
+ d = {
19
+ http.HTTPStatus.OK.value: cls.SUCCESS,
20
+ http.HTTPStatus.BAD_REQUEST.value: cls.INVALID_PARAM,
21
+ http.HTTPStatus.UNAUTHORIZED.value: cls.USER_UNLOGIN,
22
+ http.HTTPStatus.NOT_FOUND.value: cls.HANDLER_NOT_FOUND,
23
+ http.HTTPStatus.INTERNAL_SERVER_ERROR.value: cls.SYSTEM_ERROR,
24
+ http.HTTPStatus.GATEWAY_TIMEOUT.value: cls.NETWORK_ERROR,
25
+ }
26
+ return d.get(http_status_code, cls.SUCCESS)
27
+
28
+
29
+ class ErrorMsg(StrEnum):
30
+ SUCCESS = "success"
31
+ COMMON_ERROR = "system error"
32
+ INVALID_PARAM = "params error"
33
+ USER_UNLOGIN = "user not login"
34
+ HANDLER_NOT_FOUND = "not found"
35
+ SERVICE_MANAGEMENT_ERROR = "service management operation failed"
36
+ MISSING_REQUIRED_PARAM = "missing required parameter"
37
+ NETWORK_ERROR = "network error"
38
+
39
+ @classmethod
40
+ def get_msg(cls, code: str | int) -> str:
41
+ if code is None or code == "":
42
+ return cls.SUCCESS
43
+ if isinstance(code, int):
44
+ code = str(code)
45
+ d = {
46
+ ErrorCode.SUCCESS: cls.COMMON_ERROR,
47
+ ErrorCode.INVALID_PARAM: cls.INVALID_PARAM,
48
+ ErrorCode.USER_UNLOGIN: cls.USER_UNLOGIN,
49
+ ErrorCode.HANDLER_NOT_FOUND: cls.HANDLER_NOT_FOUND,
50
+ ErrorCode.NETWORK_ERROR: cls.NETWORK_ERROR,
51
+ }
52
+ if code in d:
53
+ return d[code]
54
+ elif code.isdigit() and int(code) in http.HTTPStatus:
55
+ return http.HTTPStatus(int(code)).phrase
56
+ return cls.COMMON_ERROR
@@ -0,0 +1,52 @@
1
+ from enum import StrEnum
2
+
3
+
4
+ class HealthCheckResult(StrEnum):
5
+ """
6
+ 健康检查结果枚举
7
+ Enum for health check result values
8
+ """
9
+ PASS = "PASS"
10
+ FAIL = "FAIL"
11
+
12
+
13
+ class HealthOverallStatus(StrEnum):
14
+ """
15
+ 服务整体状态枚举
16
+ Enum for overall service status used in overviews
17
+ """
18
+ UP = "UP"
19
+ PARTIAL = "PARTIAL"
20
+ DOWN = "DOWN"
21
+
22
+
23
+ # 更多健康状态,用于实例级别标记
24
+ class InstanceHealthStatus(StrEnum):
25
+ UNKNOWN = "unknown"
26
+ HEALTHY = "healthy"
27
+ DEGRADED = "degraded"
28
+ UNHEALTHY = "unhealthy"
29
+ EXEMPTED = "exempted"
30
+ EXPECTED_STOPPED = "expected_stopped"
31
+
32
+
33
+ class ServiceRuntimeStatus(StrEnum):
34
+ """
35
+ 服务运行时状态(用于概览的 expected/actual)
36
+ Runtime service status for overview expected/actual fields
37
+ """
38
+
39
+ RUNNING = "running"
40
+ STOPPED = "stopped"
41
+ DEGRADED = "degraded"
42
+
43
+
44
+ class ServiceExpectedStatusAlias(StrEnum):
45
+ """
46
+ 期望状态别名(用于标准化输入)
47
+ Expected status aliases for normalization
48
+ """
49
+
50
+ STOP = "stop"
51
+ STOPPED = "stopped"
52
+ DOWN = "down"
@@ -0,0 +1,56 @@
1
+ """
2
+ Hook-related enums.
3
+ """
4
+ from enum import StrEnum, IntEnum
5
+
6
+
7
+ class HookResult(StrEnum):
8
+ """钩子执行结果枚举"""
9
+ SUCCESS = "success" # 成功
10
+ FAILURE = "failure" # 失败
11
+ SKIP = "skip" # 跳过
12
+ RETRY = "retry" # 重试
13
+ TERMINATE = "terminate" # 终止
14
+
15
+
16
+ class HookType(StrEnum):
17
+ """钩子类型枚举 / Hook type enum"""
18
+ PRE_REGISTER = "pre_register" # 注册前钩子
19
+ POST_REGISTER = "post_register" # 注册后钩子
20
+ PRE_DEREGISTER = "pre_deregister" # 注销前钩子
21
+ POST_DEREGISTER = "post_deregister" # 注销后钩子
22
+
23
+
24
+ class HookPriority(IntEnum):
25
+ """钩子优先级枚举"""
26
+ HIGHEST = 0
27
+ HIGH = 25
28
+ MEDIUM = 50
29
+ NORMAL = 50
30
+ LOW = 75
31
+ LOWEST = 100
32
+
33
+
34
+ class HookLogAction(StrEnum):
35
+ """
36
+ 钩子日志行为类型枚举
37
+ Hook log action type enum
38
+ """
39
+ REGISTERED = "registered" # 钩子已注册
40
+ DEREGISTERED = "deregistered" # 钩子已注销
41
+ EXECUTION_STARTED = "execution_started" # 执行开始
42
+ EXECUTION_SUCCESS = "execution_success" # 执行成功
43
+ EXECUTION_FAILURE = "execution_failure" # 执行失败
44
+ REJECTION = "rejection" # 拒绝注册
45
+ MODIFICATION = "modification" # 修改服务信息
46
+
47
+
48
+ class SensitiveFieldKey(StrEnum):
49
+ """
50
+ 敏感字段名枚举(用于日志脱敏)
51
+ Sensitive field key enum (for log sanitization)
52
+ """
53
+ PASSWORD = "password"
54
+ TOKEN = "token"
55
+ SECRET = "secret"
56
+ CREDENTIAL = "credential"
@@ -0,0 +1,13 @@
1
+ """
2
+ Logging-related enums.
3
+ """
4
+ from enum import StrEnum
5
+
6
+
7
+ class LogLevel(StrEnum):
8
+ """日志级别枚举"""
9
+ DEBUG = "debug"
10
+ INFO = "info"
11
+ WARNING = "warning"
12
+ ERROR = "error"
13
+ CRITICAL = "critical"
@@ -0,0 +1,36 @@
1
+ """
2
+ Metrics-related enums.
3
+ """
4
+ from enum import StrEnum
5
+
6
+
7
+ class MetricType(StrEnum):
8
+ """指标类型枚举"""
9
+ COUNTER = "counter"
10
+ GAUGE = "gauge"
11
+ HISTOGRAM = "histogram"
12
+ SUMMARY = "summary"
13
+
14
+
15
+ class HookMetricName(StrEnum):
16
+ """钩子指标名称枚举"""
17
+ EXECUTIONS_TOTAL = "hook_executions_total"
18
+ EXECUTION_DURATION_SECONDS = "hook_execution_duration_seconds"
19
+ FAILURES_TOTAL = "hook_failures_total"
20
+ ACTIVE_HOOKS = "active_hooks"
21
+ REJECTIONS_TOTAL = "hook_rejections_total"
22
+
23
+
24
+ class HookMetricLabel(StrEnum):
25
+ """钩子指标标签枚举"""
26
+ HOOK_NAME = "hook_name"
27
+ HOOK_TYPE = "hook_type"
28
+ RESULT = "result"
29
+ ERROR_TYPE = "error_type"
30
+ REASON = "reason"
31
+
32
+
33
+ class HookMetricResult(StrEnum):
34
+ """钩子指标结果枚举"""
35
+ SUCCESS = "success"
36
+ FAILURE = "failure"
@@ -0,0 +1,26 @@
1
+ """
2
+ Monitor-related enums.
3
+ """
4
+ from enum import StrEnum
5
+
6
+
7
+ class ContainerStatus(StrEnum):
8
+ """容器状态枚举"""
9
+ RUNNING = "running"
10
+ STOPPED = "stopped"
11
+ PAUSED = "paused"
12
+ RESTARTING = "restarting"
13
+ STARTING = "starting"
14
+ REMOVING = "removing"
15
+ EXITED = "exited"
16
+ DEAD = "dead"
17
+ CREATED = "created"
18
+ UNKNOWN = "unknown"
19
+
20
+
21
+ class CleanupPolicy(StrEnum):
22
+ """清理策略枚举"""
23
+ NEVER = "never" # 从不清理
24
+ ON_FAILURE = "failure" # 失败时清理
25
+ ON_EXIT = "exit" # 退出时清理
26
+ ALWAYS = "always" # 总是清理
@@ -0,0 +1,53 @@
1
+ """
2
+ 异步操作相关的常量和枚举定义
3
+ """
4
+ from enum import StrEnum
5
+
6
+
7
+ class OperationType(StrEnum):
8
+ """操作类型枚举"""
9
+ START = "start"
10
+ STOP = "stop"
11
+ RESTART = "restart"
12
+ STATUS = "status"
13
+ LIST = "list"
14
+ HEALTH = "health"
15
+ COMPOSE_STATUS = "compose_status"
16
+
17
+
18
+ class OperationStatus(StrEnum):
19
+ """操作状态枚举"""
20
+ PENDING = "pending"
21
+ RUNNING = "running"
22
+ SUCCESS = "success"
23
+ FAILED = "failed"
24
+ TIMEOUT = "timeout"
25
+ CANCELLED = "cancelled"
26
+
27
+
28
+ class InitiatedBy(StrEnum):
29
+ """操作发起者枚举"""
30
+ OPSBFFSRV = "opsbffsrv"
31
+ INFRASRV = "infrasrv"
32
+ CONTROLLERSRV = "controllersrv"
33
+ SYSTEM = "system"
34
+ USER = "user"
35
+ INFRASRV_HEALTH_CHECK = "infrasrv_health_check"
36
+
37
+
38
+ class InitiatedFrom(StrEnum):
39
+ """发起来源枚举"""
40
+ FRONTEND = "frontend"
41
+ API = "api"
42
+ SCHEDULER = "scheduler"
43
+ WEBHOOK = "webhook"
44
+ INTERNAL = "internal"
45
+ HEALTH_CHECK_DOMAIN = "health_check_domain"
46
+
47
+
48
+ # 操作超时时间配置(秒)
49
+ OPERATION_TIMEOUTS = {
50
+ OperationType.START: 120,
51
+ OperationType.STOP: 60,
52
+ OperationType.RESTART: 180,
53
+ }
@@ -0,0 +1,92 @@
1
+ """Opsbffsrv 模块错误码枚举 / Error code enumerations for opsbffsrv."""
2
+ from enum import StrEnum
3
+
4
+
5
+ class OpsbffsrvInstanceErrorCode(StrEnum):
6
+ """实例管理错误码 / Instance management error codes."""
7
+
8
+ LIST_HTTP_ERROR = "50001" # 获取实例列表失败 / Failed to fetch instance list
9
+ INTERNAL_ERROR = "50000" # 实例管理内部错误 / Internal instance management error
10
+ DETAIL_HTTP_ERROR = "50002" # 获取实例详情失败 / Failed to fetch instance detail
11
+ STATS_HTTP_ERROR = "50003" # 获取实例统计信息失败 / Failed to fetch instance statistics
12
+
13
+
14
+ class OpsbffsrvServiceLogsErrorCode(StrEnum):
15
+ """服务日志错误码 / Service logs error codes."""
16
+
17
+ INVALID_INPUT = "10001" # 输入参数无效 / Invalid input parameter
18
+ INFRA_HTTP_ERROR = "10002" # 调用 infrasrv HTTP 出错 / HTTP error when calling infrasrv
19
+ INFRA_RESPONSE_ERROR = "10003" # infrasrv 返回失败 / infrasrv responded with failure
20
+ INTERNAL_ERROR = "10004" # 服务日志内部错误 / Internal service log error
21
+
22
+
23
+ class OpsbffsrvServiceConfigErrorCode(StrEnum):
24
+ """服务配置错误码 / Service configuration error codes."""
25
+
26
+ INVALID_INPUT = "20001" # 输入参数无效 / Invalid input parameter
27
+ INTERNAL_ERROR = "20002" # 服务配置内部错误 / Internal service configuration error
28
+ PUSH_TRIGGER_FAILED = "20003" # 配置推送触发失败 / Failed to trigger config push
29
+
30
+
31
+ class OpsbffsrvDbAdminErrorCode(StrEnum):
32
+ """数据库管理错误码 / Database administration error codes."""
33
+
34
+ SCHEMA_APPLY_FAILED = "30001" # 模式应用失败 / Schema apply operation failed
35
+ SCHEMA_DIFF_FAILED = "30002" # 模式对比失败 / Schema diff operation failed
36
+ DATABASE_REBUILD_FAILED = "30003" # 数据库重建失败 / Database rebuild operation failed
37
+ TABLE_REBUILD_FAILED = "30004" # 数据表重建失败 / Table rebuild operation failed
38
+
39
+
40
+ class OpsbffsrvCaddyRouteErrorCode(StrEnum):
41
+ """Caddy 路由错误码 / Caddy route management error codes."""
42
+
43
+ CREATE_VALIDATION_FAILED = "40001" # 路由创建参数校验失败 / Route creation validation failed
44
+ CREATE_SYNC_FAILED = "50001" # 路由创建同步失败 / Route creation sync failure
45
+ UPDATE_VALIDATION_FAILED = "40002" # 路由更新参数校验失败 / Route update validation failed
46
+ UPDATE_SYNC_FAILED = "50002" # 路由更新同步失败 / Route update sync failure
47
+ ROUTE_NOT_FOUND = "40401" # 路由不存在 / Route not found
48
+ ROUTE_QUERY_FAILED = "50003" # 路由查询失败 / Route query failure
49
+ ROUTE_DELETE_FAILED = "50004" # 路由删除失败 / Route deletion failure
50
+ ROUTE_TOGGLE_VALIDATION_FAILED = "40003" # 路由状态切换参数校验失败 / Route toggle validation failed
51
+ ROUTE_TOGGLE_FAILED = "50005" # 路由状态切换失败 / Route toggle failure
52
+
53
+
54
+ class OpsbffsrvCaddyStatsErrorCode(StrEnum):
55
+ """Caddy 统计错误码 / Caddy statistics error codes."""
56
+
57
+ REALTIME_GLOBAL_FAILED = "50301" # 获取实时全局统计失败 / Failed to fetch realtime global stats
58
+ REALTIME_SERVICE_NOT_FOUND = "40401" # 服务统计不存在 / Service statistics not found
59
+ REALTIME_SERVICE_FAILED = "50302" # 获取实时服务统计失败 / Failed to fetch realtime service stats
60
+ GLOBAL_TREND_FAILED = "50303" # 获取全局趋势失败 / Failed to fetch global trend
61
+ SERVICE_TREND_FAILED = "50304" # 获取服务趋势失败 / Failed to fetch service trend
62
+ ROUTE_TREND_FAILED = "50305" # 获取路由趋势失败 / Failed to fetch route trend
63
+ TOP_COUNTRY_FAILED = "50306" # 获取 Top 国家失败 / Failed to fetch top countries
64
+ TOP_IP_FAILED = "50307" # 获取 Top IP 失败 / Failed to fetch top IPs
65
+ CLEANUP_FAILED = "50308" # 清理统计数据失败 / Failed to cleanup statistics
66
+
67
+
68
+ class OpsbffsrvCaddyAccessLogErrorCode(StrEnum):
69
+ """Caddy 访问日志错误码 / Caddy access log error codes."""
70
+
71
+ SEARCH_FAILED = "50401" # 搜索访问日志失败 / Failed to search access logs
72
+ SECURITY_EVENT_FAILED = "50402" # 获取安全事件失败 / Failed to fetch security events
73
+ GEO_ANALYSIS_FAILED = "50403" # 分析地理分布失败 / Failed to analyze geographic distribution
74
+ STATUS_CODE_ANALYSIS_FAILED = "50404" # 分析状态码分布失败 / Failed to analyze status code distribution
75
+ SUSPICIOUS_IP_FAILED = "50405" # 检测可疑 IP 失败 / Failed to detect suspicious IPs
76
+ ERROR_PATTERN_ANALYSIS_FAILED = "50406" # 分析错误模式失败 / Failed to analyze error patterns
77
+ CLEANUP_LOG_FAILED = "50407" # 清理访问日志失败 / Failed to cleanup access logs
78
+
79
+
80
+ class OpsbffsrvAuthErrorCode(StrEnum):
81
+ """认证错误码 / Authentication error codes."""
82
+
83
+ CAPTCHA_INVALID = "60001" # 验证码错误 / Invalid captcha
84
+ CREDENTIALS_INVALID = "60002" # 用户名或密码错误 / Invalid credentials
85
+ IP_LOCKED = "60003" # IP 被锁定 / IP locked
86
+ TEMP_TOKEN_INVALID = "60004" # 临时 token 无效 / Temp token invalid
87
+ TOTP_INVALID = "60005" # TOTP 验证码错误 / Invalid TOTP code
88
+ TOTP_ALREADY_BOUND = "60006" # TOTP 已绑定 / TOTP already bound
89
+ SESSION_INVALID = "60007" # Session 无效 / Invalid session
90
+ INTERNAL_ERROR = "60099" # 认证内部错误 / Authentication internal error
91
+
92
+
@@ -0,0 +1,13 @@
1
+ """Override-related constants.
2
+
3
+ 用于覆盖(override)机制的常量定义。
4
+ Constants for override discovery/configuration.
5
+ """
6
+
7
+ # Overrides root environment variable name.
8
+ # overrides 根目录环境变量名。
9
+ OVERRIDE_ENV = "CANCAN_OVERRIDE_ROOT"
10
+
11
+ # Overrides folder name under workspace.
12
+ # workspace 下 overrides 目录名称。
13
+ OVERRIDE_DIR_NAME = "cancan_overrides"
@@ -0,0 +1,17 @@
1
+ from enum import StrEnum
2
+
3
+
4
+ class RedisKey(StrEnum):
5
+ AUTH_ACCESS_KEY = "auth_access_token"
6
+ AUTH_ACCESS_LOCK_KEY = "access_token_lock"
7
+ USER_LOGIN_TOKEN_KEY = "user_login_token"
8
+ USER_ID_TO_LOGIN_TOKEN_KEY = "user_id_to_login_token"
9
+ USER_SESSION_KEY = "user_session_key"
10
+
11
+ SERVICE_REGISTRY_PREFIX = "service_registry:"
12
+ SERVICE_REGISTRY_INSTANCE = "instance:{service_name}:{instance_id}"
13
+ SERVICE_REGISTRY_SERVICE_INSTANCES = "instances:{service_name}"
14
+ SERVICE_REGISTRY_ALL_SERVICES = "all_services"
15
+ SERVICE_REGISTRY_SERVICE_NAMES = "service_names"
16
+
17
+ WORKFLOW_UPDATE_PREFIX = "workflow_update:"
@@ -0,0 +1,15 @@
1
+ from enum import StrEnum
2
+
3
+
4
+ class PushStatus(StrEnum):
5
+ SUCCESS = "success"
6
+ FAILED = "failed"
7
+
8
+
9
+ class InstanceStatus(StrEnum):
10
+ """服务实例状态枚举"""
11
+ STARTING = "starting"
12
+ RUNNING = "running"
13
+ STOPPING = "stopping"
14
+ STOPPED = "stopped"
15
+ UNHEALTHY = "unhealthy"
@@ -0,0 +1,65 @@
1
+ """Workflow task constants.
2
+
3
+ 集中声明 Celery 任务名称,避免散落在多个模块中造成字符串不一致。
4
+ Centralizes Celery task identifiers to keep task names consistent across modules.
5
+ """
6
+ from enum import StrEnum
7
+
8
+
9
+ # Immutable workflow node IDs
10
+ # 工作流内置节点 ID(不可变,前端/后端都应视为保留字)
11
+ IMMUTABLE_START_NODE_IDS: frozenset[str] = frozenset({
12
+ "start",
13
+ "start_node",
14
+ "node-start",
15
+ "node_start",
16
+ })
17
+
18
+ IMMUTABLE_END_NODE_IDS: frozenset[str] = frozenset({
19
+ "end",
20
+ "end_node",
21
+ "node-end",
22
+ "node_end",
23
+ })
24
+
25
+
26
+ class WorkflowTask(StrEnum):
27
+ EXECUTE_NODE = "workflows.execute_node"
28
+ SCAN_SCHEDULED = "workflows.scan_scheduled"
29
+
30
+
31
+ class WorkflowStatusEnum(StrEnum):
32
+ PENDING = "PENDING"
33
+ RUNNING = "RUNNING"
34
+ SUCCESS = "SUCCESS"
35
+ FAILURE = "FAILURE"
36
+ CANCELLED = "CANCELLED"
37
+ PAUSED = "PAUSED"
38
+
39
+
40
+ class NodeStatusEnum(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 TriggerTypeEnum(StrEnum):
52
+ MANUAL = "MANUAL"
53
+ SCHEDULE = "SCHEDULE"
54
+ API = "API"
55
+
56
+
57
+ class WorkflowEngineAlertReason(StrEnum):
58
+ """Workflow engine alert reasons to keep string identifiers consistent."""
59
+
60
+ INVALID_RUN_ID = "INVALID_RUN_ID"
61
+ RUN_NOT_FOUND = "RUN_NOT_FOUND"
62
+ WORKFLOW_DEFINITION_MISSING = "WORKFLOW_DEFINITION_MISSING"
63
+ NODE_CONFIG_MISSING = "NODE_CONFIG_MISSING"
64
+ NODE_EXECUTION_EXCEPTION = "NODE_EXECUTION_EXCEPTION"
65
+ NODE_TERMINATED_WITHOUT_DOWNSTREAM = "NODE_TERMINATED_WITHOUT_DOWNSTREAM"
@@ -0,0 +1,41 @@
1
+ """Cancan Microstack public exceptions.
2
+
3
+ 为本库代码提供统一异常类型,避免依赖业务仓库的代码。
4
+ Provide shared exceptions for the library without depending on any consumer repo.
5
+ """
6
+
7
+ import http
8
+ from typing import Optional
9
+
10
+ from linglong_web.core.errors import LinglongHTTPException
11
+
12
+ from cancan_microstack.public.const.error import ErrorCode
13
+
14
+
15
+ class HTTPException(LinglongHTTPException):
16
+ """HTTP 异常 / HTTP exception."""
17
+
18
+ def __init__(
19
+ self,
20
+ status_code: int = http.HTTPStatus.INTERNAL_SERVER_ERROR.value,
21
+ error_code: str = ErrorCode.SYSTEM_ERROR,
22
+ msg: Optional[str] = None,
23
+ detail: Optional[str] = None,
24
+ ) -> None:
25
+ super().__init__(
26
+ status_code=status_code,
27
+ error_code=error_code,
28
+ message=msg,
29
+ detail=detail,
30
+ )
31
+
32
+
33
+ class ParamError(HTTPException):
34
+ """参数错误 / Invalid parameter error."""
35
+
36
+ def __init__(self, msg: Optional[str] = None, error_code: str = ErrorCode.INVALID_PARAM) -> None:
37
+ super().__init__(
38
+ status_code=http.HTTPStatus.BAD_REQUEST.value,
39
+ error_code=error_code,
40
+ msg=msg or "Invalid request parameters",
41
+ )
File without changes
@@ -0,0 +1,109 @@
1
+ import logging
2
+ from typing import Optional
3
+
4
+ from linglong_web import LinglongConfigBase
5
+ from linglong_web import Rmanager
6
+
7
+ from cancan_microstack.runtime.workspace import ensure_server_log_dir
8
+ from cancan_microstack.public.logging.mq_handler import RabbitMQHandler
9
+
10
+ # 模块级变量,用于持有处理器实例
11
+ # Module-level variable to hold the handler instance
12
+ _handler: Optional[RabbitMQHandler] = None
13
+
14
+
15
+ async def setup_mq_logging(conf: LinglongConfigBase, service_name: str):
16
+ """
17
+ 初始化并注册 RabbitMQ 日志处理器。
18
+ 此函数会将处理器添加到根日志记录器中,以便捕获所有日志。
19
+ 这是一个异步函数,应在应用资源(如 RabbitMQ 连接)准备就绪后调用。
20
+
21
+ Initializes and registers the RabbitMQ log handler.
22
+ This function adds the handler to the root logger to capture all logs.
23
+ It is an async function and should be called after application resources
24
+ (like the RabbitMQ connection) are ready.
25
+
26
+ Args:
27
+ conf: The application's configuration proxy object.
28
+ service_name: The name of the service, used for routing log messages.
29
+ """
30
+ global _handler
31
+
32
+ # 确保 server_log_data 目录存在,避免日志写入 venv 目录
33
+ # Ensure the canonical server_log_data directory exists outside the venv
34
+ ensure_server_log_dir()
35
+ # 检查日志管道是否已启用
36
+ # Check if the log pipeline is enabled in the configuration
37
+ if not conf.LOG_PIPELINE_ENABLED:
38
+ logging.info("MQ logging is disabled via LOG_PIPELINE_ENABLED config.")
39
+ return
40
+
41
+ # 确保 RabbitMQ 连接可用
42
+ # Ensure the RabbitMQ connection is available
43
+ if not Rmanager.mq_conn or Rmanager.mq_conn.is_closed:
44
+ logging.error("Cannot setup MQ logging: RabbitMQ connection is not available in Rmanager.")
45
+ return
46
+
47
+ # 检查是否已存在处理器,避免重复添加
48
+ # Check if a handler is already configured to prevent duplication
49
+ root_logger = logging.getLogger()
50
+ if any(isinstance(h, RabbitMQHandler) for h in root_logger.handlers):
51
+ logging.warning("RabbitMQ log handler already configured.")
52
+ return
53
+
54
+ try:
55
+ # 从配置中获取 exchange 名称
56
+ # Get the exchange name from the configuration
57
+ exchange_name = getattr(conf, "RABBITMQ_LOG_EXCHANGE", None) or conf.LOG_CONFIG.get(
58
+ 'exchange_name',
59
+ 'logs.topic.exchange',
60
+ )
61
+ routing_template = getattr(conf, "RABBITMQ_LOG_ROUTING_TEMPLATE", None) or "logs.business.{service}.{level}"
62
+
63
+ # 创建处理器实例
64
+ # Create the handler instance
65
+ handler = RabbitMQHandler(
66
+ connection=Rmanager.mq_conn,
67
+ service_name=service_name,
68
+ exchange_name=exchange_name,
69
+ routing_template=routing_template,
70
+ )
71
+
72
+ # 异步初始化在 RabbitMQHandler 的 __init__ 中已经通过 run_coroutine_threadsafe 启动
73
+ # aio_pika 的 RobustConnection 会自动处理重连,所以我们直接添加处理器即可
74
+ # Async initialization is already started in RabbitMQHandler's __init__ via run_coroutine_threadsafe.
75
+ # aio_pika's RobustConnection handles reconnections automatically, so we can add the handler directly.
76
+ _handler = handler
77
+ root_logger.addHandler(_handler)
78
+ logging.info(f"RabbitMQ log handler added for service '{service_name}'. Initialization is in progress.")
79
+
80
+ except Exception as e:
81
+ logging.error(f"Failed to create and add RabbitMQ log handler: {e}", exc_info=True)
82
+ _handler = None
83
+
84
+
85
+ async def shutdown_mq_logging():
86
+ """
87
+ 异步关闭 RabbitMQ 日志处理器。
88
+ 这会从根日志记录器中移除处理器,并安全地关闭其 RabbitMQ 通道。
89
+
90
+ Asynchronously shuts down the RabbitMQ log handler.
91
+ This removes the handler from the root logger and safely closes its RabbitMQ channel.
92
+ """
93
+ global _handler
94
+ if _handler:
95
+ root_logger = logging.getLogger()
96
+ logging.info("Shutting down RabbitMQ log handler.")
97
+ try:
98
+ # 首先从 logger 中移除处理器,停止接收新的日志
99
+ # First, remove the handler from the logger to stop accepting new logs
100
+ root_logger.removeHandler(_handler)
101
+
102
+ # 调用处理器的异步关闭方法
103
+ # Call the handler's asynchronous close method
104
+ await _handler.close_async()
105
+ logging.info("RabbitMQ log handler has been shut down.")
106
+ except Exception as e:
107
+ logging.error(f"Error during RabbitMQ log handler shutdown: {e}", exc_info=True)
108
+ finally:
109
+ _handler = None