Skip to content

Commit f2fba67

Browse files
authored
miscellaneous cleanup (#110)
* miscellaneous cleanup * tmp * fix typo that inverts error-checking logic
1 parent 8141567 commit f2fba67

File tree

13 files changed

+89
-65
lines changed

13 files changed

+89
-65
lines changed

internal/analyzer/cmd.go

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

33
import (
4+
"fmt"
45
"log/slog"
56
"maps"
67
"math"
@@ -9,6 +10,7 @@ import (
910
"path/filepath"
1011
"slices"
1112
"sort"
13+
"strings"
1214
"sync"
1315
"time"
1416

@@ -50,9 +52,15 @@ var CMD = &cobra.Command{
5052
}
5153

5254
fileDirectory := configs.Values.Analyzer.LogFilesDirectory
53-
files, err := os.ReadDir(fileDirectory)
55+
filesAll, err := os.ReadDir(fileDirectory)
5456
if err != nil {
55-
return err
57+
return fmt.Errorf("could not read logs directory: %w", err)
58+
}
59+
files := make([]os.DirEntry, 0, len(filesAll))
60+
for _, file := range filesAll {
61+
if strings.HasSuffix(file.Name(), ".log") {
62+
files = append(files, file)
63+
}
5664
}
5765

5866
var (
@@ -102,8 +110,8 @@ var CMD = &cobra.Command{
102110
case <-progressTicker.C:
103111
slog.
104112
With("count", len(files)).
105-
With("filesSizeMB", math.Round(totalFileSizeMB)).
106-
Info("⏳⏳⏳ processing file(s)...")
113+
With("totalSizeMB", math.Round(totalFileSizeMB)).
114+
Info("⏳⏳⏳ still processing file(s)...")
107115
case peerRecord, isOpen := <-peerRecordsChan:
108116
if isOpen {
109117
peersReport.AddRecord(peerRecord)
@@ -283,7 +291,8 @@ func analyzeFile(
283291
peerRecordChan chan<- report.PeerRecord,
284292
clientRecordChan chan<- report.ClientRecord,
285293
operatorRecordChan chan<- map[uint32]report.OperatorRecord,
286-
errorChan chan<- error) {
294+
errorChan chan<- error,
295+
) {
287296
clientAnalyzer, err := client.New(filePath, time.Millisecond*800)
288297
if err != nil {
289298
errorChan <- err
@@ -319,19 +328,16 @@ func analyzeFile(
319328
return
320329
}
321330

322-
analyzerSvc, err := New(
331+
analyzerSvc := New(
323332
peersAnalyzer,
324333
consensusAnalyzer,
325334
operatorAnalyzer,
326335
clientAnalyzer,
327336
commitAnalyzer,
328337
prepareAnalyzer,
329338
configs.Values.Analyzer.Operators,
330-
configs.Values.Analyzer.Cluster)
331-
if err != nil {
332-
errorChan <- err
333-
return
334-
}
339+
configs.Values.Analyzer.Cluster,
340+
)
335341

336342
result, err := analyzerSvc.Start()
337343
if err != nil {

internal/analyzer/parser/client/service.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bufio"
55
"encoding/json"
66
"errors"
7+
"fmt"
78
"log/slog"
89
"os"
910
"strconv"
@@ -15,7 +16,8 @@ import (
1516
)
1617

1718
const (
18-
attestationMsg = "starting QBFT instance"
19+
attestationMsg = "starting QBFT instance"
20+
1921
nodesUnhealthyMsg = "ethereum node(s) are either out of sync or down. Ensure the nodes are healthy to resume."
2022
nodeUnhealthyMsg = "node is not healthy"
2123

@@ -66,19 +68,22 @@ func (s *Service) Analyze() (Stats, error) {
6668
stats = Stats{
6769
ConsensusClientResponseTimeDelayPercent: map[time.Duration]float32{
6870
s.delay: 0,
69-
}}
71+
},
72+
}
7073

7174
attestationEndpointResponseTimes []time.Duration
7275
attestationEndpointResponseTimeSum time.Duration
7376
attestationEndpointTotalDelayed = make(map[time.Duration]uint32)
7477
)
7578

79+
lineNumber := 0
7680
for scanner.Scan() {
7781
var entry clientLogEntry
7882
line := scanner.Text()
83+
lineNumber++
7984
err := json.Unmarshal([]byte(line), &entry)
8085
if err != nil {
81-
return stats, err
86+
return stats, fmt.Errorf("unmarshal log line %d (file = `%s`): `%s`, err: %w", lineNumber, s.logFile.Name(), line, err)
8287
}
8388

8489
if strings.Contains(entry.Message, attestationMsg) {
@@ -114,7 +119,7 @@ func (s *Service) Analyze() (Stats, error) {
114119
logger := slog.
115120
With("parserName", parserName).
116121
With("fileName", s.logFile.Name())
117-
if err == bufio.ErrTooLong {
122+
if errors.Is(err, bufio.ErrTooLong) {
118123
logger.Warn("the log line was too long, continue reading..")
119124
} else {
120125
logger.

internal/analyzer/parser/commit/service.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bufio"
55
"encoding/json"
66
"errors"
7+
"fmt"
78
"log/slog"
89
"os"
910
"strings"
@@ -52,11 +53,13 @@ func (s *Service) Analyze() (map[parser.SignerID]Stats, error) {
5253
proposeTime := make(map[parser.DutyID]time.Time)
5354
commitTimes := make(map[parser.DutyID]map[parser.SignerID]time.Time)
5455

56+
lineNumber := 0
5557
for scanner.Scan() {
5658
var entry commitLogEntry
5759
line := scanner.Text()
60+
lineNumber++
5861
if err := json.Unmarshal([]byte(line), &entry); err != nil {
59-
return nil, err
62+
return nil, fmt.Errorf("unmarshal log line %d (file = `%s`): `%s`, err: %w", lineNumber, s.logFile.Name(), line, err)
6063
}
6164

6265
if strings.Contains(entry.Message, proposeMsg) {
@@ -79,7 +82,7 @@ func (s *Service) Analyze() (map[parser.SignerID]Stats, error) {
7982
logger := slog.
8083
With("parserName", parserName).
8184
With("fileName", s.logFile.Name())
82-
if err == bufio.ErrTooLong {
85+
if errors.Is(err, bufio.ErrTooLong) {
8386
logger.Warn("the log line was too long, continue reading..")
8487
} else {
8588
logger.

internal/analyzer/parser/consensus/service.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bufio"
55
"encoding/json"
66
"errors"
7+
"fmt"
78
"log/slog"
89
"os"
910
"slices"
@@ -74,11 +75,13 @@ func (s *Service) Analyze() (Stats, error) {
7475
blockRootSlots = make(map[parser.BlockRoot][]parser.Slot)
7576
)
7677

78+
lineNumber := 0
7779
for scanner.Scan() {
7880
var entry logEntry
7981
line := scanner.Text()
82+
lineNumber++
8083
if err := json.Unmarshal([]byte(line), &entry); err != nil {
81-
return stats, err
84+
return stats, fmt.Errorf("unmarshal log line %d (file = `%s`): `%s`, err: %w", lineNumber, s.logFile.Name(), line, err)
8285
}
8386

8487
if strings.Contains(entry.Message, partialSignatureLogRecord) {
@@ -134,7 +137,7 @@ func (s *Service) Analyze() (Stats, error) {
134137
logger := slog.
135138
With("parserName", parserName).
136139
With("fileName", s.logFile.Name())
137-
if err == bufio.ErrTooLong {
140+
if errors.Is(err, bufio.ErrTooLong) {
138141
logger.Warn("the log line was too long, continue reading..")
139142
} else {
140143
logger.

internal/analyzer/parser/operator/service.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,13 @@ func (s *Service) Analyze() (Stats, error) {
5353
clusters [][]parser.SignerID
5454
)
5555

56+
lineNumber := 0
5657
for scanner.Scan() {
5758
line := scanner.Text()
59+
lineNumber++
5860
var entry logEntry
5961
if err := json.Unmarshal([]byte(line), &entry); err != nil {
60-
return stats, err
62+
return stats, fmt.Errorf("unmarshal log line %d (file = `%s`): `%s`, err: %w", lineNumber, s.logFile.Name(), line, err)
6163
}
6264

6365
if strings.Contains(entry.Message, proposalMsg) {
@@ -100,7 +102,7 @@ func (s *Service) Analyze() (Stats, error) {
100102
logger := slog.
101103
With("parserName", parserName).
102104
With("fileName", s.logFile.Name())
103-
if err == bufio.ErrTooLong {
105+
if errors.Is(err, bufio.ErrTooLong) {
104106
logger.Warn("the log line was too long, continue reading..")
105107
} else {
106108
logger.

internal/analyzer/parser/peers/service.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bufio"
55
"encoding/json"
66
"errors"
7+
"fmt"
78
"log/slog"
89
"os"
910
"regexp"
@@ -75,17 +76,14 @@ func (s *Service) Analyze() (Stats, error) {
7576
nodeClientVersions []string
7677
)
7778

79+
lineNumber := 0
7880
for scanner.Scan() {
7981
var entry logEntry
8082
line := scanner.Text()
81-
83+
lineNumber++
8284
if strings.Contains(line, scoredPeersMsg) || strings.Contains(line, peerIdentityMsg) || strings.Contains(line, peerScoresMsg) {
8385
if err := json.Unmarshal([]byte(line), &entry); err != nil {
84-
slog.
85-
With("err", err).
86-
With("line", line).
87-
Warn("failed to unmarshal line. Skipping")
88-
continue
86+
return stats, fmt.Errorf("unmarshal log line %d (file = `%s`): `%s`, err: %w", lineNumber, s.logFile.Name(), line, err)
8987
}
9088

9189
if strings.EqualFold(entry.Message, scoredPeersMsg) {
@@ -113,7 +111,7 @@ func (s *Service) Analyze() (Stats, error) {
113111
logger := slog.
114112
With("parserName", parserName).
115113
With("fileName", s.logFile.Name())
116-
if err == bufio.ErrTooLong {
114+
if errors.Is(err, bufio.ErrTooLong) {
117115
logger.Warn("the log line was too long, continue reading..")
118116
} else {
119117
logger.

internal/analyzer/parser/prepare/service.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bufio"
55
"encoding/json"
66
"errors"
7+
"fmt"
78
"log/slog"
89
"os"
910
"strings"
@@ -44,19 +45,21 @@ func New(logFilePath string, delay time.Duration) (*Service, error) {
4445
}, nil
4546
}
4647

47-
func (p *Service) Analyze() (map[parser.SignerID]Stats, error) {
48-
defer p.logFile.Close()
48+
func (s *Service) Analyze() (map[parser.SignerID]Stats, error) {
49+
defer s.logFile.Close()
4950

50-
scanner := parser.NewScanner(p.logFile)
51+
scanner := parser.NewScanner(s.logFile)
5152

5253
leaderProposeTime := make(map[parser.DutyID]time.Time)
5354
prepareSignerTimes := make(map[parser.DutyID]map[parser.SignerID]time.Time)
5455

56+
lineNumber := 0
5557
for scanner.Scan() {
5658
var entry prepareLogEntry
5759
line := scanner.Text()
60+
lineNumber++
5861
if err := json.Unmarshal([]byte(line), &entry); err != nil {
59-
return nil, err
62+
return nil, fmt.Errorf("unmarshal log line %d (file = `%s`): `%s`, err: %w", lineNumber, s.logFile.Name(), line, err)
6063
}
6164

6265
if strings.Contains(entry.Message, leaderProposeMsg) {
@@ -77,8 +80,8 @@ func (p *Service) Analyze() (map[parser.SignerID]Stats, error) {
7780
if err := scanner.Err(); err != nil {
7881
logger := slog.
7982
With("parserName", parserName).
80-
With("fileName", p.logFile.Name())
81-
if err == bufio.ErrTooLong {
83+
With("fileName", s.logFile.Name())
84+
if errors.Is(err, bufio.ErrTooLong) {
8285
logger.Warn("the log line was too long, continue reading..")
8386
} else {
8487
logger.
@@ -89,7 +92,7 @@ func (p *Service) Analyze() (map[parser.SignerID]Stats, error) {
8992
}
9093
}
9194

92-
stats := p.calcPrepareTimes(leaderProposeTime, prepareSignerTimes)
95+
stats := s.calcPrepareTimes(leaderProposeTime, prepareSignerTimes)
9396

9497
return stats, nil
9598
}

internal/analyzer/report/client.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var (
2121
}
2222

2323
ssvClientHeaders = []string{
24-
"Crashes(reason: unhealthy EL/CL): \n total(EL/CL)",
24+
"SSV node terminates =\nEL-issue + CL-issue",
2525
}
2626
)
2727

@@ -47,7 +47,7 @@ func NewClient() *ClientReport {
4747
t := table.New(os.Stdout)
4848

4949
headers := slices.Concat(consensusClientHeaders, ssvClientHeaders)
50-
t.SetHeaders("Consensus Client Performance", "SSV Client Performance")
50+
t.SetHeaders("Consensus Client Performance", "EL / CL issues")
5151
t.AddHeaders(headers...)
5252
t.SetAutoMerge(true)
5353
t.SetHeaderColSpans(0, len(consensusClientHeaders), len(ssvClientHeaders))
@@ -125,7 +125,7 @@ func (c *ClientReport) Render() {
125125
fmt.Sprint(record.consensusClientResponseTimeP50Total/time.Duration(record.consensusClientResponseTimeRecordCount)),
126126
fmt.Sprint(record.consensusClientResponseTimeP90Total/time.Duration(record.consensusClientResponseTimeRecordCount)),
127127
strings.Join(delayedResponses, "\n"),
128-
fmt.Sprintf("%d(%d/%d)", record.ssvClientCrashesTotal, record.SSVClientELUnhealthyTotal, record.SSVClientCLUnhealthyTotal),
128+
fmt.Sprintf("%d = %d + %d", record.ssvClientCrashesTotal, record.SSVClientELUnhealthyTotal, record.SSVClientCLUnhealthyTotal),
129129
)
130130
}
131131

0 commit comments

Comments
 (0)