zrb 0.8.0__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.
- zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_config.py +2 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/README.md +6 -6
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/docker-compose.yml +26 -6
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/monitoring/frontend/nginx-config.conf +10 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/monitoring/otel-collector/otel-collector-config.yaml +39 -80
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/messagebus/__init__.py +27 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component/messagebus/kafka}/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/kafka/admin.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/kafka/consumer.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/kafka/publisher.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/messagebus.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/mock.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/rabbitmq/admin.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/rabbitmq/consumer.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/messagebus/rabbitmq/publisher.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/model/__init__.py +3 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/model/repo_model.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/repo/__init__.py +9 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/repo/db_repo.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/repo/repo.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/rpc/__init__.py +8 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/rpc/messagebus/caller.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/rpc/messagebus/server.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/schema/__init__.py +4 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/serializer/__init__.py +5 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/frontend/package.json +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core/rpc/messagebus → integration}/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/app.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/app_lifespan.py +4 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/app_state.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/db_connection.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/messagebus.py +12 -12
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/rpc.py +10 -10
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/main.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/api.py +3 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/__init__.py +25 -18
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/access_token/scheme.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/access_token/util.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/authorizer/rpc_authorizer.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/password_hasher/bcrypt_password_hasher.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/refresh_token/util.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/api.py +5 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/model.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +4 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/api.py +5 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/model.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/repo.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +4 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/table.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +5 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +3 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +3 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +4 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/event.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/integration/__init__.py +19 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/access_token_scheme.py +6 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/access_token_util.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/authorizer.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/model/group_model.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/model/permission_model.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/model/user_model.py +5 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/integration/password_hasher.py +3 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/refresh_token_util.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/repo/group_repo.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/repo/permission_repo.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/repo/user_repo.py +3 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/migrate.py +3 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/register_module.py +5 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/rpc.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/api.py +3 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/component/__init__.py +0 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{core → component}/historical_repo_model.py +3 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/api.py +5 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +3 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/model.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/repo.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +4 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/table.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/event.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/integration/__init__.py +3 -0
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{component → integration}/model/activity_model.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{component → integration}/repo/activity_repo.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/migrate.py +3 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/register_module.py +5 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/rpc.py +2 -2
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +1 -1
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/pyproject.toml +4 -4
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- zrb/builtin/generator/fastapp_module/helper.py +1 -0
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/api.py +3 -3
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/component/__init__.py +0 -3
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/table.py +1 -1
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/event.py +2 -2
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/integration/__init__.py +3 -0
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/migrate.py +3 -3
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py +5 -5
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/rpc.py +2 -2
- {zrb-0.8.0.dist-info → zrb-0.9.0.dist-info}/METADATA +1 -1
- {zrb-0.8.0.dist-info → zrb-0.9.0.dist-info}/RECORD +138 -139
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/__init__.py +0 -22
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/model/__init__.py +0 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/__init__.py +0 -9
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/__init__.py +0 -8
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/schema/__init__.py +0 -4
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/serializer/__init__.py +0 -5
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/frontend/package-lock.json +0 -3805
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/password_hasher.py +0 -3
- zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/__init__.py +0 -21
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/component/repo/__init__.py +0 -0
- zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/core/__init__.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/error.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core/messagebus/kafka → component/messagebus/rabbitmq}/__init__.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/repo/db_entity_mixin.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/repo/search_filter.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core/messagebus/rabbitmq → component/rpc/messagebus}/__init__.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/rpc/rpc.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/schema/base_schema.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/serializer/serializer.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/frontend_index.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/log.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/access_token/_init_.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/authorizer/authorizer.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/password_hasher/password_hasher.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{core → component}/refresh_token/_init_.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/base.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/bearer_token_scheme.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/model/__init__.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/repo/__init__.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/{component → integration}/user.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{component → integration}/base.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{component → integration}/model/__init__.py +0 -0
- /zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/{component → integration}/repo/__init__.py +0 -0
- /zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/{component → integration}/base.py +0 -0
- /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
- /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
- {zrb-0.8.0.dist-info → zrb-0.9.0.dist-info}/LICENSE +0 -0
- {zrb-0.8.0.dist-info → zrb-0.9.0.dist-info}/WHEEL +0 -0
- {zrb-0.8.0.dist-info → zrb-0.9.0.dist-info}/entry_points.txt +0 -0
@@ -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=
|
32
|
+
name="APP_OTEL_EXPORTER_OTLP_ENDPOINT",
|
35
33
|
os_name="",
|
36
|
-
default=
|
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.
|
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
|
-
- `
|
152
|
-
- `
|
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
|
-
- `
|
172
|
+
- `integration/`: Initialization of components for the current module.
|
173
173
|
- `model/`
|
174
174
|
- `repo/`
|
175
|
-
- `
|
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:
|
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.
|
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.
|
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.
|
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.
|
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.
|
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'
|
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/monitoring/frontend/nginx-config.conf
CHANGED
@@ -24,8 +24,16 @@ server {
|
|
24
24
|
try_files $uri $uri/ /index.html;
|
25
25
|
}
|
26
26
|
|
27
|
-
location
|
28
|
-
proxy_pass http://
|
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
|
-
|
3
|
-
|
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
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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/
|
112
|
-
metrics_exporter:
|
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:
|
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/
|
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,
|
209
|
-
processors: [
|
167
|
+
receivers: [otlp, tcplog/docker]
|
168
|
+
processors: [batch]
|
210
169
|
exporters: [clickhouselogsexporter]
|
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/messagebus/__init__.py
ADDED
@@ -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
|
File without changes
|
@@ -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
|
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
|
9
|
-
from
|
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
|
8
|
-
from
|
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
|
4
|
+
from component.serializer.serializer import JsonSerializer, Serializer
|
5
5
|
|
6
6
|
TEventHandler = Callable[[Any], Any]
|
7
7
|
|
@@ -4,13 +4,13 @@ import logging
|
|
4
4
|
from typing import Any, Callable, Mapping, Optional
|
5
5
|
|
6
6
|
import aiormq
|
7
|
-
from
|
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
|
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
|
6
|
+
from component.messagebus.messagebus import (
|
7
7
|
MessageSerializer,
|
8
8
|
Publisher,
|
9
9
|
must_get_message_serializer,
|
10
10
|
)
|
11
|
-
from
|
11
|
+
from component.messagebus.rabbitmq.admin import RMQAdmin, must_get_rmq_admin
|
12
12
|
from pydantic import BaseModel
|
13
13
|
|
14
14
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
from typing import Generic, List, Optional, Type, TypeVar
|
2
2
|
|
3
|
-
from
|
4
|
-
from
|
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
|
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/repo/db_repo.py
RENAMED
@@ -1,8 +1,8 @@
|
|
1
1
|
import logging
|
2
2
|
from typing import Any, List, Mapping, Optional, Type, TypeVar
|
3
3
|
|
4
|
-
from
|
5
|
-
from
|
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_
|
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{core → component}/repo/repo.py
RENAMED
@@ -1,7 +1,7 @@
|
|
1
1
|
from abc import ABC, abstractmethod
|
2
2
|
from typing import Generic, List, Optional, TypeVar
|
3
3
|
|
4
|
-
from
|
4
|
+
from component.repo.search_filter import SearchFilter
|
5
5
|
from pydantic import BaseModel
|
6
6
|
|
7
7
|
SchemaData = TypeVar("SchemaData", bound=BaseModel)
|
@@ -2,8 +2,8 @@ import asyncio
|
|
2
2
|
import logging
|
3
3
|
from typing import Any, Callable
|
4
4
|
|
5
|
-
from
|
6
|
-
from
|
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
|
6
|
-
from
|
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
|
|
File without changes
|
zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/{component → integration}/app.py
RENAMED
@@ -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)
|
@@ -1,10 +1,6 @@
|
|
1
1
|
import os
|
2
2
|
from contextlib import asynccontextmanager
|
3
3
|
|
4
|
-
from component.app_state import app_state, set_not_ready_on_error
|
5
|
-
from component.log import logger
|
6
|
-
from component.messagebus import consumer
|
7
|
-
from component.rpc import rpc_server
|
8
4
|
from config import (
|
9
5
|
app_db_auto_migrate,
|
10
6
|
app_enable_event_handler,
|
@@ -16,6 +12,10 @@ from config import (
|
|
16
12
|
from fastapi import FastAPI
|
17
13
|
from fastapi.staticfiles import StaticFiles
|
18
14
|
from helper.async_task import create_task
|
15
|
+
from integration.app_state import app_state, set_not_ready_on_error
|
16
|
+
from integration.log import logger
|
17
|
+
from integration.messagebus import consumer
|
18
|
+
from integration.rpc import rpc_server
|
19
19
|
from migrate import migrate
|
20
20
|
|
21
21
|
|