sbcli-pre 1.2.4__zip → 1.2.5__zip

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 (141) hide show
  1. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/PKG-INFO +20 -5
  2. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/README.md +19 -4
  3. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/env_var +1 -1
  4. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/PKG-INFO +20 -5
  5. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/SOURCES.txt +5 -5
  6. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_cli/cli.py +115 -113
  7. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/cluster_ops.py +238 -141
  8. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/constants.py +7 -5
  9. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/caching_node_controller.py +6 -8
  10. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/cluster_events.py +0 -9
  11. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/device_controller.py +63 -56
  12. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/events_controller.py +3 -5
  13. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/health_controller.py +40 -30
  14. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/lvol_controller.py +38 -51
  15. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/pool_controller.py +4 -8
  16. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/snapshot_controller.py +3 -9
  17. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/distr_controller.py +9 -13
  18. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/kv_store.py +29 -47
  19. sbcli_pre-1.2.5/simplyblock_core/mgmt_node_ops.py +80 -0
  20. sbcli_pre-1.2.5/simplyblock_core/models/deployer.py +62 -0
  21. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/events.py +1 -9
  22. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/job_schedule.py +0 -6
  23. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/nvme_device.py +4 -42
  24. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/storage_node.py +1 -9
  25. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/rpc_client.py +10 -55
  26. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/__init__.py +4 -0
  27. sbcli_pre-1.2.4/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 → sbcli_pre-1.2.5/simplyblock_core/scripts/alerting/alert_resources.yaml +5 -54
  28. sbcli_pre-1.2.5/simplyblock_core/scripts/apply_dashboard.sh +22 -0
  29. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/cluster.json +1 -1
  30. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/deploy_stack.sh +0 -2
  31. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +13 -22
  32. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/docker-compose-swarm.yml +2 -17
  33. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/haproxy.cfg +0 -15
  34. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/install_deps.sh +0 -1
  35. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/capacity_and_stats_collector.py +1 -1
  36. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/device_monitor.py +46 -5
  37. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/distr_event_collector.py +11 -10
  38. sbcli_pre-1.2.5/simplyblock_core/services/health_check_service.py +136 -0
  39. sbcli_pre-1.2.4/simplyblock_core/services/tasks_runner_restart.py → sbcli_pre-1.2.5/simplyblock_core/services/job_tasks.py +46 -95
  40. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/lvol_monitor.py +1 -1
  41. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/lvol_stat_collector.py +1 -1
  42. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/port_stat_collector.py +1 -0
  43. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/storage_node_monitor.py +44 -49
  44. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/snode_client.py +0 -12
  45. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/storage_node_ops.py +336 -525
  46. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/utils.py +1 -46
  47. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/app.py +2 -1
  48. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/snode_ops.py +25 -103
  49. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_cluster.py +43 -20
  50. sbcli_pre-1.2.5/simplyblock_web/blueprints/web_api_deployer.py +394 -0
  51. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_device.py +7 -10
  52. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_lvol.py +5 -9
  53. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_pool.py +5 -14
  54. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_storage_node.py +10 -3
  55. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/node_utils.py +2 -0
  56. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/utils.py +0 -8
  57. sbcli_pre-1.2.4/simplyblock_core/controllers/tasks_controller.py +0 -103
  58. sbcli_pre-1.2.4/simplyblock_core/controllers/tasks_events.py +0 -37
  59. sbcli_pre-1.2.4/simplyblock_core/mgmt_node_ops.py +0 -205
  60. sbcli_pre-1.2.4/simplyblock_core/services/health_check_service.py +0 -134
  61. sbcli_pre-1.2.4/simplyblock_core/services/tasks_runner_migration.py +0 -61
  62. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/pyproject.toml +0 -0
  63. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/dependency_links.txt +0 -0
  64. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/entry_points.txt +0 -0
  65. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/requires.txt +0 -0
  66. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/top_level.txt +0 -0
  67. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/setup.cfg +0 -0
  68. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/setup.py +0 -0
  69. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_cli/main.py +0 -0
  70. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/__init__.py +0 -0
  71. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/cnode_client.py +0 -0
  72. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/compute_node_ops.py +0 -0
  73. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/__init__.py +0 -0
  74. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/device_events.py +0 -0
  75. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/lvol_events.py +0 -0
  76. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/mgmt_events.py +0 -0
  77. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/pool_events.py +0 -0
  78. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/snapshot_events.py +0 -0
  79. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/controllers/storage_events.py +0 -0
  80. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/__init__.py +0 -0
  81. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/base_model.py +0 -0
  82. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/caching_node.py +0 -0
  83. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/cluster.py +0 -0
  84. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/compute_node.py +0 -0
  85. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/global_settings.py +0 -0
  86. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/iface.py +0 -0
  87. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/lvol_model.py +0 -0
  88. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/mgmt_node.py +0 -0
  89. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/pool.py +0 -0
  90. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/port_stat.py +0 -0
  91. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/snapshot.py +0 -0
  92. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/models/stats.py +0 -0
  93. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/pci_utils.py +0 -0
  94. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  95. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  96. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/config_docker.sh +0 -0
  97. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  98. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  99. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  100. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  101. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  102. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/datasource.yml +0 -0
  103. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/db_config_double.sh +0 -0
  104. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/db_config_single.sh +0 -0
  105. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/prometheus.yml +0 -0
  106. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/run_ssh.sh +0 -0
  107. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/set_db_config.sh +0 -0
  108. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  109. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/__init__.py +0 -0
  110. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/caching_node_monitor.py +0 -0
  111. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/cap_monitor.py +0 -0
  112. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/install_service.sh +0 -0
  113. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/log_agg_service.py +0 -0
  114. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
  115. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/remove_service.sh +0 -0
  116. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/services/service_template.service +0 -0
  117. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_core/shell_utils.py +0 -0
  118. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/__init__.py +0 -0
  119. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/auth_middleware.py +0 -0
  120. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/__init__.py +0 -0
  121. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
  122. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
  123. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/node_api_basic.py +0 -0
  124. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
  125. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
  126. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
  127. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
  128. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
  129. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/caching_node_app.py +0 -0
  130. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/caching_node_app_k8s.py +0 -0
  131. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/node_webapp.py +0 -0
  132. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/snode_app.py +0 -0
  133. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/static/delete.py +0 -0
  134. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/static/deploy.py +0 -0
  135. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  136. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  137. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/static/is_up.py +0 -0
  138. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/static/list_deps.py +0 -0
  139. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/static/rpac.yaml +0 -0
  140. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/static/tst.py +0 -0
  141. {sbcli_pre-1.2.4 → sbcli_pre-1.2.5}/simplyblock_web/templates/deploy_spdk.yaml.j2 +0 -0
@@ -306,9 +306,9 @@ class RPCClient:
306
306
  params = {"name": name}
307
307
  return self._request("bdev_compress_delete", params)
308
308
 
309
- def ultra21_bdev_pass_create(self, base_bdev, vuid, pt_name):
309
+ def ultra21_bdev_pass_create(self, alloc_bdev, vuid, pt_name):
310
310
  params = {
311
- "base_bdev": base_bdev,
311
+ "base_bdev": alloc_bdev,
312
312
  "vuid": vuid,
313
313
  "pt_bdev": pt_name
314
314
  }
@@ -318,8 +318,7 @@ class RPCClient:
318
318
  params = {"name": name}
319
319
  return self._request2("ultra21_bdev_pass_delete", params)
320
320
 
321
- def bdev_alceml_create(self, alceml_name, nvme_name, uuid, pba_init_mode=3,
322
- dev_cpu_mask=""):
321
+ def bdev_alceml_create(self, alceml_name, nvme_name, uuid, pba_init_mode=3):
323
322
  params = {
324
323
  "name": alceml_name,
325
324
  "cntr_path": nvme_name,
@@ -335,13 +334,10 @@ class RPCClient:
335
334
  "use_optimized": True,
336
335
  "pba_nbalign": 4096
337
336
  }
338
- if dev_cpu_mask:
339
- params["bdb_lcpu_mask"] = int(dev_cpu_mask,16)
340
337
  return self._request("bdev_alceml_create", params)
341
338
 
342
339
  def bdev_distrib_create(self, name, vuid, ndcs, npcs, num_blocks, block_size, jm_names,
343
- chunk_size, ha_comm_addrs=None, ha_inode_self=None, pba_page_size=2097152,
344
- dev_cpu_mask=""):
340
+ chunk_size, ha_comm_addrs=None, ha_inode_self=None, pba_page_size=2097152):
345
341
  """"
346
342
  // Optional (not specified = no HA)
347
343
  // Comma-separated communication addresses, for each node, e.g. "192.168.10.1:45001,192.168.10.1:32768".
@@ -367,8 +363,6 @@ class RPCClient:
367
363
  if ha_comm_addrs:
368
364
  params['ha_comm_addrs'] = ha_comm_addrs
369
365
  params['ha_inode_self'] = ha_inode_self
370
- if dev_cpu_mask:
371
- params["bdb_lcpu_mask"] = int(dev_cpu_mask, 16)
372
366
 
373
367
  return self._request("bdev_distrib_create", params)
374
368
 
@@ -392,7 +386,7 @@ class RPCClient:
392
386
  params = {
393
387
  "name": name,
394
388
  "raid_level": "0",
395
- "strip_size_kb": 4,
389
+ "strip_size_kb": 4 * len(bdevs_list),
396
390
  "base_bdevs": bdevs_list
397
391
  }
398
392
  return self._request("bdev_raid_create", params)
@@ -434,9 +428,8 @@ class RPCClient:
434
428
  "trsvcid": str(port),
435
429
  "subnqn": nqn,
436
430
  "fabrics_connect_timeout_us": 100000,
437
- "fast_io_fail_timeout_sec": 1,
431
+ "fast_io_fail_timeout_sec": 0,
438
432
  "num_io_queues": 16384,
439
- "ctrlr_loss_timeout_sec": 2,
440
433
  }
441
434
  return self._request("bdev_nvme_attach_controller", params)
442
435
 
@@ -484,9 +477,9 @@ class RPCClient:
484
477
  params = {
485
478
  "bdev_retry_count": 0,
486
479
  "transport_retry_count": 0,
487
- "ctrlr_loss_timeout_sec": 2,
488
- "fast_io_fail_timeout_sec": 1,
489
- "reconnect_delay_sec": 1,
480
+ "ctrlr_loss_timeout_sec": -1,
481
+ "fast_io_fail_timeout_sec": 5,
482
+ "reconnect_delay_sec": 5,
490
483
  "keep_alive_timeout_ms": 200,
491
484
  "transport_ack_timeout": 7,
492
485
  "timeout_us": 100000
@@ -590,14 +583,12 @@ class RPCClient:
590
583
  }
591
584
  return self._request("ultra21_lvol_dismount", params)
592
585
 
593
- def bdev_jm_create(self, name, name_storage1, block_size=4096, dev_cpu_mask=""):
586
+ def bdev_jm_create(self, name, name_storage1, block_size=4096):
594
587
  params = {
595
588
  "name": name,
596
589
  "name_storage1": name_storage1,
597
590
  "block_size": block_size
598
591
  }
599
- if dev_cpu_mask:
600
- params["bdb_lcpu_mask"] = int(dev_cpu_mask, 16)
601
592
  return self._request("bdev_jm_create", params)
602
593
 
603
594
  def bdev_jm_delete(self, name):
@@ -629,42 +620,6 @@ class RPCClient:
629
620
  def framework_start_init(self):
630
621
  return self._request("framework_start_init")
631
622
 
632
- def bdev_examine(self, name):
633
- params = {"name": name}
634
- return self._request("bdev_examine", params)
635
-
636
- def nbd_start_disk(self, bdev_name, nbd_device="/dev/nbd0"):
637
- params = {
638
- "bdev_name": bdev_name,
639
- "nbd_device": nbd_device,
640
- }
641
- return self._request("nbd_start_disk", params)
642
-
643
- def nbd_stop_disk(self, nbd_device):
644
- params = {
645
- "nbd_device": nbd_device
646
- }
647
- return self._request("nbd_stop_disk", params)
648
-
649
-
650
623
  def bdev_jm_unmap_vuid(self, name, vuid):
651
624
  params = {"name": name, "vuid": vuid}
652
625
  return self._request("bdev_jm_unmap_vuid", params)
653
-
654
- def sock_impl_set_options(self):
655
- method = "sock_impl_set_options"
656
- params = {"impl_name": "posix", "enable_quickack": True,
657
- "enable_zerocopy_send_server": True,
658
- "enable_zerocopy_send_client": True}
659
- return self._request(method, params)
660
-
661
- def nvmf_set_config(self, poll_groups_mask):
662
- params = {"poll_groups_mask": poll_groups_mask}
663
- return self._request("nvmf_set_config", params)
664
-
665
- def thread_get_stats(self):
666
- return self._request("thread_get_stats")
667
-
668
- def thread_set_cpumask(self, app_thread_process_id, app_thread_mask):
669
- params = {"id": app_thread_process_id, "cpumask": app_thread_mask}
670
- return self._request("thread_set_cpumask", params)
@@ -35,6 +35,10 @@ def deploy_stack(cli_pass, dev_ip, image_name, graylog_password, cluster_id, log
35
35
  return __run_script(
36
36
  ['sudo', 'bash', '-x', os.path.join(DIR_PATH, 'deploy_stack.sh'), cli_pass, dev_ip, image_name, pass_hash, graylog_password, cluster_id, log_del_interval, metrics_retention_period])
37
37
 
38
+ def apply_dashboard(grafanaPassword):
39
+ return __run_script(
40
+ ['sudo', 'bash', '-x', os.path.join(DIR_PATH, 'apply_dashboard.sh'), grafanaPassword])
41
+
38
42
 
39
43
  def deploy_cleaner():
40
44
  return __run_script(['sudo', 'bash', '-x', os.path.join(DIR_PATH, 'clean_local_storage_deploy.sh')])
@@ -12,26 +12,15 @@ contactPoints:
12
12
  name: grafana-alerts
13
13
  receivers:
14
14
  - uid: grafana
15
- type: {{ ALERT_TYPE }}
16
- {% if ALERT_TYPE == 'slack' %}
15
+ type: slack
17
16
  settings:
18
17
  username: grafana_bot
19
- url: '{{ CONTACT_POINT }}'
18
+ url: 'https://hooks.slack.com/services/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'
20
19
  title: |
21
- {{ '{{' }} template "slack.title" . {{ '}}' }}
20
+ {{ template "slack.title" . }}
22
21
  text: |
23
- {{ '{{' }} template "slack.message" . {{ '}}' }}
24
- {% else %}
25
- settings:
26
- addresses: '{{ CONTACT_POINT }}'
27
- subject: |
28
- {{ '{{' }} template "email.subject" . {{ '}}' }}
29
- body: |
30
- {{ '{{' }} template "email.body" . {{ '}}' }}
31
- {% endif %}
22
+ {{ template "slack.message" . }}
32
23
 
33
- {% if ALERT_TYPE == 'slack' %}
34
- {% raw %}
35
24
  templates:
36
25
  - orgId: 1
37
26
  name: slack.title
@@ -49,9 +38,7 @@ templates:
49
38
  *Description*: {{ .Annotations.description }}
50
39
  {{ end -}}
51
40
  *Log message*: {{ index .Labels "message" }}
52
- {% endraw %}
53
- *Explore logs:* {{ GRAFANA_ENDPOINT }}
54
- {% raw %}
41
+ *Explore logs:* https://grafanaURL.com/explore?orgId=1
55
42
  {{ if .DashboardURL -}}
56
43
  *Go to dashboard:* {{ .DashboardURL }}
57
44
  {{- end }}
@@ -78,39 +65,3 @@ templates:
78
65
  {{ end }}
79
66
 
80
67
  {{- end }}
81
- {% endraw %}
82
- {% else %}
83
- {% raw %}
84
- - orgId: 1
85
- name: email.subject
86
- template: |-
87
- {{ define "email.subject" -}}
88
- [{{ .Status | toUpper }}] Grafana Alert
89
- {{- end -}}
90
- - orgId: 1
91
- name: email.body
92
- template: |-
93
- {{ define "email.body" -}}
94
- Alert: {{ .Labels.alertname }}
95
- {{ if .Annotations -}}
96
- Summary: {{ .Annotations.summary}}
97
- Description: {{ .Annotations.description }}
98
- {{ end -}}
99
- Log message: {{ index .Labels "message" }}
100
- Explore logs: {{ GRAFANA_ENDPOINT }}
101
- {{ if .DashboardURL -}}
102
- Go to dashboard: {{ .DashboardURL }}
103
- {{- end }}
104
- {{ if .PanelURL -}}
105
- Go to panel: {{ .PanelURL }}
106
- {{- end }}
107
- Details:
108
- {{ range .Labels.SortedPairs -}}
109
- - {{ .Name }}: `{{ .Value }}`
110
- {{ end -}}
111
- {{ if .SilenceURL -}}
112
- Silence this alert: {{ .SilenceURL }}
113
- {{- end }}
114
- {{- end }}
115
- {% endraw %}
116
- {% endif %}
@@ -0,0 +1,22 @@
1
+ #!/bin/bash
2
+
3
+ TD=$(dirname -- "$(readlink -f -- "$0")")
4
+
5
+ # Grafana Password
6
+ export grafanaPassword=$1
7
+
8
+ # Grafana username
9
+ GF_ADMIN_USER=admin
10
+
11
+ HOST=0.0.0.0:3000
12
+
13
+ DASHBOARDS="${TD}/dashboards"
14
+ for dashboard in "${DASHBOARDS}/cluster.json" "${DASHBOARDS}/devices.json" "${DASHBOARDS}/nodes.json" "${DASHBOARDS}/lvols.json" "${DASHBOARDS}/pools.json" "${DASHBOARDS}/node-exporter.json"; do
15
+ echo -e "\nUploading dashboard: ${dashboard}"
16
+ curl -X POST -H "Content-Type: application/json" \
17
+ -d "@${dashboard}" \
18
+ "http://${GF_ADMIN_USER}:${grafanaPassword}@${HOST}/api/dashboards/import"
19
+ echo ""
20
+ done
21
+
22
+ echo "Cluster deployment complete."
@@ -2354,4 +2354,4 @@
2354
2354
  "version": 5,
2355
2355
  "weekStart": ""
2356
2356
  }
2357
- }
2357
+ }
@@ -19,8 +19,6 @@ then
19
19
  export FDB_CLUSTER_FILE_CONTENTS=$FDB_CLUSTER_FILE_CONTENTS
20
20
  fi
21
21
 
22
- docker network create monitoring-net -d overlay --attachable
23
-
24
22
  docker stack deploy --compose-file="$DIR"/docker-compose-swarm-monitoring.yml monitoring
25
23
 
26
24
  # wait for the services to become online
@@ -9,8 +9,6 @@ services:
9
9
  deploy:
10
10
  placement:
11
11
  constraints: [node.role == manager]
12
- networks:
13
- - monitoring-net
14
12
 
15
13
  opensearch:
16
14
  image: "opensearchproject/opensearch:2.4.0"
@@ -26,8 +24,6 @@ services:
26
24
  deploy:
27
25
  placement:
28
26
  constraints: [node.role == manager]
29
- networks:
30
- - monitoring-net
31
27
 
32
28
  graylog:
33
29
  hostname: "server"
@@ -38,7 +34,7 @@ services:
38
34
  GRAYLOG_PASSWORD_SECRET: "${GRAYLOG_PASSWORD_SECRET}"
39
35
  GRAYLOG_ROOT_PASSWORD_SHA2: "${GRAYLOG_ROOT_PASSWORD_SHA2}"
40
36
  GRAYLOG_HTTP_BIND_ADDRESS: "0.0.0.0:9000"
41
- GRAYLOG_HTTP_EXTERNAL_URI: "http://localhost/graylog/"
37
+ GRAYLOG_HTTP_EXTERNAL_URI: "http://localhost:9000/"
42
38
  GRAYLOG_ELASTICSEARCH_HOSTS: "http://opensearch:9200"
43
39
  GRAYLOG_MONGODB_URI: "mongodb://mongodb:27017/graylog"
44
40
  ports:
@@ -47,6 +43,7 @@ services:
47
43
  - "5140:5140/tcp" # Syslog
48
44
  - "5555:5555/tcp" # RAW TCP
49
45
  - "5555:5555/udp" # RAW TCP
46
+ - "9000:9000/tcp" # Server API
50
47
  - "12201:12201/tcp" # GELF TCP
51
48
  - "12201:12201/udp" # GELF UDP
52
49
  - "13301:13301/tcp" # Forwarder data
@@ -57,8 +54,6 @@ services:
57
54
  deploy:
58
55
  placement:
59
56
  constraints: [node.role == manager]
60
- networks:
61
- - monitoring-net
62
57
 
63
58
  promagent:
64
59
  image: simplyblock/promagent
@@ -69,16 +64,12 @@ services:
69
64
  deploy:
70
65
  placement:
71
66
  constraints: [node.role == manager]
72
- networks:
73
- - monitoring-net
74
67
 
75
68
  pushgateway:
76
69
  image: prom/pushgateway
77
70
  deploy:
78
71
  placement:
79
72
  constraints: [node.role == manager]
80
- networks:
81
- - monitoring-net
82
73
 
83
74
  prometheus:
84
75
  image: prom/prometheus:v2.44.0
@@ -94,8 +85,6 @@ services:
94
85
  deploy:
95
86
  placement:
96
87
  constraints: [node.role == manager]
97
- networks:
98
- - monitoring-net
99
88
 
100
89
  node-exporter:
101
90
  image: prom/node-exporter:v1.7.0
@@ -116,9 +105,7 @@ services:
116
105
  mode: global
117
106
  placement:
118
107
  constraints: [node.role == worker]
119
- networks:
120
- - monitoring-net
121
-
108
+
122
109
  grafana:
123
110
  image: grafana/grafana:10.0.12
124
111
  environment:
@@ -127,16 +114,19 @@ services:
127
114
  GF_ALERTING_ENABLED: "true"
128
115
  GF_PATHS_PROVISIONING: "/etc/grafana/provisioning"
129
116
  GF_INSTALL_PLUGINS: "grafana-opensearch-datasource"
130
- GF_SERVER_ROOT_URL: "http://localhost/grafana/"
131
117
  volumes:
132
118
  - ./datasource.yml:/etc/grafana/provisioning/datasources/datasource.yaml
133
119
  - grafana_data:/var/lib/grafana
134
120
  - ./alerting:/etc/grafana/provisioning/alerting
121
+ restart: "always"
122
+ ports:
123
+ - target: 3000
124
+ published: 3000
125
+ protocol: tcp
126
+ mode: host
135
127
  deploy:
136
128
  placement:
137
129
  constraints: [node.role == manager]
138
- networks:
139
- - monitoring-net
140
130
 
141
131
  CleanupGraylog:
142
132
  image: $SIMPLYBLOCK_DOCKER_IMAGE
@@ -146,8 +136,8 @@ services:
146
136
  deploy:
147
137
  placement:
148
138
  constraints: [node.role == manager]
149
- networks:
150
- - monitoring-net
139
+
140
+ ### monitoring ###
151
141
 
152
142
  volumes:
153
143
  mongodb_data:
@@ -159,5 +149,6 @@ volumes:
159
149
  alertmanager_data:
160
150
 
161
151
  networks:
162
- monitoring-net:
152
+ hostnet:
163
153
  external: true
154
+ name: host
@@ -114,7 +114,6 @@ services:
114
114
  - 8404:8404
115
115
  networks:
116
116
  - localnet
117
- - monitoring-net
118
117
  volumes:
119
118
  - "$DIR/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg"
120
119
 
@@ -186,20 +185,9 @@ services:
186
185
  networks:
187
186
  - hostnet
188
187
 
189
- TasksRunnerRestart:
188
+ TasksRunner:
190
189
  image: $SIMPLYBLOCK_DOCKER_IMAGE
191
- command: "python simplyblock_core/services/tasks_runner_restart.py"
192
- deploy:
193
- placement:
194
- constraints: [node.role == manager]
195
- volumes:
196
- - "/etc/foundationdb:/etc/foundationdb"
197
- networks:
198
- - hostnet
199
-
200
- TasksRunnerMigration:
201
- image: $SIMPLYBLOCK_DOCKER_IMAGE
202
- command: "python simplyblock_core/services/tasks_runner_migration.py"
190
+ command: "python simplyblock_core/services/job_tasks.py"
203
191
  deploy:
204
192
  placement:
205
193
  constraints: [node.role == manager]
@@ -212,9 +200,6 @@ volumes:
212
200
  os_data:
213
201
 
214
202
  networks:
215
- monitoring-net:
216
- external: true
217
-
218
203
  hostnet:
219
204
  external: true
220
205
  name: host
@@ -42,16 +42,6 @@ backend wep_api_services
42
42
  balance roundrobin
43
43
  server-template webapi- 3 WebAppAPI:5000 check resolvers docker init-addr libc,none
44
44
 
45
- backend grafana_services
46
- balance roundrobin
47
- http-request set-path %[path,regsub(^/grafana/?,/)]
48
- server-template grafana- 1 grafana:3000 check resolvers docker init-addr libc,none
49
-
50
- backend graylog_services
51
- balance roundrobin
52
- http-request set-path %[path,regsub(^/graylog/?,/)]
53
- server-template graylog- 1 graylog:9000 check resolvers docker init-addr libc,none
54
-
55
45
  frontend stats_front
56
46
  bind *:8404
57
47
  stats enable
@@ -62,9 +52,4 @@ frontend stats_front
62
52
 
63
53
  frontend web_api_front
64
54
  bind *:80
65
-
66
- use_backend grafana_services if { path /grafana } || { path_beg /grafana/ }
67
- use_backend graylog_services if { path /graylog } || { path_beg /graylog/ }
68
-
69
55
  default_backend wep_api_services
70
-
@@ -29,7 +29,6 @@ sudo sed -i 's/#X11UseLocalhost yes/X11UseLocalhost no/g' /etc/ssh/sshd_config
29
29
 
30
30
  sudo service sshd restart
31
31
  sudo modprobe nvme-tcp
32
- sudo modprobe nbd
33
32
 
34
33
  sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
35
34
 
@@ -193,7 +193,7 @@ while True:
193
193
  logger.info(f"Device is skipped: {device.get_id()} status: {device.status}")
194
194
  continue
195
195
  capacity_dict = rpc_client.alceml_get_capacity(device.alceml_bdev)
196
- stats_dict = rpc_client.get_device_stats(device.nvme_bdev)
196
+ stats_dict = rpc_client.get_device_stats(device.alloc_bdev)
197
197
  record = add_device_stats(cl, device, capacity_dict, stats_dict)
198
198
  if record:
199
199
  devices_records.append(record)
@@ -5,7 +5,7 @@ import sys
5
5
  import uuid
6
6
 
7
7
  from simplyblock_core import constants, kv_store
8
- from simplyblock_core.controllers import tasks_controller
8
+ from simplyblock_core.models.job_schedule import JobSchedule
9
9
  from simplyblock_core.models.nvme_device import NVMeDevice
10
10
  from simplyblock_core.models.storage_node import StorageNode
11
11
 
@@ -27,6 +27,47 @@ db_store = kv_store.KVStore()
27
27
  db_controller = kv_store.DBController()
28
28
 
29
29
 
30
+ def add_device_to_auto_restart(device):
31
+ tasks = db_controller.get_job_tasks(device.cluster_id)
32
+ for task in tasks:
33
+ if task.device_id == device.get_id():
34
+ if task.status != JobSchedule.STATUS_DONE:
35
+ logger.info(f"Task found, skip adding new task: {task.get_id()}")
36
+ return
37
+
38
+ ds = JobSchedule()
39
+ ds.uuid = str(uuid.uuid4())
40
+ ds.cluster_id = device.cluster_id
41
+ ds.node_id = device.node_id
42
+ ds.device_id = device.get_id()
43
+ ds.date = int(time.time())
44
+ ds.function_name = "device_restart"
45
+ ds.status = 'new'
46
+
47
+ ds.write_to_db(db_store)
48
+ return ds.get_id()
49
+
50
+
51
+ def add_node_to_auto_restart(node):
52
+ tasks = db_controller.get_job_tasks(node.cluster_id)
53
+ for task in tasks:
54
+ if task.node_id == node.get_id():
55
+ if task.status != JobSchedule.STATUS_DONE:
56
+ logger.info(f"Task found, skip adding new task: {task.get_id()}")
57
+ return
58
+
59
+ ds = JobSchedule()
60
+ ds.uuid = str(uuid.uuid4())
61
+ ds.cluster_id = node.cluster_id
62
+ ds.node_id = node.get_id()
63
+ ds.date = int(time.time())
64
+ ds.function_name = "node_restart"
65
+ ds.status = 'new'
66
+
67
+ ds.write_to_db(db_store)
68
+ return ds.get_id()
69
+
70
+
30
71
  logger.info("Starting Device monitor...")
31
72
  while True:
32
73
  nodes = db_controller.get_storage_nodes()
@@ -48,9 +89,9 @@ while True:
48
89
  logger.info("Adding device to auto restart")
49
90
  auto_restart_devices.append(dev)
50
91
 
51
- if len(auto_restart_devices) >= 2 or len(online_devices) == 0:
52
- tasks_controller.add_node_to_auto_restart(node)
53
- elif len(auto_restart_devices) == 1:
54
- tasks_controller.add_device_to_auto_restart(auto_restart_devices[0])
92
+ if len(auto_restart_devices) == 1:
93
+ add_device_to_auto_restart(auto_restart_devices[0])
94
+ elif len(auto_restart_devices) >= 2 and len(online_devices) == 0:
95
+ add_node_to_auto_restart(node)
55
96
 
56
97
  time.sleep(constants.DEV_MONITOR_INTERVAL_SEC)
@@ -88,7 +88,7 @@ def process_lvol_event(event):
88
88
  if event.message in ["error_open", 'error_read', "error_write", "error_unmap"]:
89
89
  vuid = event.object_dict['vuid']
90
90
  lvol = None
91
- for lv in db_controller.get_lvols(): # pass
91
+ for lv in db_controller.get_lvols():
92
92
  if lv.vuid == vuid:
93
93
  lvol = lv
94
94
  break
@@ -127,6 +127,7 @@ def process_event(event_id):
127
127
 
128
128
  hostname = utils.get_hostname()
129
129
  logger.info("Starting Distr event collector...")
130
+ logger.info(f"Node:{hostname}")
130
131
  while True:
131
132
  time.sleep(constants.DISTR_EVENT_COLLECTOR_INTERVAL_SEC)
132
133
 
@@ -140,13 +141,14 @@ while True:
140
141
  snode.rpc_port,
141
142
  snode.rpc_username,
142
143
  snode.rpc_password,
143
- timeout=10, retry=2)
144
-
144
+ timeout=3, retry=2
145
+ )
146
+ num_of_events = constants.DISTR_EVENT_COLLECTOR_NUM_OF_EVENTS
145
147
  try:
146
- events = client.distr_status_events_discard_then_get(0, constants.DISTR_EVENT_COLLECTOR_NUM_OF_EVENTS)
147
-
148
+ # events = client.distr_status_events_get()
149
+ events = client.distr_status_events_discard_then_get(0, num_of_events)
148
150
  if not events:
149
- logger.debug("no events found")
151
+ logger.error("Distr events empty")
150
152
  continue
151
153
 
152
154
  logger.info(f"Found events: {len(events)}")
@@ -159,11 +161,10 @@ while True:
159
161
  for eid in event_ids:
160
162
  logger.info(f"Processing event: {eid}")
161
163
  process_event(eid)
162
-
163
- logger.info(f"Discarding events: {len(events)}")
164
- client.distr_status_events_discard_then_get(len(events), 0)
164
+ logger.info(f"Discarding events: {num_of_events}")
165
+ events = client.distr_status_events_discard_then_get(num_of_events, 0)
165
166
 
166
167
  except Exception as e:
167
- logger.error("Failed to process distr events")
168
+ logger.error("Failed to get distr events")
168
169
  logger.exception(e)
169
170
  continue