Skip to content

Commit b37f657

Browse files
Andriy KokhanYour Name
Andriy Kokhan
authored and
Your Name
committed
Added BFN PSU cache (#9)
Signed-off-by: Andriy Kokhan <[email protected]>
1 parent d2cfec7 commit b37f657

File tree

1 file changed

+32
-9
lines changed
  • platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform

1 file changed

+32
-9
lines changed

platform/barefoot/sonic-platform-modules-bfn-montara/sonic_platform/psu.py

+32-9
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
try:
44
import os
55
import sys
6+
import time
67

78
sys.path.append(os.path.dirname(__file__))
89

@@ -18,6 +19,8 @@ class Psu(PsuBase):
1819
def __init__(self, index):
1920
PsuBase.__init__(self)
2021
self.__index = index
22+
self.__info = None
23+
self.__ts = 0
2124
# STUB IMPLEMENTATION
2225
self.color = ""
2326

@@ -33,7 +36,16 @@ def __info_get(self):
3336
def psu_info_get(client):
3437
return client.pltfm_mgr.pltfm_mgr_pwr_supply_info_get(self.__index)
3538

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+
3749

3850
@staticmethod
3951
def get_num_psus():
@@ -54,6 +66,8 @@ def get_powergood_status(self):
5466
:return: Boolean, True if PSU is operating properly, False if PSU is faulty
5567
"""
5668
info = self.__info_get()
69+
if info is None:
70+
return False
5771
return info.ffault == False and info.vout != 0
5872

5973
def get_voltage(self):
@@ -64,7 +78,8 @@ def get_voltage(self):
6478
A float number, the output voltage in volts,
6579
e.g. 12.1
6680
"""
67-
return float(self.__info_get().vout)
81+
info = self.__info_get()
82+
return float(info.vout) if info else 0
6883

6984
def get_current(self):
7085
"""
@@ -73,7 +88,8 @@ def get_current(self):
7388
Returns:
7489
A float number, the electric current in amperes, e.g 15.4
7590
"""
76-
return self.__info_get().iout / 1000.
91+
info = self.__info_get()
92+
return info.iout / 1000 if info else 0
7793

7894
def get_power(self):
7995
"""
@@ -82,7 +98,8 @@ def get_power(self):
8298
Returns:
8399
A float number, the power in watts, e.g. 302.6
84100
"""
85-
return self.__info_get().pwr_out / 1000.
101+
info = self.__info_get()
102+
return info.pwr_out / 1000 if info else 0
86103

87104
def get_presence(self):
88105
"""
@@ -94,8 +111,11 @@ def get_presence(self):
94111
def psu_present_get(client):
95112
return client.pltfm_mgr.pltfm_mgr_pwr_supply_present_get(self.__index)
96113

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
99119

100120
def set_status_led(self, color):
101121
"""
@@ -130,7 +150,8 @@ def get_serial(self):
130150
Returns:
131151
string: Serial number of device
132152
"""
133-
return self.__info_get().serial
153+
info = self.__info_get()
154+
return info.serial if info else "N/A"
134155

135156
def get_model(self):
136157
"""
@@ -139,7 +160,8 @@ def get_model(self):
139160
Returns:
140161
string: Model/part number of device
141162
"""
142-
return self.__info_get().model
163+
info = self.__info_get()
164+
return info.model if info else "N/A"
143165

144166
def is_replaceable(self):
145167
"""
@@ -156,7 +178,8 @@ def get_revision(self):
156178
Returns:
157179
string: Revision value of device
158180
"""
159-
return self.__info_get().rev
181+
info = self.__info_get()
182+
return info.rev if info else "N/A"
160183

161184
def get_status(self):
162185
"""

0 commit comments

Comments
 (0)