Skip to content

Commit 86e7090

Browse files
committed
v1.0.0
1 parent d1e78ca commit 86e7090

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+6493
-0
lines changed

chains/cosmos/exporter/exporter.go

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
package exporter
2+
3+
import (
4+
"fmt"
5+
"time"
6+
"go.uber.org/zap"
7+
8+
rpc "github.com/node-a-team/Cosmos-IE/chains/cosmos/getData/rpc"
9+
rest "github.com/node-a-team/Cosmos-IE/chains/cosmos/getData/rest"
10+
metric "github.com/node-a-team/Cosmos-IE/chains/cosmos/exporter/metric"
11+
utils "github.com/node-a-team/Cosmos-IE/utils"
12+
13+
"github.com/prometheus/client_golang/prometheus"
14+
)
15+
16+
var (
17+
previousBlockHeight int64
18+
19+
)
20+
21+
func Start(log *zap.Logger) {
22+
23+
gaugesNamespaceList := metric.GaugesNamespaceList
24+
25+
var gauges []prometheus.Gauge = make([]prometheus.Gauge, len(gaugesNamespaceList))
26+
var gaugesDenom []prometheus.Gauge = make([]prometheus.Gauge, len(metric.DenomList)*3) // wallet, rewards, commission
27+
28+
29+
// nomal guages
30+
for i := 0; i < len(gaugesNamespaceList); i++ {
31+
gauges[i] = metric.NewGauge("exporter", gaugesNamespaceList[i], "")
32+
prometheus.MustRegister(gauges[i])
33+
}
34+
35+
36+
// denom gagues
37+
count := 0
38+
for i := 0; i < len(metric.DenomList)*3; i += 3 {
39+
gaugesDenom[i] = metric.NewGauge("exporter_balances", metric.DenomList[count], "")
40+
gaugesDenom[i+1] = metric.NewGauge("exporter_commission", metric.DenomList[count], "")
41+
gaugesDenom[i+2] = metric.NewGauge("exporter_rewards", metric.DenomList[count], "")
42+
prometheus.MustRegister(gaugesDenom[i])
43+
prometheus.MustRegister(gaugesDenom[i+1])
44+
prometheus.MustRegister(gaugesDenom[i+2])
45+
46+
count++
47+
}
48+
49+
50+
// labels
51+
labels := []string{"chainId", "moniker", "operatorAddress", "accountAddress", "consHexAddress"}
52+
gaugesForLabel := metric.NewCounterVec("exporter", "labels", "", labels)
53+
54+
prometheus.MustRegister(gaugesForLabel)
55+
56+
57+
for {
58+
func() {
59+
defer func() {
60+
61+
if r := recover(); r != nil {
62+
//Error Log
63+
}
64+
65+
time.Sleep(500 * time.Millisecond)
66+
67+
}()
68+
69+
70+
currentBlockHeight := rpc.BlockHeight()
71+
72+
if previousBlockHeight != currentBlockHeight {
73+
74+
log.Info("RPC-Server", zap.Bool("Success", true), zap.String("err", "nil"), zap.String("Get Data", "Block Height: " +fmt.Sprint(currentBlockHeight)))
75+
76+
77+
restData, consHexAddr := rest.GetData(currentBlockHeight, log)
78+
rpcData := rpc.GetData(currentBlockHeight, consHexAddr, log)
79+
80+
metric.SetMetric(currentBlockHeight, restData, rpcData, log)
81+
82+
metricData := metric.GetMetric()
83+
denomList := metric.GetDenomList()
84+
85+
count := 0
86+
for i := 0; i < len(denomList); i++ {
87+
88+
for _, value := range metricData.Validator.Account.Balances {
89+
if value.Denom == denomList[i] {
90+
gaugesDenom[count].Set(utils.StringToFloat64(value.Amount))
91+
count++
92+
}
93+
}
94+
for _, value := range metricData.Validator.Account.Commission {
95+
if value.Denom == denomList[i] {
96+
gaugesDenom[count].Set(utils.StringToFloat64(value.Amount))
97+
count++
98+
}
99+
}
100+
for _, value := range metricData.Validator.Account.Rewards {
101+
if value.Denom == denomList[i] {
102+
gaugesDenom[count].Set(utils.StringToFloat64(value.Amount))
103+
count++
104+
}
105+
}
106+
}
107+
108+
109+
gaugesValue := [...]float64{
110+
float64(metricData.Network.BlockHeight),
111+
112+
metricData.Network.Staking.NotBondedTokens,
113+
metricData.Network.Staking.BondedTokens,
114+
metricData.Network.Staking.TotalSupply,
115+
metricData.Network.Staking.BondedRatio,
116+
117+
metricData.Network.Gov.TotalProposalCount,
118+
metricData.Network.Gov.VotingProposalCount,
119+
120+
metricData.Validator.VotingPower,
121+
metricData.Validator.MinSelfDelegation,
122+
metricData.Validator.JailStatus,
123+
124+
metricData.Validator.Proposer.Ranking,
125+
metricData.Validator.Proposer.Status,
126+
127+
metricData.Validator.Delegation.Shares,
128+
metricData.Validator.Delegation.Ratio,
129+
metricData.Validator.Delegation.DelegatorCount,
130+
metricData.Validator.Delegation.Self,
131+
132+
metricData.Validator.Commission.Rate,
133+
metricData.Validator.Commission.MaxRate,
134+
metricData.Validator.Commission.MaxChangeRate,
135+
metricData.Validator.Commit.VoteType,
136+
metricData.Validator.Commit.PrecommitStatus,
137+
138+
metricData.Network.Minting.Inflation,
139+
metricData.Network.Minting.ActualInflation,
140+
}
141+
142+
for i := 0; i < len(gaugesNamespaceList); i++ {
143+
gauges[i].Set(gaugesValue[i])
144+
}
145+
146+
147+
gaugesForLabel.WithLabelValues(metricData.Network.ChainID,
148+
metricData.Validator.Moniker,
149+
metricData.Validator.Address.Operator,
150+
metricData.Validator.Address.Account,
151+
metricData.Validator.Address.ConsensusHex,
152+
).Add(0)
153+
154+
}
155+
156+
previousBlockHeight = currentBlockHeight
157+
}()
158+
}
159+
}
160+
161+
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
package metric
2+
3+
import (
4+
"go.uber.org/zap"
5+
6+
rest "github.com/node-a-team/Cosmos-IE/chains/cosmos/getData/rest"
7+
rpc "github.com/node-a-team/Cosmos-IE/chains/cosmos/getData/rpc"
8+
utils "github.com/node-a-team/Cosmos-IE/utils"
9+
)
10+
11+
var (
12+
metricData metric
13+
14+
DenomList = []string{"uatom"}
15+
GaugesNamespaceList = [...]string{"blockHeight",
16+
"notBondedTokens",
17+
"bondedTokens",
18+
"totalSupply",
19+
"bondedRatio",
20+
"totalProposalCount",
21+
"votingProposalCount",
22+
"votingPower",
23+
"minSelfDelegation",
24+
"jailStatus",
25+
"proposerRanking",
26+
"proposerStatus",
27+
"delegationShares",
28+
"delegationRatio",
29+
"delegatorCount",
30+
"delegationSelf",
31+
"commissionRate",
32+
"commissionMaxRate",
33+
"commissionMaxChangeRate",
34+
"commitVoteType",
35+
"precommitStatus",
36+
"inflation",
37+
"actualInflation",
38+
}
39+
)
40+
41+
type metric struct {
42+
43+
Network struct {
44+
ChainID string
45+
BlockHeight int64
46+
PrecommitRate float64
47+
48+
Staking struct {
49+
NotBondedTokens float64
50+
BondedTokens float64
51+
TotalSupply float64
52+
BondedRatio float64
53+
}
54+
55+
Minting struct {
56+
Inflation float64
57+
ActualInflation float64
58+
}
59+
60+
Gov struct{
61+
TotalProposalCount float64
62+
VotingProposalCount float64
63+
}
64+
}
65+
66+
Validator struct {
67+
Moniker string
68+
VotingPower float64
69+
MinSelfDelegation float64
70+
JailStatus float64
71+
72+
73+
74+
Address struct {
75+
Account string
76+
Operator string
77+
ConsensusHex string
78+
}
79+
Proposer struct {
80+
Ranking float64
81+
Status float64
82+
}
83+
84+
Delegation struct {
85+
Shares float64
86+
Ratio float64
87+
DelegatorCount float64
88+
Self float64
89+
}
90+
91+
Commission struct {
92+
Rate float64
93+
MaxRate float64
94+
MaxChangeRate float64
95+
}
96+
97+
Account struct {
98+
Balances []rest.Coin
99+
Commission []rest.Coin
100+
Rewards []rest.Coin
101+
}
102+
103+
Commit struct {
104+
VoteType float64
105+
PrecommitStatus float64
106+
}
107+
108+
}
109+
}
110+
111+
112+
113+
func SetMetric(currentBlock int64, restData *rest.RESTData, rpcData *rpc.RPCData, log *zap.Logger) {
114+
115+
operAddr := rest.OperAddr
116+
consPubKey := restData.Validators.ConsPubKey
117+
consAddr := restData.Validatorsets[consPubKey][0]
118+
119+
//// network
120+
metricData.Network.ChainID = rpcData.Commit.ChainId
121+
metricData.Network.BlockHeight = currentBlock
122+
123+
metricData.Network.Staking.NotBondedTokens = utils.StringToFloat64(restData.StakingPool.Result.Not_bonded_tokens)
124+
metricData.Network.Staking.BondedTokens = utils.StringToFloat64(restData.StakingPool.Result.Bonded_tokens)
125+
metricData.Network.Staking.TotalSupply = restData.StakingPool.Result.Total_supply
126+
metricData.Network.Staking.BondedRatio = metricData.Network.Staking.BondedTokens / metricData.Network.Staking.TotalSupply
127+
128+
// minting
129+
metricData.Network.Minting.Inflation = restData.Inflation
130+
metricData.Network.Minting.ActualInflation = metricData.Network.Minting.Inflation / metricData.Network.Staking.BondedRatio
131+
132+
// gov
133+
metricData.Network.Gov.TotalProposalCount = restData.Gov.TotalProposalCount
134+
metricData.Network.Gov.VotingProposalCount = restData.Gov.VotingProposalCount
135+
136+
137+
//// validator
138+
metricData.Validator.Moniker = restData.Validators.Description.Moniker
139+
metricData.Validator.VotingPower = utils.StringToFloat64(restData.Validatorsets[consPubKey][1])
140+
metricData.Validator.MinSelfDelegation = utils.StringToFloat64(restData.Validators.MinSelfDelegation)
141+
metricData.Validator.JailStatus = utils.BoolToFloat64(restData.Validators.Jailed)
142+
143+
// address
144+
metricData.Validator.Address.Operator = operAddr
145+
metricData.Validator.Address.Account = utils.GetAccAddrFromOperAddr(operAddr, log)
146+
metricData.Validator.Address.ConsensusHex = utils.Bech32AddrToHexAddr(consAddr, log)
147+
148+
// proposer
149+
metricData.Validator.Proposer.Ranking = utils.StringToFloat64(restData.Validatorsets[consPubKey][3])
150+
metricData.Validator.Proposer.Status = rpcData.Commit.ValidatorProposingStatus
151+
152+
// delegation
153+
metricData.Validator.Delegation.Shares = utils.StringToFloat64(restData.Validators.DelegatorShares)
154+
metricData.Validator.Delegation.Ratio = metricData.Validator.Delegation.Shares / metricData.Network.Staking.BondedTokens
155+
metricData.Validator.Delegation.DelegatorCount = restData.Delegations.DelegationCount
156+
metricData.Validator.Delegation.Self = restData.Delegations.SelfDelegation
157+
158+
// commission
159+
metricData.Validator.Commission.Rate = utils.StringToFloat64(restData.Validators.Commission.Commission_rates.Rate)
160+
metricData.Validator.Commission.MaxRate = utils.StringToFloat64(restData.Validators.Commission.Commission_rates.Max_rate)
161+
metricData.Validator.Commission.MaxChangeRate = utils.StringToFloat64(restData.Validators.Commission.Commission_rates.Max_change_rate)
162+
163+
// account
164+
metricData.Validator.Account.Balances = restData.Balances
165+
metricData.Validator.Account.Commission = restData.Commission
166+
metricData.Validator.Account.Rewards = restData.Rewards
167+
168+
// commit
169+
metricData.Validator.Commit.VoteType = rpcData.Commit.VoteType
170+
metricData.Validator.Commit.PrecommitStatus = rpcData.Commit.ValidatorPrecommitStatus
171+
172+
173+
174+
}
175+
176+
func GetMetric() *metric {
177+
178+
return &metricData
179+
}
180+
181+
func GetDenomList() []string {
182+
return DenomList
183+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package metric
2+
3+
import (
4+
"github.com/prometheus/client_golang/prometheus"
5+
)
6+
7+
var (
8+
9+
)
10+
11+
func NewGauge(nameSpace string, name string, help string) prometheus.Gauge {
12+
result := prometheus.NewGauge(
13+
prometheus.GaugeOpts{
14+
Namespace: "" + nameSpace,
15+
Name: "" + name,
16+
Help: "" + help,
17+
},
18+
)
19+
20+
return result
21+
}
22+
23+
func NewCounterVec(nameSpace string, name string, help string, labels []string) prometheus.CounterVec {
24+
result := prometheus.NewCounterVec(
25+
prometheus.CounterOpts{
26+
Namespace: "" + nameSpace,
27+
Name: "" + name,
28+
Help: "" + help,
29+
},
30+
labels,
31+
)
32+
return *result
33+
}
34+

0 commit comments

Comments
 (0)