[#1495] Add NTT Protocol Data to /api/v1/protocols/stats Endpoint (#1502)

* use new measurement for protocol stats and add NTT

* reorder consts
This commit is contained in:
Mariano 2024-06-26 14:31:42 -03:00 committed by GitHub
parent cc1f63ef55
commit 9d743e7f5a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 22 additions and 23 deletions

View File

@ -19,7 +19,8 @@ const QueryCoreProtocolTotalStartOfDay = `
data = from(bucket: "%s") data = from(bucket: "%s")
|> range(start: 1970-01-01T00:00:00Z,stop:startOfCurrentDay) |> range(start: 1970-01-01T00:00:00Z,stop:startOfCurrentDay)
|> filter(fn: (r) => r._measurement == "%s" and r.app_id == "%s") |> filter(fn: (r) => r._measurement == "%s" and r.version == "v1" and r.app_id == "TOTAL_%s")
|> drop(columns: ["emitter_chain","destination_chain","version"])
tvt = data tvt = data
|> filter(fn : (r) => r._field == "total_value_transferred") |> filter(fn : (r) => r._field == "total_value_transferred")
@ -51,7 +52,8 @@ const QueryCoreProtocolDeltaSinceStartOfDay = `
data = from(bucket: "%s") data = from(bucket: "%s")
|> range(start: startOfDay,stop:ts) |> range(start: startOfDay,stop:ts)
|> filter(fn: (r) => r._measurement == "%s" and r.app_id == "%s") |> filter(fn: (r) => r._measurement == "%s" and r.app_id == "TOTAL_%s")
|> drop(columns: ["emitter_chain","destination_chain","version"])
tvt = data tvt = data
|> filter(fn : (r) => r._field == "total_value_transferred") |> filter(fn : (r) => r._field == "total_value_transferred")
@ -83,7 +85,8 @@ const QueryCoreProtocolDeltaLastDay = `
data = from(bucket: "%s") data = from(bucket: "%s")
|> range(start: yesterday,stop:ts) |> range(start: yesterday,stop:ts)
|> filter(fn: (r) => r._measurement == "%s" and r.app_id == "%s") |> filter(fn: (r) => r._measurement == "%s" and r.app_id == "TOTAL_%s")
|> drop(columns: ["emitter_chain","destination_chain"])
tvt = data tvt = data
|> filter(fn : (r) => r._field == "total_value_transferred") |> filter(fn : (r) => r._field == "total_value_transferred")
@ -174,7 +177,7 @@ type Repository struct {
logger *zap.Logger logger *zap.Logger
bucketInfinite string bucketInfinite string
bucket30d string bucket30d string
coreProtocolMeasurement map[string]struct { coreProtocolMeasurement struct {
Daily string Daily string
Hourly string Hourly string
} }
@ -238,12 +241,12 @@ func NewRepository(qApi QueryDoer, bucketInfinite, bucket30d string, logger *zap
bucketInfinite: bucketInfinite, bucketInfinite: bucketInfinite,
bucket30d: bucket30d, bucket30d: bucket30d,
logger: logger, logger: logger,
coreProtocolMeasurement: map[string]struct { coreProtocolMeasurement: struct {
Daily string Daily string
Hourly string Hourly string
}{ }{
CCTP: {Daily: dbconsts.CctpStatsMeasurementDaily, Hourly: dbconsts.CctpStatsMeasurementHourly}, Daily: dbconsts.TotalProtocolsStatsDaily,
PortalTokenBridge: {Daily: dbconsts.TokenBridgeStatsMeasurementDaily, Hourly: dbconsts.TokenBridgeStatsMeasurementHourly}, Hourly: dbconsts.TotalProtocolsStatsHourly,
}, },
} }
} }
@ -312,14 +315,14 @@ func (r *Repository) getProtocolActivity(ctx context.Context, protocol string) (
func (r *Repository) getCoreProtocolStats(ctx context.Context, protocol string) (intStats, error) { func (r *Repository) getCoreProtocolStats(ctx context.Context, protocol string) (intStats, error) {
// calculate total values till the start of current day // calculate total values till the start of current day
totalTillCurrentDayQuery := fmt.Sprintf(QueryCoreProtocolTotalStartOfDay, r.bucketInfinite, r.coreProtocolMeasurement[protocol].Daily, protocol, protocol) totalTillCurrentDayQuery := fmt.Sprintf(QueryCoreProtocolTotalStartOfDay, r.bucketInfinite, r.coreProtocolMeasurement.Daily, protocol, protocol)
totalsUntilToday, err := fetchSingleRecordData[intRowStat](r.logger, r.queryAPI, ctx, totalTillCurrentDayQuery, protocol) totalsUntilToday, err := fetchSingleRecordData[intRowStat](r.logger, r.queryAPI, ctx, totalTillCurrentDayQuery, protocol)
if err != nil { if err != nil {
return intStats{}, err return intStats{}, err
} }
// calculate delta since the beginning of current day // calculate delta since the beginning of current day
q2 := fmt.Sprintf(QueryCoreProtocolDeltaSinceStartOfDay, r.bucket30d, r.coreProtocolMeasurement[protocol].Hourly, protocol, protocol) q2 := fmt.Sprintf(QueryCoreProtocolDeltaSinceStartOfDay, r.bucket30d, r.coreProtocolMeasurement.Hourly, protocol, protocol)
currentDayStats, errCD := fetchSingleRecordData[intRowStat](r.logger, r.queryAPI, ctx, q2, protocol) currentDayStats, errCD := fetchSingleRecordData[intRowStat](r.logger, r.queryAPI, ctx, q2, protocol)
if errCD != nil { if errCD != nil {
return intStats{}, errCD return intStats{}, errCD
@ -336,7 +339,7 @@ func (r *Repository) getCoreProtocolStats(ctx context.Context, protocol string)
} }
// calculate last day delta // calculate last day delta
q3 := fmt.Sprintf(QueryCoreProtocolDeltaLastDay, r.bucket30d, r.coreProtocolMeasurement[protocol].Hourly, protocol, protocol) q3 := fmt.Sprintf(QueryCoreProtocolDeltaLastDay, r.bucket30d, r.coreProtocolMeasurement.Hourly, protocol, protocol)
deltaYesterdayStats, errQ3 := fetchSingleRecordData[intRowStat](r.logger, r.queryAPI, ctx, q3, protocol) deltaYesterdayStats, errQ3 := fetchSingleRecordData[intRowStat](r.logger, r.queryAPI, ctx, q3, protocol)
if errQ3 != nil { if errQ3 != nil {
return result, errQ3 return result, errQ3

View File

@ -14,6 +14,7 @@ import (
const CCTP = "CCTP_WORMHOLE_INTEGRATION" const CCTP = "CCTP_WORMHOLE_INTEGRATION"
const PortalTokenBridge = "PORTAL_TOKEN_BRIDGE" const PortalTokenBridge = "PORTAL_TOKEN_BRIDGE"
const NTT = "NATIVE_TOKEN_TRANSFER"
type Service struct { type Service struct {
Protocols []string Protocols []string
@ -90,6 +91,8 @@ func getProtocolNameDto(protocol string) string {
return "cctp" return "cctp"
case PortalTokenBridge: case PortalTokenBridge:
return "portal_token_bridge" return "portal_token_bridge"
case NTT:
return strings.ToLower(NTT)
default: default:
return protocol return protocol
} }

View File

@ -239,9 +239,9 @@ func TestService_GetCCTP_Stats(t *testing.T) {
ctx := context.Background() ctx := context.Background()
queryAPI := &mockQueryAPI{} queryAPI := &mockQueryAPI{}
queryAPI.On("Query", ctx, fmt.Sprintf(protocols.QueryCoreProtocolTotalStartOfDay, "bucketInfinite", dbconsts.CctpStatsMeasurementDaily, protocols.PortalTokenBridge, protocols.PortalTokenBridge)).Return(totalStartOfCurrentDay, errNil) queryAPI.On("Query", ctx, fmt.Sprintf(protocols.QueryCoreProtocolTotalStartOfDay, "bucketInfinite", dbconsts.TotalProtocolsStatsDaily, protocols.PortalTokenBridge, protocols.PortalTokenBridge)).Return(totalStartOfCurrentDay, errNil)
queryAPI.On("Query", ctx, fmt.Sprintf(protocols.QueryCoreProtocolDeltaSinceStartOfDay, "bucket30d", dbconsts.CctpStatsMeasurementHourly, protocols.PortalTokenBridge, protocols.PortalTokenBridge)).Return(deltaSinceStartOfDay, errNil) queryAPI.On("Query", ctx, fmt.Sprintf(protocols.QueryCoreProtocolDeltaSinceStartOfDay, "bucket30d", dbconsts.TotalProtocolsStatsHourly, protocols.PortalTokenBridge, protocols.PortalTokenBridge)).Return(deltaSinceStartOfDay, errNil)
queryAPI.On("Query", ctx, fmt.Sprintf(protocols.QueryCoreProtocolDeltaLastDay, "bucket30d", dbconsts.CctpStatsMeasurementHourly, protocols.PortalTokenBridge, protocols.PortalTokenBridge)).Return(deltaLastDay, errNil) queryAPI.On("Query", ctx, fmt.Sprintf(protocols.QueryCoreProtocolDeltaLastDay, "bucket30d", dbconsts.TotalProtocolsStatsHourly, protocols.PortalTokenBridge, protocols.PortalTokenBridge)).Return(deltaLastDay, errNil)
repository := protocols.NewRepository(queryAPI, "bucketInfinite", "bucket30d", zap.NewNop()) repository := protocols.NewRepository(queryAPI, "bucketInfinite", "bucket30d", zap.NewNop())
service := protocols.NewService([]string{}, []string{protocols.PortalTokenBridge}, repository, zap.NewNop(), cache.NewDummyCacheClient(), "WORMSCAN:PROTOCOLS", 0, metrics.NewNoOpMetrics(), &mockTvl{}) service := protocols.NewService([]string{}, []string{protocols.PortalTokenBridge}, repository, zap.NewNop(), cache.NewDummyCacheClient(), "WORMSCAN:PROTOCOLS", 0, metrics.NewNoOpMetrics(), &mockTvl{})

View File

@ -182,7 +182,7 @@ func main() {
relaysService := relays.NewService(relaysRepo, rootLogger) relaysService := relays.NewService(relaysRepo, rootLogger)
operationsService := operations.NewService(operationsRepo, rootLogger) operationsService := operations.NewService(operationsRepo, rootLogger)
statsService := stats.NewService(statsRepo, cache, expirationTime, metrics, rootLogger) statsService := stats.NewService(statsRepo, cache, expirationTime, metrics, rootLogger)
protocolsService := protocols.NewService(cfg.Protocols, []string{protocols.CCTP, protocols.PortalTokenBridge}, protocolsRepo, rootLogger, cache, cfg.Cache.ProtocolsStatsKey, cfg.Cache.ProtocolsStatsExpiration, metrics, tvl) protocolsService := protocols.NewService(cfg.Protocols, []string{protocols.CCTP, protocols.PortalTokenBridge, protocols.NTT}, protocolsRepo, rootLogger, cache, cfg.Cache.ProtocolsStatsKey, cfg.Cache.ProtocolsStatsExpiration, metrics, tvl)
guardianService := guardianHandlers.NewService(guardianSetRepository, cfg.P2pNetwork, cache, metrics, rootLogger) guardianService := guardianHandlers.NewService(guardianSetRepository, cfg.P2pNetwork, cache, metrics, rootLogger)
// Set up a custom error handler // Set up a custom error handler

View File

@ -1,17 +1,10 @@
package dbconsts package dbconsts
// influx-db constants
const ( const (
ProtocolsActivityMeasurementHourly = "protocols_activity_1h" ProtocolsActivityMeasurementHourly = "protocols_activity_1h"
ProtocolsActivityMeasurementDaily = "protocols_activity_1d" ProtocolsActivityMeasurementDaily = "protocols_activity_1d"
ProtocolsStatsMeasurementDaily = "protocols_stats_1d" ProtocolsStatsMeasurementDaily = "protocols_stats_1d"
ProtocolsStatsMeasurementHourly = "protocols_stats_1h" ProtocolsStatsMeasurementHourly = "protocols_stats_1h"
TotalProtocolsStatsDaily = "protocols_stats_totals_1d"
CctpStatsMeasurementHourly = intProtocolStatsMeasurement1h TotalProtocolsStatsHourly = "protocols_stats_totals_1h"
TokenBridgeStatsMeasurementHourly = intProtocolStatsMeasurement1h
intProtocolStatsMeasurement1h = "core_protocols_stats_1h"
CctpStatsMeasurementDaily = intProtocolStatsMeasurement1d
TokenBridgeStatsMeasurementDaily = intProtocolStatsMeasurement1d
intProtocolStatsMeasurement1d = "core_protocols_stats_1d"
) )