zrb 0.7.3__py3-none-any.whl → 0.9.0__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 (155) hide show
  1. zrb/builtin/__init__.py +8 -6
  2. zrb/builtin/docker.py +20 -0
  3. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_config.py +2 -4
  4. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/README.md +6 -6
  5. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/docker-compose.yml +26 -6
  6. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/monitoring/frontend/nginx-config.conf +10 -2
  7. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/monitoring/otel-collector/otel-collector-config.yaml +39 -80
  8. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/messagebus/__init__.py +27 -0
  9. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component/messagebus/kafka}/__init__.py +0 -0
  10. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/kafka/admin.py +1 -1
  11. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/kafka/consumer.py +2 -2
  12. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/kafka/publisher.py +2 -2
  13. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/messagebus.py +1 -1
  14. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/mock.py +1 -1
  15. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/rabbitmq/admin.py +1 -1
  16. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/rabbitmq/consumer.py +2 -2
  17. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/rabbitmq/publisher.py +2 -2
  18. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/model/__init__.py +3 -0
  19. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/model/repo_model.py +2 -2
  20. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/repo/__init__.py +9 -0
  21. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/repo/db_repo.py +2 -2
  22. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/repo/repo.py +1 -1
  23. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/rpc/__init__.py +8 -0
  24. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/rpc/messagebus/caller.py +2 -2
  25. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/rpc/messagebus/server.py +2 -2
  26. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/schema/__init__.py +4 -0
  27. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/serializer/__init__.py +5 -0
  28. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/frontend/package.json +1 -1
  29. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core/rpc/messagebus → integration}/__init__.py +0 -0
  30. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/app.py +2 -2
  31. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/app_lifespan.py +4 -4
  32. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/app_state.py +1 -1
  33. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/db_connection.py +1 -1
  34. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/messagebus.py +12 -12
  35. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/rpc.py +10 -10
  36. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/main.py +1 -1
  37. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/api.py +3 -3
  38. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/__init__.py +25 -18
  39. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/access_token/scheme.py +1 -1
  40. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/access_token/util.py +1 -1
  41. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/authorizer/rpc_authorizer.py +2 -2
  42. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/password_hasher/bcrypt_password_hasher.py +1 -1
  43. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/refresh_token/util.py +1 -1
  44. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/api.py +5 -5
  45. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/model.py +1 -1
  46. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +2 -2
  47. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +4 -4
  48. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/api.py +5 -5
  49. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/model.py +2 -2
  50. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/repo.py +2 -2
  51. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +4 -4
  52. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/table.py +1 -1
  53. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +5 -5
  54. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +3 -3
  55. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +3 -3
  56. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +4 -4
  57. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/event.py +2 -2
  58. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/integration/__init__.py +19 -0
  59. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/access_token_scheme.py +6 -3
  60. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/access_token_util.py +1 -1
  61. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/authorizer.py +2 -2
  62. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/model/group_model.py +2 -2
  63. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/model/permission_model.py +2 -2
  64. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/model/user_model.py +5 -5
  65. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/integration/password_hasher.py +3 -0
  66. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/refresh_token_util.py +1 -1
  67. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/repo/group_repo.py +2 -2
  68. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/repo/permission_repo.py +2 -2
  69. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/repo/user_repo.py +3 -3
  70. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/migrate.py +3 -3
  71. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/register_module.py +5 -5
  72. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +1 -1
  73. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/rpc.py +2 -2
  74. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +1 -1
  75. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +1 -1
  76. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +1 -1
  77. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/api.py +3 -3
  78. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/component/__init__.py +0 -3
  79. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{core → component}/historical_repo_model.py +3 -3
  80. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/api.py +5 -5
  81. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +3 -3
  82. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/model.py +1 -1
  83. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/repo.py +2 -2
  84. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +4 -4
  85. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/table.py +1 -1
  86. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/event.py +2 -2
  87. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/integration/__init__.py +3 -0
  88. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{component → integration}/model/activity_model.py +1 -1
  89. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{component → integration}/repo/activity_repo.py +2 -2
  90. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/migrate.py +3 -3
  91. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/register_module.py +5 -5
  92. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/rpc.py +2 -2
  93. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +1 -1
  94. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/pyproject.toml +4 -4
  95. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/api.py +5 -5
  96. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/model.py +1 -1
  97. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/repo.py +2 -2
  98. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/rpc.py +4 -4
  99. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/{component → integration}/model/snake_zrb_entity_name_model.py +4 -4
  100. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/{component → integration}/repo/snake_zrb_entity_name_repo.py +2 -2
  101. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/snake_zrb_entity_name.py +1 -1
  102. zrb/builtin/generator/fastapp_module/helper.py +1 -0
  103. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/api.py +3 -3
  104. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/component/__init__.py +0 -3
  105. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/table.py +1 -1
  106. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/event.py +2 -2
  107. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/integration/__init__.py +3 -0
  108. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/migrate.py +3 -3
  109. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py +5 -5
  110. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/rpc.py +2 -2
  111. zrb/builtin/generator/plugin/template/project.sh +22 -1
  112. zrb/builtin/generator/project/template/project.sh +22 -1
  113. zrb/builtin/git.py +1 -1
  114. zrb/builtin/group.py +1 -0
  115. {zrb-0.7.3.dist-info → zrb-0.9.0.dist-info}/METADATA +1 -1
  116. {zrb-0.7.3.dist-info → zrb-0.9.0.dist-info}/RECORD +144 -144
  117. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/__init__.py +0 -22
  118. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/model/__init__.py +0 -3
  119. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/__init__.py +0 -9
  120. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/__init__.py +0 -8
  121. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/schema/__init__.py +0 -4
  122. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/serializer/__init__.py +0 -5
  123. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/frontend/package-lock.json +0 -3805
  124. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/password_hasher.py +0 -3
  125. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/__init__.py +0 -21
  126. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/component/repo/__init__.py +0 -0
  127. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/core/__init__.py +0 -0
  128. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/error.py +0 -0
  129. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core/messagebus/kafka → component/messagebus/rabbitmq}/__init__.py +0 -0
  130. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/repo/db_entity_mixin.py +0 -0
  131. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/repo/search_filter.py +0 -0
  132. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core/messagebus/rabbitmq → component/rpc/messagebus}/__init__.py +0 -0
  133. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/rpc/rpc.py +0 -0
  134. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/schema/base_schema.py +0 -0
  135. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/serializer/serializer.py +0 -0
  136. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/frontend_index.py +0 -0
  137. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/log.py +0 -0
  138. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/access_token/_init_.py +0 -0
  139. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/authorizer/authorizer.py +0 -0
  140. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/password_hasher/password_hasher.py +0 -0
  141. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/refresh_token/_init_.py +0 -0
  142. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/base.py +0 -0
  143. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/bearer_token_scheme.py +0 -0
  144. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/model/__init__.py +0 -0
  145. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/repo/__init__.py +0 -0
  146. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/user.py +0 -0
  147. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{component → integration}/base.py +0 -0
  148. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{component → integration}/model/__init__.py +0 -0
  149. /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{component → integration}/repo/__init__.py +0 -0
  150. /zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/{component → integration}/base.py +0 -0
  151. /zrb/builtin/generator/{fastapp/template/src/kebab-zrb-app-name/src/module/log/core → fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/integration/model}/__init__.py +0 -0
  152. /zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/{component/model → integration/repo}/__init__.py +0 -0
  153. {zrb-0.7.3.dist-info → zrb-0.9.0.dist-info}/LICENSE +0 -0
  154. {zrb-0.7.3.dist-info → zrb-0.9.0.dist-info}/WHEEL +0 -0
  155. {zrb-0.7.3.dist-info → zrb-0.9.0.dist-info}/entry_points.txt +0 -0
zrb/builtin/__init__.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from zrb.builtin import (
2
2
  base64,
3
3
  devtool,
4
+ docker,
4
5
  env,
5
6
  eval,
6
7
  explain,
@@ -18,18 +19,19 @@ from zrb.builtin import (
18
19
  )
19
20
 
20
21
  assert base64
22
+ assert devtool
23
+ assert docker
21
24
  assert env
22
25
  assert eval
26
+ assert explain
27
+ assert generator
23
28
  assert git
24
29
  assert md5
25
- assert explain
30
+ assert process
26
31
  assert project
27
32
  assert ubuntu
28
33
  assert update
29
- assert version
30
- assert devtool
31
- assert generator
32
- assert process
33
34
  assert say
34
- assert watch_changes
35
35
  assert schedule
36
+ assert version
37
+ assert watch_changes
zrb/builtin/docker.py ADDED
@@ -0,0 +1,20 @@
1
+ from zrb.builtin.group import docker_group
2
+ from zrb.runner import runner
3
+ from zrb.task.cmd_task import CmdTask
4
+
5
+ ###############################################################################
6
+ # Task Definitions
7
+ ###############################################################################
8
+
9
+ prune = CmdTask(
10
+ name="prune",
11
+ group=docker_group,
12
+ description="Prune unused images and volumes",
13
+ cmd=[
14
+ "docker system prune -af",
15
+ "docker image prune -af",
16
+ "docker system prune -af --volumes",
17
+ "docker system df",
18
+ ],
19
+ )
20
+ runner.register(prune)
@@ -28,12 +28,10 @@ MODULES = jsons.loads(MODULE_JSON_STR)
28
28
  # Service Configs
29
29
  ###############################################################################
30
30
 
31
- _OTEL_EXPORTER_ENDPOINT_ENV_NAME = "APP_OTEL_EXPORTER_OTLP_ENDPOINT"
32
- _OTEL_EXPORTER_ENDPOINT = "http://otel-collector:4317"
33
31
  _OTEL_EXPORTER_ENDPOINT_ENV = Env(
34
- name=_OTEL_EXPORTER_ENDPOINT_ENV_NAME,
32
+ name="APP_OTEL_EXPORTER_OTLP_ENDPOINT",
35
33
  os_name="",
36
- default=_OTEL_EXPORTER_ENDPOINT,
34
+ default="http://otel-collector:4317",
37
35
  )
38
36
 
39
37
  _CONTAINER_ENV_PREFIX = "CONTAINER_ZRB_ENV_PREFIX"
@@ -122,7 +122,7 @@ For simple CRUD, you won't need to code at all. Please see [Zrb tutorial](https:
122
122
 
123
123
  Main prerequisites
124
124
 
125
- - Python 3.9 or higher
125
+ - Python 3.10 or higher
126
126
  - Pip
127
127
  - Venv
128
128
  - Node version 18 or higher
@@ -148,8 +148,8 @@ You will also need `Pulumi` if you want to deploy PascalZrbAppName into your Kub
148
148
  - `main.py`: PascalZrbAppName's application entry point. This module exposes an `app` object that will be picked up by Uvicorn.
149
149
  - `config.py`: PascalZrbAppName's configuration loader.
150
150
  - `migrate.py`: A script to perform database migration.
151
- - `component/`: Definition of components you want to use in your application. Typically containing scripts to instantiate `app` objects, DB connections, Message bus connections, etc. This is where you create and connect components.
152
- - `core/`: Interface and component class definitions.
151
+ - `integration/`: Initialization of components you want to use in your application. Typically containing scripts to instantiate `app` objects, DB connections, Message bus connections, etc. This is where you create and connect components.
152
+ - `component/`: Interface and component class definitions.
153
153
  - `frontend/`: Frontend source code
154
154
  - `package.json`: NPM configuration for PascalZrbAppName frontend.
155
155
  - `svelte.config.json`: Svelte configuration.
@@ -161,7 +161,7 @@ You will also need `Pulumi` if you want to deploy PascalZrbAppName into your Kub
161
161
  - `build/`: Frontend build result.
162
162
  - `static/`: Static files like images, favicon, etc.
163
163
  - `helper/`: Common helper scripts. Typically stateless.
164
- - `schema/`: Common Pydantic schemas.
164
+ - `schema/`: Common Pydantic schemas.
165
165
  - `module/`: Module definition. Each module can be deployed as a microservice. Thus, modules should be isolated from each other.
166
166
  - `<module_name>/`: Module resources.
167
167
  - `api.py`: HTTP request handler for the current module.
@@ -169,10 +169,10 @@ You will also need `Pulumi` if you want to deploy PascalZrbAppName into your Kub
169
169
  - `rpc.py`: RPC handler for the current module.
170
170
  - `register_module.py`: A script to register the module to the main application.
171
171
  - `migrate.py`: A script to perform migration for the current module.
172
- - `component/`: Component objects for the current module.
172
+ - `integration/`: Initialization of components for the current module.
173
173
  - `model/`
174
174
  - `repo/`
175
- - `core/`: Interface and component class definition for the current module.
175
+ - `component/`: Interface and component class definition for the current module.
176
176
  - `entity/`: Entity related resources.
177
177
  - `<entity_name>/`: Resources for current entity.
178
178
  - `api.py`
@@ -150,7 +150,7 @@ services:
150
150
 
151
151
 
152
152
  clickhouse:
153
- image: clickhouse/clickhouse-server:22.8.8-alpine
153
+ image: clickhouse/clickhouse-server:24.1.2-alpine
154
154
  logging: *default-logging
155
155
  container_name: ${CONTAINER_PREFIX:-my}-kebab-zrb-app-name-clickhouse
156
156
  hostname: clickhouse
@@ -187,7 +187,7 @@ services:
187
187
 
188
188
 
189
189
  alertmanager:
190
- image: signoz/alertmanager:0.23.1
190
+ image: signoz/alertmanager:0.23.5
191
191
  logging: *default-logging
192
192
  container_name: ${CONTAINER_PREFIX:-my}-kebab-zrb-app-name-monitoring-alertmanager
193
193
  hostname: alertmanager
@@ -207,7 +207,7 @@ services:
207
207
 
208
208
 
209
209
  query-service:
210
- image: signoz/query-service:0.23.0
210
+ image: signoz/query-service:0.39.0
211
211
  logging: *default-logging
212
212
  container_name: ${CONTAINER_PREFIX:-my}-kebab-zrb-app-name-monitoring-query-service
213
213
  hostname: query-service
@@ -244,7 +244,7 @@ services:
244
244
 
245
245
 
246
246
  frontend:
247
- image: signoz/frontend:0.23.0
247
+ image: signoz/frontend:0.39.0
248
248
  logging: *default-logging
249
249
  container_name: ${CONTAINER_PREFIX:-my}-kebab-zrb-app-name-monitoring-frontend
250
250
  hostname: frontend
@@ -262,8 +262,20 @@ services:
262
262
  - zrb
263
263
 
264
264
 
265
+ otel-collector-migrator:
266
+ image: signoz/signoz-schema-migrator:0.88.12
267
+ container_name: ${CONTAINER_PREFIX:-my}-kebab-zrb-app-name-monitoring-otel-migrator
268
+ command:
269
+ - "--dsn=tcp://clickhouse:9000"
270
+ depends_on:
271
+ clickhouse:
272
+ condition: service_healthy
273
+ networks:
274
+ - zrb
275
+
276
+
265
277
  otel-collector:
266
- image: signoz/signoz-otel-collector:0.79.2
278
+ image: signoz/signoz-otel-collector:0.88.12
267
279
  logging: *default-logging
268
280
  container_name: ${CONTAINER_PREFIX:-my}-kebab-zrb-app-name-monitoring-otel-collector
269
281
  hostname: otel-collector
@@ -294,12 +306,16 @@ services:
294
306
  depends_on:
295
307
  clickhouse:
296
308
  condition: service_healthy
309
+ otel-collector-migrator:
310
+ condition: service_completed_successfully
311
+ query-service:
312
+ condition: service_healthy
297
313
  networks:
298
314
  - zrb
299
315
 
300
316
 
301
317
  otel-collector-metrics:
302
- image: signoz/signoz-otel-collector:0.79.2
318
+ image: signoz/signoz-otel-collector:0.88.12
303
319
  logging: *default-logging
304
320
  container_name: ${CONTAINER_PREFIX:-my}-kebab-zrb-app-name-monitoring-otel-collector-metrics
305
321
  hostname: otel_collector_metrics
@@ -338,6 +354,7 @@ services:
338
354
  environment:
339
355
  APP_NAME: ${APP_NAME:-kebab-zrb-app-name}
340
356
  APP_PORT: ${APP_PORT:-8080}
357
+ APP_ENABLE_OTEL: ${APP_ENABLE_OTEL:-0}
341
358
  ports:
342
359
  - "${APP_HOST_PORT:-8080}:${APP_PORT:-8080}"
343
360
  restart: unless-stopped
@@ -371,6 +388,7 @@ services:
371
388
  environment:
372
389
  APP_NAME: ${APP_NAME:-kebab-zrb-app-name}-gateway
373
390
  APP_PORT: ${APP_GATEWAY_PORT:-8080}
391
+ APP_ENABLE_OTEL: ${APP_ENABLE_OTEL:-0}
374
392
  APP_ENABLE_EVENT_HANDLER: false
375
393
  APP_ENABLE_RPC_SERVER: false
376
394
  APP_ENABLE_API: true
@@ -405,6 +423,7 @@ services:
405
423
  environment:
406
424
  APP_NAME: ${APP_NAME:-fastapp}-auth-service
407
425
  APP_PORT: ${APP_AUTH_MODULE_PORT:-8081}
426
+ APP_ENABLE_OTEL: ${APP_ENABLE_OTEL:-0}
408
427
  APP_ENABLE_EVENT_HANDLER: true
409
428
  APP_ENABLE_RPC_SERVER: true
410
429
  APP_ENABLE_API: false
@@ -439,6 +458,7 @@ services:
439
458
  environment:
440
459
  APP_NAME: ${APP_NAME:-fastapp}-log-service
441
460
  APP_PORT: ${APP_LOG_MODULE_PORT:-8082}
461
+ APP_ENABLE_OTEL: ${APP_ENABLE_OTEL:-0}
442
462
  APP_ENABLE_EVENT_HANDLER: 'true'
443
463
  APP_ENABLE_RPC_SERVER: 'true'
444
464
  APP_ENABLE_API: 'false'
@@ -24,8 +24,16 @@ server {
24
24
  try_files $uri $uri/ /index.html;
25
25
  }
26
26
 
27
- location /api/alertmanager {
28
- proxy_pass http://alertmanager:9093/api/v2;
27
+ location ~ ^/api/(v1|v3)/logs/(tail|livetail){
28
+ proxy_pass http://query-service:8080;
29
+ proxy_http_version 1.1;
30
+
31
+ # connection will be closed if no data is read for 600s between successive read operations
32
+ proxy_read_timeout 600s;
33
+
34
+ # dont buffer the data send it directly to client.
35
+ proxy_buffering off;
36
+ proxy_cache off;
29
37
  }
30
38
 
31
39
  location /api {
@@ -1,35 +1,23 @@
1
1
  receivers:
2
- filelog/dockercontainers:
3
- include: [ "/var/lib/docker/containers/*/*.log" ]
4
- start_at: end
5
- include_file_path: true
6
- include_file_name: false
2
+ tcplog/docker:
3
+ listen_address: "0.0.0.0:2255"
7
4
  operators:
8
- - type: json_parser
9
- id: parser-docker
10
- output: extract_metadata_from_filepath
11
- timestamp:
12
- parse_from: attributes.time
13
- layout: '%Y-%m-%dT%H:%M:%S.%LZ'
14
- - type: regex_parser
15
- id: extract_metadata_from_filepath
16
- regex: '^.*containers/(?P<container_id>[^_]+)/.*log$'
17
- parse_from: attributes["log.file.path"]
18
- output: parse_body
19
- - type: move
20
- id: parse_body
21
- from: attributes.log
22
- to: body
23
- output: time
24
- - type: remove
25
- id: time
26
- field: attributes.time
5
+ - type: regex_parser
6
+ regex: '^<([0-9]+)>[0-9]+ (?P<timestamp>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]+)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?) (?P<container_id>\S+) (?P<container_name>\S+) [0-9]+ - -( (?P<body>.*))?'
7
+ timestamp:
8
+ parse_from: attributes.timestamp
9
+ layout: '%Y-%m-%dT%H:%M:%S.%LZ'
10
+ - type: move
11
+ from: attributes["body"]
12
+ to: body
13
+ - type: remove
14
+ field: attributes.timestamp
15
+ # please remove names from below if you want to collect logs from them
16
+ - type: filter
17
+ id: signoz_logs_filter
18
+ expr: 'attributes.container_name matches "^signoz-(logspout|frontend|alertmanager|query-service|otel-collector|clickhouse|zookeeper)"'
27
19
  opencensus:
28
20
  endpoint: 0.0.0.0:55678
29
- otlp/spanmetrics:
30
- protocols:
31
- grpc:
32
- endpoint: localhost:12345
33
21
  otlp:
34
22
  protocols:
35
23
  grpc:
@@ -70,46 +58,13 @@ receivers:
70
58
 
71
59
 
72
60
  processors:
73
- logstransform/internal:
74
- operators:
75
- - type: trace_parser
76
- if: '"trace_id" in attributes or "span_id" in attributes'
77
- trace_id:
78
- parse_from: attributes.trace_id
79
- span_id:
80
- parse_from: attributes.span_id
81
- output: remove_trace_id
82
- - type: trace_parser
83
- if: '"traceId" in attributes or "spanId" in attributes'
84
- trace_id:
85
- parse_from: attributes.traceId
86
- span_id:
87
- parse_from: attributes.spanId
88
- output: remove_traceId
89
- - id: remove_traceId
90
- type: remove
91
- if: '"traceId" in attributes'
92
- field: attributes.traceId
93
- output: remove_spanId
94
- - id: remove_spanId
95
- type: remove
96
- if: '"spanId" in attributes'
97
- field: attributes.spanId
98
- - id: remove_trace_id
99
- type: remove
100
- if: '"trace_id" in attributes'
101
- field: attributes.trace_id
102
- output: remove_span_id
103
- - id: remove_span_id
104
- type: remove
105
- if: '"span_id" in attributes'
106
- field: attributes.span_id
107
61
  batch:
108
62
  send_batch_size: 10000
109
63
  send_batch_max_size: 11000
110
64
  timeout: 10s
111
- signozspanmetrics/prometheus:
112
- metrics_exporter: prometheus
65
+ signozspanmetrics/cumulative:
66
+ metrics_exporter: clickhousemetricswrite
67
+ metrics_flush_interval: 60s
113
68
  latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s ]
114
69
  dimensions_cache_size: 100000
115
70
  dimensions:
@@ -140,6 +95,22 @@ processors:
140
95
  # Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
141
96
  detectors: [env, system] # include ec2 for AWS, gcp for GCP and azure for Azure.
142
97
  timeout: 2s
98
+ signozspanmetrics/delta:
99
+ metrics_exporter: clickhousemetricswrite
100
+ metrics_flush_interval: 60s
101
+ latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s ]
102
+ dimensions_cache_size: 100000
103
+ aggregation_temporality: AGGREGATION_TEMPORALITY_DELTA
104
+ enable_exp_histogram: true
105
+ dimensions:
106
+ - name: service.namespace
107
+ default: default
108
+ - name: deployment.environment
109
+ default: default
110
+ # This is added to ensure the uniqueness of the timeseries
111
+ # Otherwise, identical timeseries produced by multiple replicas of
112
+ # collectors result in incorrect APM metrics
113
+ - name: signoz.collector.id
143
114
 
144
115
  extensions:
145
116
  health_check:
@@ -160,21 +131,12 @@ exporters:
160
131
  enabled: true
161
132
  clickhousemetricswrite/prometheus:
162
133
  endpoint: tcp://clickhouse:9000/?database=signoz_metrics
163
- prometheus:
164
- endpoint: 0.0.0.0:8889
165
134
  # logging: {}
166
135
 
167
136
  clickhouselogsexporter:
168
137
  dsn: tcp://clickhouse:9000/
169
138
  docker_multi_node_cluster: ${DOCKER_MULTI_NODE_CLUSTER}
170
- timeout: 5s
171
- sending_queue:
172
- queue_size: 100
173
- retry_on_failure:
174
- enabled: true
175
- initial_interval: 5s
176
- max_interval: 30s
177
- max_elapsed_time: 300s
139
+ timeout: 10s
178
140
 
179
141
  service:
180
142
  telemetry:
@@ -187,7 +149,7 @@ service:
187
149
  pipelines:
188
150
  traces:
189
151
  receivers: [jaeger, otlp]
190
- processors: [signozspanmetrics/prometheus, batch]
152
+ processors: [signozspanmetrics/cumulative, signozspanmetrics/delta, batch]
191
153
  exporters: [clickhousetraces]
192
154
  metrics:
193
155
  receivers: [otlp]
@@ -201,10 +163,7 @@ service:
201
163
  receivers: [prometheus]
202
164
  processors: [batch]
203
165
  exporters: [clickhousemetricswrite/prometheus]
204
- metrics/spanmetrics:
205
- receivers: [otlp/spanmetrics]
206
- exporters: [prometheus]
207
166
  logs:
208
- receivers: [otlp, filelog/dockercontainers]
209
- processors: [logstransform/internal, batch]
167
+ receivers: [otlp, tcplog/docker]
168
+ processors: [batch]
210
169
  exporters: [clickhouselogsexporter]
@@ -0,0 +1,27 @@
1
+ from component.messagebus.kafka.admin import KafkaAdmin
2
+ from component.messagebus.kafka.consumer import KafkaConsumer
3
+ from component.messagebus.kafka.publisher import KafkaPublisher
4
+ from component.messagebus.messagebus import (
5
+ Admin,
6
+ Consumer,
7
+ MessageSerializer,
8
+ Publisher,
9
+ )
10
+ from component.messagebus.mock import MockAdmin, MockConsumer, MockPublisher
11
+ from component.messagebus.rabbitmq.admin import RMQAdmin
12
+ from component.messagebus.rabbitmq.consumer import RMQConsumer
13
+ from component.messagebus.rabbitmq.publisher import RMQPublisher
14
+
15
+ assert Admin
16
+ assert Consumer
17
+ assert Publisher
18
+ assert MessageSerializer
19
+ assert MockAdmin
20
+ assert MockConsumer
21
+ assert MockPublisher
22
+ assert KafkaAdmin
23
+ assert KafkaConsumer
24
+ assert KafkaPublisher
25
+ assert RMQAdmin
26
+ assert RMQConsumer
27
+ assert RMQPublisher
@@ -4,7 +4,7 @@ from typing import List, Mapping, Optional
4
4
 
5
5
  from aiokafka import __version__
6
6
  from aiokafka.admin import AIOKafkaAdminClient, NewTopic
7
- from core.messagebus.messagebus import Admin
7
+ from component.messagebus.messagebus import Admin
8
8
 
9
9
 
10
10
  class KafkaEventConfig:
@@ -5,8 +5,8 @@ from typing import Any, Callable, Mapping, Optional
5
5
 
6
6
  from aiokafka import AIOKafkaConsumer, __version__
7
7
  from aiokafka.consumer.consumer import RoundRobinPartitionAssignor
8
- from core.messagebus.kafka.admin import KafkaAdmin, must_get_kafka_admin
9
- from core.messagebus.messagebus import (
8
+ from component.messagebus.kafka.admin import KafkaAdmin, must_get_kafka_admin
9
+ from component.messagebus.messagebus import (
10
10
  Consumer,
11
11
  MessageSerializer,
12
12
  TEventHandler,
@@ -4,8 +4,8 @@ from typing import Any, Optional
4
4
 
5
5
  from aiokafka import AIOKafkaProducer
6
6
  from aiokafka.producer.producer import DefaultPartitioner, _missing
7
- from core.messagebus.kafka.admin import KafkaAdmin, must_get_kafka_admin
8
- from core.messagebus.messagebus import (
7
+ from component.messagebus.kafka.admin import KafkaAdmin, must_get_kafka_admin
8
+ from component.messagebus.messagebus import (
9
9
  MessageSerializer,
10
10
  Publisher,
11
11
  must_get_message_serializer,
@@ -1,7 +1,7 @@
1
1
  from abc import ABC, abstractmethod
2
2
  from typing import Any, Callable, List, Mapping, Optional
3
3
 
4
- from core.serializer.serializer import JsonSerializer, Serializer
4
+ from component.serializer.serializer import JsonSerializer, Serializer
5
5
 
6
6
  TEventHandler = Callable[[Any], Any]
7
7
 
@@ -3,7 +3,7 @@ import inspect
3
3
  import logging
4
4
  from typing import Any, Callable, List, Mapping
5
5
 
6
- from core.messagebus.messagebus import (
6
+ from component.messagebus.messagebus import (
7
7
  Admin,
8
8
  Consumer,
9
9
  MessageSerializer,
@@ -3,7 +3,7 @@ import logging
3
3
  from typing import Any, List, Mapping, Optional
4
4
 
5
5
  import aiormq
6
- from core.messagebus.messagebus import Admin
6
+ from component.messagebus.messagebus import Admin
7
7
 
8
8
 
9
9
  class RMQEventConfig:
@@ -4,13 +4,13 @@ import logging
4
4
  from typing import Any, Callable, Mapping, Optional
5
5
 
6
6
  import aiormq
7
- from core.messagebus.messagebus import (
7
+ from component.messagebus.messagebus import (
8
8
  Consumer,
9
9
  MessageSerializer,
10
10
  TEventHandler,
11
11
  must_get_message_serializer,
12
12
  )
13
- from core.messagebus.rabbitmq.admin import RMQAdmin, must_get_rmq_admin
13
+ from component.messagebus.rabbitmq.admin import RMQAdmin, must_get_rmq_admin
14
14
 
15
15
 
16
16
  class RMQConsumer(Consumer):
@@ -3,12 +3,12 @@ import logging
3
3
  from typing import Any, Optional
4
4
 
5
5
  import aiormq
6
- from core.messagebus.messagebus import (
6
+ from component.messagebus.messagebus import (
7
7
  MessageSerializer,
8
8
  Publisher,
9
9
  must_get_message_serializer,
10
10
  )
11
- from core.messagebus.rabbitmq.admin import RMQAdmin, must_get_rmq_admin
11
+ from component.messagebus.rabbitmq.admin import RMQAdmin, must_get_rmq_admin
12
12
  from pydantic import BaseModel
13
13
 
14
14
 
@@ -0,0 +1,3 @@
1
+ from component.model.repo_model import RepoModel
2
+
3
+ assert RepoModel
@@ -1,7 +1,7 @@
1
1
  from typing import Generic, List, Optional, Type, TypeVar
2
2
 
3
- from core.repo.repo import Repo
4
- from core.repo.search_filter import SearchFilter
3
+ from component.repo.repo import Repo
4
+ from component.repo.search_filter import SearchFilter
5
5
  from pydantic import BaseModel
6
6
 
7
7
  Schema = TypeVar("Schema", bound=BaseModel)
@@ -0,0 +1,9 @@
1
+ from component.repo.db_entity_mixin import DBEntityMixin
2
+ from component.repo.db_repo import DBRepo
3
+ from component.repo.repo import Repo
4
+ from component.repo.search_filter import SearchFilter
5
+
6
+ assert Repo
7
+ assert DBRepo
8
+ assert DBEntityMixin
9
+ assert SearchFilter
@@ -1,8 +1,8 @@
1
1
  import logging
2
2
  from typing import Any, List, Mapping, Optional, Type, TypeVar
3
3
 
4
- from core.repo.repo import Repo
5
- from core.repo.search_filter import SearchFilter
4
+ from component.repo.repo import Repo
5
+ from component.repo.search_filter import SearchFilter
6
6
  from helper.value import utcnow
7
7
  from pydantic import BaseModel
8
8
  from sqlalchemy import or_
@@ -1,7 +1,7 @@
1
1
  from abc import ABC, abstractmethod
2
2
  from typing import Generic, List, Optional, TypeVar
3
3
 
4
- from core.repo.search_filter import SearchFilter
4
+ from component.repo.search_filter import SearchFilter
5
5
  from pydantic import BaseModel
6
6
 
7
7
  SchemaData = TypeVar("SchemaData", bound=BaseModel)
@@ -0,0 +1,8 @@
1
+ from component.rpc.messagebus.caller import MessagebusCaller
2
+ from component.rpc.messagebus.server import MessagebusServer
3
+ from component.rpc.rpc import Caller, Server
4
+
5
+ assert Caller
6
+ assert Server
7
+ assert MessagebusCaller
8
+ assert MessagebusServer
@@ -2,8 +2,8 @@ import asyncio
2
2
  import logging
3
3
  from typing import Any, Callable
4
4
 
5
- from core.messagebus.messagebus import Admin, Consumer, Publisher
6
- from core.rpc.rpc import Caller, Message, Result
5
+ from component.messagebus.messagebus import Admin, Consumer, Publisher
6
+ from component.rpc.rpc import Caller, Message, Result
7
7
  from ulid import ULID
8
8
 
9
9
 
@@ -2,8 +2,8 @@ import inspect
2
2
  import logging
3
3
  from typing import Any, Mapping
4
4
 
5
- from core.messagebus.messagebus import Consumer, Publisher
6
- from core.rpc.rpc import Message, Result, Server, TRPCHandler
5
+ from component.messagebus.messagebus import Consumer, Publisher
6
+ from component.rpc.rpc import Message, Result, Server, TRPCHandler
7
7
  from pydantic import BaseModel
8
8
 
9
9
 
@@ -0,0 +1,4 @@
1
+ from component.schema.base_schema import BaseCountSchema, BaseDateTimeSchema
2
+
3
+ assert BaseDateTimeSchema
4
+ assert BaseCountSchema
@@ -0,0 +1,5 @@
1
+ from component.serializer.serializer import CustomSerializer, JsonSerializer, Serializer
2
+
3
+ assert Serializer
4
+ assert CustomSerializer
5
+ assert JsonSerializer
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "type": "module",
41
41
  "dependencies": {
42
- "axios": "^1.4.0",
42
+ "axios": "^1.6.0",
43
43
  "daisyui": "^3.1.1",
44
44
  "js-cookie": "^3.0.5",
45
45
  "jwt-decode": "^3.1.2",
@@ -1,5 +1,3 @@
1
- from component.app_lifespan import app_lifespan, app_state
2
- from component.frontend_index import frontend_index_response
3
1
  from config import (
4
2
  app_cors_allow_credentials,
5
3
  app_cors_allow_headers,
@@ -18,6 +16,8 @@ from config import (
18
16
  from fastapi import FastAPI, status
19
17
  from fastapi.middleware.cors import CORSMiddleware
20
18
  from fastapi.responses import JSONResponse
19
+ from integration.app_lifespan import app_lifespan, app_state
20
+ from integration.frontend_index import frontend_index_response
21
21
  from schema.frontend_config import FrontendConfig
22
22
 
23
23
  app = FastAPI(title=zrb_app_name, lifespan=app_lifespan)