Skip to content

Commit

Permalink
Merge branch 'develop' into relay-contractreader-aaron
Browse files Browse the repository at this point in the history
  • Loading branch information
aalu1418 committed May 24, 2024
2 parents b47649f + e1c5493 commit 7f45458
Show file tree
Hide file tree
Showing 15 changed files with 391 additions and 71 deletions.
9 changes: 7 additions & 2 deletions cmd/monitoring/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,17 +94,22 @@ func main() {
metrics.NewFeedBalances(logger.With(log, "component", promMetrics)),
)
reportObservationsFactory := exporter.NewReportObservationsFactory(
logger.With(log, "component", "solana-prome-exporter"),
logger.With(log, "component", promExporter),
metrics.NewReportObservations(logger.With(log, "component", promMetrics)),
)
feesFactory := exporter.NewFeesFactory(
logger.With(log, "component", "solana-prome-exporter"),
logger.With(log, "component", promExporter),
metrics.NewFees(logger.With(log, "component", promMetrics)),
)
nodeSuccessFactory := exporter.NewNodeSuccessFactory(
logger.With(log, "component", promExporter),
metrics.NewNodeSuccess(logger.With(log, "component", promMetrics)),
)
monitor.ExporterFactories = append(monitor.ExporterFactories,
feedBalancesExporterFactory,
reportObservationsFactory,
feesFactory,
nodeSuccessFactory,
)

// network exporters
Expand Down
39 changes: 4 additions & 35 deletions integration-tests/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,25 +27,18 @@ import (
"github.com/smartcontractkit/chainlink-testing-framework/k8s/pkg/helm/chainlink"
mock_adapter "github.com/smartcontractkit/chainlink-testing-framework/k8s/pkg/helm/mock-adapter"
"github.com/smartcontractkit/chainlink-testing-framework/k8s/pkg/helm/sol"
"github.com/smartcontractkit/chainlink-testing-framework/utils/ptr"

"github.com/smartcontractkit/chainlink/integration-tests/client"
"github.com/smartcontractkit/chainlink/integration-tests/contracts"
"github.com/smartcontractkit/chainlink/integration-tests/docker/test_env"
"github.com/smartcontractkit/chainlink/integration-tests/types/config/node"

cl "github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
"github.com/smartcontractkit/chainlink/v2/core/services/job"
"github.com/smartcontractkit/chainlink/v2/core/store/models"

"github.com/smartcontractkit/chainlink-common/pkg/config"
commonconfig "github.com/smartcontractkit/chainlink-common/pkg/config"

chainConfig "github.com/smartcontractkit/chainlink-solana/integration-tests/config"
test_env_sol "github.com/smartcontractkit/chainlink-solana/integration-tests/docker/testenv"
"github.com/smartcontractkit/chainlink-solana/integration-tests/solclient"
tc "github.com/smartcontractkit/chainlink-solana/integration-tests/testconfig"
solcfg "github.com/smartcontractkit/chainlink-solana/pkg/solana/config"
)

type Common struct {
Expand Down Expand Up @@ -170,6 +163,9 @@ func New(testConfig *tc.TestConfig) *Common {
},
Env: &environment.Environment{},
}
// provide getters for TestConfig (pointers to chain details)
c.TestConfig.GetChainID = func() string { return c.ChainDetails.ChainID }
c.TestConfig.GetURL = func() string { return c.ChainDetails.RPCUrl }

return c
}
Expand Down Expand Up @@ -483,32 +479,6 @@ func BuildNodeContractPairID(node *client.ChainlinkClient, ocr2Addr string) (str
return strings.ToLower(fmt.Sprintf("node_%s_contract_%s", shortNodeAddr, shortOCRAddr)), nil
}

func (c *Common) DefaultNodeConfig() *cl.Config {
solConfig := solcfg.TOMLConfig{
Enabled: ptr.Ptr(true),
ChainID: ptr.Ptr(c.ChainDetails.ChainID),
Nodes: []*solcfg.Node{
{
Name: ptr.Ptr("primary"),
URL: config.MustParseURL(c.ChainDetails.RPCUrl),
},
},
}
baseConfig := node.NewBaseConfig()
baseConfig.Solana = solcfg.TOMLConfigs{
&solConfig,
}
baseConfig.OCR2.Enabled = ptr.Ptr(true)
baseConfig.P2P.V2.Enabled = ptr.Ptr(true)
fiveSecondDuration := commonconfig.MustNewDuration(5 * time.Second)

baseConfig.P2P.V2.DeltaDial = fiveSecondDuration
baseConfig.P2P.V2.DeltaReconcile = fiveSecondDuration
baseConfig.P2P.V2.ListenAddresses = &[]string{"0.0.0.0:6690"}

return baseConfig
}

func (c *Common) Default(t *testing.T, namespacePrefix string) (*Common, error) {
c.TestEnvDetails.K8Config = &environment.Config{
NamespacePrefix: fmt.Sprintf("solana-%s", namespacePrefix),
Expand All @@ -517,8 +487,7 @@ func (c *Common) Default(t *testing.T, namespacePrefix string) (*Common, error)
}

if *c.TestConfig.Common.InsideK8s {
toml := c.DefaultNodeConfig()
tomlString, err := toml.TOMLString()
tomlString, err := c.TestConfig.GetNodeConfigTOML()
if err != nil {
return nil, err
}
Expand Down
1 change: 0 additions & 1 deletion integration-tests/common/test_common.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,6 @@ func (m *OCRv2TestState) DeployCluster(contractsDir string) {
WithTestInstance(m.Config.T).
WithTestConfig(m.Config.TestConfig).
WithMockAdapter().
WithCLNodeConfig(m.Common.DefaultNodeConfig()).
WithCLNodes(*m.Config.TestConfig.OCR2.NodeCount).
WithCLNodeOptions(m.Common.TestEnvDetails.NodeOpts...).
WithStandardCleanup().
Expand Down
6 changes: 3 additions & 3 deletions integration-tests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ require (
github.com/pelletier/go-toml/v2 v2.1.1
github.com/rs/zerolog v1.30.0
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240524093536-4faf6e011d6d
github.com/smartcontractkit/chainlink-solana v1.0.3-0.20240523174813-45db170c1ccc
github.com/smartcontractkit/chainlink-solana v1.0.3-0.20240524131846-a10ff1f030c9
github.com/smartcontractkit/chainlink-testing-framework v1.28.15
github.com/smartcontractkit/chainlink/integration-tests v0.0.0-20240515225456-aeb9f4d50d65
github.com/smartcontractkit/chainlink/v2 v2.10.0-beta0.0.20240524101405-efc810b13911
github.com/smartcontractkit/chainlink/integration-tests v0.0.0-20240524135402-6bd866a31530
github.com/smartcontractkit/chainlink/v2 v2.10.0-beta0.0.20240524135402-6bd866a31530
github.com/smartcontractkit/libocr v0.0.0-20240419185742-fd3cab206b2c
github.com/smartcontractkit/seth v1.0.9
github.com/stretchr/testify v1.9.0
Expand Down
8 changes: 4 additions & 4 deletions integration-tests/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1422,10 +1422,10 @@ github.com/smartcontractkit/chainlink-testing-framework/grafana v0.0.0-202403282
github.com/smartcontractkit/chainlink-testing-framework/grafana v0.0.0-20240328204215-ac91f55f1449/go.mod h1:DC8sQMyTlI/44UCTL8QWFwb0bYNoXCfjwCv2hMivYZU=
github.com/smartcontractkit/chainlink-vrf v0.0.0-20240222010609-cd67d123c772 h1:LQmRsrzzaYYN3wEU1l5tWiccznhvbyGnu2N+wHSXZAo=
github.com/smartcontractkit/chainlink-vrf v0.0.0-20240222010609-cd67d123c772/go.mod h1:Kn1Hape05UzFZ7bOUnm3GVsHzP0TNrVmpfXYNHdqGGs=
github.com/smartcontractkit/chainlink/integration-tests v0.0.0-20240515225456-aeb9f4d50d65 h1:8AoBDPHOLgZA1JodqysYK/JxcVbjwNhyGfmwzQuep4s=
github.com/smartcontractkit/chainlink/integration-tests v0.0.0-20240515225456-aeb9f4d50d65/go.mod h1:DOeyxJuvSV8No26UHAtmvZTycuGe0S4w/XMMj1EGMV8=
github.com/smartcontractkit/chainlink/v2 v2.10.0-beta0.0.20240524101405-efc810b13911 h1:txjA8yF/ztl/B3BgOIyUfoEnw7k4JJwRQvQ2qZtFqPg=
github.com/smartcontractkit/chainlink/v2 v2.10.0-beta0.0.20240524101405-efc810b13911/go.mod h1:N+101og7dx8dY81uqMJqpCqu56IY2G55DoYbMGwvruM=
github.com/smartcontractkit/chainlink/integration-tests v0.0.0-20240524135402-6bd866a31530 h1:QmIxClaisbyLQ06Ztbq+u1pvd9j/7fDC2QKHq3GbFQg=
github.com/smartcontractkit/chainlink/integration-tests v0.0.0-20240524135402-6bd866a31530/go.mod h1:+a2IIu/Q1+fB9mPkbjNyYUZcM91YDYfivzByE9kDIco=
github.com/smartcontractkit/chainlink/v2 v2.10.0-beta0.0.20240524135402-6bd866a31530 h1:yEddXtOMcIlx+UbI+DfeFcYdyd3xM8/xlCl1Qa9W7ik=
github.com/smartcontractkit/chainlink/v2 v2.10.0-beta0.0.20240524135402-6bd866a31530/go.mod h1:GoS6m5Bn8aAYLgy2231pxbfr4fSD3rmJBd0Jg2m+gvs=
github.com/smartcontractkit/go-plugin v0.0.0-20231003134350-e49dad63b306 h1:ko88+ZznniNJZbZPWAvHQU8SwKAdHngdDZ+pvVgB5ss=
github.com/smartcontractkit/go-plugin v0.0.0-20231003134350-e49dad63b306/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4=
github.com/smartcontractkit/grpc-proxy v0.0.0-20230731113816-f1be6620749f h1:hgJif132UCdjo8u43i7iPN1/MFnu49hv7lFGFftCHKU=
Expand Down
54 changes: 53 additions & 1 deletion integration-tests/testconfig/testconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import (
"encoding/base64"
"errors"
"fmt"
"log"
"os"
"strings"
"time"

"github.com/barkimedes/go-deepcopy"
"github.com/google/uuid"
Expand All @@ -15,14 +17,18 @@ import (
"golang.org/x/text/cases"
"golang.org/x/text/language"

"github.com/smartcontractkit/chainlink-common/pkg/config"
"github.com/smartcontractkit/chainlink/integration-tests/types/config/node"
"github.com/smartcontractkit/seth"

ctf_config "github.com/smartcontractkit/chainlink-testing-framework/config"
k8s_config "github.com/smartcontractkit/chainlink-testing-framework/k8s/config"
"github.com/smartcontractkit/chainlink-testing-framework/logging"
"github.com/smartcontractkit/chainlink-testing-framework/utils/osutil"
"github.com/smartcontractkit/chainlink-testing-framework/utils/ptr"

ocr2_config "github.com/smartcontractkit/chainlink-solana/integration-tests/testconfig/ocr2"
solcfg "github.com/smartcontractkit/chainlink-solana/pkg/solana/config"
)

type TestConfig struct {
Expand All @@ -34,6 +40,10 @@ type TestConfig struct {
OCR2 *ocr2_config.Config `toml:"OCR2"`
SolanaConfig *SolanaConfig `toml:"SolanaConfig"`
ConfigurationName string `toml:"-"`

// getter funcs for passing parameters
GetChainID func() string
GetURL func() string
}

func (c *TestConfig) GetLoggingConfig() *ctf_config.LoggingConfig {
Expand All @@ -53,7 +63,49 @@ func (c *TestConfig) GetSethConfig() *seth.Config {
}

func (c *TestConfig) GetNodeConfig() *ctf_config.NodeConfig {
return nil
cfgTOML, err := c.GetNodeConfigTOML()
if err != nil {
log.Fatalf("failed to parse TOML config: %s", err)
return nil
}

return &ctf_config.NodeConfig{
BaseConfigTOML: cfgTOML,
}
}

func (c *TestConfig) GetNodeConfigTOML() (string, error) {
var chainID, url string
if c.GetChainID != nil {
chainID = c.GetChainID()
}
if c.GetURL != nil {
url = c.GetURL()
}

solConfig := solcfg.TOMLConfig{
Enabled: ptr.Ptr(true),
ChainID: ptr.Ptr(chainID),
Nodes: []*solcfg.Node{
{
Name: ptr.Ptr("primary"),
URL: config.MustParseURL(url),
},
},
}
baseConfig := node.NewBaseConfig()
baseConfig.Solana = solcfg.TOMLConfigs{
&solConfig,
}
baseConfig.OCR2.Enabled = ptr.Ptr(true)
baseConfig.P2P.V2.Enabled = ptr.Ptr(true)
fiveSecondDuration := config.MustNewDuration(5 * time.Second)

baseConfig.P2P.V2.DeltaDial = fiveSecondDuration
baseConfig.P2P.V2.DeltaReconcile = fiveSecondDuration
baseConfig.P2P.V2.ListenAddresses = &[]string{"0.0.0.0:6690"}

return baseConfig.TOMLString()
}

var embeddedConfigs embed.FS
Expand Down
111 changes: 111 additions & 0 deletions pkg/monitoring/exporter/nodesuccess.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package exporter

import (
"context"

"github.com/gagliardetto/solana-go"
commonMonitoring "github.com/smartcontractkit/chainlink-common/pkg/monitoring"

"github.com/smartcontractkit/chainlink-solana/pkg/monitoring/config"
"github.com/smartcontractkit/chainlink-solana/pkg/monitoring/metrics"
"github.com/smartcontractkit/chainlink-solana/pkg/monitoring/types"
)

func NewNodeSuccessFactory(
log commonMonitoring.Logger,
metrics metrics.NodeSuccess,
) commonMonitoring.ExporterFactory {
return &nodeSuccessFactory{
log,
metrics,
}
}

type nodeSuccessFactory struct {
log commonMonitoring.Logger
metrics metrics.NodeSuccess
}

func (p *nodeSuccessFactory) NewExporter(
params commonMonitoring.ExporterParams,
) (commonMonitoring.Exporter, error) {
nodes, err := config.MakeSolanaNodeConfigs(params.Nodes)
if err != nil {
return nil, err
}

nodesMap := map[solana.PublicKey]string{}
for _, v := range nodes {
pubkey, err := v.PublicKey()
if err != nil {
return nil, err
}
nodesMap[pubkey] = v.GetName()
}

return &nodeSuccess{
metrics.FeedInput{
AccountAddress: params.FeedConfig.GetContractAddress(),
FeedID: params.FeedConfig.GetContractAddress(),
ChainID: params.ChainConfig.GetChainID(),
ContractStatus: params.FeedConfig.GetContractStatus(),
ContractType: params.FeedConfig.GetContractType(),
FeedName: params.FeedConfig.GetName(),
FeedPath: params.FeedConfig.GetPath(),
NetworkID: params.ChainConfig.GetNetworkID(),
NetworkName: params.ChainConfig.GetNetworkName(),
},
nodesMap,
p.log,
p.metrics,
}, nil
}

type nodeSuccess struct {
feedLabel metrics.FeedInput // static for each feed
nodes map[solana.PublicKey]string
log commonMonitoring.Logger
metrics metrics.NodeSuccess
}

func (p *nodeSuccess) Export(ctx context.Context, data interface{}) {
details, err := types.MakeTxDetails(data)
if err != nil {
return // skip if input could not be parsed
}

// skip on no updates
if len(details) == 0 {
return
}

// calculate count
count := map[solana.PublicKey]int{}
for _, d := range details {
count[d.Sender]++
}

for k, v := range count {
name, isOperator := p.nodes[k]
if !isOperator {
p.log.Debugw("Sender does not match known operator", "sender", k)
continue // skip if not known operator
}

p.metrics.Add(v, metrics.NodeFeedInput{
NodeAddress: k.String(),
NodeOperator: name,
FeedInput: p.feedLabel,
})
}
}

func (p *nodeSuccess) Cleanup(_ context.Context) {
for k, v := range p.nodes {
p.metrics.Cleanup(metrics.NodeFeedInput{
NodeAddress: k.String(),
NodeOperator: v,
FeedInput: p.feedLabel,
})
}
}
Loading

0 comments on commit 7f45458

Please sign in to comment.