3
3
try :
4
4
import os
5
5
import sys
6
+ import time
6
7
7
8
sys .path .append (os .path .dirname (__file__ ))
8
9
@@ -18,6 +19,8 @@ class Psu(PsuBase):
18
19
def __init__ (self , index ):
19
20
PsuBase .__init__ (self )
20
21
self .__index = index
22
+ self .__info = None
23
+ self .__ts = 0
21
24
# STUB IMPLEMENTATION
22
25
self .color = ""
23
26
@@ -33,7 +36,16 @@ def __info_get(self):
33
36
def psu_info_get (client ):
34
37
return client .pltfm_mgr .pltfm_mgr_pwr_supply_info_get (self .__index )
35
38
36
- return thrift_try (psu_info_get )
39
+ # Update cache once per 2 seconds
40
+ if self .__ts + 2 < time .time ():
41
+ self .__info = None
42
+ try :
43
+ self .__info = thrift_try (psu_info_get , attempts = 1 )
44
+ finally :
45
+ self .__ts = time .time ()
46
+ return self .__info
47
+ return self .__info
48
+
37
49
38
50
@staticmethod
39
51
def get_num_psus ():
@@ -54,6 +66,8 @@ def get_powergood_status(self):
54
66
:return: Boolean, True if PSU is operating properly, False if PSU is faulty
55
67
"""
56
68
info = self .__info_get ()
69
+ if info is None :
70
+ return False
57
71
return info .ffault == False and info .vout != 0
58
72
59
73
def get_voltage (self ):
@@ -64,7 +78,8 @@ def get_voltage(self):
64
78
A float number, the output voltage in volts,
65
79
e.g. 12.1
66
80
"""
67
- return float (self .__info_get ().vout )
81
+ info = self .__info_get ()
82
+ return float (info .vout ) if info else 0
68
83
69
84
def get_current (self ):
70
85
"""
@@ -73,7 +88,8 @@ def get_current(self):
73
88
Returns:
74
89
A float number, the electric current in amperes, e.g 15.4
75
90
"""
76
- return self .__info_get ().iout / 1000.
91
+ info = self .__info_get ()
92
+ return info .iout / 1000 if info else 0
77
93
78
94
def get_power (self ):
79
95
"""
@@ -82,7 +98,8 @@ def get_power(self):
82
98
Returns:
83
99
A float number, the power in watts, e.g. 302.6
84
100
"""
85
- return self .__info_get ().pwr_out / 1000.
101
+ info = self .__info_get ()
102
+ return info .pwr_out / 1000 if info else 0
86
103
87
104
def get_presence (self ):
88
105
"""
@@ -94,8 +111,11 @@ def get_presence(self):
94
111
def psu_present_get (client ):
95
112
return client .pltfm_mgr .pltfm_mgr_pwr_supply_present_get (self .__index )
96
113
97
- status = thrift_try (psu_present_get )
98
- return status
114
+ status = False
115
+ try :
116
+ status = thrift_try (psu_present_get )
117
+ finally :
118
+ return status
99
119
100
120
def set_status_led (self , color ):
101
121
"""
@@ -130,7 +150,8 @@ def get_serial(self):
130
150
Returns:
131
151
string: Serial number of device
132
152
"""
133
- return self .__info_get ().serial
153
+ info = self .__info_get ()
154
+ return info .serial if info else "N/A"
134
155
135
156
def get_model (self ):
136
157
"""
@@ -139,7 +160,8 @@ def get_model(self):
139
160
Returns:
140
161
string: Model/part number of device
141
162
"""
142
- return self .__info_get ().model
163
+ info = self .__info_get ()
164
+ return info .model if info else "N/A"
143
165
144
166
def is_replaceable (self ):
145
167
"""
@@ -156,7 +178,8 @@ def get_revision(self):
156
178
Returns:
157
179
string: Revision value of device
158
180
"""
159
- return self .__info_get ().rev
181
+ info = self .__info_get ()
182
+ return info .rev if info else "N/A"
160
183
161
184
def get_status (self ):
162
185
"""
0 commit comments