routemq 0.22.1__tar.gz

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 (284) hide show
  1. routemq-0.22.1/.dockerignore +87 -0
  2. routemq-0.22.1/.env.docker +63 -0
  3. routemq-0.22.1/.env.example +98 -0
  4. routemq-0.22.1/.github/CODEOWNERS +4 -0
  5. routemq-0.22.1/.github/ISSUE_TEMPLATE/bug_report.yml +44 -0
  6. routemq-0.22.1/.github/ISSUE_TEMPLATE/feature_request.yml +26 -0
  7. routemq-0.22.1/.github/SECURITY-TRIAGE.md +68 -0
  8. routemq-0.22.1/.github/branch-protection.yml +118 -0
  9. routemq-0.22.1/.github/dependabot.yml +24 -0
  10. routemq-0.22.1/.github/release-drafter.yml +78 -0
  11. routemq-0.22.1/.github/release-token-rotation.md +42 -0
  12. routemq-0.22.1/.github/workflows/bench.yml +108 -0
  13. routemq-0.22.1/.github/workflows/ci.yml +200 -0
  14. routemq-0.22.1/.github/workflows/github-release.yml +123 -0
  15. routemq-0.22.1/.github/workflows/publish-test.yml +59 -0
  16. routemq-0.22.1/.github/workflows/publish.yml +56 -0
  17. routemq-0.22.1/.github/workflows/release.yml +189 -0
  18. routemq-0.22.1/.github/workflows/scorecard.yml +47 -0
  19. routemq-0.22.1/.github/workflows/update-docs-summary.yml +91 -0
  20. routemq-0.22.1/.gitignore +159 -0
  21. routemq-0.22.1/.pre-commit-config.yaml +16 -0
  22. routemq-0.22.1/CHANGELOG.md +325 -0
  23. routemq-0.22.1/CODE_OF_CONDUCT.md +83 -0
  24. routemq-0.22.1/CONTRIBUTING.md +75 -0
  25. routemq-0.22.1/Dockerfile +62 -0
  26. routemq-0.22.1/INSTALL.md +306 -0
  27. routemq-0.22.1/LICENSE +21 -0
  28. routemq-0.22.1/Makefile +109 -0
  29. routemq-0.22.1/PKG-INFO +245 -0
  30. routemq-0.22.1/README.md +173 -0
  31. routemq-0.22.1/SECURITY.md +55 -0
  32. routemq-0.22.1/TEMPLATE.md +204 -0
  33. routemq-0.22.1/app/.gitignore +3 -0
  34. routemq-0.22.1/app/__init__.py +1 -0
  35. routemq-0.22.1/app/controllers/__init__.py +0 -0
  36. routemq-0.22.1/app/jobs/__init__.py +1 -0
  37. routemq-0.22.1/app/jobs/example_data_processing_job.py +70 -0
  38. routemq-0.22.1/app/jobs/example_email_job.py +65 -0
  39. routemq-0.22.1/app/jobs/example_report_job.py +74 -0
  40. routemq-0.22.1/app/middleware/__init__.py +0 -0
  41. routemq-0.22.1/app/middleware/rate_limit.py +520 -0
  42. routemq-0.22.1/app/models/__init__.py +0 -0
  43. routemq-0.22.1/app/models/queue_failed_job.py +1 -0
  44. routemq-0.22.1/app/models/queue_job.py +1 -0
  45. routemq-0.22.1/app/routers/__init__.py +0 -0
  46. routemq-0.22.1/benchmarks/README.md +30 -0
  47. routemq-0.22.1/benchmarks/__init__.py +0 -0
  48. routemq-0.22.1/benchmarks/baselines/.gitignore +3 -0
  49. routemq-0.22.1/benchmarks/baselines/master.json +11143 -0
  50. routemq-0.22.1/benchmarks/conftest.py +105 -0
  51. routemq-0.22.1/benchmarks/db_matrix.py +154 -0
  52. routemq-0.22.1/benchmarks/test_database_queue.py +110 -0
  53. routemq-0.22.1/benchmarks/test_observability.py +78 -0
  54. routemq-0.22.1/benchmarks/test_queue_serialization.py +59 -0
  55. routemq-0.22.1/benchmarks/test_queue_worker.py +54 -0
  56. routemq-0.22.1/benchmarks/test_router.py +68 -0
  57. routemq-0.22.1/bootstrap/__init__.py +0 -0
  58. routemq-0.22.1/bootstrap/app.py +473 -0
  59. routemq-0.22.1/docker-compose.dev.yml +120 -0
  60. routemq-0.22.1/docker-compose.yml +305 -0
  61. routemq-0.22.1/docs/.gitbook/assets/Logo1-500x500.png +0 -0
  62. routemq-0.22.1/docs/README.md +61 -0
  63. routemq-0.22.1/docs/SUMMARY.md +101 -0
  64. routemq-0.22.1/docs/adr/0001-pypi-distribution-model.md +58 -0
  65. routemq-0.22.1/docs/adr/0002-queue-driver-registry.md +54 -0
  66. routemq-0.22.1/docs/adr/0003-docker-backed-integration-tests.md +55 -0
  67. routemq-0.22.1/docs/adr/0004-centralized-runtime-settings.md +54 -0
  68. routemq-0.22.1/docs/adr/0005-observability-stack.md +61 -0
  69. routemq-0.22.1/docs/adr/0006-pool-tuning-knobs.md +64 -0
  70. routemq-0.22.1/docs/adr/0007-benchmark-harness.md +63 -0
  71. routemq-0.22.1/docs/adr/0008-fail-fast-logging-audit.md +66 -0
  72. routemq-0.22.1/docs/adr/0009-supply-chain-and-provenance.md +67 -0
  73. routemq-0.22.1/docs/adr/0010-tsdb-driver-registry.md +79 -0
  74. routemq-0.22.1/docs/api-reference/README.md +101 -0
  75. routemq-0.22.1/docs/api-reference/controller-api.md +492 -0
  76. routemq-0.22.1/docs/api-reference/health-observability-api.md +167 -0
  77. routemq-0.22.1/docs/api-reference/middleware-api.md +612 -0
  78. routemq-0.22.1/docs/api-reference/redis-manager-api.md +689 -0
  79. routemq-0.22.1/docs/api-reference/router-api.md +339 -0
  80. routemq-0.22.1/docs/api-reference/worker-manager-api.md +561 -0
  81. routemq-0.22.1/docs/architecture.md +42 -0
  82. routemq-0.22.1/docs/best-practices.md +32 -0
  83. routemq-0.22.1/docs/configuration/README.md +71 -0
  84. routemq-0.22.1/docs/configuration/environment-variables.md +265 -0
  85. routemq-0.22.1/docs/configuration/logging.md +201 -0
  86. routemq-0.22.1/docs/controllers/README.md +79 -0
  87. routemq-0.22.1/docs/controllers/best-practices.md +656 -0
  88. routemq-0.22.1/docs/controllers/controller-methods.md +404 -0
  89. routemq-0.22.1/docs/controllers/creating-controllers.md +196 -0
  90. routemq-0.22.1/docs/controllers/database-operations.md +604 -0
  91. routemq-0.22.1/docs/controllers/redis-integration.md +482 -0
  92. routemq-0.22.1/docs/core-concepts/README.md +70 -0
  93. routemq-0.22.1/docs/core-concepts/architecture.md +170 -0
  94. routemq-0.22.1/docs/core-concepts/message-flow.md +373 -0
  95. routemq-0.22.1/docs/core-concepts/middleware-pipeline.md +507 -0
  96. routemq-0.22.1/docs/core-concepts/router-discovery.md +316 -0
  97. routemq-0.22.1/docs/core-concepts/worker-processes.md +595 -0
  98. routemq-0.22.1/docs/database/README.md +92 -0
  99. routemq-0.22.1/docs/database/configuration.md +346 -0
  100. routemq-0.22.1/docs/database/creating-models.md +581 -0
  101. routemq-0.22.1/docs/database/operations.md +763 -0
  102. routemq-0.22.1/docs/deployment/README.md +81 -0
  103. routemq-0.22.1/docs/deployment/docker.md +705 -0
  104. routemq-0.22.1/docs/deployment/load-balancing.md +1115 -0
  105. routemq-0.22.1/docs/deployment/scaling.md +878 -0
  106. routemq-0.22.1/docs/docker-deployment.md +596 -0
  107. routemq-0.22.1/docs/examples/README.md +164 -0
  108. routemq-0.22.1/docs/examples/api-gateway.md +682 -0
  109. routemq-0.22.1/docs/examples/chat-app.md +767 -0
  110. routemq-0.22.1/docs/examples/iot-devices.md +500 -0
  111. routemq-0.22.1/docs/examples/notifications.md +624 -0
  112. routemq-0.22.1/docs/examples/sensor-data.md +0 -0
  113. routemq-0.22.1/docs/faq.md +177 -0
  114. routemq-0.22.1/docs/getting-started/README.md +28 -0
  115. routemq-0.22.1/docs/getting-started/development-setup.md +103 -0
  116. routemq-0.22.1/docs/getting-started/first-route.md +89 -0
  117. routemq-0.22.1/docs/getting-started/installation.md +74 -0
  118. routemq-0.22.1/docs/getting-started/quick-start.md +57 -0
  119. routemq-0.22.1/docs/middleware/README.md +80 -0
  120. routemq-0.22.1/docs/middleware/creating-middleware.md +655 -0
  121. routemq-0.22.1/docs/middleware/middleware-chains.md +823 -0
  122. routemq-0.22.1/docs/monitoring/README.md +87 -0
  123. routemq-0.22.1/docs/monitoring/benchmarks.md +59 -0
  124. routemq-0.22.1/docs/monitoring/error-handling-audit.md +150 -0
  125. routemq-0.22.1/docs/monitoring/health-checks.md +34 -0
  126. routemq-0.22.1/docs/monitoring/metrics.md +130 -0
  127. routemq-0.22.1/docs/monitoring/mqtt-monitoring.md +23 -0
  128. routemq-0.22.1/docs/monitoring/pool-tuning.evidence.json +181 -0
  129. routemq-0.22.1/docs/monitoring/pool-tuning.md +79 -0
  130. routemq-0.22.1/docs/monitoring/redis-monitoring.md +30 -0
  131. routemq-0.22.1/docs/queue/README.md +132 -0
  132. routemq-0.22.1/docs/queue/best-practices.md +537 -0
  133. routemq-0.22.1/docs/queue/creating-jobs.md +351 -0
  134. routemq-0.22.1/docs/queue/dispatching-jobs.md +439 -0
  135. routemq-0.22.1/docs/queue/drivers.md +530 -0
  136. routemq-0.22.1/docs/queue/failed-jobs.md +473 -0
  137. routemq-0.22.1/docs/queue/getting-started.md +228 -0
  138. routemq-0.22.1/docs/queue/running-workers.md +496 -0
  139. routemq-0.22.1/docs/rate-limiting/README.md +106 -0
  140. routemq-0.22.1/docs/rate-limiting/advanced-features.md +1124 -0
  141. routemq-0.22.1/docs/rate-limiting/basic-rate-limiting.md +419 -0
  142. routemq-0.22.1/docs/rate-limiting/client-based.md +853 -0
  143. routemq-0.22.1/docs/rate-limiting/strategies.md +560 -0
  144. routemq-0.22.1/docs/rate-limiting/topic-specific.md +707 -0
  145. routemq-0.22.1/docs/redis/README.md +75 -0
  146. routemq-0.22.1/docs/release-conformance.md +82 -0
  147. routemq-0.22.1/docs/routing/README.md +73 -0
  148. routemq-0.22.1/docs/routing/dynamic-loading.md +496 -0
  149. routemq-0.22.1/docs/routing/route-definition.md +194 -0
  150. routemq-0.22.1/docs/routing/route-groups.md +217 -0
  151. routemq-0.22.1/docs/routing/route-parameters.md +300 -0
  152. routemq-0.22.1/docs/routing/shared-subscriptions.md +965 -0
  153. routemq-0.22.1/docs/security.md +21 -0
  154. routemq-0.22.1/docs/testing/README.md +104 -0
  155. routemq-0.22.1/docs/testing/coverage.md +19 -0
  156. routemq-0.22.1/docs/testing/integration-tests.md +100 -0
  157. routemq-0.22.1/docs/testing/mocking.md +20 -0
  158. routemq-0.22.1/docs/testing/running-tests.md +33 -0
  159. routemq-0.22.1/docs/testing/unit-tests.md +17 -0
  160. routemq-0.22.1/docs/tinker.md +301 -0
  161. routemq-0.22.1/docs/troubleshooting/README.md +96 -0
  162. routemq-0.22.1/docs/tsdb/README.md +122 -0
  163. routemq-0.22.1/logo.png +0 -0
  164. routemq-0.22.1/pyproject.toml +217 -0
  165. routemq-0.22.1/requirements.txt +19 -0
  166. routemq-0.22.1/routemq/__init__.py +20 -0
  167. routemq-0.22.1/routemq/cli.py +385 -0
  168. routemq-0.22.1/routemq/controller.py +7 -0
  169. routemq-0.22.1/routemq/health.py +134 -0
  170. routemq-0.22.1/routemq/job.py +219 -0
  171. routemq-0.22.1/routemq/logging_config.py +551 -0
  172. routemq-0.22.1/routemq/metrics/__init__.py +26 -0
  173. routemq-0.22.1/routemq/metrics/exposition.py +129 -0
  174. routemq-0.22.1/routemq/metrics/hooks.py +289 -0
  175. routemq-0.22.1/routemq/metrics/prometheus.py +98 -0
  176. routemq-0.22.1/routemq/metrics/registry.py +228 -0
  177. routemq-0.22.1/routemq/middleware.py +24 -0
  178. routemq-0.22.1/routemq/model.py +135 -0
  179. routemq-0.22.1/routemq/mqtt_utils.py +202 -0
  180. routemq-0.22.1/routemq/observability.py +502 -0
  181. routemq-0.22.1/routemq/py.typed +0 -0
  182. routemq-0.22.1/routemq/queue/__init__.py +19 -0
  183. routemq-0.22.1/routemq/queue/database_queue.py +225 -0
  184. routemq-0.22.1/routemq/queue/models.py +39 -0
  185. routemq-0.22.1/routemq/queue/queue_driver.py +100 -0
  186. routemq-0.22.1/routemq/queue/queue_manager.py +329 -0
  187. routemq-0.22.1/routemq/queue/queue_worker.py +347 -0
  188. routemq-0.22.1/routemq/queue/redis_queue.py +271 -0
  189. routemq-0.22.1/routemq/redis_manager.py +412 -0
  190. routemq-0.22.1/routemq/retry.py +102 -0
  191. routemq-0.22.1/routemq/router.py +182 -0
  192. routemq-0.22.1/routemq/router_registry.py +125 -0
  193. routemq-0.22.1/routemq/scaffold/__init__.py +3 -0
  194. routemq-0.22.1/routemq/scaffold/prompts.py +55 -0
  195. routemq-0.22.1/routemq/scaffold/scaffolder.py +182 -0
  196. routemq-0.22.1/routemq/scaffold/templates/__init__.py +0 -0
  197. routemq-0.22.1/routemq/scaffold/templates/base/.env +34 -0
  198. routemq-0.22.1/routemq/scaffold/templates/base/.gitignore +18 -0
  199. routemq-0.22.1/routemq/scaffold/templates/base/README.md.j2 +30 -0
  200. routemq-0.22.1/routemq/scaffold/templates/base/app/__init__.py +0 -0
  201. routemq-0.22.1/routemq/scaffold/templates/base/app/controllers/__init__.py +0 -0
  202. routemq-0.22.1/routemq/scaffold/templates/base/app/controllers/example_controller.py +10 -0
  203. routemq-0.22.1/routemq/scaffold/templates/base/app/middleware/__init__.py +0 -0
  204. routemq-0.22.1/routemq/scaffold/templates/base/app/middleware/example_middleware.py +26 -0
  205. routemq-0.22.1/routemq/scaffold/templates/base/app/models/__init__.py +0 -0
  206. routemq-0.22.1/routemq/scaffold/templates/base/app/routers/__init__.py +0 -0
  207. routemq-0.22.1/routemq/scaffold/templates/base/app/routers/example_device.py +10 -0
  208. routemq-0.22.1/routemq/scaffold/templates/base/pyproject.toml.j2 +16 -0
  209. routemq-0.22.1/routemq/scaffold/templates/features/docker/Dockerfile +12 -0
  210. routemq-0.22.1/routemq/scaffold/templates/features/docker/Makefile +19 -0
  211. routemq-0.22.1/routemq/scaffold/templates/features/docker/docker-compose.yml.j2 +49 -0
  212. routemq-0.22.1/routemq/scaffold/templates/features/mysql/.env.fragment +7 -0
  213. routemq-0.22.1/routemq/scaffold/templates/features/mysql/app/models/__init__.py +0 -0
  214. routemq-0.22.1/routemq/scaffold/templates/features/mysql/app/models/example_model.py +14 -0
  215. routemq-0.22.1/routemq/scaffold/templates/features/queue/.env.fragment +2 -0
  216. routemq-0.22.1/routemq/scaffold/templates/features/queue/app/jobs/__init__.py +0 -0
  217. routemq-0.22.1/routemq/scaffold/templates/features/queue/app/jobs/example_job.py +11 -0
  218. routemq-0.22.1/routemq/scaffold/templates/features/redis/.env.fragment +4 -0
  219. routemq-0.22.1/routemq/settings.py +251 -0
  220. routemq-0.22.1/routemq/tinker.py +518 -0
  221. routemq-0.22.1/routemq/tsdb/__init__.py +5 -0
  222. routemq-0.22.1/routemq/tsdb/clickhouse_driver.py +169 -0
  223. routemq-0.22.1/routemq/tsdb/tsdb_driver.py +54 -0
  224. routemq-0.22.1/routemq/tsdb/tsdb_manager.py +154 -0
  225. routemq-0.22.1/routemq/worker_manager.py +346 -0
  226. routemq-0.22.1/run_tests.py +25 -0
  227. routemq-0.22.1/scripts/README.md +244 -0
  228. routemq-0.22.1/scripts/update_summary.py +290 -0
  229. routemq-0.22.1/setup-project.ps1 +110 -0
  230. routemq-0.22.1/setup-project.sh +108 -0
  231. routemq-0.22.1/test_queue.py +113 -0
  232. routemq-0.22.1/tests/__init__.py +16 -0
  233. routemq-0.22.1/tests/integration/__init__.py +0 -0
  234. routemq-0.22.1/tests/integration/helpers.py +31 -0
  235. routemq-0.22.1/tests/integration/test_mqtt_end_to_end.py +78 -0
  236. routemq-0.22.1/tests/integration/test_queue_backends.py +117 -0
  237. routemq-0.22.1/tests/unit/__init__.py +2 -0
  238. routemq-0.22.1/tests/unit/app/__init__.py +0 -0
  239. routemq-0.22.1/tests/unit/app/middleware/__init__.py +0 -0
  240. routemq-0.22.1/tests/unit/app/middleware/test_rate_limit.py +83 -0
  241. routemq-0.22.1/tests/unit/app/middleware/test_rate_limit_strategies.py +443 -0
  242. routemq-0.22.1/tests/unit/app/models/__init__.py +0 -0
  243. routemq-0.22.1/tests/unit/app/models/test_queue_failed_job.py +51 -0
  244. routemq-0.22.1/tests/unit/app/models/test_queue_job.py +51 -0
  245. routemq-0.22.1/tests/unit/bootstrap/__init__.py +0 -0
  246. routemq-0.22.1/tests/unit/bootstrap/test_app.py +594 -0
  247. routemq-0.22.1/tests/unit/bootstrap/test_app_paths.py +254 -0
  248. routemq-0.22.1/tests/unit/bootstrap/test_tsdb.py +461 -0
  249. routemq-0.22.1/tests/unit/core/__init__.py +0 -0
  250. routemq-0.22.1/tests/unit/core/test_database_queue.py +254 -0
  251. routemq-0.22.1/tests/unit/core/test_health.py +132 -0
  252. routemq-0.22.1/tests/unit/core/test_job.py +239 -0
  253. routemq-0.22.1/tests/unit/core/test_job_extra.py +37 -0
  254. routemq-0.22.1/tests/unit/core/test_job_unserialize.py +143 -0
  255. routemq-0.22.1/tests/unit/core/test_logging_config.py +125 -0
  256. routemq-0.22.1/tests/unit/core/test_metrics_exposition.py +117 -0
  257. routemq-0.22.1/tests/unit/core/test_metrics_hooks.py +136 -0
  258. routemq-0.22.1/tests/unit/core/test_metrics_prometheus.py +97 -0
  259. routemq-0.22.1/tests/unit/core/test_metrics_registry.py +141 -0
  260. routemq-0.22.1/tests/unit/core/test_model.py +333 -0
  261. routemq-0.22.1/tests/unit/core/test_model_queries.py +126 -0
  262. routemq-0.22.1/tests/unit/core/test_mqtt_utils.py +186 -0
  263. routemq-0.22.1/tests/unit/core/test_observability.py +423 -0
  264. routemq-0.22.1/tests/unit/core/test_queue.py +493 -0
  265. routemq-0.22.1/tests/unit/core/test_queue_driver_contract.py +42 -0
  266. routemq-0.22.1/tests/unit/core/test_queue_manager_extra.py +134 -0
  267. routemq-0.22.1/tests/unit/core/test_queue_models_repr.py +38 -0
  268. routemq-0.22.1/tests/unit/core/test_queue_worker_extra.py +443 -0
  269. routemq-0.22.1/tests/unit/core/test_redis_manager.py +236 -0
  270. routemq-0.22.1/tests/unit/core/test_redis_queue.py +257 -0
  271. routemq-0.22.1/tests/unit/core/test_retry.py +78 -0
  272. routemq-0.22.1/tests/unit/core/test_router_registry.py +321 -0
  273. routemq-0.22.1/tests/unit/core/test_settings.py +263 -0
  274. routemq-0.22.1/tests/unit/core/test_worker_manager.py +244 -0
  275. routemq-0.22.1/tests/unit/core/test_worker_manager_process.py +319 -0
  276. routemq-0.22.1/tests/unit/scaffold/__init__.py +0 -0
  277. routemq-0.22.1/tests/unit/scaffold/test_prompts.py +79 -0
  278. routemq-0.22.1/tests/unit/scaffold/test_scaffolder.py +149 -0
  279. routemq-0.22.1/tests/unit/test_cli.py +231 -0
  280. routemq-0.22.1/tests/unit/test_controller.py +49 -0
  281. routemq-0.22.1/tests/unit/test_middleware.py +85 -0
  282. routemq-0.22.1/tests/unit/test_router.py +144 -0
  283. routemq-0.22.1/tests/unit/test_tinker_rich.py +402 -0
  284. routemq-0.22.1/uv.lock +2971 -0
@@ -0,0 +1,87 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ share/python-wheels/
20
+ *.egg-info/
21
+ .installed.cfg
22
+ *.egg
23
+ MANIFEST
24
+
25
+ # PyInstaller
26
+ *.manifest
27
+ *.spec
28
+
29
+ # Installer logs
30
+ pip-log.txt
31
+ pip-delete-this-directory.txt
32
+
33
+ # Unit test / coverage reports
34
+ htmlcov/
35
+ .tox/
36
+ .nox/
37
+ .coverage
38
+ .coverage.*
39
+ .cache
40
+ nosetests.xml
41
+ coverage.xml
42
+ *.cover
43
+ *.py,cover
44
+ .hypothesis/
45
+ .pytest_cache/
46
+ cover/
47
+
48
+ # Environments
49
+ .env.local
50
+ .env.*.local
51
+ venv/
52
+ env/
53
+ ENV/
54
+ env.bak/
55
+ venv.bak/
56
+
57
+ # IDE
58
+ .vscode/
59
+ .idea/
60
+ *.swp
61
+ *.swo
62
+ *~
63
+
64
+ # OS
65
+ .DS_Store
66
+ .DS_Store?
67
+ ._*
68
+ .Spotlight-V100
69
+ .Trashes
70
+ ehthumbs.db
71
+ Thumbs.db
72
+
73
+ # Project specific
74
+ logs/
75
+ *.log
76
+ .git/
77
+ .gitignore
78
+ README.md
79
+ docker-compose.yml
80
+ Dockerfile
81
+ *.md
82
+ !README.md
83
+ logo.png
84
+
85
+ # Docker
86
+ docker/
87
+ .dockerignore
@@ -0,0 +1,63 @@
1
+ # Docker Environment Configuration for RouteMQ
2
+ # Copy this file to .env and customize for your deployment
3
+
4
+ # MQTT Broker Configuration
5
+ MQTT_BROKER=test.mosquitto.org
6
+ MQTT_PORT=1883
7
+ MQTT_USERNAME=
8
+ MQTT_PASSWORD=
9
+ MQTT_GROUP_NAME=mqtt_framework_group
10
+
11
+ # MySQL Configuration
12
+ ENABLE_MYSQL=true
13
+ DB_HOST=mysql
14
+ DB_PORT=3306
15
+ DB_NAME=mqtt_framework
16
+ DB_USER=routemq
17
+ DB_PASS=routemq
18
+
19
+ # Database Pool Configuration
20
+ # DB_POOL_SIZE=5
21
+ # DB_POOL_MAX_OVERFLOW=10
22
+ # DB_POOL_TIMEOUT=30
23
+ # DB_POOL_RECYCLE=1800
24
+ # DB_POOL_PRE_PING=true
25
+ # DB_POOL_USE_LIFO=false
26
+ # DB_POOL_CLASS=default
27
+
28
+ # Redis Configuration
29
+ ENABLE_REDIS=true
30
+ REDIS_HOST=redis
31
+ REDIS_PORT=6379
32
+ REDIS_DB=0
33
+ REDIS_PASSWORD=
34
+
35
+ # TSDB (ClickHouse) Configuration
36
+ ENABLE_TSDB=false
37
+ TSDB_HOST=clickhouse
38
+ TSDB_PORT=8123
39
+ TSDB_DATABASE=default
40
+ TSDB_USER=default
41
+ TSDB_PASSWORD=
42
+
43
+ # Queue Configuration
44
+ QUEUE_CONNECTION=redis
45
+
46
+ # Metrics HTTP Configuration
47
+ METRICS_HTTP_ENABLED=false
48
+ # PROMETHEUS_MULTIPROC_DIR=/tmp/routemq-prom
49
+
50
+ # Timezone
51
+ TIMEZONE=Asia/Jakarta
52
+
53
+ # Logging Configuration
54
+ LOG_FORMATTER=json
55
+ LOG_FIELD_PROFILE=otel
56
+ LOG_LEVEL=INFO
57
+ LOG_TO_CONSOLE=true
58
+ LOG_STREAM=stdout
59
+ LOG_INCLUDE_CONTEXT=true
60
+ LOG_LIFECYCLE_EVENTS=true
61
+ LOG_LIFECYCLE_LEVEL=INFO
62
+ LOG_TO_FILE=false
63
+ LOG_FORMAT=%(asctime)s - %(name)s - %(levelname)s - %(message)s
@@ -0,0 +1,98 @@
1
+ # RouteMQ Configuration Example
2
+
3
+ # Basic Configuration
4
+ MQTT_BROKER=localhost
5
+ MQTT_PORT=1883
6
+ MQTT_CLIENT_ID=mqtt-framework-main
7
+ MQTT_USERNAME=
8
+ MQTT_PASSWORD=
9
+ MQTT_GROUP_NAME=mqtt_framework_group
10
+
11
+ # Database Configuration
12
+ ENABLE_MYSQL=true
13
+ DB_HOST=localhost
14
+ DB_PORT=3306
15
+ DB_NAME=mqtt_framework
16
+ DB_USER=root
17
+ DB_PASS=
18
+
19
+ # Database Pool Configuration
20
+ # DB_POOL_SIZE=5
21
+ # DB_POOL_MAX_OVERFLOW=10
22
+ # DB_POOL_TIMEOUT=30
23
+ # DB_POOL_RECYCLE=1800
24
+ # DB_POOL_PRE_PING=true
25
+ # DB_POOL_USE_LIFO=false
26
+ # DB_POOL_CLASS=default
27
+
28
+ # Redis Configuration
29
+ ENABLE_REDIS=false
30
+
31
+ # TSDB (ClickHouse) Configuration — optional, requires routemq[clickhouse]
32
+ ENABLE_TSDB=false
33
+ TSDB_HOST=localhost
34
+ TSDB_PORT=8123
35
+ TSDB_DATABASE=default
36
+ TSDB_USER=default
37
+ TSDB_PASSWORD=
38
+ TSDB_BATCH_SIZE=10000
39
+ TSDB_FLUSH_INTERVAL=1.0
40
+ TSDB_BUFFER_MAXSIZE=50000
41
+ TSDB_ASYNC_INSERT=true
42
+
43
+ # Queue Configuration
44
+ # Queue connection driver: 'redis' or 'database'
45
+ # Redis queue is faster but requires ENABLE_REDIS=true
46
+ # Database queue is persistent but requires ENABLE_MYSQL=true
47
+ QUEUE_CONNECTION=redis
48
+
49
+ # Metrics HTTP Configuration
50
+ METRICS_HTTP_ENABLED=false
51
+ # PROMETHEUS_MULTIPROC_DIR=/tmp/routemq-prom
52
+
53
+ # Logging Configuration
54
+ # Formatter: json (default NDJSON) or plain (legacy text logs)
55
+ LOG_FORMATTER=json
56
+
57
+ # Field profile: otel, ecs, datadog, loki, or routemq
58
+ LOG_FIELD_PROFILE=otel
59
+
60
+ # Log level: DEBUG, INFO, WARNING, ERROR, CRITICAL
61
+ LOG_LEVEL=INFO
62
+
63
+ # Console logging and stream selection
64
+ LOG_TO_CONSOLE=true
65
+ LOG_STREAM=stdout
66
+
67
+ # Include RouteMQ observability context in log records
68
+ LOG_INCLUDE_CONTEXT=true
69
+
70
+ # Mirror RouteMQ lifecycle events to logs
71
+ LOG_LIFECYCLE_EVENTS=true
72
+ LOG_LIFECYCLE_LEVEL=INFO
73
+
74
+ # Enable/disable file logging (true/false)
75
+ LOG_TO_FILE=false
76
+
77
+ # Log file path (relative to project root or absolute path)
78
+ LOG_FILE=logs/app.log
79
+
80
+ # Legacy plain log format pattern (used when LOG_FORMATTER=plain)
81
+ LOG_FORMAT=%(asctime)s - %(name)s - %(levelname)s - %(message)s
82
+
83
+ # Rotation type: 'size' for size-based rotation, 'time' for time-based rotation
84
+ LOG_ROTATION_TYPE=size
85
+
86
+ # Size-based rotation settings
87
+ # Maximum file size in bytes before rotation (default: 10MB)
88
+ LOG_MAX_BYTES=10485760
89
+ # Number of backup files to keep
90
+ LOG_BACKUP_COUNT=5
91
+
92
+ # Time-based rotation settings (only used when LOG_ROTATION_TYPE=time)
93
+ # When to rotate: 'midnight', 'D' (daily), 'H' (hourly), 'M' (monthly), etc.
94
+ LOG_ROTATION_WHEN=midnight
95
+ # Rotation interval (e.g., 1 for every day if WHEN=D)
96
+ LOG_ROTATION_INTERVAL=1
97
+ # Date format for backup file names
98
+ LOG_DATE_FORMAT=%Y-%m-%d
@@ -0,0 +1,4 @@
1
+ # Default code owners for RouteMQ. GitHub branch protection can require
2
+ # review from code owners when this file is present.
3
+
4
+ * @ardzz
@@ -0,0 +1,44 @@
1
+ name: Bug report
2
+ description: Report a reproducible RouteMQ bug
3
+ title: "bug: "
4
+ labels: [bug]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Do not report undisclosed security vulnerabilities here. Use GitHub Security Advisories or the fallback email in SECURITY.md.
10
+ - type: input
11
+ id: version
12
+ attributes:
13
+ label: RouteMQ version
14
+ description: Package version or commit SHA.
15
+ placeholder: "0.17.1"
16
+ validations:
17
+ required: true
18
+ - type: input
19
+ id: python
20
+ attributes:
21
+ label: Python version
22
+ placeholder: "3.12"
23
+ validations:
24
+ required: true
25
+ - type: textarea
26
+ id: reproduce
27
+ attributes:
28
+ label: Minimal reproduction
29
+ description: Include topic, payload shape, route definition, broker/Redis/MySQL details if relevant, and exact commands.
30
+ validations:
31
+ required: true
32
+ - type: textarea
33
+ id: expected
34
+ attributes:
35
+ label: Expected behavior
36
+ validations:
37
+ required: true
38
+ - type: textarea
39
+ id: actual
40
+ attributes:
41
+ label: Actual behavior
42
+ description: Include logs or traceback with secrets removed.
43
+ validations:
44
+ required: true
@@ -0,0 +1,26 @@
1
+ name: Feature request
2
+ description: Propose a RouteMQ feature or behavior change
3
+ title: "feat: "
4
+ labels: [enhancement]
5
+ body:
6
+ - type: textarea
7
+ id: use-case
8
+ attributes:
9
+ label: Use case
10
+ description: What problem does this solve for a RouteMQ user?
11
+ validations:
12
+ required: true
13
+ - type: textarea
14
+ id: proposal
15
+ attributes:
16
+ label: Proposed behavior or API
17
+ description: Include example routes, jobs, middleware, or CLI commands when helpful.
18
+ validations:
19
+ required: true
20
+ - type: textarea
21
+ id: compatibility
22
+ attributes:
23
+ label: Compatibility concerns
24
+ description: Note any migration, SemVer, or dependency impact.
25
+ validations:
26
+ required: false
@@ -0,0 +1,68 @@
1
+ # Security Vulnerability Triage Process
2
+
3
+ ## Scope
4
+
5
+ - Covers Bandit SAST findings, pip-audit dependency CVE findings, and future scanners that report
6
+ actionable vulnerability findings.
7
+ - Does not cover secret-scanning findings. Secret-scanning is handled separately through GitGuardian or
8
+ GitHub secret-scanning.
9
+
10
+ ## Severity Classification
11
+
12
+ | Unified | Bandit | pip-audit (CVSS) | SLA to acknowledge | SLA to resolve |
13
+ |---|---|---|---|---|
14
+ | Critical | n/a | 9.0-10.0 | 1 business day | 7 calendar days |
15
+ | High | High | 7.0-8.9 | 2 business days | 14 calendar days |
16
+ | Medium | Medium | 4.0-6.9 | 5 business days | 30 calendar days |
17
+ | Low | Low | 0.1-3.9 | best-effort | best-effort |
18
+ | Info | n/a (low confidence) | n/a | n/a - TP review only | n/a |
19
+
20
+ ## Triage Decision Tree
21
+
22
+ 1. New finding appears in CI output.
23
+ 2. Reviewer classifies the finding. The default reviewer is the PR author. Escalate to CODEOWNERS if
24
+ ownership is unclear.
25
+ 3. Use one of these outcomes:
26
+
27
+ - **TP (true positive)** - real vulnerability exploitable in this codebase's usage. Open an issue, label
28
+ `security:tp`, attach the finding ID, and prioritize per the SLA above.
29
+ - **FP (false positive)** - finding does not apply. Examples: dev-only dependency, unreachable code path, or
30
+ wrong tool inference. Suppress per the Suppression section below; document rationale in the PR or issue.
31
+ - **Won't fix (accepted risk)** - TP but business-justified. Requires CODEOWNER sign-off; document in
32
+ `.github/SECURITY-EXCEPTIONS.md` created on first use; review at least quarterly.
33
+
34
+ ## Suppression Mechanisms
35
+
36
+ ### Bandit
37
+
38
+ - Per-line: `# nosec B<rule-id> # <one-line rationale>`; must include rule ID and rationale.
39
+ - Per-file: `# nosec # justified at top-of-file: <rationale>`.
40
+ - Repo-wide: `pyproject.toml [tool.bandit]` `skips` or `tests` arrays. Requires PR review and CODEOWNER
41
+ sign-off.
42
+
43
+ ### pip-audit
44
+
45
+ - Per-vulnerability ignore: `pyproject.toml [tool.pip-audit]`, if supported in the current version, or CLI flag
46
+ `--ignore-vuln <ID>`.
47
+ - Document each ignore in a `.github/PIP_AUDIT_IGNORES.md` table with columns: ID, Package, Reason,
48
+ Reviewer, Expires.
49
+ - Expire ignores no later than the next major dependency bump or 90 days, whichever comes sooner.
50
+
51
+ ## Ownership
52
+
53
+ - First reviewer: PR author who introduced the dependency or code path.
54
+ - Escalation: CODEOWNERS for the affected module. See `.github/CODEOWNERS`.
55
+ - Security questions: use GitHub Security Advisories for private reports, or email the maintainer listed in
56
+ `SECURITY.md` when the advisory form is unavailable.
57
+
58
+ ## Re-Validation Cadence
59
+
60
+ - Suppressions and accepted-risk entries are reviewed quarterly on the first Monday of each quarter.
61
+ - A scheduled GitHub Action runs CI weekly to catch newly disclosed dependency and SAST findings in already-deployed dependencies.
62
+ - Failed scheduled scans open an issue automatically in a future sprint.
63
+
64
+ ## Reporting
65
+
66
+ - Externally reported vulnerabilities through GitHub Security Advisories, email, or similar channels follow the
67
+ standard GitHub coordinated-disclosure flow.
68
+ - Public `SECURITY.md`, if present, defines disclosure expectations.
@@ -0,0 +1,118 @@
1
+ # Branch Protection Policy for RouteMQ Sprint 02
2
+ # ==============================================
3
+ # This file documents the required branch protection settings.
4
+ #
5
+ # IMPORTANT: This is a REFERENCE configuration. GitHub branch protection
6
+ # rules must be applied via GitHub UI or API. This file is not
7
+ # automatically enforced by GitHub.
8
+ #
9
+ # To apply these settings:
10
+ # 1. Use GitHub UI: Settings > Branches > Add rule
11
+ # 2. Or use GitHub CLI: gh api repos/{owner}/{repo}/branches/{branch}/protection
12
+ # 3. Or use Probot Settings app (if configured)
13
+
14
+ # Target branches for protection
15
+ branches:
16
+ - master
17
+ - develop
18
+
19
+ # Protection rules
20
+ protection:
21
+ # Require pull request reviews before merging
22
+ required_pull_request_reviews:
23
+ # 0 = solo-dev mode; status checks still required
24
+ required_approving_review_count: 0
25
+ dismiss_stale_reviews: true
26
+ require_code_owner_reviews: false
27
+ # Require review from code owners (optional, set to true if CODEOWNERS exists)
28
+ require_last_push_approval: false
29
+
30
+ # Require status checks to pass before merging
31
+ required_status_checks:
32
+ # Require branches to be up to date before merging
33
+ strict: true
34
+ # Status checks that are required (must match exact job names in .github/workflows/ci.yml)
35
+ contexts:
36
+ - test
37
+ - lint
38
+ - type-check
39
+ - security
40
+ - coverage
41
+ - build
42
+ # Note: All jobs depend on 'test', so requiring all ensures full CI passes
43
+
44
+ # Require conversation resolution before merging
45
+ required_conversation_resolution: true
46
+
47
+ # Require signed commits (optional - enable for high-security requirements)
48
+ required_signatures: false
49
+
50
+ # Include administrators (apply rules to admins too)
51
+ enforce_admins: true
52
+
53
+ # Restrict who can push to matching branches
54
+ restrictions: null # null = no restrictions beyond the rules above
55
+
56
+ # Require linear history (no merge commits)
57
+ required_linear_history: true
58
+
59
+ # Allow force pushes (MUST be false for protection)
60
+ allow_force_pushes: false
61
+
62
+ # Allow deletions
63
+ allow_deletions: false
64
+
65
+ # Require deployments to succeed before merging (optional)
66
+ required_deployments: null
67
+
68
+ # Sprint 02 Additional Requirements
69
+ # ---------------------------------
70
+ sprint_02:
71
+ effective_date: "2026-05-25"
72
+ rationale: |
73
+ Branch protection ensures code quality and prevents accidental
74
+ changes to protected branches. Required checks enforce:
75
+ - All tests pass (test)
76
+ - Code style compliance (lint)
77
+ - Type safety (type-check)
78
+ - Security scanning (security)
79
+ - Coverage thresholds (coverage)
80
+ - Package build success (build)
81
+
82
+ notes: |
83
+ - The 'test' job is the base dependency for all other CI jobs
84
+ - 'lint' includes both ruff lint and format checks
85
+ - 'security' includes Bandit SAST and pip-audit dependency scan
86
+ - 'coverage' generates test coverage reports
87
+ - 'build' verifies the package builds correctly
88
+
89
+ exemptions: |
90
+ Emergency hotfixes may bypass review requirements via admin override,
91
+ but this should be documented and reviewed post-merge.
92
+
93
+ # GitHub CLI Commands for Reference
94
+ # ---------------------------------
95
+ # To apply these settings via GitHub CLI, run:
96
+ #
97
+ # gh api repos/{owner}/{repo}/branches/master/protection \
98
+ # --method PUT \
99
+ # --input - <<EOF
100
+ # {
101
+ # "required_status_checks": {
102
+ # "strict": true,
103
+ # "contexts": ["test", "lint", "type-check", "security", "coverage", "build"]
104
+ # },
105
+ # "enforce_admins": true,
106
+ # "required_pull_request_reviews": {
107
+ # "required_approving_review_count": 1,
108
+ # "dismiss_stale_reviews": true
109
+ # },
110
+ # "restrictions": null,
111
+ # "required_linear_history": true,
112
+ # "allow_force_pushes": false,
113
+ # "allow_deletions": false,
114
+ # "required_conversation_resolution": true
115
+ # }
116
+ # EOF
117
+ #
118
+ # Repeat for 'develop' branch.
@@ -0,0 +1,24 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ day: "monday"
8
+ time: "09:00"
9
+ timezone: "Asia/Jakarta"
10
+ open-pull-requests-limit: 5
11
+ commit-message:
12
+ prefix: "ci"
13
+ include: "scope"
14
+ labels:
15
+ - "dependencies"
16
+ - "github-actions"
17
+
18
+ - package-ecosystem: "pip"
19
+ directory: "/"
20
+ schedule:
21
+ interval: "monthly"
22
+ commit-message:
23
+ prefix: "build"
24
+ include: "scope"
@@ -0,0 +1,78 @@
1
+ name-template: 'v$RESOLVED_VERSION'
2
+ tag-template: 'v$RESOLVED_VERSION'
3
+ version-resolver:
4
+ major:
5
+ labels:
6
+ - 'major'
7
+ minor:
8
+ labels:
9
+ - 'minor'
10
+ patch:
11
+ labels:
12
+ - 'patch'
13
+ default: patch
14
+ categories:
15
+ - title: '⚠️ Breaking changes'
16
+ labels:
17
+ - 'breaking change'
18
+ - title: '🚀 Features'
19
+ labels:
20
+ - 'feature'
21
+ - title: '🐛 Bug Fixes'
22
+ labels:
23
+ - 'bug'
24
+ - title: '📃 Documents'
25
+ labels:
26
+ - 'docs'
27
+ - title: '🧩 Dependency Updates'
28
+ labels:
29
+ - 'deps'
30
+ - 'dependencies'
31
+ - 'bump'
32
+ - 'chore'
33
+ collapse-after: 5
34
+ - title: '🔬 Others'
35
+ labels:
36
+ - 'style'
37
+ - 'refactor'
38
+ - 'test'
39
+ - 'ci'
40
+ collapse-after: 5
41
+ autolabeler:
42
+ - label: 'breaking change'
43
+ title:
44
+ - '/!:/i'
45
+ - label: 'feature'
46
+ title:
47
+ - '/feat:/i'
48
+ - label: 'bug'
49
+ title:
50
+ - '/fix:/i'
51
+ - label: 'style'
52
+ title:
53
+ - '/style:/i'
54
+ - label: 'refactor'
55
+ title:
56
+ - '/refactor:/i'
57
+ - label: 'test'
58
+ title:
59
+ - '/test:/i'
60
+ - label: 'chore'
61
+ title:
62
+ - '/chore:/i'
63
+ - label: 'docs'
64
+ title:
65
+ - '/docs:/i'
66
+ - label: 'ci'
67
+ title:
68
+ - '/ci:/i'
69
+ - label: 'dependencies'
70
+ title:
71
+ - '/deps:/i'
72
+ - '/dependencies:/i'
73
+ - '/bump:/i'
74
+ commitish: master
75
+ change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
76
+ change-title-escapes: '\<_*&'
77
+ template: |
78
+ $CHANGES
@@ -0,0 +1,42 @@
1
+ # RELEASE_TOKEN Rotation Procedure
2
+
3
+ ## Purpose
4
+ `RELEASE_TOKEN` is a fine-grained GitHub PAT used by `.github/workflows/release.yml`
5
+ specifically for the `gh pr create`/`gh pr merge` step. This is necessary because
6
+ GitHub deliberately suppresses CI triggering on PRs created by `GITHUB_TOKEN`.
7
+
8
+ ## Current Token (do not commit value here)
9
+ - Owner: ardzz (personal account)
10
+ - Created: 2026-05-27 (approx)
11
+ - Expires: 2026-08-25 (90 days from creation)
12
+ - Repository access: Only ardzz/RouteMQ
13
+ - Permissions:
14
+ - Contents: Read and write
15
+ - Pull requests: Read and write
16
+ - Workflows: Read and write
17
+
18
+ ## Rotation Schedule
19
+ - **Calendar reminder:** 7 days before expiration
20
+ - **Hard deadline:** Day of expiration
21
+ - **GitHub auto-emails the owner** ~7 days before; do not ignore
22
+
23
+ ## Rotation Steps
24
+ 1. Open https://github.com/settings/personal-access-tokens/new
25
+ 2. Generate new fine-grained PAT with identical scopes (see above)
26
+ 3. Open https://github.com/ardzz/RouteMQ/settings/secrets/actions
27
+ 4. Click `RELEASE_TOKEN` → Update → paste new value → Update secret
28
+ 5. Go back to https://github.com/settings/personal-access-tokens
29
+ 6. Find the previous token → Revoke
30
+ 7. Verify by triggering a small `fix:` commit and confirming the bump PR has CI checks
31
+
32
+ ## Security Reminders
33
+ - **NEVER paste this token into chat, screenshots, commits, or external tools.**
34
+ - GitGuardian (CI check) will catch accidental commit-time exposure.
35
+ - If you suspect leakage: revoke immediately, generate new, update secret.
36
+ - This token grants write access to RouteMQ only (fine-grained), but a compromise
37
+ could push commits, create PRs, and modify workflows. Treat as production credential.
38
+
39
+ ## Why PAT and Not GitHub App
40
+ PAT was chosen for setup simplicity (Sprint 18). A GitHub App would be more secure
41
+ (short-lived tokens, no user dependency). Migration to App is a future micro-sprint
42
+ (`SPRINT-18b` candidate) when warranted.