Skip to content

Commit c7f7f6d

Browse files
authored
Merge pull request #426 from Fantom-foundation/fix/db_size-metric
fix of db_size metric calc
2 parents 406d46f + cb20db7 commit c7f7f6d

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

cmd/opera/launcher/metrics/metrics.go

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,46 @@ package metrics
33
import (
44
"os"
55
"path/filepath"
6+
"sync"
67
"sync/atomic"
8+
"time"
79

810
"github.com/ethereum/go-ethereum/log"
911
"github.com/ethereum/go-ethereum/metrics"
1012
)
1113

12-
var (
13-
// TODO: refactor it
14-
dbDir atomic.Value
15-
dbSizeMetric = metrics.NewRegisteredFunctionalGauge("db_size", nil, measureDbDir)
16-
)
14+
var once sync.Once
1715

1816
func SetDataDir(datadir string) {
19-
dbDir.Store(datadir)
17+
once.Do(func() {
18+
go measureDbDir("db_size", datadir)
19+
})
2020
}
2121

22-
func measureDbDir() (size int64) {
23-
datadir, ok := dbDir.Load().(string)
24-
if !ok || datadir == "" || datadir == "inmemory" {
25-
return
22+
func measureDbDir(name, datadir string) {
23+
var (
24+
dbSize atomic.Int64
25+
gauge metrics.Gauge
26+
rescan = (len(datadir) > 0 && datadir != "inmemory")
27+
)
28+
for {
29+
time.Sleep(time.Second)
30+
31+
if rescan {
32+
size := sizeOfDir(datadir)
33+
dbSize.Store(size)
34+
}
35+
36+
if gauge == nil {
37+
gauge = metrics.NewRegisteredFunctionalGauge(name, nil, func() int64 {
38+
return dbSize.Load()
39+
})
40+
}
41+
42+
if !rescan {
43+
break
44+
}
2645
}
27-
return sizeOfDir(datadir)
2846
}
2947

3048
func sizeOfDir(dir string) (size int64) {

demo/start.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ do
2525
--nat extip:127.0.0.1 \
2626
--http --http.addr="127.0.0.1" --http.port=${RPCP} --http.corsdomain="*" --http.api="eth,debug,net,admin,web3,personal,txpool,ftm,dag" \
2727
--ws --ws.addr="127.0.0.1" --ws.port=${WSP} --ws.origins="*" --ws.api="eth,debug,net,admin,web3,personal,txpool,ftm,dag" \
28+
--metrics --metrics.addr=127.0.0.1 --metrics.port=$(($RPCP+1100)) \
2829
--verbosity=3 --tracing >> opera$i.log 2>&1)&
2930

3031
echo -e "\tnode$i ok"

0 commit comments

Comments
 (0)