Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into feat/simplify-config
Browse files Browse the repository at this point in the history
  • Loading branch information
NeverHappened committed Nov 8, 2022
2 parents 21ef003 + 2dc5760 commit f6e989e
Show file tree
Hide file tree
Showing 18 changed files with 305 additions and 183 deletions.
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,8 @@ go.work

keys

cmd/neutron_query_relayer/neutron_query_relayer
build
storage
neutron_query_relayer

.env

Expand Down
12 changes: 6 additions & 6 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
FROM golang:1.18-buster as builder

RUN apt update && apt -y install openssh-server git
ARG LDFLAGS
RUN mkdir /app
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
ENV GOPRIVATE=github.com/neutron-org/neutron
RUN go mod download && \
go build -a -o /go/bin/neutron_query_relayer ./cmd/neutron_query_relayer
RUN go build -ldflags "${LDFLAGS}" -a -o build/neutron_query_relayer ./cmd/neutron_query_relayer/*.go

FROM debian:buster
RUN apt update && apt install ca-certificates curl -y && apt-get clean
ADD ["https://github.com/CosmWasm/wasmvm/raw/v1.0.0/api/libwasmvm.x86_64.so", "https://github.com/CosmWasm/wasmvm/raw/v1.0.0/api/libwasmvm.aarch64.so", "/lib/"]
ADD run.sh .
COPY --from=builder /go/bin/neutron_query_relayer /bin/
COPY --from=builder /app/build/neutron_query_relayer /bin/
EXPOSE 9999

ENTRYPOINT ["neutron_query_relayer"]
ENTRYPOINT ["neutron_query_relayer", "start"]
13 changes: 10 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//')
COMMIT := $(shell git log -1 --format='%H')

ldflags = -X github.com/neutron-org/neutron-query-relayer/internal/app.Version=$(VERSION) \
-X github.com/neutron-org/neutron-query-relayer/internal/app.Commit=$(COMMIT)

dev: clean
go run ./cmd/neutron_query_relayer/
go run ./cmd/neutron_query_relayer/ start

clean:
@echo "Removing relayer storage state"
Expand All @@ -8,11 +14,12 @@ clean:
test:
go test ./...

.PHONY: build
build:
go build -a -o neutron_query_relayer ./cmd/neutron_query_relayer/*.go
go build -ldflags '$(ldflags)' -a -o build/neutron_query_relayer ./cmd/neutron_query_relayer/*.go

build-docker:
docker build . -t neutron-org/neutron-query-relayer
docker build --build-arg LDFLAGS='$(ldflags)' . -t neutron-org/neutron-query-relayer

generate-openapi:
@cd ./internal/subscriber/querier ; swagger generate client -f openapi.yml
22 changes: 22 additions & 0 deletions cmd/neutron_query_relayer/cmd/root.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package cmd

import (
"os"

"github.com/spf13/cobra"
)

// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "neutron_query_relayer",
Short: "Neutron Interchain Query Relayer",
}

// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() {
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
}
}
122 changes: 122 additions & 0 deletions cmd/neutron_query_relayer/cmd/start.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package cmd

import (
"context"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"sync"
"syscall"

"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/spf13/cobra"
"go.uber.org/zap"

nlogger "github.com/neutron-org/neutron-logger"
"github.com/neutron-org/neutron-query-relayer/internal/app"
"github.com/neutron-org/neutron-query-relayer/internal/config"
neutrontypes "github.com/neutron-org/neutron/x/interchainqueries/types"
)

const (
mainContext = "main"
)

// startCmd represents the start command
var startCmd = &cobra.Command{
Use: "start",
Short: "Start the query relayer main app",
Run: func(cmd *cobra.Command, args []string) {
startRelayer()
},
}

func init() {
rootCmd.AddCommand(startCmd)
}

func startRelayer() {
logRegistry, err := nlogger.NewRegistry(
mainContext,
app.AppContext,
app.SubscriberContext,
app.RelayerContext,
app.TargetChainRPCClientContext,
app.NeutronChainRPCClientContext,
app.TargetChainProviderContext,
app.NeutronChainProviderContext,
app.TxSenderContext,
app.TxProcessorContext,
app.TxSubmitCheckerContext,
app.TrustedHeadersFetcherContext,
app.KVProcessorContext,
)
if err != nil {
log.Fatalf("couldn't initialize loggers registry: %s", err)
}
logger := logRegistry.Get(mainContext)
logger.Info("neutron-query-relayer starts...")

cfg, err := config.NewNeutronQueryRelayerConfig()
if err != nil {
logger.Fatal("cannot initialize relayer config", zap.Error(err))
}

http.Handle("/metrics", promhttp.Handler())
go func() {
err := http.ListenAndServe(fmt.Sprintf(":%d", cfg.PrometheusPort), nil)
if err != nil {
logger.Fatal("failed to serve metrics", zap.Error(err))
}
}()
logger.Info("metrics handler set up")

ctx, cancel := context.WithCancel(context.Background())
wg := &sync.WaitGroup{}

subscriber, err := app.NewDefaultSubscriber(cfg, logRegistry)
if err != nil {
logger.Fatal("failed to create subscriber", zap.Error(err))
}
relayer, err := app.NewDefaultRelayer(ctx, cfg, logRegistry)
if err != nil {
logger.Fatal("failed to create relayer", zap.Error(err))
}
queriesTasksQueue := make(chan neutrontypes.RegisteredQuery, cfg.QueriesTaskQueueCapacity)

wg.Add(1)
go func() {
defer wg.Done()

// The subscriber writes to the tasks queue.
if err := subscriber.Subscribe(ctx, queriesTasksQueue); err != nil {
logger.Error("Subscriber exited with an error", zap.Error(err))
cancel()
}
}()

wg.Add(1)
go func() {
defer wg.Done()

// The relayer reads from the tasks queue.
if err := relayer.Run(ctx, queriesTasksQueue); err != nil {
logger.Error("Relayer exited with an error", zap.Error(err))
cancel()
}
}()

go func() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

s := <-sigs
logger.Info("Received termination signal, gracefully shutting down...",
zap.String("signal", s.String()))
cancel()
}()

wg.Wait()
}
23 changes: 23 additions & 0 deletions cmd/neutron_query_relayer/cmd/version.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package cmd

import (
"fmt"

"github.com/spf13/cobra"

"github.com/neutron-org/neutron-query-relayer/internal/app"
)

// versionCmd represents the version command
var versionCmd = &cobra.Command{
Use: "version",
Short: "Version on the query relayer",
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Version:", app.Version)
fmt.Println("Commit:", app.Commit)
},
}

func init() {
rootCmd.AddCommand(versionCmd)
}
105 changes: 2 additions & 103 deletions cmd/neutron_query_relayer/main.go
Original file line number Diff line number Diff line change
@@ -1,108 +1,7 @@
package main

import (
"context"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"sync"
"syscall"

"github.com/prometheus/client_golang/prometheus/promhttp"
"go.uber.org/zap"

nlogger "github.com/neutron-org/neutron-logger"
"github.com/neutron-org/neutron-query-relayer/internal/app"
"github.com/neutron-org/neutron-query-relayer/internal/config"
neutrontypes "github.com/neutron-org/neutron/x/interchainqueries/types"
)

const (
mainContext = "main"
)
import "github.com/neutron-org/neutron-query-relayer/cmd/neutron_query_relayer/cmd"

func main() {
logRegistry, err := nlogger.NewRegistry(
mainContext,
app.AppContext,
app.SubscriberContext,
app.RelayerContext,
app.TargetChainRPCClientContext,
app.NeutronChainRPCClientContext,
app.TargetChainProviderContext,
app.NeutronChainProviderContext,
app.TxSenderContext,
app.TxProcessorContext,
app.TxSubmitCheckerContext,
app.TrustedHeadersFetcherContext,
app.KVProcessorContext,
)
if err != nil {
log.Fatalf("couldn't initialize loggers registry: %s", err)
}
logger := logRegistry.Get(mainContext)
logger.Info("neutron-query-relayer starts...")

cfg, err := config.NewNeutronQueryRelayerConfig()
if err != nil {
logger.Fatal("cannot initialize relayer config", zap.Error(err))
}

http.Handle("/metrics", promhttp.Handler())
go func() {
err := http.ListenAndServe(fmt.Sprintf(":%d", cfg.PrometheusPort), nil)
if err != nil {
logger.Fatal("failed to serve metrics", zap.Error(err))
}
}()
logger.Info("metrics handler set up")

ctx, cancel := context.WithCancel(context.Background())
wg := &sync.WaitGroup{}

subscriber, err := app.NewDefaultSubscriber(cfg, logRegistry)
if err != nil {
logger.Fatal("failed to create subscriber", zap.Error(err))
}
relayer, err := app.NewDefaultRelayer(ctx, cfg, logRegistry)
if err != nil {
logger.Fatal("failed to create relayer", zap.Error(err))
}
queriesTasksQueue := make(chan neutrontypes.RegisteredQuery, cfg.QueriesTaskQueueCapacity)

wg.Add(1)
go func() {
defer wg.Done()

// The subscriber writes to the tasks queue.
if err := subscriber.Subscribe(ctx, queriesTasksQueue); err != nil {
logger.Error("Subscriber exited with an error", zap.Error(err))
cancel()
}
}()

wg.Add(1)
go func() {
defer wg.Done()

// The relayer reads from the tasks queue.
if err := relayer.Run(ctx, queriesTasksQueue); err != nil {
logger.Error("Relayer exited with an error", zap.Error(err))
cancel()
}
}()

go func() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

s := <-sigs
logger.Info("Received termination signal, gracefully shutting down...",
zap.String("signal", s.String()))
cancel()
}()

wg.Wait()
cmd.Execute()
}
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ require (
github.com/neutron-org/neutron v0.0.0-20220916150924-ec7dc591745d
github.com/neutron-org/neutron-logger v0.0.0-20221027125151-535167f2dd73
github.com/prometheus/client_golang v1.12.2
github.com/spf13/cobra v1.6.1
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
github.com/tendermint/tendermint v0.34.19
go.uber.org/zap v1.23.0
Expand Down Expand Up @@ -92,7 +93,7 @@ require (
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect
github.com/improbable-eng/grpc-web v0.14.1 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.0.1 // indirect
github.com/jmhodges/levigo v1.0.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect
Expand Down Expand Up @@ -128,7 +129,6 @@ require (
github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect
github.com/spf13/afero v1.8.2 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/cobra v1.4.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.11.0 // indirect
Expand Down
Loading

0 comments on commit f6e989e

Please sign in to comment.