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,59 @@
1
+ BEGIN;
2
+
3
+ CREATE TABLE caddy_certificate_tbl
4
+ (
5
+ id BIGSERIAL PRIMARY KEY,
6
+
7
+ -- 域名信息
8
+ domain VARCHAR(255) NOT NULL,
9
+ alt_domains TEXT[],
10
+
11
+ -- 证书信息
12
+ certificate_pem TEXT,
13
+ private_key_pem TEXT,
14
+ issuer VARCHAR(255),
15
+
16
+ -- 证书时间
17
+ issued_at TIMESTAMP WITH TIME ZONE,
18
+ expires_at TIMESTAMP WITH TIME ZONE,
19
+ auto_renew BOOLEAN DEFAULT true,
20
+ renew_before_days INTEGER DEFAULT 30,
21
+
22
+ -- 证书状态
23
+ status VARCHAR(50) DEFAULT 'pending',
24
+ last_renew_attempt TIMESTAMP WITH TIME ZONE,
25
+ last_renew_success TIMESTAMP WITH TIME ZONE,
26
+ renew_error TEXT,
27
+
28
+ -- ACME 配置
29
+ acme_provider VARCHAR(100) DEFAULT 'letsencrypt',
30
+ acme_email VARCHAR(255),
31
+ acme_challenge_type VARCHAR(50) DEFAULT 'http-01',
32
+
33
+ -- 元数据
34
+ certificate_metadata JSONB DEFAULT '{}',
35
+
36
+ -- 标准字段
37
+ flag SMALLINT DEFAULT 0,
38
+ created_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
39
+ update_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
40
+ );
41
+
42
+ -- 唯一索引
43
+ CREATE UNIQUE INDEX uk_caddy_certificate_tbl_domain ON caddy_certificate_tbl (domain);
44
+
45
+ -- 提升按更新时间查询效率
46
+ CREATE INDEX idx_caddy_certificate_tbl_update_time ON caddy_certificate_tbl (update_time);
47
+
48
+ -- 其他业务索引
49
+ CREATE INDEX idx_caddy_certificate_tbl_status ON caddy_certificate_tbl (status);
50
+ CREATE INDEX idx_caddy_certificate_tbl_expires_at ON caddy_certificate_tbl (expires_at);
51
+
52
+ -- 自动更新时间戳触发器
53
+ CREATE TRIGGER t_upd_caddy_certificate_tbl
54
+ BEFORE UPDATE
55
+ ON caddy_certificate_tbl
56
+ FOR EACH ROW
57
+ EXECUTE PROCEDURE upd_timestamp();
58
+
59
+ COMMIT;
@@ -0,0 +1,64 @@
1
+ BEGIN;
2
+
3
+ CREATE TABLE caddy_rate_limit_tbl
4
+ (
5
+ id BIGSERIAL PRIMARY KEY,
6
+
7
+ -- 限流规则基本信息
8
+ rule_name VARCHAR(100) NOT NULL,
9
+ description TEXT,
10
+
11
+ -- 匹配条件
12
+ match_type VARCHAR(50) NOT NULL,
13
+ match_pattern VARCHAR(500),
14
+ match_domain VARCHAR(255),
15
+
16
+ -- 限流配置
17
+ limit_type VARCHAR(50) NOT NULL DEFAULT 'request',
18
+ limit_value INTEGER NOT NULL,
19
+ limit_window INTEGER NOT NULL DEFAULT 60,
20
+ limit_key VARCHAR(50) DEFAULT 'ip',
21
+
22
+ -- 突发流量配置
23
+ burst_size INTEGER DEFAULT 0,
24
+
25
+ -- 响应配置
26
+ block_status_code INTEGER DEFAULT 429,
27
+ block_message VARCHAR(500) DEFAULT 'Too Many Requests',
28
+
29
+ -- 白名单/黑名单
30
+ whitelist_ips TEXT[],
31
+ blacklist_ips TEXT[],
32
+
33
+ -- 状态和优先级
34
+ is_enabled BOOLEAN DEFAULT true,
35
+ priority INTEGER DEFAULT 100,
36
+
37
+ -- 元数据
38
+ rule_metadata JSONB DEFAULT '{}',
39
+
40
+ -- 标准字段
41
+ flag SMALLINT DEFAULT 0,
42
+ created_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
43
+ update_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
44
+ );
45
+
46
+ -- 唯一索引
47
+ CREATE UNIQUE INDEX uk_caddy_rate_limit_tbl_rule_name ON caddy_rate_limit_tbl (rule_name);
48
+
49
+ -- 提升按更新时间查询效率
50
+ CREATE INDEX idx_caddy_rate_limit_tbl_update_time ON caddy_rate_limit_tbl (update_time);
51
+
52
+ -- 其他业务索引
53
+ CREATE INDEX idx_caddy_rate_limit_tbl_match_type ON caddy_rate_limit_tbl (match_type);
54
+ CREATE INDEX idx_caddy_rate_limit_tbl_enabled ON caddy_rate_limit_tbl (is_enabled);
55
+ CREATE INDEX idx_caddy_rate_limit_tbl_priority ON caddy_rate_limit_tbl (priority);
56
+
57
+ -- 自动更新时间戳触发器
58
+ CREATE TRIGGER t_upd_caddy_rate_limit_tbl
59
+ BEFORE UPDATE
60
+ ON caddy_rate_limit_tbl
61
+ FOR EACH ROW
62
+ EXECUTE PROCEDURE upd_timestamp();
63
+
64
+ COMMIT;
@@ -0,0 +1,63 @@
1
+ BEGIN;
2
+
3
+ CREATE TABLE caddy_route_tbl
4
+ (
5
+ id BIGSERIAL PRIMARY KEY,
6
+
7
+ -- 路由基本信息
8
+ route_name VARCHAR(100) NOT NULL,
9
+ domain VARCHAR(255) NOT NULL,
10
+ path_pattern VARCHAR(500) NOT NULL,
11
+
12
+ -- 上游服务配置
13
+ upstream_service VARCHAR(100) NOT NULL,
14
+ upstream_host VARCHAR(100) NOT NULL,
15
+ upstream_port INTEGER NOT NULL,
16
+
17
+ -- 路由选项
18
+ strip_path_prefix VARCHAR(200),
19
+ add_path_prefix VARCHAR(200),
20
+ enable_https BOOLEAN DEFAULT true,
21
+ force_https BOOLEAN DEFAULT true,
22
+
23
+ -- WAF 配置
24
+ enable_waf BOOLEAN DEFAULT true,
25
+ waf_rule_set VARCHAR(50) DEFAULT 'default',
26
+
27
+ -- 负载均衡配置
28
+ load_balance_strategy VARCHAR(50) DEFAULT 'round_robin',
29
+ health_check_path VARCHAR(200),
30
+ health_check_interval INTEGER DEFAULT 30,
31
+
32
+ -- 状态和元数据
33
+ is_enabled BOOLEAN DEFAULT true,
34
+ priority INTEGER DEFAULT 100,
35
+ route_metadata JSONB DEFAULT '{}',
36
+ description TEXT,
37
+
38
+ -- 标准字段
39
+ flag SMALLINT DEFAULT 0,
40
+ created_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
41
+ update_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
42
+ );
43
+
44
+ -- 唯一索引
45
+ CREATE UNIQUE INDEX uk_caddy_route_tbl_route_name ON caddy_route_tbl (route_name);
46
+
47
+ -- 提升按更新时间查询效率
48
+ CREATE INDEX idx_caddy_route_tbl_update_time ON caddy_route_tbl (update_time);
49
+
50
+ -- 其他业务索引
51
+ CREATE INDEX idx_caddy_route_tbl_domain ON caddy_route_tbl (domain);
52
+ CREATE INDEX idx_caddy_route_tbl_upstream ON caddy_route_tbl (upstream_service);
53
+ CREATE INDEX idx_caddy_route_tbl_enabled ON caddy_route_tbl (is_enabled);
54
+ CREATE INDEX idx_caddy_route_tbl_priority ON caddy_route_tbl (priority);
55
+
56
+ -- 自动更新时间戳触发器
57
+ CREATE TRIGGER t_upd_caddy_route_tbl
58
+ BEFORE UPDATE
59
+ ON caddy_route_tbl
60
+ FOR EACH ROW
61
+ EXECUTE PROCEDURE upd_timestamp();
62
+
63
+ COMMIT;
@@ -0,0 +1,77 @@
1
+ BEGIN;
2
+
3
+ CREATE TABLE caddy_stats_tbl
4
+ (
5
+ id BIGSERIAL PRIMARY KEY,
6
+
7
+ -- 时间维度
8
+ stat_time TIMESTAMP WITH TIME ZONE NOT NULL,
9
+ stat_period VARCHAR(20) NOT NULL,
10
+
11
+ -- 维度信息
12
+ dimension_type VARCHAR(50) NOT NULL,
13
+ dimension_value VARCHAR(255),
14
+
15
+ -- 请求统计
16
+ total_requests BIGINT DEFAULT 0,
17
+ success_requests BIGINT DEFAULT 0,
18
+ client_error_requests BIGINT DEFAULT 0,
19
+ server_error_requests BIGINT DEFAULT 0,
20
+
21
+ -- 流量统计
22
+ total_bytes_sent BIGINT DEFAULT 0,
23
+ total_bytes_received BIGINT DEFAULT 0,
24
+
25
+ -- 性能统计
26
+ avg_response_time INTEGER,
27
+ min_response_time INTEGER,
28
+ max_response_time INTEGER,
29
+ p50_response_time INTEGER,
30
+ p95_response_time INTEGER,
31
+ p99_response_time INTEGER,
32
+
33
+ -- WAF 统计
34
+ waf_blocked_requests BIGINT DEFAULT 0,
35
+ waf_logged_requests BIGINT DEFAULT 0,
36
+
37
+ -- 限流统计
38
+ rate_limited_requests BIGINT DEFAULT 0,
39
+
40
+ -- TLS 统计
41
+ tls_requests BIGINT DEFAULT 0,
42
+ non_tls_requests BIGINT DEFAULT 0,
43
+
44
+ -- 唯一访客统计
45
+ unique_ips INTEGER DEFAULT 0,
46
+ unique_user_agents INTEGER DEFAULT 0,
47
+
48
+ -- 元数据
49
+ stats_metadata JSONB DEFAULT '{}',
50
+
51
+ -- 标准字段
52
+ flag SMALLINT DEFAULT 0,
53
+ created_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
54
+ update_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
55
+ );
56
+
57
+ -- 唯一索引(防止重复统计)
58
+ CREATE UNIQUE INDEX uk_caddy_stats_tbl_unique ON caddy_stats_tbl (
59
+ stat_time, stat_period, dimension_type, COALESCE(dimension_value, '')
60
+ );
61
+
62
+ -- 提升按更新时间查询效率
63
+ CREATE INDEX idx_caddy_stats_tbl_update_time ON caddy_stats_tbl (update_time);
64
+
65
+ -- 其他业务索引
66
+ CREATE INDEX idx_caddy_stats_tbl_time ON caddy_stats_tbl (stat_time DESC);
67
+ CREATE INDEX idx_caddy_stats_tbl_period ON caddy_stats_tbl (stat_period);
68
+ CREATE INDEX idx_caddy_stats_tbl_dimension ON caddy_stats_tbl (dimension_type, dimension_value);
69
+
70
+ -- 自动更新时间戳触发器
71
+ CREATE TRIGGER t_upd_caddy_stats_tbl
72
+ BEFORE UPDATE
73
+ ON caddy_stats_tbl
74
+ FOR EACH ROW
75
+ EXECUTE PROCEDURE upd_timestamp();
76
+
77
+ COMMIT;
@@ -0,0 +1,21 @@
1
+ BEGIN;
2
+
3
+ CREATE OR REPLACE FUNCTION upd_timestamp() RETURNS TRIGGER AS
4
+ $$
5
+ BEGIN
6
+ NEW.update_time = CURRENT_TIMESTAMP;
7
+ RETURN NEW;
8
+ END
9
+ $$
10
+ LANGUAGE plpgsql;
11
+
12
+ CREATE OR REPLACE FUNCTION update_modified_column() RETURNS TRIGGER AS
13
+ $$
14
+ BEGIN
15
+ NEW.update_time = CURRENT_TIMESTAMP;
16
+ RETURN NEW;
17
+ END
18
+ $$
19
+ LANGUAGE plpgsql;
20
+
21
+ COMMIT;
@@ -0,0 +1,401 @@
1
+ # 通用 Python 服务镜像设置
2
+ x-python-service-image: &python_service_image cancan_python_service:latest
3
+ x-python-service-build: &python_service_build
4
+ context: ./builds/service
5
+ dockerfile: Dockerfile
6
+ args:
7
+ # Injected automatically by the cancan CLI (os.environ CANCAN_VERSION = package version).
8
+ CANCAN_VERSION: "${CANCAN_VERSION:?CANCAN_VERSION required — run via the cancan CLI (cancan stack up / cancan compose build)}"
9
+ CANCAN_PIP_SPEC: "${CANCAN_PIP_SPEC:-}"
10
+ PIP_INDEX_URL: "${PIP_INDEX_URL:-}"
11
+
12
+ # ============================================
13
+ # 基础设施 Docker Compose 配置
14
+ # 包含: Caddy, PostgreSQL, Redis, infrasrv, opsbffsrv
15
+ # 这些服务属于基础框架,一般不需要频繁调整
16
+ # ============================================
17
+
18
+ # 自定义网络 - 所有服务使用相同网络
19
+ # 通过 CANCAN_STACK_PREFIX 环境变量隔离不同的 Podman/Docker 栈
20
+ networks:
21
+ app_network:
22
+ driver: bridge
23
+ # 不指定 name,让 compose 使用项目级别的网络名,避免与已有网络冲突。
24
+ # Do not set a fixed network name; let Compose create a project-scoped network to avoid collisions.
25
+
26
+ # 命名数据卷 - 用于持久化存储
27
+ volumes:
28
+ postgres_data:
29
+ name: ${CANCAN_STACK_PREFIX:-cancan}_postgres_data
30
+ redis_data:
31
+ name: ${CANCAN_STACK_PREFIX:-cancan}_redis_data
32
+ caddy_data:
33
+ name: ${CANCAN_STACK_PREFIX:-cancan}_caddy_data
34
+ caddy_config:
35
+ name: ${CANCAN_STACK_PREFIX:-cancan}_caddy_config
36
+ rabbitmq_data:
37
+ name: ${CANCAN_STACK_PREFIX:-cancan}_rabbitmq_data
38
+ mongo_data:
39
+ name: ${CANCAN_STACK_PREFIX:-cancan}_mongo_data
40
+
41
+ services:
42
+ # ==========================================
43
+ # Caddy - 反向代理和 WAF (带 Coraza WAF)
44
+ # ==========================================
45
+ caddy.internal:
46
+ build:
47
+ context: ./builds/caddy
48
+ dockerfile: Dockerfile
49
+ args:
50
+ GOPROXY: ${CADDY_GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct}
51
+ GOSUMDB: ${CADDY_GOSUMDB:-sum.golang.google.cn}
52
+ container_name: ${CANCAN_STACK_PREFIX:-cancan}_caddy
53
+ hostname: caddy.internal
54
+ ports:
55
+ # - "80:80" # HTTP
56
+ # - "443:443" # HTTPS
57
+ - "8080:8080" # 本地开发访问(生产环境会被防火墙过滤)
58
+ volumes:
59
+ - ./builds/caddy/Caddyfile:/etc/caddy/Caddyfile
60
+ - caddy_data:/data
61
+ - caddy_config:/config
62
+ - ./builds/caddy/logs:/var/log/caddy
63
+ - ./builds/caddy/geoip:/usr/share/GeoIP # GeoLite2 数据库
64
+ - ./builds/caddy/waf:/etc/caddy/waf # Coraza WAF 配置和规则
65
+ - ./builds/caddy/www:/srv/www:ro # 静态站点(adminops 等)/ Static sites (adminops, etc.)
66
+ networks:
67
+ app_network:
68
+ aliases:
69
+ - caddy.internal # Podman DNS 别名
70
+ environment:
71
+ - TZ=Asia/Shanghai
72
+ # 注意:Podman 5.6.2 健康检查存在兼容性问题,但 Docker 正常
73
+ # Caddy 服务已验证正常运行,Admin API 可访问 http://localhost:2019/config/
74
+ healthcheck:
75
+ test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:2019/config/"]
76
+ interval: 30s
77
+ timeout: 10s
78
+ retries: 3
79
+ start_period: 10s
80
+ restart: unless-stopped
81
+ # 优雅关闭配置
82
+ stop_signal: SIGTERM
83
+ stop_grace_period: 30s
84
+
85
+ # ==========================================
86
+ # PostgreSQL - 主数据库
87
+ # ==========================================
88
+ postgres.internal:
89
+ image: postgres:18
90
+ container_name: ${CANCAN_STACK_PREFIX:-cancan}_postgres
91
+ hostname: postgres.internal
92
+ environment:
93
+ POSTGRES_USER: postgres
94
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres123}
95
+ POSTGRES_DB: main
96
+ TZ: Asia/Shanghai
97
+ # PG 18+ 建议挂载到 /var/lib/postgresql,数据会自动放在子目录
98
+ PGDATA: /var/lib/postgresql/data
99
+ # 端口映射:支持宿主机访问(out-pod 模式)
100
+ ports:
101
+ - "25432:5432" # 宿主机可通过 localhost:5432 访问
102
+ volumes:
103
+ - postgres_data:/var/lib/postgresql # 修改挂载点以兼容 PG 18+
104
+ - ./ddl:/docker-entrypoint-initdb.d
105
+ networks:
106
+ app_network:
107
+ aliases:
108
+ - postgres.internal # Podman DNS 别名
109
+ healthcheck:
110
+ test: ["CMD-SHELL", "pg_isready -U postgres"]
111
+ interval: 10s
112
+ timeout: 5s
113
+ retries: 5
114
+ restart: unless-stopped
115
+ # 优雅关闭配置
116
+ stop_signal: SIGTERM
117
+ stop_grace_period: 60s
118
+
119
+ # ==========================================
120
+ # Redis - 缓存和消息队列
121
+ # ==========================================
122
+ redis.internal:
123
+ image: redis:8.4-alpine
124
+ container_name: ${CANCAN_STACK_PREFIX:-cancan}_redis
125
+ hostname: redis.internal
126
+ # 端口映射:支持宿主机访问(out-pod 模式)
127
+ ports:
128
+ - "26379:6379" # 宿主机可通过 localhost:6379 访问
129
+ volumes:
130
+ - redis_data:/data # 使用命名卷
131
+ networks:
132
+ app_network:
133
+ aliases:
134
+ - redis.internal # Podman DNS 别名
135
+ healthcheck:
136
+ test: ["CMD", "redis-cli", "ping"]
137
+ interval: 10s
138
+ timeout: 3s
139
+ retries: 5
140
+ restart: unless-stopped
141
+ command: redis-server --appendonly yes
142
+ # 优雅关闭配置
143
+ stop_signal: SIGTERM
144
+ stop_grace_period: 30s
145
+
146
+ # ==========================================
147
+ # RabbitMQ - 消息队列 + Management Plugin
148
+ # ==========================================
149
+ rabbitmq.internal:
150
+ image: rabbitmq:4-management
151
+ container_name: ${CANCAN_STACK_PREFIX:-cancan}_rabbitmq
152
+ hostname: rabbitmq.internal
153
+ environment:
154
+ - RABBITMQ_DEFAULT_USER=${RABBITMQ_USERNAME:-admin}
155
+ - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD:-admin123}
156
+ - TZ=Asia/Shanghai
157
+ ports:
158
+ - "35672:5672"
159
+ - "35673:15672"
160
+ expose:
161
+ - "5672"
162
+ - "15672"
163
+ volumes:
164
+ - rabbitmq_data:/var/lib/rabbitmq
165
+ networks:
166
+ app_network:
167
+ aliases:
168
+ - rabbitmq.internal
169
+ healthcheck:
170
+ test: ["CMD-SHELL", "rabbitmq-diagnostics -q status"]
171
+ interval: 30s
172
+ timeout: 10s
173
+ retries: 5
174
+ start_period: 15s
175
+ restart: unless-stopped
176
+ stop_signal: SIGTERM
177
+ stop_grace_period: 30s
178
+
179
+ # ==========================================
180
+ # MongoDB - 日志存储
181
+ # ==========================================
182
+ mongo.internal:
183
+ image: mongo:7.0
184
+ container_name: ${CANCAN_STACK_PREFIX:-cancan}_mongo
185
+ hostname: mongo.internal
186
+ environment:
187
+ - MONGO_INITDB_ROOT_USERNAME=admin
188
+ - MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD:-admin123}
189
+ - TZ=Asia/Shanghai
190
+ ports:
191
+ - "27017:27017"
192
+ expose:
193
+ - "27017"
194
+ volumes:
195
+ - mongo_data:/data/db
196
+ networks:
197
+ app_network:
198
+ aliases:
199
+ - mongo.internal
200
+ healthcheck:
201
+ test:
202
+ [
203
+ "CMD-SHELL",
204
+ "mongosh --quiet --username admin --password ${MONGO_INITDB_ROOT_PASSWORD:-admin123} --authenticationDatabase admin --eval 'db.runCommand({ ping: 1 })'",
205
+ ]
206
+ interval: 30s
207
+ timeout: 10s
208
+ retries: 5
209
+ start_period: 20s
210
+ restart: unless-stopped
211
+ stop_signal: SIGTERM
212
+ stop_grace_period: 30s
213
+
214
+ # ==========================================
215
+ # mongo-express - MongoDB Web UI
216
+ # ==========================================
217
+ mongo-express.internal:
218
+ image: mongo-express:1.0.2-20-alpine3.19
219
+ container_name: ${CANCAN_STACK_PREFIX:-cancan}_mongo_express
220
+ hostname: mongo-express.internal
221
+ environment:
222
+ - ME_CONFIG_MONGODB_SERVER=mongo.internal
223
+ - ME_CONFIG_MONGODB_PORT=27017
224
+ - ME_CONFIG_MONGODB_ADMINUSERNAME=admin
225
+ - ME_CONFIG_MONGODB_ADMINPASSWORD=${MONGO_INITDB_ROOT_PASSWORD:-admin123}
226
+ - ME_CONFIG_BASICAUTH_USERNAME=admin
227
+ - ME_CONFIG_BASICAUTH_PASSWORD=${MONGO_EXPRESS_PASSWORD:-admin123}
228
+ - ME_CONFIG_SITE_BASEURL=/v1/opsbffsrv/mongo_express/
229
+ - TZ=Asia/Shanghai
230
+ expose:
231
+ - "8081"
232
+ networks:
233
+ app_network:
234
+ aliases:
235
+ - mongo-express.internal
236
+ depends_on:
237
+ mongo.internal:
238
+ condition: service_healthy
239
+ restart: unless-stopped
240
+ stop_signal: SIGTERM
241
+ stop_grace_period: 30s
242
+
243
+ # ==========================================
244
+ # infrasrv - 基础设施服务
245
+ # ==========================================
246
+ infrasrv.service:
247
+ image: *python_service_image
248
+ build: *python_service_build
249
+ container_name: ${CANCAN_STACK_PREFIX:-cancan}_infrasrv
250
+ hostname: infrasrv.service
251
+ command: ["sh", "-c", "python -m cancan_microstack.cmd.infrasrv.run 2>&1 | tee -a /app/server_log_data/infrasrv.out.log"]
252
+ environment:
253
+ - NE_CONFIG=dev_in_pod
254
+ - PYTHONUNBUFFERED=1
255
+ # Mac/Docker Desktop: use host.docker.internal to access host services
256
+ - "CONTROLLERSRV_HOST=${CONTROLLERSRV_HOST:-http://host.containers.internal:22100}"
257
+ # 凭据从工作区 .env 注入;默认值与开箱即用一致 / Credentials from workspace .env; defaults match out-of-box
258
+ - "RABBITMQ_USERNAME=${RABBITMQ_USERNAME:-admin}"
259
+ - "RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD:-admin123}"
260
+ - "MONGODB_URI=${MONGODB_URI:-mongodb://admin:admin123@mongo.internal:27017/admin?authSource=admin}"
261
+ # 不直接暴露端口,通过 Caddy 反向代理访问
262
+ expose:
263
+ - "8080"
264
+ networks:
265
+ app_network:
266
+ aliases:
267
+ - infrasrv.service # Podman DNS 别名
268
+ depends_on:
269
+ postgres.internal:
270
+ condition: service_healthy
271
+ redis.internal:
272
+ condition: service_healthy
273
+ rabbitmq.internal:
274
+ condition: service_healthy
275
+ mongo.internal:
276
+ condition: service_healthy
277
+ healthcheck:
278
+ test: ["CMD", "curl", "-f", "http://localhost:8080/internal/health"]
279
+ interval: 30s
280
+ timeout: 10s
281
+ retries: 3
282
+ start_period: 40s
283
+ restart: unless-stopped
284
+ volumes:
285
+ - ./ddl:/app/ddl
286
+ - ./server_log_data:/app/server_log_data
287
+ # 优雅关闭配置
288
+ stop_signal: SIGTERM
289
+ stop_grace_period: 30s
290
+
291
+ # ==========================================
292
+ # opsbffsrv - 运营管理服务
293
+ # ==========================================
294
+ opsbffsrv.service:
295
+ image: *python_service_image
296
+ build: *python_service_build
297
+ container_name: ${CANCAN_STACK_PREFIX:-cancan}_opsbffsrv
298
+ hostname: opsbffsrv.service
299
+ command: ["sh", "-c", "python -m cancan_microstack.cmd.opsbffsrv.run 2>&1 | tee -a /app/server_log_data/opsbffsrv.out.log"]
300
+ environment:
301
+ - NE_CONFIG=dev_in_pod
302
+ - PYTHONUNBUFFERED=1
303
+ # 凭据/密钥从工作区 .env 注入;默认值与开箱即用一致 / From workspace .env; defaults match out-of-box
304
+ - "CONTROLLERSRV_HOST=${CONTROLLERSRV_HOST:-http://host.containers.internal:22100}"
305
+ - "MONGODB_URI=${MONGODB_URI:-mongodb://admin:admin123@mongo.internal:27017/admin?authSource=admin}"
306
+ - "AUTH_TOTP_FERNET_KEY=${AUTH_TOTP_FERNET_KEY:-}"
307
+ - "AUTH_COOKIE_SECURE=${AUTH_COOKIE_SECURE:-true}"
308
+ - "MONGO_EXPRESS_PASSWORD=${MONGO_EXPRESS_PASSWORD:-admin123}"
309
+ - "RABBITMQ_MGMT_PASSWORD=${RABBITMQ_MGMT_PASSWORD:-admin123}"
310
+ - "PROXY_CORS_ALLOWED_ORIGINS=${PROXY_CORS_ALLOWED_ORIGINS:-}"
311
+ # 不直接暴露端口,通过 Caddy 反向代理访问
312
+ expose:
313
+ - "8080"
314
+ networks:
315
+ app_network:
316
+ aliases:
317
+ - opsbffsrv.service # Podman DNS 别名
318
+ depends_on:
319
+ postgres.internal:
320
+ condition: service_healthy
321
+ redis.internal:
322
+ condition: service_healthy
323
+ infrasrv.service:
324
+ condition: service_healthy
325
+ mongo.internal:
326
+ condition: service_healthy
327
+ rabbitmq.internal:
328
+ condition: service_healthy
329
+ healthcheck:
330
+ test: ["CMD", "curl", "-f", "http://localhost:8080/internal/health"]
331
+ interval: 30s
332
+ timeout: 10s
333
+ retries: 3
334
+ start_period: 40s
335
+ restart: unless-stopped
336
+ volumes:
337
+ - ./ddl:/app/ddl
338
+ - ./server_log_data:/app/server_log_data
339
+ - ./builds/caddy/geoip:/usr/share/GeoIP # GeoIP 数据库(与 Caddy 共享)
340
+ - ./builds/caddy/logs:/app/builds/caddy/logs:ro # Caddy access logs(供统计采集)
341
+ # 优雅关闭配置
342
+ stop_signal: SIGTERM
343
+ stop_grace_period: 30s
344
+
345
+ # ==========================================
346
+ # pgweb - PostgreSQL Web UI
347
+ # ==========================================
348
+ pgweb.internal:
349
+ image: sosedoff/pgweb:latest
350
+ container_name: ${CANCAN_STACK_PREFIX:-cancan}_pgweb
351
+ hostname: pgweb.internal
352
+ environment:
353
+ - PGWEB_DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD:-postgres123}@postgres.internal:5432/main?sslmode=disable
354
+ - TZ=Asia/Shanghai
355
+ # 不直接暴露端口,通过 opsbffsrv 转发访问
356
+ expose:
357
+ - "8081"
358
+ networks:
359
+ app_network:
360
+ aliases:
361
+ - pgweb.internal # Podman DNS 别名
362
+ depends_on:
363
+ postgres.internal:
364
+ condition: service_healthy
365
+ # 注意:Podman 5.6.2 健康检查存在兼容性问题,但 Docker 正常
366
+ # pgweb 服务已验证正常运行,可通过 opsbffsrv 访问 http://localhost:8081/
367
+ healthcheck:
368
+ test: ["CMD", "nc", "-z", "localhost", "8081"]
369
+ interval: 30s
370
+ timeout: 5s
371
+ retries: 3
372
+ start_period: 10s
373
+ restart: unless-stopped
374
+
375
+ # ==========================================
376
+ # redis-commander - Redis Web UI
377
+ # ==========================================
378
+ redis-commander.internal:
379
+ image: rediscommander/redis-commander:latest
380
+ container_name: ${CANCAN_STACK_PREFIX:-cancan}_redis_commander
381
+ hostname: redis-commander.internal
382
+ environment:
383
+ - REDIS_HOSTS=local:redis.internal:6379
384
+ - TZ=Asia/Shanghai
385
+ # 不直接暴露端口,通过 opsbffsrv 转发访问
386
+ expose:
387
+ - "8081"
388
+ networks:
389
+ app_network:
390
+ aliases:
391
+ - redis-commander.internal
392
+ depends_on:
393
+ redis.internal:
394
+ condition: service_healthy
395
+ healthcheck:
396
+ test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8081"]
397
+ interval: 30s
398
+ timeout: 5s
399
+ retries: 3
400
+ start_period: 10s
401
+ restart: unless-stopped