Skip to content

Commit 99d792c

Browse files
Prometheus
1 parent 0300026 commit 99d792c

File tree

7 files changed

+214
-22
lines changed

7 files changed

+214
-22
lines changed

config/config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ type Config struct {
1515
Database Database `yaml:"database" validate:"required"`
1616
DataSources map[string]DataSource `yaml:"datasources"`
1717
Contracts map[string]Contract `yaml:"contracts"`
18-
Hasura Hasura `yaml:"hasura" validate:"omitempty"`
19-
Prometheus Prometheus `yaml:"prometheus" validate:"omitempty"`
18+
Hasura *Hasura `yaml:"hasura" validate:"omitempty"`
19+
Prometheus *Prometheus `yaml:"prometheus" validate:"omitempty"`
2020
}
2121

2222
// Substitute -

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ require (
88
github.com/gorilla/websocket v1.4.2
99
github.com/iancoleman/strcase v0.1.3
1010
github.com/json-iterator/go v1.1.12
11-
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
1211
github.com/pkg/errors v0.9.1
12+
github.com/prometheus/client_golang v1.11.0
1313
github.com/sergi/go-diff v1.2.0
1414
github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc
1515
github.com/sirupsen/logrus v1.7.0

go.sum

Lines changed: 102 additions & 16 deletions
Large diffs are not rendered by default.

hasura/hasura.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,15 @@ func checkHealth(ctx context.Context, api *API) {
4141
}
4242

4343
// Create - creates hasura models
44-
func Create(ctx context.Context, hasura config.Hasura, cfg config.Database, views []string, models ...interface{}) error {
44+
func Create(ctx context.Context, hasura *config.Hasura, cfg config.Database, views []string, models ...interface{}) error {
45+
if hasura == nil {
46+
return nil
47+
}
4548
api := New(hasura.URL, hasura.Secret)
4649

4750
checkHealth(ctx, api)
4851

49-
metadata, err := Generate(hasura, cfg, models...)
52+
metadata, err := Generate(*hasura, cfg, models...)
5053
if err != nil {
5154
return err
5255
}

prometheus/prometheus.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package prometheus
2+
3+
import (
4+
"log"
5+
"net/http"
6+
"sync"
7+
8+
"github.com/dipdup-net/go-lib/config"
9+
"github.com/prometheus/client_golang/prometheus"
10+
"github.com/prometheus/client_golang/prometheus/collectors"
11+
"github.com/prometheus/client_golang/prometheus/promhttp"
12+
)
13+
14+
// Service -
15+
type Service struct {
16+
counters map[string]*prometheus.CounterVec
17+
server *http.Server
18+
wg sync.WaitGroup
19+
}
20+
21+
// NewService -
22+
func NewService(cfg *config.Prometheus) *Service {
23+
var s Service
24+
s.counters = make(map[string]*prometheus.CounterVec)
25+
26+
if cfg != nil && cfg.URL != "" {
27+
s.server = &http.Server{Addr: cfg.URL}
28+
http.Handle("/metrics", promhttp.Handler())
29+
}
30+
31+
return &s
32+
}
33+
34+
// Start -
35+
func (service *Service) Start() {
36+
if service.server == nil {
37+
return
38+
}
39+
40+
service.wg.Add(1)
41+
go func() {
42+
defer service.wg.Done()
43+
44+
if err := service.server.ListenAndServe(); err != http.ErrServerClosed {
45+
log.Fatalf("ListenAndServe(): %v", err)
46+
}
47+
}()
48+
}
49+
50+
// Close -
51+
func (service *Service) Close() error {
52+
if service.server != nil {
53+
if err := service.server.Close(); err != nil {
54+
return err
55+
}
56+
}
57+
58+
service.wg.Wait()
59+
60+
return nil
61+
}
62+
63+
// RegisterCounter -
64+
func (service *Service) RegisterCounter(name, help string, labels ...string) {
65+
vec := prometheus.NewCounterVec(prometheus.CounterOpts{
66+
Name: name,
67+
Help: help,
68+
}, labels)
69+
service.counters[name] = vec
70+
prometheus.MustRegister(vec)
71+
}
72+
73+
// Counter -
74+
func (service *Service) Counter(name string) *prometheus.CounterVec {
75+
counter, ok := service.counters[name]
76+
if ok {
77+
return counter
78+
}
79+
return nil
80+
}
81+
82+
// IncrementCounter -
83+
func (service *Service) IncrementCounter(name string, labels map[string]string) {
84+
counter, ok := service.counters[name]
85+
if ok {
86+
counter.With(labels).Inc()
87+
}
88+
}
89+
90+
// RegisterGoBuildMetrics -
91+
func (service *Service) RegisterGoBuildMetrics() {
92+
prometheus.MustRegister(collectors.NewBuildInfoCollector())
93+
}

tzkt/events/signalr/signalr.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,8 @@ func (s *SignalR) Send(msg interface{}) error {
5858
func (s *SignalR) SetOnReconnect(onReconnect func() error) {
5959
s.hub.onReconnect = onReconnect
6060
}
61+
62+
// IsConnected -
63+
func (s *SignalR) IsConnected() bool {
64+
return s.hub != nil && s.hub.conn != nil
65+
}

tzkt/events/tzkt.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func NewTzKT(url string) *TzKT {
3131
return &TzKT{
3232
s: signalr.NewSignalR(url),
3333
msgs: make(chan Message, 1024),
34-
stop: make(chan struct{}),
34+
stop: make(chan struct{}, 1),
3535
subscriptions: make([]signalr.Invocation, 0),
3636
}
3737
}
@@ -59,6 +59,11 @@ func (tzkt *TzKT) Close() error {
5959
return nil
6060
}
6161

62+
// IsConnected - reports whether the connection to TzKT events is established
63+
func (tzkt *TzKT) IsConnected() bool {
64+
return tzkt.s != nil && tzkt.s.IsConnected()
65+
}
66+
6267
// Listen - listen channel with all received messages
6368
func (tzkt *TzKT) Listen() <-chan Message {
6469
return tzkt.msgs

0 commit comments

Comments
 (0)