forked from cerc-io/plugeth
ethstats: use timer instead of time.sleep (#20924)
This commit is contained in:
parent
45b7535137
commit
39abd92ca8
@ -203,77 +203,86 @@ func (s *Service) loop() {
|
|||||||
if !strings.Contains(path, "://") {
|
if !strings.Contains(path, "://") {
|
||||||
urls = []string{"wss://" + path, "ws://" + path}
|
urls = []string{"wss://" + path, "ws://" + path}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
errTimer := time.NewTimer(0)
|
||||||
|
defer errTimer.Stop()
|
||||||
// Loop reporting until termination
|
// Loop reporting until termination
|
||||||
for {
|
for {
|
||||||
// Establish a websocket connection to the server on any supported URL
|
select {
|
||||||
var (
|
case <-quitCh:
|
||||||
conn *websocket.Conn
|
return
|
||||||
err error
|
case <-errTimer.C:
|
||||||
)
|
// Establish a websocket connection to the server on any supported URL
|
||||||
dialer := websocket.Dialer{HandshakeTimeout: 5 * time.Second}
|
var (
|
||||||
header := make(http.Header)
|
conn *websocket.Conn
|
||||||
header.Set("origin", "http://localhost")
|
err error
|
||||||
for _, url := range urls {
|
)
|
||||||
conn, _, err = dialer.Dial(url, header)
|
dialer := websocket.Dialer{HandshakeTimeout: 5 * time.Second}
|
||||||
if err == nil {
|
header := make(http.Header)
|
||||||
break
|
header.Set("origin", "http://localhost")
|
||||||
|
for _, url := range urls {
|
||||||
|
conn, _, err = dialer.Dial(url, header)
|
||||||
|
if err == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
if err != nil {
|
||||||
if err != nil {
|
log.Warn("Stats server unreachable", "err", err)
|
||||||
log.Warn("Stats server unreachable", "err", err)
|
errTimer.Reset(10 * time.Second)
|
||||||
time.Sleep(10 * time.Second)
|
continue
|
||||||
continue
|
}
|
||||||
}
|
// Authenticate the client with the server
|
||||||
// Authenticate the client with the server
|
if err = s.login(conn); err != nil {
|
||||||
if err = s.login(conn); err != nil {
|
log.Warn("Stats login failed", "err", err)
|
||||||
log.Warn("Stats login failed", "err", err)
|
|
||||||
conn.Close()
|
|
||||||
time.Sleep(10 * time.Second)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
go s.readLoop(conn)
|
|
||||||
|
|
||||||
// Send the initial stats so our node looks decent from the get go
|
|
||||||
if err = s.report(conn); err != nil {
|
|
||||||
log.Warn("Initial stats report failed", "err", err)
|
|
||||||
conn.Close()
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// Keep sending status updates until the connection breaks
|
|
||||||
fullReport := time.NewTicker(15 * time.Second)
|
|
||||||
|
|
||||||
for err == nil {
|
|
||||||
select {
|
|
||||||
case <-quitCh:
|
|
||||||
fullReport.Stop()
|
|
||||||
// Make sure the connection is closed
|
|
||||||
conn.Close()
|
conn.Close()
|
||||||
return
|
errTimer.Reset(10 * time.Second)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
go s.readLoop(conn)
|
||||||
|
|
||||||
case <-fullReport.C:
|
// Send the initial stats so our node looks decent from the get go
|
||||||
if err = s.report(conn); err != nil {
|
if err = s.report(conn); err != nil {
|
||||||
log.Warn("Full stats report failed", "err", err)
|
log.Warn("Initial stats report failed", "err", err)
|
||||||
}
|
conn.Close()
|
||||||
case list := <-s.histCh:
|
errTimer.Reset(0)
|
||||||
if err = s.reportHistory(conn, list); err != nil {
|
continue
|
||||||
log.Warn("Requested history report failed", "err", err)
|
}
|
||||||
}
|
// Keep sending status updates until the connection breaks
|
||||||
case head := <-headCh:
|
fullReport := time.NewTicker(15 * time.Second)
|
||||||
if err = s.reportBlock(conn, head); err != nil {
|
|
||||||
log.Warn("Block stats report failed", "err", err)
|
for err == nil {
|
||||||
}
|
select {
|
||||||
if err = s.reportPending(conn); err != nil {
|
case <-quitCh:
|
||||||
log.Warn("Post-block transaction stats report failed", "err", err)
|
fullReport.Stop()
|
||||||
}
|
// Make sure the connection is closed
|
||||||
case <-txCh:
|
conn.Close()
|
||||||
if err = s.reportPending(conn); err != nil {
|
return
|
||||||
log.Warn("Transaction stats report failed", "err", err)
|
|
||||||
|
case <-fullReport.C:
|
||||||
|
if err = s.report(conn); err != nil {
|
||||||
|
log.Warn("Full stats report failed", "err", err)
|
||||||
|
}
|
||||||
|
case list := <-s.histCh:
|
||||||
|
if err = s.reportHistory(conn, list); err != nil {
|
||||||
|
log.Warn("Requested history report failed", "err", err)
|
||||||
|
}
|
||||||
|
case head := <-headCh:
|
||||||
|
if err = s.reportBlock(conn, head); err != nil {
|
||||||
|
log.Warn("Block stats report failed", "err", err)
|
||||||
|
}
|
||||||
|
if err = s.reportPending(conn); err != nil {
|
||||||
|
log.Warn("Post-block transaction stats report failed", "err", err)
|
||||||
|
}
|
||||||
|
case <-txCh:
|
||||||
|
if err = s.reportPending(conn); err != nil {
|
||||||
|
log.Warn("Transaction stats report failed", "err", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fullReport.Stop()
|
||||||
|
// Make sure the connection is closed
|
||||||
|
conn.Close()
|
||||||
}
|
}
|
||||||
fullReport.Stop()
|
|
||||||
// Make sure the connection is closed
|
|
||||||
conn.Close()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user