Skip to content
This repository was archived by the owner on Feb 25, 2023. It is now read-only.

Commit 4c6c9f9

Browse files
authored
Merge pull request #300 from 0xB10C/2019-12-state-codes-part1
Add state and description codes: Part 1 This PR adds the foundation and groundwork for the state and description codes. The handling by the Supervisor and the Middleware will come in part 2.
2 parents 2c0b789 + 71c173f commit 4c6c9f9

13 files changed

Lines changed: 200 additions & 105 deletions

File tree

armbian/base/config/redis/factorysettings.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ SET base:hostname bitbox-base
1313
SET base:update:allow-unsigned 0
1414
SET base:updating 0
1515
SET base:setup 0
16+
ZADD base:descriptionCode 0 0
17+
SET base:stateCode 0
1618

1719
SET middleware:passwordSetup 0
1820
SET middleware:datadir /data/bbbmiddleware

middleware/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.13
44

55
require (
66
github.com/dgrijalva/jwt-go v3.2.0+incompatible
7-
github.com/digitalbitbox/bitbox02-api-go v0.0.0-20191122093321-5bacb3c08094
7+
github.com/digitalbitbox/bitbox02-api-go v0.0.0-20191204135529-eb28ed7e9cbd
88
github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6
99
github.com/gomodule/redigo v2.0.0+incompatible
1010
github.com/gorilla/mux v1.7.3

middleware/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
1818
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1919
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
2020
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
21-
github.com/digitalbitbox/bitbox02-api-go v0.0.0-20191122093321-5bacb3c08094 h1:jcYoFlcJJQWJENsG2HPNEnp0jNx8H2pmvIv3oa9qLyE=
22-
github.com/digitalbitbox/bitbox02-api-go v0.0.0-20191122093321-5bacb3c08094/go.mod h1:yMwrh5lnSF+UDy+PLdCySxWHZubd2Tk/t2EQ1++4mgA=
21+
github.com/digitalbitbox/bitbox02-api-go v0.0.0-20191204135529-eb28ed7e9cbd h1:K29fNVgdarWFPuhnR05ZdZYuNeMe63Ym/18nJQohwsU=
22+
github.com/digitalbitbox/bitbox02-api-go v0.0.0-20191204135529-eb28ed7e9cbd/go.mod h1:yMwrh5lnSF+UDy+PLdCySxWHZubd2Tk/t2EQ1++4mgA=
2323
github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6 h1:u/UEqS66A5ckRmS4yNpjmVH56sVtS/RfclBAYocb4as=
2424
github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:1i71OnUq3iUe1ma7Lr6yG6/rjvM3emb6yoL7xLFzcVQ=
2525
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=

middleware/src/logtags/logtags.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package logtags
2+
3+
// These LogTags are shared logtags between the Middleware and the Supervisor.
4+
// The supervisor watches these and triggers the corresponding handler.
5+
const (
6+
// LogTagMWUpdateStart is logged by the middleware when the update progress
7+
// is started. This triggers the Supervisor to set the
8+
// `BitBoxBaseHeartbeatRequest_DOWNLOAD_UPDATE` descriptionCode to active and
9+
// sets the `BitBoxBaseHeartbeatRequest_UPDATE_FAILED` descriptionCode to
10+
// inactive.
11+
LogTagMWUpdateStart string = "LogTag:Middleware:Base_Image_Update_Start"
12+
13+
// LogTagMWUpdateSuccess is logged by the middleware when the update progress
14+
// ends with the success case. This triggers the supervisor to set the
15+
// `BitBoxBaseHeartbeatRequest_DOWNLOAD_UPDATE` descriptionCode to inactive.
16+
LogTagMWUpdateSuccess string = "LogTag:Middleware:Base_Image_Update_Success"
17+
18+
// LogTagMWUpdateFailure is logged by the middleware when the update progress
19+
// ends with the success case. This triggers the supervisor to set the
20+
// `BitBoxBaseHeartbeatRequest_DOWNLOAD_UPDATE` descriptionCode to inactive
21+
// and sets the `BitBoxBaseHeartbeatRequest_UPDATE_FAILED` descriptionCode to
22+
// active.
23+
LogTagMWUpdateFailure string = "LogTag:Middleware:Base_Image_Update_Failure"
24+
25+
// LogTagMWReboot is logged by the middleware when a Base reboot is started
26+
// via RPC. This triggers the supervisor to set the descriptionCode
27+
// `BitBoxBaseHeartbeatRequest_REBOOT` to active. This descriptionCode is
28+
// reset on every start of the Supervisor.
29+
LogTagMWReboot string = "LogTag:Middleware:Base_Reboot"
30+
31+
// LogTagMWShutdown is logged by the middleware when a Base shutdown is
32+
// started via RPC. This triggers the supervisor to set the descriptionCode
33+
// `BitBoxBaseHeartbeatRequest_SHUTDOWN` to active. This descriptionCode is
34+
// reset on every start of the Supervisor.
35+
LogTagMWShutdown string = "LogTag:Middleware:Base_Shutdown"
36+
)

middleware/src/redis/keys.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ const (
1919
MiddlewareAuth BaseRedisKey = "middleware:auth"
2020
BaseSetupDone BaseRedisKey = "base:setup"
2121
BaseSSHDPasswordLogin BaseRedisKey = "base:sshd:passwordlogin"
22+
BitcoindIBDClearnet BaseRedisKey = "bitcoind:ibd-clearnet"
2223
)

middleware/src/redis/redis.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Package redis implements a communication interface with the redis server
2+
// running on the BitBoxBase.
13
package redis
24

35
import (
@@ -15,6 +17,9 @@ type Redis interface {
1517
GetInt(BaseRedisKey) (int, error)
1618
GetString(BaseRedisKey) (string, error)
1719
SetString(BaseRedisKey, string) error
20+
AddToSortedSet(BaseRedisKey, int, string) error
21+
RemoveFromSortedSet(BaseRedisKey, string) error
22+
GetTopFromSortedSet(BaseRedisKey) (string, error)
1823
}
1924

2025
// Client is a redis client
@@ -111,6 +116,47 @@ func (c Client) SetString(key BaseRedisKey, value string) error {
111116
return nil
112117
}
113118

119+
// AddToSortedSet adds a element to a redis sorted set. The interger score
120+
// defines the position in the sorted set.
121+
//
122+
// Note: Redis supports double precision for scores, but that's not implemented
123+
// here yet. Additionally Redis supports multiple insertions in one call. That's
124+
// not implemented here either.
125+
func (c Client) AddToSortedSet(key BaseRedisKey, score int, element string) error {
126+
conn := c.getConnection()
127+
_, err := conn.Do("ZADD", key, score, element)
128+
if err != nil {
129+
return fmt.Errorf("could not ZADD key %s: %w", key, err)
130+
}
131+
return nil
132+
}
133+
134+
// RemoveFromSortedSet removes an element from a Redis sorted set if present.
135+
func (c Client) RemoveFromSortedSet(key BaseRedisKey, element string) error {
136+
conn := c.getConnection()
137+
_, err := conn.Do("ZREM", key, element)
138+
if err != nil {
139+
return fmt.Errorf("could not ZREM key %s element %s: %w", key, element, err)
140+
}
141+
return nil
142+
}
143+
144+
// GetTopFromSortedSet gets the element with the hightest score from a Redis
145+
// sorted set.
146+
func (c Client) GetTopFromSortedSet(key BaseRedisKey) (string, error) {
147+
conn := c.getConnection()
148+
elements, err := redis.Strings(conn.Do("ZREVRANGE", key, 0, 0))
149+
if err != nil {
150+
return "", fmt.Errorf("could not ZREVRANGE key %s: %w", key, err)
151+
}
152+
// The redis call should only ever return one element for `ZREVRANGE <key> 0 0`
153+
if len(elements) != 1 {
154+
return "", fmt.Errorf("expected exactly one element, but got %d", len(elements))
155+
}
156+
157+
return elements[0], nil
158+
}
159+
114160
// ConvertErrorToErrorResponse converts an error returned by Redis to an ErrorResponse
115161
func (c Client) ConvertErrorToErrorResponse(err error) rpcmessages.ErrorResponse {
116162
return rpcmessages.ErrorResponse{

middleware/src/redis/redis_mock.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package redis
22

33
import (
4+
"log"
45
"strconv"
56

67
"github.com/digitalbitbox/bitbox-base/middleware/src/rpcmessages"
@@ -41,6 +42,24 @@ func (mc *MockClient) GetBool(key BaseRedisKey) (val bool, err error) {
4142
return valAsInt == 1, err
4243
}
4344

45+
// AddToSortedSet is a dummy that does nothing but printing the arguments.
46+
func (mc *MockClient) AddToSortedSet(key BaseRedisKey, score int, element string) error {
47+
log.Printf("AddToSortedSet dummy: key %q, score %q, element %q", key, score, element)
48+
return nil
49+
}
50+
51+
// RemoveFromSortedSet is a dummy that does nothing but printing the arguments.
52+
func (mc *MockClient) RemoveFromSortedSet(key BaseRedisKey, element string) error {
53+
log.Printf("RemoveFromSortedSet dummy: key %q, element %q", key, element)
54+
return nil
55+
}
56+
57+
// GetTopFromSortedSet is a dummy that does nothing but printing the arguments.
58+
func (mc *MockClient) GetTopFromSortedSet(key BaseRedisKey) (string, error) {
59+
log.Printf("GetTopFromSortedSet dummy: key %q", key)
60+
return "dummy mock", nil
61+
}
62+
4463
// GetString gets an string for a given key.
4564
func (mc *MockClient) GetString(key BaseRedisKey) (val string, err error) {
4665
return mc.mockRedisMap[string(key)], nil

tools/bbbsupervisor/go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/digitalbitbox/bitbox-base/tools/bbbsupervisor
33
go 1.13
44

55
require (
6-
github.com/gomodule/redigo v2.0.0+incompatible
7-
github.com/stretchr/testify v1.4.0 // indirect
8-
github.com/tidwall/gjson v1.3.2
6+
github.com/digitalbitbox/bitbox-base/middleware v0.0.0-20191204153728-1128dd782517
7+
github.com/digitalbitbox/bitbox02-api-go v0.0.0-20191204135529-eb28ed7e9cbd
8+
github.com/tidwall/gjson v1.3.4
99
)

tools/bbbsupervisor/go.sum

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,71 @@
1+
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
2+
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
3+
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
4+
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
5+
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
6+
github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
7+
github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
8+
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
9+
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
10+
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
111
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
212
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
13+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
14+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
15+
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
16+
github.com/digitalbitbox/bitbox-base/middleware v0.0.0-20191204153728-1128dd782517 h1:b34ka1KKniF6hzIW+5n7sDfBhEfzzAZAiE6srtmSnDM=
17+
github.com/digitalbitbox/bitbox-base/middleware v0.0.0-20191204153728-1128dd782517/go.mod h1:UidGto4vnuuvotQdGoNHY5ipVmDWHkbnkaAo3Q5qTPw=
18+
github.com/digitalbitbox/bitbox02-api-go v0.0.0-20191204135529-eb28ed7e9cbd h1:K29fNVgdarWFPuhnR05ZdZYuNeMe63Ym/18nJQohwsU=
19+
github.com/digitalbitbox/bitbox02-api-go v0.0.0-20191204135529-eb28ed7e9cbd/go.mod h1:yMwrh5lnSF+UDy+PLdCySxWHZubd2Tk/t2EQ1++4mgA=
20+
github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:1i71OnUq3iUe1ma7Lr6yG6/rjvM3emb6yoL7xLFzcVQ=
21+
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
22+
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
23+
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
24+
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
325
github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
426
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
27+
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
28+
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
29+
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
30+
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
31+
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
32+
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
33+
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
34+
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
35+
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
36+
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
537
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
638
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
739
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
40+
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
41+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
842
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
943
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
10-
github.com/tidwall/gjson v1.3.2 h1:+7p3qQFaH3fOMXAJSrdZwGKcOO/lYdGS0HqGhPqDdTI=
11-
github.com/tidwall/gjson v1.3.2/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls=
44+
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
45+
github.com/tidwall/gjson v1.3.4 h1:On5waDnyKKk3SWE4EthbjjirAWXp43xx5cKCUZY1eZw=
46+
github.com/tidwall/gjson v1.3.4/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls=
1247
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
1348
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
1449
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
1550
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
51+
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
52+
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
53+
golang.org/x/crypto v0.0.0-20191117063200-497ca9f6d64f/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
54+
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
55+
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
56+
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
57+
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
58+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
59+
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
60+
golang.org/x/sys v0.0.0-20191104094858-e8c54fb511f6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
61+
golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
62+
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
1663
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
1764
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
65+
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
66+
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
67+
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
1868
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
1969
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
70+
gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c=
71+
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

tools/bbbsupervisor/redis/redis.go

Lines changed: 0 additions & 92 deletions
This file was deleted.

0 commit comments

Comments
 (0)