dstool_cmd_pdisk_list.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import ydb.core.protos.blobstorage_config_pb2 as kikimr_bsconfig
  2. import ydb.apps.dstool.lib.common as common
  3. import ydb.apps.dstool.lib.table as table
  4. from google.protobuf import text_format
  5. description = 'List pdisks'
  6. def add_options(p):
  7. p.add_argument('--show-pdisk-usage', action='store_true', help='Show columns with PDisk usage')
  8. table.TableOutput([], col_units=[]).add_options(p)
  9. def do(args):
  10. base_config = common.fetch_base_config()
  11. node_to_fqdn = common.fetch_node_to_fqdn_map()
  12. all_columns = [
  13. 'NodeId:PDiskId',
  14. 'NodeId',
  15. 'PDiskId',
  16. 'ExpectedSerial',
  17. 'LastSeenSerial',
  18. 'FQDN',
  19. 'Path',
  20. 'Type',
  21. 'Status',
  22. 'DecommitStatus',
  23. 'Kind',
  24. 'BoxId',
  25. 'Guid',
  26. 'NumStaticSlots',
  27. 'ExpectedSlotCount',
  28. 'PDiskConfig',
  29. 'Usage',
  30. 'UsedSize',
  31. 'AvailableSize',
  32. 'TotalSize',
  33. 'MaxReadThroughput',
  34. 'MaxWriteThroughput',
  35. 'MaxIOPS',
  36. ]
  37. visible_columns = [
  38. 'NodeId:PDiskId',
  39. 'ExpectedSerial',
  40. 'FQDN',
  41. 'Path',
  42. 'Type',
  43. 'Status',
  44. 'DecommitStatus',
  45. ]
  46. col_units = {
  47. 'Usage': '%',
  48. 'UsedSize': 'bytes',
  49. 'AvailableSize': 'bytes',
  50. 'TotalSize': 'bytes'
  51. }
  52. right_align = {
  53. 'Usage',
  54. 'UsedSize',
  55. 'AvailableSize',
  56. 'TotalSize',
  57. }
  58. if args.show_pdisk_usage:
  59. visible_columns.extend(['Usage', 'UsedSize', 'AvailableSize', 'TotalSize'])
  60. table_output = table.TableOutput(
  61. all_columns,
  62. col_units=col_units,
  63. default_visible_columns=visible_columns,
  64. right_align=right_align)
  65. rows = []
  66. for pdisk in base_config.PDisk:
  67. row = {}
  68. row['ExpectedSerial'] = pdisk.ExpectedSerial
  69. row['LastSeenSerial'] = pdisk.LastSeenSerial
  70. row['NodeId:PDiskId'] = '[%u:%u]' % (pdisk.NodeId, pdisk.PDiskId)
  71. row['NodeId'] = pdisk.NodeId
  72. row['PDiskId'] = pdisk.PDiskId
  73. row['FQDN'] = node_to_fqdn[pdisk.NodeId]
  74. row['Path'] = pdisk.Path
  75. row['Status'] = kikimr_bsconfig.EDriveStatus.Name(pdisk.DriveStatus)
  76. row['DecommitStatus'] = kikimr_bsconfig.EDecommitStatus.Name(pdisk.DecommitStatus)
  77. row['Type'] = common.EPDiskType.Name(pdisk.Type)
  78. row['BoxId'] = pdisk.BoxId
  79. row['Kind'] = pdisk.Kind
  80. row['Guid'] = pdisk.Guid
  81. row['NumStaticSlots'] = pdisk.NumStaticSlots
  82. row['ExpectedSlotCount'] = pdisk.ExpectedSlotCount
  83. row['PDiskConfig'] = text_format.MessageToString(pdisk.PDiskConfig, as_one_line=True)
  84. row['AvailableSize'] = pdisk.PDiskMetrics.AvailableSize
  85. row['TotalSize'] = pdisk.PDiskMetrics.TotalSize
  86. row['UsedSize'] = pdisk.PDiskMetrics.TotalSize - pdisk.PDiskMetrics.AvailableSize
  87. row['Usage'] = row['UsedSize'] / pdisk.PDiskMetrics.TotalSize if pdisk.PDiskMetrics.TotalSize > 0 else 0.0
  88. row['MaxReadThroughput'] = pdisk.PDiskMetrics.MaxReadThroughput
  89. row['MaxWriteThroughput'] = pdisk.PDiskMetrics.MaxWriteThroughput
  90. row['MaxIOPS'] = pdisk.PDiskMetrics.MaxIOPS
  91. rows.append(row)
  92. table_output.dump(rows, args)