Skip to content

Commit 2b92d29

Browse files
committed
Add BandProtocol & Delete RPC
1 parent e0df925 commit 2b92d29

Some content is hidden

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

62 files changed

+1748
-803
lines changed
16 KB
Binary file not shown.
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package exporter
2+
3+
import (
4+
"fmt"
5+
"time"
6+
"go.uber.org/zap"
7+
"strconv"
8+
9+
// rpc "github.com/node-a-team/Cosmos-IE/chains/bandprotocol/getData/rpc"
10+
rest "github.com/node-a-team/Cosmos-IE/chains/bandprotocol/getData/rest"
11+
metric "github.com/node-a-team/Cosmos-IE/chains/bandprotocol/exporter/metric"
12+
utils "github.com/node-a-team/Cosmos-IE/utils"
13+
14+
"github.com/prometheus/client_golang/prometheus"
15+
)
16+
17+
var (
18+
previousBlockHeight int64
19+
20+
)
21+
22+
func Start(log *zap.Logger) {
23+
24+
gaugesNamespaceList := metric.GaugesNamespaceList
25+
26+
var gauges []prometheus.Gauge = make([]prometheus.Gauge, len(gaugesNamespaceList))
27+
var gaugesDenom []prometheus.Gauge = make([]prometheus.Gauge, len(metric.DenomList)*3) // wallet, rewards, commission
28+
29+
30+
// nomal guages
31+
for i := 0; i < len(gaugesNamespaceList); i++ {
32+
gauges[i] = utils.NewGauge("exporter", gaugesNamespaceList[i], "")
33+
prometheus.MustRegister(gauges[i])
34+
}
35+
36+
37+
// denom gagues
38+
count := 0
39+
for i := 0; i < len(metric.DenomList)*3; i += 3 {
40+
gaugesDenom[i] = utils.NewGauge("exporter_balances", metric.DenomList[count], "")
41+
gaugesDenom[i+1] = utils.NewGauge("exporter_commission", metric.DenomList[count], "")
42+
gaugesDenom[i+2] = utils.NewGauge("exporter_rewards", metric.DenomList[count], "")
43+
prometheus.MustRegister(gaugesDenom[i])
44+
prometheus.MustRegister(gaugesDenom[i+1])
45+
prometheus.MustRegister(gaugesDenom[i+2])
46+
47+
count++
48+
}
49+
50+
51+
// labels
52+
labels := []string{"chainId", "moniker", "operatorAddress", "accountAddress", "consHexAddress"}
53+
gaugesForLabel := utils.NewCounterVec("exporter", "labels", "", labels)
54+
55+
prometheus.MustRegister(gaugesForLabel)
56+
57+
58+
for {
59+
func() {
60+
defer func() {
61+
62+
if r := recover(); r != nil {
63+
//Error Log
64+
}
65+
66+
time.Sleep(500 * time.Millisecond)
67+
68+
}()
69+
70+
blockData := rest.GetBlocks(log)
71+
currentBlockHeight, _:= strconv.ParseInt(blockData.Block.Header.Height, 10, 64)
72+
73+
if previousBlockHeight != currentBlockHeight {
74+
75+
fmt.Println("")
76+
log.Info("RPC-Server", zap.Bool("Success", true), zap.String("err", "nil"), zap.String("Get Data", "Block Height: " +fmt.Sprint(currentBlockHeight)))
77+
78+
79+
// restData, consHexAddr := rest.GetData(currentBlockHeight, log)
80+
// rpcData := rpc.GetData(currentBlockHeight, consHexAddr, log)
81+
82+
restData := rest.GetData(currentBlockHeight, blockData, log)
83+
84+
// metric.SetMetric(currentBlockHeight, restData, rpcData, log)
85+
metric.SetMetric(currentBlockHeight, restData, log)
86+
87+
metricData := metric.GetMetric()
88+
denomList := metric.GetDenomList()
89+
90+
count := 0
91+
for i := 0; i < len(denomList); i++ {
92+
93+
for _, value := range metricData.Validator.Account.Balances {
94+
if value.Denom == denomList[i] {
95+
gaugesDenom[count].Set(utils.StringToFloat64(value.Amount))
96+
count++
97+
}
98+
}
99+
for _, value := range metricData.Validator.Account.Commission {
100+
if value.Denom == denomList[i] {
101+
gaugesDenom[count].Set(utils.StringToFloat64(value.Amount))
102+
count++
103+
}
104+
}
105+
for _, value := range metricData.Validator.Account.Rewards {
106+
if value.Denom == denomList[i] {
107+
gaugesDenom[count].Set(utils.StringToFloat64(value.Amount))
108+
count++
109+
}
110+
}
111+
}
112+
113+
114+
gaugesValue := [...]float64{
115+
float64(metricData.Network.BlockHeight),
116+
117+
metricData.Network.Staking.NotBondedTokens,
118+
metricData.Network.Staking.BondedTokens,
119+
metricData.Network.Staking.TotalSupply,
120+
metricData.Network.Staking.BondedRatio,
121+
122+
metricData.Network.Gov.TotalProposalCount,
123+
metricData.Network.Gov.VotingProposalCount,
124+
125+
metricData.Validator.VotingPower,
126+
metricData.Validator.MinSelfDelegation,
127+
metricData.Validator.JailStatus,
128+
129+
metricData.Validator.Proposer.Ranking,
130+
metricData.Validator.Proposer.Status,
131+
132+
metricData.Validator.Delegation.Shares,
133+
metricData.Validator.Delegation.Ratio,
134+
metricData.Validator.Delegation.DelegatorCount,
135+
metricData.Validator.Delegation.Self,
136+
137+
metricData.Validator.Commission.Rate,
138+
metricData.Validator.Commission.MaxRate,
139+
metricData.Validator.Commission.MaxChangeRate,
140+
metricData.Validator.Commit.VoteType,
141+
metricData.Validator.Commit.PrecommitStatus,
142+
143+
metricData.Network.Minting.Inflation,
144+
metricData.Network.Minting.ActualInflation,
145+
}
146+
147+
for i := 0; i < len(gaugesNamespaceList); i++ {
148+
gauges[i].Set(gaugesValue[i])
149+
}
150+
151+
152+
gaugesForLabel.WithLabelValues(metricData.Network.ChainID,
153+
metricData.Validator.Moniker,
154+
metricData.Validator.Address.Operator,
155+
metricData.Validator.Address.Account,
156+
metricData.Validator.Address.ConsensusHex,
157+
).Add(0)
158+
159+
}
160+
161+
previousBlockHeight = currentBlockHeight
162+
}()
163+
}
164+
}
165+
166+
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/bandprotocol/getData/rest"
7+
// rpc "github.com/node-a-team/Cosmos-IE/chains/bandprotocol/getData/rpc"
8+
utils "github.com/node-a-team/Cosmos-IE/utils"
9+
)
10+
11+
var (
12+
metricData metric
13+
14+
DenomList = []string{"uband"}
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, 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 = restData.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 = restData.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 = restData.Commit.VoteType
170+
metricData.Validator.Commit.PrecommitStatus = restData.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 rest
2+
3+
import (
4+
"strings"
5+
"go.uber.org/zap"
6+
"encoding/json"
7+
)
8+
9+
type balances struct {
10+
Height string `json:"height"`
11+
Result []Coin
12+
}
13+
14+
type Coin struct {
15+
Denom string
16+
Amount string
17+
}
18+
19+
func getBalances(accAddr string, log *zap.Logger) []Coin {
20+
21+
var b balances
22+
23+
res, _ := runRESTCommand("/bank/balances/" +accAddr)
24+
json.Unmarshal(res, &b)
25+
// log
26+
if strings.Contains(string(res), "not found") {
27+
// handle error
28+
log.Fatal("REST-Server", zap.Bool("Success", false), zap.String("err", string(res),))
29+
} else {
30+
log.Info("REST-Server", zap.Bool("Success", true), zap.String("err", "nil"), zap.String("Get Data", "Staking Pool"),)
31+
}
32+
33+
return b.Result
34+
}

0 commit comments

Comments
 (0)