Skip to content

Commit d50e119

Browse files
committed
feat: add isWarmingUp to status response
1 parent 8beece5 commit d50e119

File tree

8 files changed

+85
-67
lines changed

8 files changed

+85
-67
lines changed

openapi/SwarmCommon.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -932,6 +932,8 @@ components:
932932
type: integer
933933
committedDepth:
934934
type: integer
935+
isWarmingUp:
936+
type: boolean
935937

936938
StatusPeersResponse:
937939
type: object

pkg/api/status.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ type statusSnapshotResponse struct {
3131
IsReachable bool `json:"isReachable"`
3232
LastSyncedBlock uint64 `json:"lastSyncedBlock"`
3333
CommittedDepth uint8 `json:"committedDepth"`
34+
IsWarmingUp bool `json:"isWarmingUp"`
3435
}
3536

3637
type statusResponse struct {
@@ -96,6 +97,7 @@ func (s *Service) statusGetHandler(w http.ResponseWriter, _ *http.Request) {
9697
IsReachable: ss.IsReachable,
9798
LastSyncedBlock: ss.LastSyncedBlock,
9899
CommittedDepth: uint8(ss.CommittedDepth),
100+
IsWarmingUp: ss.IsWarmingUp,
99101
})
100102
}
101103

pkg/api/status_test.go

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"context"
99
"net/http"
1010
"testing"
11+
"time"
1112

1213
"github.com/ethersphere/bee/v2/pkg/api"
1314
"github.com/ethersphere/bee/v2/pkg/jsonhttp"
@@ -41,6 +42,7 @@ func TestGetStatus(t *testing.T) {
4142
IsReachable: true,
4243
LastSyncedBlock: 6092500,
4344
CommittedDepth: 1,
45+
IsWarmingUp: true,
4446
}
4547

4648
ssMock := &statusSnapshotMock{
@@ -53,14 +55,7 @@ func TestGetStatus(t *testing.T) {
5355
committedDepth: ssr.CommittedDepth,
5456
}
5557

56-
statusSvc := status.NewService(
57-
log.Noop,
58-
nil,
59-
new(topologyPeersIterNoopMock),
60-
mode.String(),
61-
ssMock,
62-
ssMock,
63-
)
58+
statusSvc := status.NewService(log.Noop, nil, new(topologyPeersIterNoopMock), mode.String(), ssMock, ssMock, time.Second)
6459

6560
statusSvc.SetSync(ssMock)
6661

@@ -78,15 +73,8 @@ func TestGetStatus(t *testing.T) {
7873
t.Parallel()
7974

8075
client, _, _, _ := newTestServer(t, testServerOptions{
81-
BeeMode: api.DevMode,
82-
NodeStatus: status.NewService(
83-
log.Noop,
84-
nil,
85-
new(topologyPeersIterNoopMock),
86-
"",
87-
nil,
88-
nil,
89-
),
76+
BeeMode: api.DevMode,
77+
NodeStatus: status.NewService(log.Noop, nil, new(topologyPeersIterNoopMock), "", nil, nil, 0),
9078
})
9179

9280
jsonhttptest.Request(t, client, http.MethodGet, url, http.StatusBadRequest,

pkg/node/node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -912,7 +912,7 @@ func NewBee(
912912

913913
validStamp := postage.ValidStamp(batchStore)
914914

915-
nodeStatus := status.NewService(logger, p2ps, kad, beeNodeMode.String(), batchStore, localStore)
915+
nodeStatus := status.NewService(logger, p2ps, kad, beeNodeMode.String(), batchStore, localStore, warmupTime)
916916
if err = p2ps.AddProtocol(nodeStatus.Protocol()); err != nil {
917917
return nil, fmt.Errorf("status service: %w", err)
918918
}

pkg/status/internal/pb/status.pb.go

Lines changed: 64 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/status/internal/pb/status.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ message Snapshot {
2626
uint64 ReserveSizeWithinRadius = 9;
2727
uint64 LastSyncedBlock = 10;
2828
uint32 CommittedDepth = 11;
29+
bool IsWarmingUp = 12;
2930
}

pkg/status/status.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package status
77
import (
88
"context"
99
"fmt"
10+
"time"
1011

1112
"github.com/ethersphere/bee/v2/pkg/log"
1213
"github.com/ethersphere/bee/v2/pkg/p2p"
@@ -22,7 +23,7 @@ const loggerName = "status"
2223

2324
const (
2425
protocolName = "status"
25-
protocolVersion = "1.1.2"
26+
protocolVersion = "1.1.3"
2627
streamName = "status"
2728
)
2829

@@ -57,24 +58,19 @@ type Service struct {
5758
reserve Reserve
5859
sync SyncReporter
5960
chainState postage.ChainStateGetter
61+
warmupTime time.Time
6062
}
6163

6264
// NewService creates a new status service.
63-
func NewService(
64-
logger log.Logger,
65-
streamer p2p.Streamer,
66-
topology topologyDriver,
67-
beeMode string,
68-
chainState postage.ChainStateGetter,
69-
reserve Reserve,
70-
) *Service {
65+
func NewService(logger log.Logger, streamer p2p.Streamer, topology topologyDriver, beeMode string, chainState postage.ChainStateGetter, reserve Reserve, warmupDur time.Duration) *Service {
7166
return &Service{
7267
logger: logger.WithName(loggerName).Register(),
7368
streamer: streamer,
7469
topologyDriver: topology,
7570
beeMode: beeMode,
7671
chainState: chainState,
7772
reserve: reserve,
73+
warmupTime: time.Now().Add(warmupDur),
7874
}
7975
}
8076

@@ -132,6 +128,7 @@ func (s *Service) LocalSnapshot() (*Snapshot, error) {
132128
IsReachable: s.topologyDriver.IsReachable(),
133129
LastSyncedBlock: s.chainState.GetChainState().Block,
134130
CommittedDepth: uint32(committedDepth),
131+
IsWarmingUp: time.Now().Before(s.warmupTime),
135132
}, nil
136133
}
137134

pkg/status/status_test.go

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,13 @@ func TestStatus(t *testing.T) {
4040

4141
peersIterMock := new(topologyPeersIterNoopMock)
4242

43-
peer1 := status.NewService(
44-
log.Noop,
45-
nil,
46-
peersIterMock,
47-
want.BeeMode,
48-
sssMock,
49-
sssMock,
50-
)
43+
peer1 := status.NewService(log.Noop, nil, peersIterMock, want.BeeMode, sssMock, sssMock, 0)
5144

5245
peer1.SetSync(sssMock)
5346

5447
recorder := streamtest.New(streamtest.WithProtocols(peer1.Protocol()))
5548

56-
peer2 := status.NewService(log.Noop, recorder, peersIterMock, "", nil, nil)
49+
peer2 := status.NewService(log.Noop, recorder, peersIterMock, "", nil, nil, 0)
5750

5851
address := swarm.MustParseHexAddress("ca1e9f3938cc1425c6061b96ad9eb93e134dfe8734ad490164ef20af9d1cf59c")
5952

@@ -120,18 +113,11 @@ func TestStatusLightNode(t *testing.T) {
120113

121114
peersIterMock := new(topologyPeersIterNoopMock)
122115

123-
peer1 := status.NewService(
124-
log.Noop,
125-
nil,
126-
peersIterMock,
127-
want.BeeMode,
128-
sssMock,
129-
nil,
130-
)
116+
peer1 := status.NewService(log.Noop, nil, peersIterMock, want.BeeMode, sssMock, nil, 0)
131117

132118
recorder := streamtest.New(streamtest.WithProtocols(peer1.Protocol()))
133119

134-
peer2 := status.NewService(log.Noop, recorder, peersIterMock, "", nil, nil)
120+
peer2 := status.NewService(log.Noop, recorder, peersIterMock, "", nil, nil, 0)
135121

136122
address := swarm.MustParseHexAddress("ca1e9f3938cc1425c6061b96ad9eb93e134dfe8734ad490164ef20af9d1cf59c")
137123

0 commit comments

Comments
 (0)