From 77eff1e8a581da02fa17d772dd5b7e789edd4c50 Mon Sep 17 00:00:00 2001 From: naneey Date: Mon, 7 Oct 2024 10:23:26 +0545 Subject: [PATCH 1/6] fix: client caching --- .../chainService/relay/collector/collector.go | 48 +++---- .../relay/collector/collector_test.go | 118 ++++++++++++------ attestor/chainService/relay/signer/sign.go | 22 ++-- 3 files changed, 108 insertions(+), 80 deletions(-) diff --git a/attestor/chainService/relay/collector/collector.go b/attestor/chainService/relay/collector/collector.go index 61932a45..6550be3f 100644 --- a/attestor/chainService/relay/collector/collector.go +++ b/attestor/chainService/relay/collector/collector.go @@ -71,27 +71,20 @@ type collector struct { uri string chainIDToAddress map[string]string // chainID: walletAddress collectorWaitDur time.Duration - caCert *x509.CertPool - attestorCert tls.Certificate + collectorClient *http.Client } func (c *collector) CheckCollectorHealth(ctx context.Context) error { - client := &http.Client{ - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{ - RootCAs: c.caCert, - Certificates: []tls.Certificate{c.attestorCert}, - }, - }, - } + ctx, cncl := context.WithTimeout(ctx, time.Minute) + defer cncl() req, err := http.NewRequestWithContext(ctx, http.MethodGet, c.uri, nil) if err != nil { return err } - resp, err := client.Do(req) + resp, err := c.collectorClient.Do(req) if err != nil { logger.GetLogger().Error(err.Error()) return err @@ -138,22 +131,13 @@ func (c *collector) SendToCollector(ctx context.Context, sp *chain.ScreenedPacke ctx, cncl := context.WithTimeout(ctx, time.Minute) defer cncl() - client := &http.Client{ - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{ - RootCAs: c.caCert, - Certificates: []tls.Certificate{c.attestorCert}, - }, - }, - } - req, err := http.NewRequestWithContext(ctx, http.MethodPost, u.String(), io.NopCloser(buf)) if err != nil { return err } req.Header.Set("content-type", contentType) - resp, err := client.Do(req) + resp, err := c.collectorClient.Do(req) if err != nil { return err } @@ -224,20 +208,13 @@ func (c *collector) ReceivePktsFromCollector(ctx context.Context, ch chan<- *cha u.RawQuery = queryParams.Encode() ctx, cncl := context.WithTimeout(ctx, time.Minute) - client := &http.Client{ - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{ - RootCAs: c.caCert, - Certificates: []tls.Certificate{c.attestorCert}, - }, - }, - } + req, err := http.NewRequestWithContext(ctx, http.MethodGet, u.String(), nil) if err != nil { goto postFor } - resp, err = client.Do(req) + resp, err = c.collectorClient.Do(req) if err != nil { goto postFor } @@ -288,12 +265,19 @@ func SetupCollector(cfg config.CollecterServiceConfig, chainIDToAddress map[stri if err != nil { log.Fatal(err) } + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: caCertPool, + Certificates: []tls.Certificate{attestorCert}, + }, + }, + } collc = collector{ uri: cfg.Uri, collectorWaitDur: waitTime, chainIDToAddress: make(map[string]string), - caCert: caCertPool, - attestorCert: attestorCert, + collectorClient: client, } for k, v := range chainIDToAddress { diff --git a/attestor/chainService/relay/collector/collector_test.go b/attestor/chainService/relay/collector/collector_test.go index 13ab1465..504fed2b 100644 --- a/attestor/chainService/relay/collector/collector_test.go +++ b/attestor/chainService/relay/collector/collector_test.go @@ -6,7 +6,6 @@ import ( "crypto/x509" "encoding/json" "fmt" - "io" "math/big" "net/http" "net/http/httptest" @@ -56,12 +55,19 @@ func TestSendToCollector(t *testing.T) { attestorCert, _ := tls.LoadX509KeyPair("../../../chainService/.mtls/attestor1.crt", "../../../chainService/.mtls/attestor1.key") + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: caCertPool, + Certificates: []tls.Certificate{attestorCert}, + }, + }, + } collec := &collector{ uri: uri, chainIDToAddress: chainIdToAddress, collectorWaitDur: time.Second, - caCert: caCertPool, - attestorCert: attestorCert, + collectorClient: client, } sp := &chain.ScreenedPacket{ Packet: &chain.Packet{ @@ -87,10 +93,28 @@ func TestSendToCollector(t *testing.T) { "2": "aleoaddr", "1": "ethAddr", } + + caCert, _ := os.ReadFile("../../../chainService/.mtls/ca.cer") + + caCertPool := x509.NewCertPool() + caCertPool.AppendCertsFromPEM(caCert) + + attestorCert, _ := tls.LoadX509KeyPair("../../../chainService/.mtls/attestor1.crt", + "../../../chainService/.mtls/attestor1.key") + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: caCertPool, + Certificates: []tls.Certificate{attestorCert}, + }, + }, + } + collec := &collector{ uri: uri, chainIDToAddress: chainIdToAddress, collectorWaitDur: time.Second, + collectorClient: client, } sp := &chain.ScreenedPacket{ Packet: &chain.Packet{ @@ -120,10 +144,26 @@ func TestSendToCollector(t *testing.T) { "2": "aleoaddr", "1": "ethAddr", } + caCert, _ := os.ReadFile("../../../chainService/.mtls/ca.cer") + + caCertPool := x509.NewCertPool() + caCertPool.AppendCertsFromPEM(caCert) + + attestorCert, _ := tls.LoadX509KeyPair("../../../chainService/.mtls/attestor1.crt", + "../../../chainService/.mtls/attestor1.key") + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: caCertPool, + Certificates: []tls.Certificate{attestorCert}, + }, + }, + } collec := &collector{ uri: uri, chainIDToAddress: chainIdToAddress, collectorWaitDur: time.Second, + collectorClient: client, } sp := &chain.ScreenedPacket{ Packet: &chain.Packet{ @@ -202,10 +242,27 @@ func TestGetPktsFromCollector(t *testing.T) { "2": "aleoaddr", "1": "ethAddr", } + + caCert, _ := os.ReadFile("../../../chainService/.mtls/ca.cer") + + caCertPool := x509.NewCertPool() + caCertPool.AppendCertsFromPEM(caCert) + + attestorCert, _ := tls.LoadX509KeyPair("../../../chainService/.mtls/attestor1.crt", + "../../../chainService/.mtls/attestor1.key") + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: caCertPool, + Certificates: []tls.Certificate{attestorCert}, + }, + }, + } collec := &collector{ uri: uri, chainIDToAddress: chainIdToAddress, collectorWaitDur: time.Second, + collectorClient: client, } ctx, cancel := context.WithCancel(context.Background()) @@ -238,10 +295,27 @@ func TestGetPktsFromCollector(t *testing.T) { "2": "aleoaddr", "1": "ethAddr", } + + caCert, _ := os.ReadFile("../../../chainService/.mtls/ca.cer") + + caCertPool := x509.NewCertPool() + caCertPool.AppendCertsFromPEM(caCert) + + attestorCert, _ := tls.LoadX509KeyPair("../../../chainService/.mtls/attestor1.crt", + "../../../chainService/.mtls/attestor1.key") + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: caCertPool, + Certificates: []tls.Certificate{attestorCert}, + }, + }, + } collec := &collector{ uri: uri, chainIDToAddress: chainIdToAddress, collectorWaitDur: time.Second, + collectorClient: client, } ctx, cancel := context.WithTimeout(context.Background(), time.Second*3) @@ -256,41 +330,3 @@ func TestGetPktsFromCollector(t *testing.T) { }) } -func TestMTLSIntegration(t *testing.T) { - dbUrl := "https://aleomtls.ibriz.ai/" - - caCert, err := os.ReadFile("../../../chainService/ca.cer") - assert.NoError(t, err) - - caCertPool := x509.NewCertPool() - caCertPool.AppendCertsFromPEM(caCert) - - cert, err := tls.LoadX509KeyPair("../../../chainService/attestor-stresstest.crt", - "../../../chainService/attestor-stresstest.key") - assert.NoError(t, err) - - client := &http.Client{ - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{ - RootCAs: caCertPool, - Certificates: []tls.Certificate{cert}, - }, - }, - } - - resp, err := client.Get(dbUrl) - if err != nil { - fmt.Println("Connection failed:", err) - - } - - body, err := io.ReadAll(resp.Body) - fmt.Println("Response Body:", string(body)) - - if resp.StatusCode != http.StatusOK { - fmt.Println("Bad request :", resp.StatusCode) - } - assert.Equal(t, resp.StatusCode, http.StatusOK) - assert.NoError(t, err) - -} diff --git a/attestor/chainService/relay/signer/sign.go b/attestor/chainService/relay/signer/sign.go index 509e87e5..5db226f7 100644 --- a/attestor/chainService/relay/signer/sign.go +++ b/attestor/chainService/relay/signer/sign.go @@ -33,7 +33,8 @@ type SignI interface { var s SignI type signService struct { - url string + url string + signerClient *http.Client } // HashAndSignScreendedPacket calls the signing service to hash and sign the screened packets @@ -52,7 +53,7 @@ func (s *signService) HashAndSignScreenedPacket( return } - resp, err := http.DefaultClient.Do(req) + resp, err := s.signerClient.Do(req) if err != nil { return } @@ -92,12 +93,16 @@ func (s *signService) CheckSigningServiceHealth(ctx context.Context, cfg *config Path: cfg.HealthEndpoint, Scheme: cfg.Scheme, } + + ctx, cncl := context.WithTimeout(ctx, time.Second*30) + defer cncl() + req, err := http.NewRequestWithContext(ctx, http.MethodGet, u.String(), nil) if err != nil { return err } - resp, err := http.DefaultClient.Do(req) + resp, err := s.signerClient.Do(req) if err != nil { return err } @@ -124,20 +129,23 @@ func SetupSigner(cfg *config.SigningServiceConfig) error { User: url.UserPassword(cfg.Username, cfg.Password), } - err := dial(u.String()) + client := &http.Client{} + + err := dial(u.String(), client) if err != nil { return err } s = &signService{ - url: u.String(), + url: u.String(), + signerClient: client, } return nil } // dial simply sends post request on sign endpoint. // without proper request body it should respond with status in 4xx range. -func dial(u string) error { +func dial(u string, client *http.Client) error { ctx, cncl := context.WithTimeout(context.TODO(), time.Second*30) defer cncl() @@ -146,7 +154,7 @@ func dial(u string) error { return err } - resp, err := http.DefaultClient.Do(req) + resp, err := client.Do(req) if err != nil { return err } From 3dc7d8013b20b430028ecde300887794dfa1248f Mon Sep 17 00:00:00 2001 From: naneey Date: Mon, 7 Oct 2024 10:23:50 +0545 Subject: [PATCH 2/6] fix: single instance of gatherer --- attestor/chainService/metrics/metrics.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/attestor/chainService/metrics/metrics.go b/attestor/chainService/metrics/metrics.go index 4e4dcbf4..afca1890 100644 --- a/attestor/chainService/metrics/metrics.go +++ b/attestor/chainService/metrics/metrics.go @@ -214,19 +214,17 @@ func PushMetrics(ctx context.Context, pusher *push.Pusher, pmetrics *PrometheusM ticker := time.NewTicker(5 * time.Second) defer ticker.Stop() + + pusher.Gatherer(pmetrics.Registry) for { select { case <-ctx.Done(): return case <-ticker.C: - gatherer := prometheus.Gatherers{ - pmetrics.Registry, - } - if err := pusher.Gatherer(gatherer).Push(); err != nil { + if err := pusher.Push(); err != nil { logger.GetLogger().Error("Error pushing metrics to Pushgateway:", zap.Error(err)) } - pmetrics = NewPrometheusMetrics() } } From c3fff87c7d8fbc7364d610cbbcd56f6e7def058c Mon Sep 17 00:00:00 2001 From: naneey Date: Mon, 7 Oct 2024 10:24:12 +0545 Subject: [PATCH 3/6] chore:updated chainservice version --- attestor/signingService/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/attestor/signingService/go.mod b/attestor/signingService/go.mod index 239dc1a9..4a1d16ad 100644 --- a/attestor/signingService/go.mod +++ b/attestor/signingService/go.mod @@ -5,7 +5,7 @@ go 1.21.3 require ( github.com/ethereum/go-ethereum v1.13.15 github.com/stretchr/testify v1.8.4 - github.com/venture23-aleo/verulink/attestor/chainService v1.0.0 + github.com/venture23-aleo/verulink/attestor/chainService v1.0.1 gopkg.in/yaml.v3 v3.0.1 ) From a2d5215fa583ca30e07c9a8715fac7317932b335 Mon Sep 17 00:00:00 2001 From: naneey Date: Mon, 7 Oct 2024 11:42:06 +0545 Subject: [PATCH 4/6] chore: add timeout on client --- attestor/chainService/relay/signer/sign.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/attestor/chainService/relay/signer/sign.go b/attestor/chainService/relay/signer/sign.go index 5db226f7..565de250 100644 --- a/attestor/chainService/relay/signer/sign.go +++ b/attestor/chainService/relay/signer/sign.go @@ -48,6 +48,8 @@ func (s *signService) HashAndSignScreenedPacket( } r := bytes.NewBuffer(data) + ctx, cncl := context.WithTimeout(ctx, time.Second*30) + defer cncl() req, err := http.NewRequestWithContext(ctx, http.MethodPost, s.url, r) if err != nil { return @@ -129,7 +131,9 @@ func SetupSigner(cfg *config.SigningServiceConfig) error { User: url.UserPassword(cfg.Username, cfg.Password), } - client := &http.Client{} + client := &http.Client{ + Timeout: time.Second * 30, + } err := dial(u.String(), client) if err != nil { From 2a71aa06100b2288ba5228ac58c817878e17f2bb Mon Sep 17 00:00:00 2001 From: naneey Date: Mon, 7 Oct 2024 14:15:45 +0545 Subject: [PATCH 5/6] chore:added timeout in metrics --- attestor/chainService/metrics/metrics.go | 1 + 1 file changed, 1 insertion(+) diff --git a/attestor/chainService/metrics/metrics.go b/attestor/chainService/metrics/metrics.go index afca1890..f0167cdc 100644 --- a/attestor/chainService/metrics/metrics.go +++ b/attestor/chainService/metrics/metrics.go @@ -199,6 +199,7 @@ func InitMetrics(cfg config.CollecterServiceConfig, mConfig config.MetricsConfig httpClient := &http.Client{ Transport: transport, + Timeout: time.Second * 30, } host := config.GetConfig().MetricConfig.Host From efd4ab53d02b20c12989a424310c5853880d041f Mon Sep 17 00:00:00 2001 From: naneey Date: Mon, 7 Oct 2024 14:17:03 +0545 Subject: [PATCH 6/6] chore: updated version number --- attestor/chainService/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/attestor/chainService/config.yaml b/attestor/chainService/config.yaml index acb0bd3c..166ed8da 100644 --- a/attestor/chainService/config.yaml +++ b/attestor/chainService/config.yaml @@ -1,6 +1,6 @@ --- name: _attestor_verulink_ -version: 1.0.0 +version: 1.0.1 chains: - name: aleo chain_id: 6694886634401