8
8
"log"
9
9
"os/exec"
10
10
"regexp"
11
+ "strconv"
11
12
"strings"
12
13
"time"
13
14
@@ -178,13 +179,11 @@ func (middleware *Middleware) updateCheckLoop() {
178
179
}
179
180
}
180
181
181
- // hsmHeartbeatLoop
182
182
func (middleware * Middleware ) hsmHeartbeatLoop () {
183
183
for {
184
- // TODO(@0xB10C) fetch the `stateCode` and `descriptionCode` from redis keys set byt the supervisor
185
- err := middleware .hsmFirmware .BitBoxBaseHeartbeat (messages .BitBoxBaseHeartbeatRequest_IDLE , messages .BitBoxBaseHeartbeatRequest_EMPTY )
184
+ err := middleware .hsmHeartbeat ()
186
185
if err != nil {
187
- log .Printf ("Received an error from the HSM: %s\n " , err )
186
+ log .Printf ("Warning while sending a HSM heartbeat : %s\n " , err )
188
187
time .Sleep (time .Second )
189
188
continue
190
189
}
@@ -193,6 +192,36 @@ func (middleware *Middleware) hsmHeartbeatLoop() {
193
192
}
194
193
}
195
194
195
+ func (middleware * Middleware ) hsmHeartbeat () error {
196
+ stateCode , err := middleware .redisClient .GetInt (redis .BaseStateCode )
197
+ if err != nil {
198
+ err = middleware .hsmFirmware .BitBoxBaseHeartbeat (messages .BitBoxBaseHeartbeatRequest_ERROR , messages .BitBoxBaseHeartbeatRequest_REDIS_ERROR )
199
+ if err != nil {
200
+ return fmt .Errorf ("could not get the stateCode from Redis: %s" , err )
201
+ }
202
+ }
203
+
204
+ descriptionCodeString , err := middleware .redisClient .GetTopFromSortedSet (redis .BaseDescriptionCode )
205
+ if err != nil {
206
+ err = middleware .hsmFirmware .BitBoxBaseHeartbeat (messages .BitBoxBaseHeartbeatRequest_ERROR , messages .BitBoxBaseHeartbeatRequest_REDIS_ERROR )
207
+ if err != nil {
208
+ return fmt .Errorf ("could not get the hightest priority descriptionCode from Redis: %s" , err )
209
+ }
210
+ }
211
+
212
+ descriptionCode , err := strconv .Atoi (descriptionCodeString )
213
+ if err != nil {
214
+ return fmt .Errorf ("could not convert the descriptionCode from Redis %q to a string: %s" , descriptionCodeString , err )
215
+ }
216
+
217
+ err = middleware .hsmFirmware .BitBoxBaseHeartbeat (messages .BitBoxBaseHeartbeatRequest_StateCode (stateCode ), messages .BitBoxBaseHeartbeatRequest_DescriptionCode (descriptionCode ))
218
+ if err != nil {
219
+ return fmt .Errorf ("received an error from the HSM: %w" , err )
220
+ }
221
+
222
+ return nil
223
+ }
224
+
196
225
// Start gives a trigger for the handler to start the rpc event loop
197
226
func (middleware * Middleware ) Start () <- chan handlers.Event {
198
227
if middleware .hsmFirmware != nil {
0 commit comments