sbcli-hmdi 0.0.34__tar.gz → 0.0.36__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/PKG-INFO +1 -1
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/sbcli_hmdi.egg-info/PKG-INFO +1 -1
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/sbcli_hmdi.egg-info/SOURCES.txt +3 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_cli/cli.py +1 -1
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/env_var +1 -1
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/install_deps.sh +9 -0
- sbcli_hmdi-0.0.36/simplyblock_core/services/spdk/client.py +281 -0
- sbcli_hmdi-0.0.36/simplyblock_core/services/spdk_stats_collector.py +37 -0
- sbcli_hmdi-0.0.36/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/README.md +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/pyproject.toml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/requirements.txt +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/sbcli_hmdi.egg-info/dependency_links.txt +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/sbcli_hmdi.egg-info/entry_points.txt +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/sbcli_hmdi.egg-info/requires.txt +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/sbcli_hmdi.egg-info/top_level.txt +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/setup.cfg +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/setup.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_cli/__init__.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_cli/main.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/__init__.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/cluster_ops.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/constants.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/caching_node_controller.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/device_controller.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/lvol_controller.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/tasks_controller.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/db_controller.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/distr_controller.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/mgmt_node_ops.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/cluster.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/deployer.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/events.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/iface.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/nvme_device.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/pool.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/stats.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/models/storage_node.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/rpc_client.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/foundation.yml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/prometheus.yml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/health_check_service.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/log_agg_service.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/main_distr_event_collector.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/port_stat_collector.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_hmdi-0.0.34/simplyblock_web → sbcli_hmdi-0.0.36/simplyblock_core/services/spdk}/__init__.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/tasks_runner_migration.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/snode_client.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/storage_node_ops.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/utils.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/README.md +0 -0
- {sbcli_hmdi-0.0.34/simplyblock_web/blueprints → sbcli_hmdi-0.0.36/simplyblock_web}/__init__.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/app.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/snode_ops.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/web_api_pool.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/caching_node_app.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/caching_node_app_k8s.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/node_utils.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/requirements.txt +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/snode_app.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/snode_app_k8s.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/static/delete.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/static/tst.py +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
- {sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/utils.py +0 -0
@@ -104,12 +104,15 @@ simplyblock_core/services/port_stat_collector.py
|
|
104
104
|
simplyblock_core/services/remove_service.sh
|
105
105
|
simplyblock_core/services/service_template.service
|
106
106
|
simplyblock_core/services/spdk_http_proxy_server.py
|
107
|
+
simplyblock_core/services/spdk_stats_collector.py
|
107
108
|
simplyblock_core/services/storage_node_monitor.py
|
108
109
|
simplyblock_core/services/tasks_runner_failed_migration.py
|
109
110
|
simplyblock_core/services/tasks_runner_migration.py
|
110
111
|
simplyblock_core/services/tasks_runner_new_dev_migration.py
|
111
112
|
simplyblock_core/services/tasks_runner_node_add.py
|
112
113
|
simplyblock_core/services/tasks_runner_restart.py
|
114
|
+
simplyblock_core/services/spdk/__init__.py
|
115
|
+
simplyblock_core/services/spdk/client.py
|
113
116
|
simplyblock_core/workers/cleanup_foundationdb.py
|
114
117
|
simplyblock_web/README.md
|
115
118
|
simplyblock_web/__init__.py
|
@@ -302,7 +302,7 @@ class CLIWrapper:
|
|
302
302
|
default=0, choices=range(128))
|
303
303
|
sub_command.add_argument("--max-queue-size", help='The max size the queue will grow', type=int, default=128)
|
304
304
|
sub_command.add_argument("--inflight-io-threshold", help='The number of inflight IOs allowed before the IO queuing starts', type=int, default=4)
|
305
|
-
sub_command.add_argument("--enable-qos", help='Enable qos bdev for storage nodes, true by default', dest='enable_qos', type=bool,
|
305
|
+
sub_command.add_argument("--enable-qos", help='Enable qos bdev for storage nodes, true by default', dest='enable_qos', type=bool, default=True)
|
306
306
|
sub_command.add_argument("--strict-node-anti-affinity", help='Enable strict node anti affinity for storage nodes', action='store_true')
|
307
307
|
|
308
308
|
|
@@ -22,6 +22,15 @@ sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
|
|
22
22
|
# required for graylog
|
23
23
|
sudo sysctl -w vm.max_map_count=262144
|
24
24
|
|
25
|
+
echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf
|
26
|
+
echo "net.core.rmem_default=87380" >> /etc/sysctl.conf
|
27
|
+
echo "net.ipv4.tcp_rmem=4096 87380 16777216" >> /etc/sysctl.conf
|
28
|
+
echo "net.core.somaxconn=1024" >> /etc/sysctl.conf
|
29
|
+
echo "net.ipv4.tcp_max_syn_backlog=4096" >> /etc/sysctl.conf
|
30
|
+
echo "net.ipv4.tcp_window_scaling=1" >> /etc/sysctl.conf
|
31
|
+
echo "net.ipv4.tcp_retries2=8" >> /etc/sysctl.conf
|
32
|
+
sysctl -p # Apply changes immediately
|
33
|
+
|
25
34
|
sudo mkdir -p /etc/simplyblock
|
26
35
|
sudo chmod 777 /etc/simplyblock
|
27
36
|
|
@@ -0,0 +1,281 @@
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
2
|
+
# Copyright (C) 2017 Intel Corporation.
|
3
|
+
# All rights reserved.
|
4
|
+
|
5
|
+
import json
|
6
|
+
import socket
|
7
|
+
import time
|
8
|
+
import os
|
9
|
+
import logging
|
10
|
+
import copy
|
11
|
+
import ctypes
|
12
|
+
|
13
|
+
|
14
|
+
def print_dict(d):
|
15
|
+
print(json.dumps(d, indent=2))
|
16
|
+
|
17
|
+
|
18
|
+
def print_json(s):
|
19
|
+
print(json.dumps(s, indent=2).strip('"'))
|
20
|
+
|
21
|
+
|
22
|
+
def get_addr_type(addr):
|
23
|
+
try:
|
24
|
+
socket.inet_pton(socket.AF_INET, addr)
|
25
|
+
return socket.AF_INET
|
26
|
+
except Exception as e:
|
27
|
+
pass
|
28
|
+
try:
|
29
|
+
socket.inet_pton(socket.AF_INET6, addr)
|
30
|
+
return socket.AF_INET6
|
31
|
+
except Exception as e:
|
32
|
+
pass
|
33
|
+
if os.path.exists(addr):
|
34
|
+
return socket.AF_UNIX
|
35
|
+
return None
|
36
|
+
|
37
|
+
|
38
|
+
class JSONRPCException(Exception):
|
39
|
+
def __init__(self, message):
|
40
|
+
self.message = message
|
41
|
+
|
42
|
+
|
43
|
+
class JSONRPCClient(object):
|
44
|
+
def __init__(self, addr, port=None, timeout=None, **kwargs):
|
45
|
+
self.sock = None
|
46
|
+
ch = logging.StreamHandler()
|
47
|
+
ch.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
|
48
|
+
ch.setLevel(logging.DEBUG)
|
49
|
+
self._logger = logging.getLogger("JSONRPCClient(%s)" % addr)
|
50
|
+
self._logger.addHandler(ch)
|
51
|
+
self.log_set_level(kwargs.get('log_level', logging.ERROR))
|
52
|
+
connect_retries = kwargs.get('conn_retries', 0)
|
53
|
+
|
54
|
+
self.timeout = timeout if timeout is not None else 60.0
|
55
|
+
self._request_id = 0
|
56
|
+
self._recv_buf = ""
|
57
|
+
self._reqs = []
|
58
|
+
|
59
|
+
for i in range(connect_retries):
|
60
|
+
try:
|
61
|
+
self._connect(addr, port)
|
62
|
+
return
|
63
|
+
except Exception as e:
|
64
|
+
# ignore and retry in 200ms
|
65
|
+
time.sleep(0.2)
|
66
|
+
|
67
|
+
# try one last time without try/except
|
68
|
+
self._connect(addr, port)
|
69
|
+
|
70
|
+
def __enter__(self):
|
71
|
+
return self
|
72
|
+
|
73
|
+
def __exit__(self, exception_type, exception_value, traceback):
|
74
|
+
self.close()
|
75
|
+
|
76
|
+
def _connect(self, addr, port):
|
77
|
+
try:
|
78
|
+
addr_type = get_addr_type(addr)
|
79
|
+
|
80
|
+
if addr_type == socket.AF_UNIX:
|
81
|
+
self._logger.debug("Trying to connect to UNIX socket: %s", addr)
|
82
|
+
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
83
|
+
self.sock.connect(addr)
|
84
|
+
elif addr_type == socket.AF_INET6:
|
85
|
+
self._logger.debug("Trying to connect to IPv6 address addr:%s, port:%i", addr, port)
|
86
|
+
for res in socket.getaddrinfo(addr, port, socket.AF_INET6, socket.SOCK_STREAM, socket.SOL_TCP):
|
87
|
+
af, socktype, proto, canonname, sa = res
|
88
|
+
self.sock = socket.socket(af, socktype, proto)
|
89
|
+
self.sock.connect(sa)
|
90
|
+
elif addr_type == socket.AF_INET:
|
91
|
+
self._logger.debug("Trying to connect to IPv4 address addr:%s, port:%i'", addr, port)
|
92
|
+
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
93
|
+
self.sock.connect((addr, port))
|
94
|
+
else:
|
95
|
+
raise socket.error("Invalid or non-existing address: '%s'" % addr)
|
96
|
+
except socket.error as ex:
|
97
|
+
raise JSONRPCException("Error while connecting to %s\n"
|
98
|
+
"Is SPDK application running?\n"
|
99
|
+
"Error details: %s" % (addr, ex))
|
100
|
+
|
101
|
+
def get_logger(self):
|
102
|
+
return self._logger
|
103
|
+
|
104
|
+
"""Set logging level
|
105
|
+
|
106
|
+
Args:
|
107
|
+
lvl: Log level to set as accepted by logger.setLevel
|
108
|
+
"""
|
109
|
+
def log_set_level(self, lvl):
|
110
|
+
self._logger.info("Setting log level to %s", lvl)
|
111
|
+
self._logger.setLevel(lvl)
|
112
|
+
self._logger.info("Log level set to %s", lvl)
|
113
|
+
|
114
|
+
def close(self):
|
115
|
+
if getattr(self, "sock", None):
|
116
|
+
self.sock.shutdown(socket.SHUT_RDWR)
|
117
|
+
self.sock.close()
|
118
|
+
self.sock = None
|
119
|
+
|
120
|
+
def add_request(self, method, params):
|
121
|
+
self._request_id += 1
|
122
|
+
req = {
|
123
|
+
'jsonrpc': '2.0',
|
124
|
+
'method': method,
|
125
|
+
'id': self._request_id
|
126
|
+
}
|
127
|
+
|
128
|
+
if params:
|
129
|
+
req['params'] = copy.deepcopy(params)
|
130
|
+
|
131
|
+
self._logger.debug("append request:\n%s\n", json.dumps(req))
|
132
|
+
self._reqs.append(req)
|
133
|
+
return self._request_id
|
134
|
+
|
135
|
+
def flush(self):
|
136
|
+
self._logger.debug("Flushing buffer")
|
137
|
+
# TODO: We can drop indent parameter
|
138
|
+
reqstr = "\n".join(json.dumps(req, indent=2) for req in self._reqs)
|
139
|
+
self._reqs = []
|
140
|
+
self._logger.info("Requests:\n%s\n", reqstr)
|
141
|
+
self.sock.sendall(reqstr.encode("utf-8"))
|
142
|
+
|
143
|
+
def send(self, method, params=None):
|
144
|
+
id = self.add_request(method, params)
|
145
|
+
self.flush()
|
146
|
+
return id
|
147
|
+
|
148
|
+
def decode_one_response(self):
|
149
|
+
try:
|
150
|
+
self._logger.debug("Trying to decode response '%s'", self._recv_buf)
|
151
|
+
buf = self._recv_buf.lstrip()
|
152
|
+
obj, idx = json.JSONDecoder().raw_decode(buf)
|
153
|
+
self._recv_buf = buf[idx:]
|
154
|
+
return obj
|
155
|
+
except ValueError:
|
156
|
+
self._logger.debug("Partial response")
|
157
|
+
return None
|
158
|
+
|
159
|
+
def recv(self):
|
160
|
+
start_time = time.process_time()
|
161
|
+
response = self.decode_one_response()
|
162
|
+
while not response:
|
163
|
+
try:
|
164
|
+
timeout = self.timeout - (time.process_time() - start_time)
|
165
|
+
self.sock.settimeout(timeout)
|
166
|
+
newdata = self.sock.recv(4096)
|
167
|
+
if not newdata:
|
168
|
+
self.sock.close()
|
169
|
+
self.sock = None
|
170
|
+
raise JSONRPCException("Connection closed with partial response:\n%s\n" % self._recv_buf)
|
171
|
+
self._recv_buf += newdata.decode("utf-8")
|
172
|
+
response = self.decode_one_response()
|
173
|
+
except socket.timeout:
|
174
|
+
break # throw exception after loop to avoid Python freaking out about nested exceptions
|
175
|
+
except ValueError:
|
176
|
+
continue # incomplete response; keep buffering
|
177
|
+
|
178
|
+
if not response:
|
179
|
+
raise JSONRPCException("Timeout while waiting for response:\n%s\n" % self._recv_buf)
|
180
|
+
|
181
|
+
self._logger.info("response:\n%s\n", json.dumps(response, indent=2))
|
182
|
+
return response
|
183
|
+
|
184
|
+
def call(self, method, params=None):
|
185
|
+
self._logger.debug("call('%s')" % method)
|
186
|
+
params = {} if params is None else params
|
187
|
+
if self.timeout <= 0:
|
188
|
+
raise JSONRPCException("Timeout value is invalid: %s\n" % self.timeout)
|
189
|
+
req_id = self.send(method, params)
|
190
|
+
try:
|
191
|
+
response = self.recv()
|
192
|
+
except JSONRPCException as e:
|
193
|
+
""" Don't expect response to kill """
|
194
|
+
if not self.sock and method == "spdk_kill_instance":
|
195
|
+
self._logger.info("Connection terminated but ignoring since method is '%s'" % method)
|
196
|
+
return {}
|
197
|
+
else:
|
198
|
+
raise e
|
199
|
+
|
200
|
+
if 'error' in response:
|
201
|
+
params["method"] = method
|
202
|
+
params["req_id"] = req_id
|
203
|
+
msg = "\n".join(["request:", "%s" % json.dumps(params, indent=2),
|
204
|
+
"Got JSON-RPC error response",
|
205
|
+
"response:",
|
206
|
+
json.dumps(response['error'], indent=2)])
|
207
|
+
raise JSONRPCException(msg)
|
208
|
+
|
209
|
+
return response['result']
|
210
|
+
|
211
|
+
|
212
|
+
class JSONRPCGoClient(object):
|
213
|
+
INVALID_PARAMETER_ERROR = 1
|
214
|
+
CONNECTION_ERROR = 2
|
215
|
+
JSON_RPC_CALL_ERROR = 3
|
216
|
+
INVALID_RESPONSE_ERROR = 4
|
217
|
+
|
218
|
+
def __init__(self, addr, **kwargs):
|
219
|
+
self.addr = addr
|
220
|
+
ch = logging.StreamHandler()
|
221
|
+
ch.setFormatter(logging.Formatter('Go client - %(levelname)s: %(message)s'))
|
222
|
+
ch.setLevel(logging.DEBUG)
|
223
|
+
self._logger = logging.getLogger("JSONRPCGoClient(%s)" % addr)
|
224
|
+
self._logger.addHandler(ch)
|
225
|
+
self._logger.setLevel(kwargs.get('log_level', logging.ERROR))
|
226
|
+
|
227
|
+
def call(self, method, params=None):
|
228
|
+
self._logger.debug("call('%s')" % method)
|
229
|
+
params = {} if params is None else params
|
230
|
+
|
231
|
+
class GoClientResponse(ctypes.Structure):
|
232
|
+
_fields_ = [("response", ctypes.POINTER(ctypes.c_char)), ("error", ctypes.c_int)]
|
233
|
+
|
234
|
+
client_path = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file__),
|
235
|
+
os.path.pardir))
|
236
|
+
+ '/../../build/go/rpc/libspdk_gorpc.so')
|
237
|
+
try:
|
238
|
+
lib = ctypes.cdll.LoadLibrary(client_path)
|
239
|
+
except OSError:
|
240
|
+
raise JSONRPCException(f'Failed to load the Go RPC client at {client_path}')
|
241
|
+
lib.spdk_gorpc_free_response.argtypes = [ctypes.POINTER(ctypes.c_char)]
|
242
|
+
lib.spdk_gorpc_call.argtypes = [ctypes.c_char_p, ctypes.c_char_p]
|
243
|
+
lib.spdk_gorpc_call.restype = GoClientResponse
|
244
|
+
|
245
|
+
command_info = {
|
246
|
+
"method": method,
|
247
|
+
"params": params
|
248
|
+
}
|
249
|
+
resp = lib.spdk_gorpc_call(json.dumps(command_info).encode('utf-8'),
|
250
|
+
self.addr.encode('utf-8'))
|
251
|
+
if resp.error > 0:
|
252
|
+
rpc_error = "\n".join(["request:", "%s" % json.dumps(command_info, indent=2),
|
253
|
+
"Got JSON-RPC error response"])
|
254
|
+
if resp.error == self.INVALID_PARAMETER_ERROR:
|
255
|
+
rpc_error = "\n".join([rpc_error, "GoRPCClient: error when decoding "
|
256
|
+
"function arguments"])
|
257
|
+
elif resp.error == self.CONNECTION_ERROR:
|
258
|
+
rpc_error = "\n".join([rpc_error, "GoRPCClient: Error while connecting to "
|
259
|
+
f"{self.addr}. Is SPDK application running?"])
|
260
|
+
elif resp.error == self.JSON_RPC_CALL_ERROR:
|
261
|
+
rpc_error = "\n".join([rpc_error, "GoRPCClient: error on JSON-RPC call"])
|
262
|
+
elif resp.error == self.INVALID_RESPONSE_ERROR:
|
263
|
+
rpc_error = "\n".join([rpc_error, "GoRPCClient: error on creating json "
|
264
|
+
"representation of response"])
|
265
|
+
raise JSONRPCException(rpc_error)
|
266
|
+
|
267
|
+
try:
|
268
|
+
json_resp = json.loads(ctypes.c_char_p.from_buffer(resp.response).value)
|
269
|
+
finally:
|
270
|
+
lib.spdk_gorpc_free_response(resp.response)
|
271
|
+
|
272
|
+
if 'error' in json_resp:
|
273
|
+
params["method"] = method
|
274
|
+
params["req_id"] = json_resp['id']
|
275
|
+
msg = "\n".join(["request:", "%s" % json.dumps(params, indent=2),
|
276
|
+
"Got JSON-RPC error response",
|
277
|
+
"response:",
|
278
|
+
json.dumps(json_resp['error'], indent=2)])
|
279
|
+
raise JSONRPCException(msg)
|
280
|
+
|
281
|
+
return json_resp['result']
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import datetime
|
2
|
+
import time
|
3
|
+
|
4
|
+
from simplyblock_core.services.spdk import client as spdk_client
|
5
|
+
|
6
|
+
|
7
|
+
method = "thread_get_stats"
|
8
|
+
spdk_sock_path = '/var/tmp/spdk.sock'
|
9
|
+
csv_file_path = "/etc/simplyblock/spdk_top.csv"
|
10
|
+
|
11
|
+
def get_file(ret):
|
12
|
+
|
13
|
+
f = open(csv_file_path, 'at', buffering=1)
|
14
|
+
f.write("date, ")
|
15
|
+
for stats in ret["threads"]:
|
16
|
+
f.write(", ".join([k for k in stats]))
|
17
|
+
f.write("\n")
|
18
|
+
return f
|
19
|
+
|
20
|
+
|
21
|
+
if __name__ == '__main__':
|
22
|
+
|
23
|
+
client = spdk_client.JSONRPCClient(spdk_sock_path, 5260)
|
24
|
+
|
25
|
+
out_file = None
|
26
|
+
while True:
|
27
|
+
ret = client.call(method)
|
28
|
+
now = str(datetime.datetime.now()).split(".")[0]
|
29
|
+
if ret and "threads" in ret:
|
30
|
+
if not out_file:
|
31
|
+
out_file = get_file(ret)
|
32
|
+
out_file.write(now+", ")
|
33
|
+
for stats in ret["threads"]:
|
34
|
+
out_file.write(", ".join([str(k) for k in stats.values()]))
|
35
|
+
out_file.write("\n")
|
36
|
+
|
37
|
+
time.sleep(10)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/controllers/caching_node_controller.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2
RENAMED
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/clean_local_storage_deploy.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/dashboards/node-exporter.json
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/cached_lvol_stat_collector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/capacity_and_stats_collector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/main_distr_event_collector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34/simplyblock_web → sbcli_hmdi-0.0.36/simplyblock_core/services/spdk}/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/tasks_runner_failed_migration.py
RENAMED
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_core/services/tasks_runner_new_dev_migration.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34/simplyblock_web/blueprints → sbcli_hmdi-0.0.36/simplyblock_web}/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/blueprints/node_api_caching_docker.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2
RENAMED
File without changes
|
{sbcli_hmdi-0.0.34 → sbcli_hmdi-0.0.36}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2
RENAMED
File without changes
|
File without changes
|