From b51899ea5341a44d6638320a0438921e0fd8fc11 Mon Sep 17 00:00:00 2001 From: 0xb10c <0xb10c@gmail.com> Date: Tue, 3 Dec 2019 22:38:26 +0100 Subject: [PATCH] add: send description&stateCode from Redis to HSM --- middleware/src/middleware.go | 37 ++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/middleware/src/middleware.go b/middleware/src/middleware.go index 42a705e1..af2e5cec 100644 --- a/middleware/src/middleware.go +++ b/middleware/src/middleware.go @@ -8,6 +8,7 @@ import ( "log" "os/exec" "regexp" + "strconv" "strings" "time" @@ -178,13 +179,11 @@ func (middleware *Middleware) updateCheckLoop() { } } -// hsmHeartbeatLoop func (middleware *Middleware) hsmHeartbeatLoop() { for { - // TODO(@0xB10C) fetch the `stateCode` and `descriptionCode` from redis keys set byt the supervisor - err := middleware.hsmFirmware.BitBoxBaseHeartbeat(messages.BitBoxBaseHeartbeatRequest_IDLE, messages.BitBoxBaseHeartbeatRequest_EMPTY) + err := middleware.hsmHeartbeat() if err != nil { - log.Printf("Received an error from the HSM: %s\n", err) + log.Printf("Warning while sending a HSM heartbeat: %s\n", err) time.Sleep(time.Second) continue } @@ -193,6 +192,36 @@ func (middleware *Middleware) hsmHeartbeatLoop() { } } +func (middleware *Middleware) hsmHeartbeat() error { + stateCode, err := middleware.redisClient.GetInt(redis.BaseStateCode) + if err != nil { + err = middleware.hsmFirmware.BitBoxBaseHeartbeat(messages.BitBoxBaseHeartbeatRequest_ERROR, messages.BitBoxBaseHeartbeatRequest_REDIS_ERROR) + if err != nil { + return fmt.Errorf("could not get the stateCode from Redis: %s", err) + } + } + + descriptionCodeString, err := middleware.redisClient.GetTopFromSortedSet(redis.BaseDescriptionCode) + if err != nil { + err = middleware.hsmFirmware.BitBoxBaseHeartbeat(messages.BitBoxBaseHeartbeatRequest_ERROR, messages.BitBoxBaseHeartbeatRequest_REDIS_ERROR) + if err != nil { + return fmt.Errorf("could not get the hightest priority descriptionCode from Redis: %s", err) + } + } + + descriptionCode, err := strconv.Atoi(descriptionCodeString) + if err != nil { + return fmt.Errorf("could not convert the descriptionCode from Redis %q to a string: %s", descriptionCodeString, err) + } + + err = middleware.hsmFirmware.BitBoxBaseHeartbeat(messages.BitBoxBaseHeartbeatRequest_StateCode(stateCode), messages.BitBoxBaseHeartbeatRequest_DescriptionCode(descriptionCode)) + if err != nil { + return fmt.Errorf("received an error from the HSM: %w", err) + } + + return nil +} + // Start gives a trigger for the handler to start the rpc event loop func (middleware *Middleware) Start() <-chan handlers.Event { if middleware.hsmFirmware != nil {