Skip to content

Commit

Permalink
feat: add reporters queries metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
freak12techno committed Feb 25, 2024
1 parent 9c64869 commit 3145d19
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 17 deletions.
1 change: 1 addition & 0 deletions pkg/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ func NewApp(config *config.AppConfig, version string) *App {
logger,
nodesManager,
aliasManager,
metricsManager,
version,
)
}
Expand Down
8 changes: 8 additions & 0 deletions pkg/constants/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package constants

type EventFilterReason string

type ReporterQuery string

const (
PrometheusMetricsPrefix string = "cosmos_transactions_bot_"

Expand All @@ -12,6 +14,12 @@ const (
EventFilterReasonUnsupportedMsgTypeNotLogged EventFilterReason = "unsupported_msg_type_not_logged"
EventFilterReasonFailedTxNotLogged EventFilterReason = "failed_tx_not_logged"
EventFilterReasonEmptyTxNotLogged EventFilterReason = "empty_tx_not_logged"

ReporterQueryHelp ReporterQuery = "help"
ReporterQueryGetAliases ReporterQuery = "get_aliases"
ReporterQuerySetAlias ReporterQuery = "set_alias"
ReporterQueryGetConfig ReporterQuery = "get_config"
ReporterQueryNodesStatus ReporterQuery = "nodes_status"
)

func GetReporterTypes() []string {
Expand Down
14 changes: 14 additions & 0 deletions pkg/metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ type Manager struct {
reporterErrorsCounter *prometheus.CounterVec
reportEntriesCounter *prometheus.CounterVec
reporterEnabledGauge *prometheus.GaugeVec
reporterQueriesCounter *prometheus.CounterVec

// Subscriptions metrics
subscriptionsInfoCounter *prometheus.GaugeVec
Expand Down Expand Up @@ -111,6 +112,10 @@ func NewManager(logger *zerolog.Logger, config configPkg.MetricsConfig) *Manager
Name: constants.PrometheusMetricsPrefix + "report_entries_total",
Help: "Counter of messages types per each successfully sent report",
}, []string{"chain", "reporter", "type", "subscription"}),
reporterQueriesCounter: promauto.NewCounterVec(prometheus.CounterOpts{
Name: constants.PrometheusMetricsPrefix + "queries",
Help: "Counter of reporters' queries (like chain status, aliases etc.)",
}, []string{"reporter", "type"}),

// Subscription metrics
subscriptionsInfoCounter: promauto.NewGaugeVec(prometheus.GaugeOpts{
Expand Down Expand Up @@ -306,6 +311,15 @@ func (m *Manager) LogMatchedEvent(chain string, eventType string, subscription s
Inc()
}

func (m *Manager) LogReporterQuery(reporterName string, query constants.ReporterQuery) {
m.reporterQueriesCounter.
With(prometheus.Labels{
"reporter": reporterName,
"type": string(query),
}).
Inc()
}

func (m *Manager) LogNodeReconnect(chain string, node string) {
m.reconnectsCounter.
With(prometheus.Labels{"chain": chain, "node": node}).
Expand Down
3 changes: 3 additions & 0 deletions pkg/reporters/reporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"main/pkg/config"
configTypes "main/pkg/config/types"
"main/pkg/constants"
"main/pkg/metrics"
nodesManager "main/pkg/nodes_manager"
"main/pkg/reporters/telegram"
"main/pkg/types"
Expand Down Expand Up @@ -37,6 +38,7 @@ func GetReporter(
logger *zerolog.Logger,
nodesManager *nodesManager.NodesManager,
aliasManager *alias_manager.AliasManager,
metricsManager *metrics.Manager,
version string,
) Reporter {
if reporterConfig.Type == constants.ReporterTypeTelegram {
Expand All @@ -46,6 +48,7 @@ func GetReporter(
logger,
nodesManager,
aliasManager,
metricsManager,
version,
)
}
Expand Down
3 changes: 3 additions & 0 deletions pkg/reporters/telegram/get_aliases.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package telegram

import (
"fmt"
"main/pkg/constants"

tele "gopkg.in/telebot.v3"
)
Expand All @@ -12,6 +13,8 @@ func (reporter *Reporter) HandleGetAliases(c tele.Context) error {
Str("text", c.Text()).
Msg("Got get aliases query")

reporter.MetricsManager.LogReporterQuery(reporter.Name(), constants.ReporterQueryGetAliases)

if !reporter.AliasManager.Enabled() {
return reporter.BotReply(c, "Aliases manager not enabled")
}
Expand Down
3 changes: 3 additions & 0 deletions pkg/reporters/telegram/get_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package telegram

import (
"fmt"
"main/pkg/constants"

tele "gopkg.in/telebot.v3"
)
Expand All @@ -12,6 +13,8 @@ func (reporter *Reporter) HandleGetConfig(c tele.Context) error {
Str("text", c.Text()).
Msg("Got get config query")

reporter.MetricsManager.LogReporterQuery(reporter.Name(), constants.ReporterQueryGetConfig)

configString, err := reporter.Config.GetConfigAsString()
if err != nil {
return reporter.BotReply(c, fmt.Sprintf("Error converting config to string: %s", err))
Expand Down
4 changes: 4 additions & 0 deletions pkg/reporters/telegram/help.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package telegram

import (
"main/pkg/constants"

tele "gopkg.in/telebot.v3"
)

Expand All @@ -10,6 +12,8 @@ func (reporter *Reporter) HandleHelp(c tele.Context) error {
Str("text", c.Text()).
Msg("Got help query")

reporter.MetricsManager.LogReporterQuery(reporter.Name(), constants.ReporterQueryHelp)

template, err := reporter.Render("Help", reporter.Version)
if err != nil {
return err
Expand Down
3 changes: 3 additions & 0 deletions pkg/reporters/telegram/list_nodes_status.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package telegram

import (
"main/pkg/constants"
"main/pkg/types"

tele "gopkg.in/telebot.v3"
Expand All @@ -12,6 +13,8 @@ func (reporter *Reporter) HandleListNodesStatus(c tele.Context) error {
Str("text", c.Text()).
Msg("Got status query")

reporter.MetricsManager.LogReporterQuery(reporter.Name(), constants.ReporterQueryNodesStatus)

statuses := map[string]map[string]types.TendermintRPCStatus{}

for chain, chainNodes := range reporter.NodesManager.Nodes {
Expand Down
3 changes: 3 additions & 0 deletions pkg/reporters/telegram/set_alias.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package telegram

import (
"fmt"
"main/pkg/constants"
"strings"

tele "gopkg.in/telebot.v3"
Expand All @@ -13,6 +14,8 @@ func (reporter *Reporter) HandleSetAlias(c tele.Context) error {
Str("text", c.Text()).
Msg("Got set alias query")

reporter.MetricsManager.LogReporterQuery(reporter.Name(), constants.ReporterQuerySetAlias)

if !reporter.AliasManager.Enabled() {
return reporter.BotReply(c, "Aliases manager not enabled")
}
Expand Down
39 changes: 22 additions & 17 deletions pkg/reporters/telegram/telegram.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"html"
"html/template"
"main/pkg/constants"
"main/pkg/metrics"
"main/pkg/types"
"main/pkg/types/amount"
"time"
Expand All @@ -31,13 +32,15 @@ type Reporter struct {
Chat int64
Admins []int64

TelegramBot *tele.Bot
Logger zerolog.Logger
Templates map[string]*template.Template
NodesManager *nodesManager.NodesManager
Config *config.AppConfig
AliasManager *alias_manager.AliasManager
Version string
TelegramBot *tele.Bot
Logger zerolog.Logger
Templates map[string]*template.Template
NodesManager *nodesManager.NodesManager
Config *config.AppConfig
AliasManager *alias_manager.AliasManager
MetricsManager *metrics.Manager

Version string
}

const (
Expand All @@ -50,19 +53,21 @@ func NewReporter(
logger *zerolog.Logger,
nodesManager *nodesManager.NodesManager,
aliasManager *alias_manager.AliasManager,
metricsManager *metrics.Manager,
version string,
) *Reporter {
return &Reporter{
ReporterName: reporterConfig.Name,
Token: reporterConfig.TelegramConfig.Token,
Chat: reporterConfig.TelegramConfig.Chat,
Admins: reporterConfig.TelegramConfig.Admins,
Config: config,
Logger: logger.With().Str("component", "telegram_reporter").Logger(),
Templates: make(map[string]*template.Template, 0),
NodesManager: nodesManager,
AliasManager: aliasManager,
Version: version,
ReporterName: reporterConfig.Name,
Token: reporterConfig.TelegramConfig.Token,
Chat: reporterConfig.TelegramConfig.Chat,
Admins: reporterConfig.TelegramConfig.Admins,
Config: config,
Logger: logger.With().Str("component", "telegram_reporter").Logger(),
Templates: make(map[string]*template.Template, 0),
NodesManager: nodesManager,
AliasManager: aliasManager,
MetricsManager: metricsManager,
Version: version,
}
}

Expand Down

0 comments on commit 3145d19

Please sign in to comment.