6
6
#
7
7
8
8
try :
9
- import argparse
10
9
import os
11
10
import sys
11
+ import argparse
12
+ import psutil
13
+ from blkinfo import BlkDiskInfo
12
14
13
15
from sonic_py_common import device_info , logger
14
16
except ImportError as e :
15
17
raise ImportError ("%s - required module not found" % str (e ))
16
18
17
- DEFAULT_DEVICE = "/dev/sda"
19
+ DEFAULT_DEVICE = "/dev/sda"
18
20
SYSLOG_IDENTIFIER = "ssdutil"
21
+ DISK_TYPE_SSD = "sata"
19
22
20
23
# Global logger instance
21
24
log = logger .Logger (SYSLOG_IDENTIFIER )
22
25
23
26
27
+ def get_default_disk ():
28
+ """Check default disk"""
29
+ default_device = DEFAULT_DEVICE
30
+ host_mnt = '/host'
31
+ host_partition = None
32
+ partitions = psutil .disk_partitions ()
33
+
34
+ if partitions is None :
35
+ return (default_device , None )
36
+
37
+ for parts in partitions :
38
+ if parts .mountpoint == host_mnt :
39
+ host_partition = parts
40
+ break
41
+
42
+ disk_major = os .major (os .stat (host_partition .device ).st_rdev )
43
+ filters = {
44
+ 'maj:min' : '{}:0' .format (disk_major )
45
+ }
46
+
47
+ myblkd = BlkDiskInfo ()
48
+ my_filtered_disks = myblkd .get_disks (filters )
49
+
50
+ if my_filtered_disks is None :
51
+ return (default_device , None )
52
+
53
+ json_output = my_filtered_disks [0 ]
54
+ blkdev = json_output ['name' ]
55
+ disk_type = json_output ['tran' ]
56
+ default_device = os .path .join ("/dev/" , blkdev )
57
+
58
+ # Disk Type Support for eMMC devices
59
+ disk_type = 'eMMC' if len (disk_type ) == 0 and 'mmcblk' in host_partition .device else disk_type # noqa: E501
60
+
61
+ return default_device , disk_type
62
+
63
+
24
64
def import_ssd_api (diskdev ):
25
65
"""
26
66
Loads platform specific or generic ssd_util module from source
@@ -37,44 +77,49 @@ def import_ssd_api(diskdev):
37
77
sys .path .append (os .path .abspath (platform_plugins_path ))
38
78
from ssd_util import SsdUtil
39
79
except ImportError as e :
40
- log .log_warning ("Platform specific SsdUtil module not found. Falling down to the generic implementation" )
80
+ log .log_warning ("Platform specific SsdUtil module not found. Falling down to the generic implementation" ) # noqa: E501
41
81
try :
42
82
from sonic_platform_base .sonic_storage .ssd import SsdUtil
43
83
except ImportError as e :
44
- log .log_error ("Failed to import default SsdUtil. Error: {}" .format (str (e )), True )
84
+ log .log_error ("Failed to import default SsdUtil. Error: {}" .format (str (e )), True ) # noqa: E501
45
85
raise e
46
86
47
87
return SsdUtil (diskdev )
48
88
89
+
49
90
def is_number (s ):
50
91
try :
51
92
float (s )
52
93
return True
53
94
except ValueError :
54
95
return False
55
96
97
+
56
98
# ==================== Entry point ====================
57
99
def ssdutil ():
58
100
if os .geteuid () != 0 :
59
101
print ("Root privileges are required for this operation" )
60
102
sys .exit (1 )
61
103
62
104
parser = argparse .ArgumentParser ()
63
- parser .add_argument ("-d" , "--device" , help = "Device name to show health info" , default = DEFAULT_DEVICE )
64
- parser .add_argument ("-v" , "--verbose" , action = "store_true" , default = False , help = "Show verbose output (some additional parameters)" )
65
- parser .add_argument ("-e" , "--vendor" , action = "store_true" , default = False , help = "Show vendor output (extended output if provided by platform vendor)" )
105
+ (default_device , disk_type ) = get_default_disk ()
106
+ parser .add_argument ("-d" , "--device" , help = "Device name to show health info" , default = default_device ) # noqa: E501
107
+ parser .add_argument ("-v" , "--verbose" , action = "store_true" , default = False , help = "Show verbose output (some additional parameters)" ) # noqa: E501
108
+ parser .add_argument ("-e" , "--vendor" , action = "store_true" , default = False , help = "Show vendor output (extended output if provided by platform vendor)" ) # noqa: E501
66
109
args = parser .parse_args ()
67
110
111
+ print ("Disk Type : {0}" .format (disk_type .upper ()))
68
112
ssd = import_ssd_api (args .device )
69
113
70
114
print ("Device Model : {}" .format (ssd .get_model ()))
71
115
if args .verbose :
72
116
print ("Firmware : {}" .format (ssd .get_firmware ()))
73
117
print ("Serial : {}" .format (ssd .get_serial ()))
74
- print ("Health : {}{}" .format (ssd .get_health (), "%" if is_number (ssd .get_health ()) else "" ))
75
- print ("Temperature : {}{}" .format (ssd .get_temperature (), "C" if is_number (ssd .get_temperature ()) else "" ))
118
+ print ("Health : {}{}" .format (ssd .get_health (), "%" if is_number (ssd .get_health ()) else "" )) # noqa: E501
119
+ print ("Temperature : {}{}" .format (ssd .get_temperature (), "C" if is_number (ssd .get_temperature ()) else "" )) # noqa: E501
76
120
if args .vendor :
77
121
print (ssd .get_vendor_output ())
78
122
123
+
79
124
if __name__ == '__main__' :
80
125
ssdutil ()
0 commit comments