aury-boot 0.0.35__tar.gz → 0.0.37__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 (217) hide show
  1. {aury_boot-0.0.35 → aury_boot-0.0.37}/PKG-INFO +1 -1
  2. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/_version.py +2 -2
  3. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/config/settings.py +22 -12
  4. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/init.py +2 -2
  5. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/server/app.py +8 -5
  6. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/AGENTS.md.tpl +1 -1
  7. aury_boot-0.0.37/aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl +152 -0
  8. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/messaging.tpl +15 -7
  9. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/alerting/rules.py +2 -2
  10. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/tracing/processor.py +17 -1
  11. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/mq/backends/__init__.py +2 -0
  12. aury_boot-0.0.37/aury/boot/infrastructure/mq/backends/redis_stream.py +428 -0
  13. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/mq/base.py +1 -0
  14. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/mq/manager.py +3 -0
  15. aury_boot-0.0.35/aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl +0 -102
  16. {aury_boot-0.0.35 → aury_boot-0.0.37}/.gitignore +0 -0
  17. {aury_boot-0.0.35 → aury_boot-0.0.37}/README.md +0 -0
  18. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/__init__.py +0 -0
  19. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/__init__.py +0 -0
  20. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/adapter/__init__.py +0 -0
  21. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/adapter/base.py +0 -0
  22. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/adapter/config.py +0 -0
  23. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/adapter/decorators.py +0 -0
  24. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/adapter/exceptions.py +0 -0
  25. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/adapter/http.py +0 -0
  26. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/app/__init__.py +0 -0
  27. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/app/base.py +0 -0
  28. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/app/components.py +0 -0
  29. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/app/middlewares.py +0 -0
  30. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/app/startup.py +0 -0
  31. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/config/__init__.py +0 -0
  32. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/config/multi_instance.py +0 -0
  33. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/constants/__init__.py +0 -0
  34. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/constants/components.py +0 -0
  35. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/constants/scheduler.py +0 -0
  36. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/constants/service.py +0 -0
  37. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/errors/__init__.py +0 -0
  38. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/errors/chain.py +0 -0
  39. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/errors/codes.py +0 -0
  40. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/errors/exceptions.py +0 -0
  41. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/errors/handlers.py +0 -0
  42. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/errors/response.py +0 -0
  43. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/interfaces/__init__.py +0 -0
  44. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/interfaces/egress.py +0 -0
  45. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/interfaces/ingress.py +0 -0
  46. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/middleware/__init__.py +0 -0
  47. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/middleware/logging.py +0 -0
  48. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/migrations/__init__.py +0 -0
  49. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/migrations/manager.py +0 -0
  50. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/migrations/setup.py +0 -0
  51. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/rpc/__init__.py +0 -0
  52. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/rpc/base.py +0 -0
  53. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/rpc/client.py +0 -0
  54. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/rpc/discovery.py +0 -0
  55. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/scheduler/__init__.py +0 -0
  56. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/scheduler/runner.py +0 -0
  57. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/application/server/__init__.py +0 -0
  58. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/__init__.py +0 -0
  59. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/add.py +0 -0
  60. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/app.py +0 -0
  61. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/config.py +0 -0
  62. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/docker.py +0 -0
  63. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/docs.py +0 -0
  64. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/generate.py +0 -0
  65. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/migrate/__init__.py +0 -0
  66. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/migrate/app.py +0 -0
  67. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/migrate/commands.py +0 -0
  68. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/pkg.py +0 -0
  69. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/scheduler.py +0 -0
  70. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/server/__init__.py +0 -0
  71. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/generate/api.py.tpl +0 -0
  72. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/generate/model.py.tpl +0 -0
  73. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/generate/repository.py.tpl +0 -0
  74. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/generate/schema.py.tpl +0 -0
  75. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/generate/service.py.tpl +0 -0
  76. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/README.md.tpl +0 -0
  77. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/admin_console_init.py.tpl +0 -0
  78. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/alert_rules.example.yaml.tpl +0 -0
  79. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/00-overview.md.tpl +0 -0
  80. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/01-model.md.tpl +0 -0
  81. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/02-repository.md.tpl +0 -0
  82. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/03-service.md.tpl +0 -0
  83. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/04-schema.md.tpl +0 -0
  84. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/05-api.md.tpl +0 -0
  85. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/06-exception.md.tpl +0 -0
  86. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/07-cache.md.tpl +0 -0
  87. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/08-scheduler.md.tpl +0 -0
  88. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/09-tasks.md.tpl +0 -0
  89. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/10-storage.md.tpl +0 -0
  90. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/11-logging.md.tpl +0 -0
  91. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/12-admin.md.tpl +0 -0
  92. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl +0 -0
  93. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/15-events.md.tpl +0 -0
  94. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl +0 -0
  95. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/17-alerting.md.tpl +0 -0
  96. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl +0 -0
  97. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/config.py.tpl +0 -0
  98. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/conftest.py.tpl +0 -0
  99. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/_header.tpl +0 -0
  100. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/admin.tpl +0 -0
  101. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/cache.tpl +0 -0
  102. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/database.tpl +0 -0
  103. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/log.tpl +0 -0
  104. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/monitoring.tpl +0 -0
  105. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/rpc.tpl +0 -0
  106. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/scheduler.tpl +0 -0
  107. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/service.tpl +0 -0
  108. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/storage.tpl +0 -0
  109. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/env_templates/third_party.tpl +0 -0
  110. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/gitignore.tpl +0 -0
  111. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/main.py.tpl +0 -0
  112. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/modules/api.py.tpl +0 -0
  113. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/modules/exceptions.py.tpl +0 -0
  114. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/modules/schedules.py.tpl +0 -0
  115. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/templates/project/modules/tasks.py.tpl +0 -0
  116. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/commands/worker.py +0 -0
  117. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/common/__init__.py +0 -0
  118. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/common/exceptions/__init__.py +0 -0
  119. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/common/i18n/__init__.py +0 -0
  120. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/common/i18n/translator.py +0 -0
  121. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/common/logging/__init__.py +0 -0
  122. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/common/logging/context.py +0 -0
  123. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/common/logging/decorators.py +0 -0
  124. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/common/logging/format.py +0 -0
  125. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/common/logging/setup.py +0 -0
  126. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/contrib/__init__.py +0 -0
  127. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/contrib/admin_console/__init__.py +0 -0
  128. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/contrib/admin_console/auth.py +0 -0
  129. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/contrib/admin_console/discovery.py +0 -0
  130. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/contrib/admin_console/install.py +0 -0
  131. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/contrib/admin_console/utils.py +0 -0
  132. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/__init__.py +0 -0
  133. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/exceptions/__init__.py +0 -0
  134. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/models/__init__.py +0 -0
  135. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/models/base.py +0 -0
  136. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/models/mixins.py +0 -0
  137. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/models/models.py +0 -0
  138. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/pagination/__init__.py +0 -0
  139. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/repository/__init__.py +0 -0
  140. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/repository/impl.py +0 -0
  141. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/repository/interceptors.py +0 -0
  142. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/repository/interface.py +0 -0
  143. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/repository/query_builder.py +0 -0
  144. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/service/__init__.py +0 -0
  145. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/service/base.py +0 -0
  146. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/domain/transaction/__init__.py +0 -0
  147. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/__init__.py +0 -0
  148. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/cache/__init__.py +0 -0
  149. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/cache/backends.py +0 -0
  150. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/cache/base.py +0 -0
  151. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/cache/exceptions.py +0 -0
  152. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/cache/factory.py +0 -0
  153. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/cache/manager.py +0 -0
  154. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/channel/__init__.py +0 -0
  155. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/channel/backends/__init__.py +0 -0
  156. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/channel/backends/broadcaster.py +0 -0
  157. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/channel/base.py +0 -0
  158. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/channel/manager.py +0 -0
  159. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/clients/__init__.py +0 -0
  160. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/clients/rabbitmq/__init__.py +0 -0
  161. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/clients/rabbitmq/config.py +0 -0
  162. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/clients/rabbitmq/manager.py +0 -0
  163. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/clients/redis/__init__.py +0 -0
  164. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/clients/redis/config.py +0 -0
  165. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/clients/redis/manager.py +0 -0
  166. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/database/__init__.py +0 -0
  167. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/database/config.py +0 -0
  168. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/database/exceptions.py +0 -0
  169. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/database/manager.py +0 -0
  170. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/database/query_tools/__init__.py +0 -0
  171. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/database/strategies/__init__.py +0 -0
  172. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/di/__init__.py +0 -0
  173. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/di/container.py +0 -0
  174. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/events/__init__.py +0 -0
  175. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/events/backends/__init__.py +0 -0
  176. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/events/backends/broadcaster.py +0 -0
  177. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/events/backends/rabbitmq.py +0 -0
  178. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/events/base.py +0 -0
  179. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/events/manager.py +0 -0
  180. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/events/middleware.py +0 -0
  181. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/__init__.py +0 -0
  182. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/alerting/__init__.py +0 -0
  183. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/alerting/aggregator.py +0 -0
  184. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/alerting/events.py +0 -0
  185. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/alerting/manager.py +0 -0
  186. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/alerting/notifiers/__init__.py +0 -0
  187. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/alerting/notifiers/base.py +0 -0
  188. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/alerting/notifiers/feishu.py +0 -0
  189. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/alerting/notifiers/webhook.py +0 -0
  190. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/health/__init__.py +0 -0
  191. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/tracing/__init__.py +0 -0
  192. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/tracing/context.py +0 -0
  193. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/tracing/logging.py +0 -0
  194. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/tracing/provider.py +0 -0
  195. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/monitoring/tracing/tracing.py +0 -0
  196. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/mq/__init__.py +0 -0
  197. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/mq/backends/rabbitmq.py +0 -0
  198. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/mq/backends/redis.py +0 -0
  199. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/scheduler/__init__.py +0 -0
  200. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/scheduler/exceptions.py +0 -0
  201. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/scheduler/manager.py +0 -0
  202. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/storage/__init__.py +0 -0
  203. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/storage/base.py +0 -0
  204. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/storage/exceptions.py +0 -0
  205. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/storage/factory.py +0 -0
  206. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/tasks/__init__.py +0 -0
  207. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/tasks/config.py +0 -0
  208. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/tasks/constants.py +0 -0
  209. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/tasks/exceptions.py +0 -0
  210. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/infrastructure/tasks/manager.py +0 -0
  211. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/testing/__init__.py +0 -0
  212. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/testing/base.py +0 -0
  213. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/testing/client.py +0 -0
  214. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/testing/factory.py +0 -0
  215. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/toolkit/__init__.py +0 -0
  216. {aury_boot-0.0.35 → aury_boot-0.0.37}/aury/boot/toolkit/http/__init__.py +0 -0
  217. {aury_boot-0.0.35 → aury_boot-0.0.37}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aury-boot
3
- Version: 0.0.35
3
+ Version: 0.0.37
4
4
  Summary: Aury Boot - 基于 FastAPI 生态的企业级 API 开发框架
5
5
  Requires-Python: >=3.13
6
6
  Requires-Dist: alembic>=1.17.2
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.0.35'
32
- __version_tuple__ = version_tuple = (0, 0, 35)
31
+ __version__ = version = '0.0.37'
32
+ __version_tuple__ = version_tuple = (0, 0, 37)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -147,13 +147,13 @@ class MQInstanceConfig(MultiInstanceSettings):
147
147
 
148
148
  环境变量格式: MQ__{INSTANCE}__{FIELD}
149
149
  示例:
150
- MQ__DEFAULT__BACKEND=redis
150
+ MQ__DEFAULT__BACKEND=redis_stream
151
151
  MQ__DEFAULT__URL=redis://localhost:6379/4
152
152
  """
153
153
 
154
154
  backend: str = Field(
155
- default="redis",
156
- description="消息队列后端 (redis/rabbitmq)"
155
+ default="redis_stream",
156
+ description="消息队列后端 (redis/redis_stream/rabbitmq)"
157
157
  )
158
158
  url: str | None = Field(
159
159
  default=None,
@@ -530,24 +530,25 @@ class MessageQueueSettings(BaseModel):
530
530
  """消息队列配置。
531
531
 
532
532
  环境变量格式: MQ__{FIELD}
533
- 示例: MQ__BROKER_URL, MQ__DEFAULT_QUEUE, MQ__SERIALIZER
533
+ 示例: MQ__BACKEND, MQ__URL, MQ__BROKER_URL
534
534
 
535
535
  与 Task(任务队列)的区别:
536
536
  - Task: 基于 Dramatiq,用于异步任务处理(API + Worker 模式)
537
537
  - MQ: 通用消息队列,用于服务间通信、事件驱动架构
538
538
 
539
539
  支持的后端:
540
- - Redis: redis://localhost:6379/0
541
- - RabbitMQ: amqp://guest:guest@localhost:5672//
540
+ - redis: redis://localhost:6379/0
541
+ - redis_stream: redis://localhost:6379/0
542
+ - rabbitmq: amqp://guest:guest@localhost:5672//
542
543
  """
543
544
 
544
- enabled: bool = Field(
545
- default=False,
546
- description="是否启用消息队列组件"
545
+ backend: str = Field(
546
+ default="",
547
+ description="消息队列后端 (redis/redis_stream/rabbitmq),空字符串表示不启用"
547
548
  )
548
- broker_url: str | None = Field(
549
+ url: str | None = Field(
549
550
  default=None,
550
- description="消息队列代理 URL"
551
+ description="连接 URL"
551
552
  )
552
553
  default_queue: str = Field(
553
554
  default="default",
@@ -714,7 +715,7 @@ class AlertSettings(BaseModel):
714
715
 
715
716
  # 抑制配置
716
717
  suppress_seconds: int = Field(
717
- default=10,
718
+ default=300,
718
719
  description="告警抑制时间(秒),相同告警在此时间内不重复发送"
719
720
  )
720
721
 
@@ -1001,6 +1002,7 @@ class BaseConfig(BaseSettings):
1001
1002
  # ========== 异步与事件 ==========
1002
1003
  task: TaskSettings = Field(default_factory=TaskSettings)
1003
1004
  event: EventSettings = Field(default_factory=EventSettings)
1005
+ mq: MessageQueueSettings = Field(default_factory=MessageQueueSettings)
1004
1006
 
1005
1007
  # ========== 微服务通信 ==========
1006
1008
  # RPC 客户端配置(调用其他服务)
@@ -1108,10 +1110,18 @@ class BaseConfig(BaseSettings):
1108
1110
  """获取所有消息队列实例配置。
1109
1111
 
1110
1112
  从环境变量解析 MQ__{INSTANCE}__{FIELD} 格式的配置。
1113
+ 如果没有配置多实例,返回从单实例配置转换的 default 实例。
1111
1114
  """
1112
1115
  if self._mqs is None:
1113
1116
  loader = MultiInstanceConfigLoader("MQ", MQInstanceConfig)
1114
1117
  self._mqs = loader.load()
1118
+ if not self._mqs and self.mq.backend:
1119
+ self._mqs = {
1120
+ "default": MQInstanceConfig(
1121
+ backend=self.mq.backend,
1122
+ url=self.mq.url,
1123
+ )
1124
+ }
1115
1125
  return self._mqs
1116
1126
 
1117
1127
  def get_events(self) -> dict[str, EventInstanceConfig]:
@@ -707,8 +707,8 @@ def init(
707
707
  console.print(f" [cyan]uv add \"{deps[0]}\"[/cyan]")
708
708
  console.print()
709
709
  else:
710
- # 非交互模式:默认启用 Admin Console
711
- with_admin_console = True
710
+ # 非交互模式:默认禁用 Admin Console
711
+ with_admin_console = False
712
712
  if package_name == ".":
713
713
  package_name_snake = None
714
714
  elif package_name:
@@ -9,6 +9,7 @@ import sys
9
9
  from typing import TYPE_CHECKING
10
10
 
11
11
  import typer
12
+ import uvicorn
12
13
 
13
14
  if TYPE_CHECKING:
14
15
  from aury.boot.application.app.base import FoundationApp
@@ -416,7 +417,6 @@ def dev(
416
417
  os_module.environ["AURIMYTH_RELOAD"] = "1"
417
418
 
418
419
  # 热重载模式下,直接使用 uvicorn,传递 app 字符串路径
419
- import uvicorn
420
420
  uvicorn.run(
421
421
  app=app_module_path,
422
422
  host=server_host,
@@ -500,19 +500,22 @@ def prod(
500
500
  typer.echo(" 热重载: ❌")
501
501
  typer.echo(" 调试模式: ❌")
502
502
 
503
+ # 获取 app 模块路径(多进程模式需要字符串格式)
504
+ app_module_path = app_path or _detect_app_module()
505
+ typer.echo(f" 应用模块: {app_module_path}")
506
+
503
507
  try:
504
- server = ApplicationServer(
505
- app=app_instance,
508
+ # 多进程模式必须使用字符串路径,否则子进程无法重新加载应用
509
+ uvicorn.run(
510
+ app=app_module_path,
506
511
  host=server_host,
507
512
  port=server_port,
508
513
  workers=server_workers,
509
514
  reload=False,
510
515
  loop="auto",
511
516
  http="auto",
512
- debug=False,
513
517
  access_log=True,
514
518
  )
515
- server.run()
516
519
  except KeyboardInterrupt:
517
520
  typer.echo("\n👋 服务器已停止")
518
521
  except Exception as e:
@@ -169,7 +169,7 @@ class BaseConfig(BaseSettings):
169
169
  )
170
170
  ```
171
171
 
172
- **环境变量命名规则**:`{SECTION}__{FIELD}`
172
+ **环境变量命名规则**:`{{SECTION}}__{{FIELD}}`
173
173
 
174
174
  ```bash
175
175
  # 示例
@@ -0,0 +1,152 @@
1
+ # 消息队列(MQ)
2
+
3
+ 支持 `redis`、`redis_stream` 和 `rabbitmq` 后端的消息队列,用于异步任务解耦。
4
+
5
+ ## 14.1 基本用法
6
+
7
+ ```python
8
+ from aury.boot.infrastructure.mq import MQManager
9
+
10
+ # 获取实例
11
+ mq = MQManager.get_instance()
12
+
13
+ # Redis List 后端(简单队列)
14
+ await mq.initialize(backend="redis", url="redis://localhost:6379/0")
15
+
16
+ # Redis Stream 后端(推荐,支持消费者组)
17
+ await mq.initialize(backend="redis_stream", url="redis://localhost:6379/0")
18
+
19
+ # RabbitMQ 后端
20
+ await mq.initialize(backend="rabbitmq", url="amqp://guest:guest@localhost:5672/")
21
+ ```
22
+
23
+ ## 14.2 后端对比
24
+
25
+ **Redis List (redis)**:
26
+ - 简单的 FIFO 队列(LPUSH/BRPOP)
27
+ - 适合单消费者场景
28
+ - 消息不持久化(除非开启 AOF)
29
+
30
+ **Redis Stream (redis_stream)** ⭐ 推荐:
31
+ - 支持消费者组,多实例可并行消费
32
+ - 消息持久化(配合 AOF)
33
+ - 支持消息确认(ACK)和重试
34
+ - 支持消息回放和历史查询
35
+
36
+ **RabbitMQ (rabbitmq)**:
37
+ - 功能最完整的消息队列
38
+ - 支持多种交换机类型
39
+ - 适合复杂的消息路由场景
40
+
41
+ ## 14.3 生产者
42
+
43
+ ```python
44
+ from aury.boot.infrastructure.mq import MQMessage
45
+
46
+ # 发送消息
47
+ await mq.send(
48
+ queue="orders",
49
+ message={{"order_id": "123", "action": "created"}}
50
+ )
51
+
52
+ # 使用 MQMessage 对象(可设置 headers)
53
+ msg = MQMessage(
54
+ body={{"order_id": "123"}},
55
+ headers={{"priority": "high"}}
56
+ )
57
+ await mq.send("orders", msg)
58
+ ```
59
+
60
+ ## 14.4 消费者
61
+
62
+ **文件**: `{package_name}/workers/order_worker.py`
63
+
64
+ ```python
65
+ from aury.boot.infrastructure.mq import MQManager, MQMessage
66
+ from aury.boot.common.logging import logger
67
+
68
+ mq = MQManager.get_instance()
69
+
70
+
71
+ async def process_order(message: MQMessage):
72
+ \"\"\"处理订单消息。\"\"\"
73
+ logger.info(f"处理订单: {{message.body}}")
74
+ # 业务逻辑...
75
+
76
+
77
+ async def start_consumer():
78
+ \"\"\"启动消费者。\"\"\"
79
+ # consume 会自动处理 ACK/NACK
80
+ await mq.consume("orders", process_order)
81
+ ```
82
+
83
+ ## 14.5 Redis Stream 特性
84
+
85
+ ```python
86
+ from aury.boot.infrastructure.mq.backends.redis_stream import RedisStreamMQ
87
+
88
+ # 初始化时指定消费者组
89
+ mq = MQManager.get_instance()
90
+ await mq.initialize(
91
+ backend="redis_stream",
92
+ url="redis://localhost:6379/0"
93
+ )
94
+
95
+ # 获取底层 RedisStreamMQ 实例使用高级特性
96
+ stream_mq: RedisStreamMQ = mq.backend
97
+
98
+ # 读取所有历史消息(用于重放)
99
+ messages = await stream_mq.read_all("orders", count=100)
100
+
101
+ # 阻塞读取新消息(用于 SSE/实时推送)
102
+ messages = await stream_mq.read_blocking(
103
+ "orders",
104
+ last_id="$", # 从最新消息开始
105
+ count=10,
106
+ block_ms=5000 # 阻塞 5 秒
107
+ )
108
+
109
+ # 裁剪 Stream(保留最新 1000 条)
110
+ await stream_mq.trim("orders", maxlen=1000)
111
+
112
+ # 获取 Stream 信息
113
+ info = await stream_mq.stream_info("orders")
114
+ ```
115
+
116
+ ## 14.6 多实例配置
117
+
118
+ 框架支持命名多实例,适合不同业务场景使用不同的 MQ:
119
+
120
+ ```python
121
+ # 代码中使用命名实例
122
+ orders_mq = MQManager.get_instance("orders")
123
+ notifications_mq = MQManager.get_instance("notifications")
124
+
125
+ # 分别初始化
126
+ await orders_mq.initialize(backend="redis_stream", url="redis://localhost:6379/1")
127
+ await notifications_mq.initialize(backend="redis", url="redis://localhost:6379/2")
128
+ ```
129
+
130
+ **环境变量配置**(自动初始化):
131
+
132
+ ```bash
133
+ # 单实例配置
134
+ MQ__BACKEND=redis_stream
135
+ MQ__URL=redis://localhost:6379/0
136
+
137
+ # 多实例配置(格式:MQ__{{INSTANCE}}__{{FIELD}})
138
+ MQ__DEFAULT__BACKEND=redis_stream
139
+ MQ__DEFAULT__URL=redis://localhost:6379/4
140
+ MQ__ORDERS__BACKEND=rabbitmq
141
+ MQ__ORDERS__URL=amqp://guest:guest@localhost:5672/
142
+ ```
143
+
144
+ ## 14.7 与异步任务(Dramatiq)的区别
145
+
146
+ - **MQ**:轻量级消息传递,适合简单的生产者-消费者模式、实时通知、多实例消费
147
+ - **Dramatiq(TaskManager)**:功能更丰富,支持重试、延迟、优先级、Actor 模式
148
+
149
+ 选择建议:
150
+ - 简单的异步解耦 → MQ (redis_stream)
151
+ - 需要重试/延迟/优先级 → Dramatiq
152
+ - 多服务实例并行消费 → MQ (redis_stream) 或 RabbitMQ
@@ -19,19 +19,27 @@
19
19
  # =============================================================================
20
20
  # 消息队列配置 (MQ__)
21
21
  # =============================================================================
22
+ # 支持后端: redis | redis_stream (推荐) | rabbitmq
23
+ #
22
24
  # 单实例配置:
23
- # MQ__ENABLED=false
24
- # MQ__BROKER_URL=redis://localhost:6379/4
25
-
25
+ # MQ__BACKEND=redis_stream
26
+ # MQ__URL=redis://localhost:6379/4
27
+ #
26
28
  # 多实例配置 (格式: MQ__{{INSTANCE}}__{{FIELD}}):
27
- # MQ__DEFAULT__BACKEND=redis
29
+ # MQ__DEFAULT__BACKEND=redis_stream
28
30
  # MQ__DEFAULT__URL=redis://localhost:6379/4
29
- # MQ__DEFAULT__MAX_CONNECTIONS=10
30
31
  #
31
- # RabbitMQ 后端:
32
+ # Redis List 后端 (简单 FIFO 队列):
33
+ # MQ__SIMPLE__BACKEND=redis
34
+ # MQ__SIMPLE__URL=redis://localhost:6379/4
35
+ #
36
+ # Redis Stream 后端 (推荐,支持消费者组/多实例消费):
37
+ # MQ__TASKS__BACKEND=redis_stream
38
+ # MQ__TASKS__URL=redis://localhost:6379/4
39
+ #
40
+ # RabbitMQ 后端 (复杂消息路由):
32
41
  # MQ__ORDERS__BACKEND=rabbitmq
33
42
  # MQ__ORDERS__URL=amqp://guest:guest@localhost:5672/orders
34
- # MQ__ORDERS__PREFETCH_COUNT=10
35
43
 
36
44
  # =============================================================================
37
45
  # 事件总线配置 (EVENT__)
@@ -107,14 +107,14 @@ class AlertRule:
107
107
  # 检查路径
108
108
  if self._path_regex:
109
109
  endpoint = event.metadata.get("endpoint", "")
110
- if not self._path_regex.match(endpoint):
110
+ if not self._path_regex.fullmatch(endpoint):
111
111
  return False
112
112
 
113
113
  # 检查排除路径
114
114
  if self._exclude_regexes:
115
115
  endpoint = event.metadata.get("endpoint", "")
116
116
  for exclude_regex in self._exclude_regexes:
117
- if exclude_regex.match(endpoint):
117
+ if exclude_regex.fullmatch(endpoint):
118
118
  return False # 匹配到排除规则,不触发告警
119
119
 
120
120
  # 检查阈值(对于 slow_* 类型)
@@ -181,7 +181,23 @@ class AlertingSpanProcessor:
181
181
  or name
182
182
  )
183
183
 
184
- return any(regex.match(path) for regex in self._exclude_regexes)
184
+ # 检查所有可能的路径来源
185
+ paths_to_check = [path]
186
+
187
+ # 也检查 span name 中的路径(可能包含 HTTP 方法和后缀)
188
+ # 例如 "GET /api/v1/spaces/{space_id}/subscribe http receive"
189
+ if name and name != path:
190
+ # 尝试提取 span name 中的路径部分
191
+ parts = name.split()
192
+ for part in parts:
193
+ if part.startswith("/"):
194
+ paths_to_check.append(part)
195
+
196
+ for p in paths_to_check:
197
+ if any(regex.fullmatch(p) for regex in self._exclude_regexes):
198
+ return True
199
+
200
+ return False
185
201
 
186
202
  def _emit_slow_alert(
187
203
  self,
@@ -2,8 +2,10 @@
2
2
 
3
3
  from .rabbitmq import RabbitMQ
4
4
  from .redis import RedisMQ
5
+ from .redis_stream import RedisStreamMQ
5
6
 
6
7
  __all__ = [
7
8
  "RabbitMQ",
8
9
  "RedisMQ",
10
+ "RedisStreamMQ",
9
11
  ]