github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/cmd/u2u/launcher/monitoring/prometheus.go (about)

     1  package monitoring
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"sync"
     7  	"sync/atomic"
     8  	"time"
     9  
    10  	"github.com/unicornultrafoundation/go-u2u/log"
    11  	"github.com/unicornultrafoundation/go-u2u/metrics"
    12  
    13  	"github.com/unicornultrafoundation/go-u2u/monitoring/prometheus"
    14  )
    15  
    16  var once sync.Once
    17  
    18  func SetupPrometheus(endpoint string) {
    19  	prometheus.SetNamespace("u2u")
    20  	prometheus.PrometheusListener(endpoint, nil)
    21  }
    22  
    23  func SetDataDir(datadir string) {
    24  	once.Do(func() {
    25  		go measureDbDir("db_size", datadir)
    26  	})
    27  }
    28  
    29  func measureDbDir(name, datadir string) {
    30  	var (
    31  		dbSize int64
    32  		gauge  metrics.Gauge
    33  		rescan = (len(datadir) > 0 && datadir != "inmemory")
    34  	)
    35  	for {
    36  		time.Sleep(time.Second)
    37  
    38  		if rescan {
    39  			size := sizeOfDir(datadir)
    40  			atomic.StoreInt64(&dbSize, size)
    41  		}
    42  
    43  		if gauge == nil {
    44  			gauge = metrics.NewRegisteredFunctionalGauge(name, nil, func() int64 {
    45  				return atomic.LoadInt64(&dbSize)
    46  			})
    47  		}
    48  
    49  		if !rescan {
    50  			break
    51  		}
    52  	}
    53  }
    54  
    55  func sizeOfDir(dir string) (size int64) {
    56  	err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
    57  		if err != nil {
    58  			log.Debug("datadir walk", "path", path, "err", err)
    59  			return filepath.SkipDir
    60  		}
    61  
    62  		if info.IsDir() {
    63  			return nil
    64  		}
    65  
    66  		dst, err := filepath.EvalSymlinks(path)
    67  		if err == nil && dst != path {
    68  			size += sizeOfDir(dst)
    69  		} else {
    70  			size += info.Size()
    71  		}
    72  
    73  		return nil
    74  	})
    75  
    76  	if err != nil {
    77  		log.Debug("datadir walk", "path", dir, "err", err)
    78  	}
    79  
    80  	return
    81  }