diff --git a/api/main.go b/api/main.go index 4cdf032ba..f4a31ff44 100644 --- a/api/main.go +++ b/api/main.go @@ -167,7 +167,14 @@ func main() { app.Use(requestid.New()) app.Use(logger.New(logger.Config{ - Format: "level=info timestamp=${time} method=${method} path=${path} status${status} request_id=${locals:requestid}\n", + Format: "level=info timestamp=${time} method=${method} path=${path} latency=${latency} status${status} request_id=${locals:requestid}\n", + Next: func(c *fiber.Ctx) bool { + path := c.Path() + if path == "/api/v1/health" || path == "/api/v1/ready" { + return true + } + return false + }, })) if cfg.PprofEnabled { app.Use(pprof.New()) diff --git a/deploy/api/env/production-mainnet.env b/deploy/api/env/production-mainnet.env index 4d91e0b5d..c28e1288d 100644 --- a/deploy/api/env/production-mainnet.env +++ b/deploy/api/env/production-mainnet.env @@ -2,7 +2,7 @@ ENVIRONMENT=production-mainnet NAMESPACE=wormscan NAME=wormscan-api PORT=8000 -REPLICAS=2 +REPLICAS=4 IMAGE_NAME= RESOURCES_LIMITS_MEMORY=256Mi RESOURCES_LIMITS_CPU=500m diff --git a/parser/cmd/service/run.go b/parser/cmd/service/run.go index 1a8b3b0dd..ab4fbb30d 100644 --- a/parser/cmd/service/run.go +++ b/parser/cmd/service/run.go @@ -21,6 +21,7 @@ import ( parserAlert "github.com/wormhole-foundation/wormhole-explorer/parser/internal/alert" "github.com/wormhole-foundation/wormhole-explorer/parser/internal/metrics" "github.com/wormhole-foundation/wormhole-explorer/parser/internal/sqs" + "github.com/wormhole-foundation/wormhole-explorer/parser/migration" "github.com/wormhole-foundation/wormhole-explorer/parser/parser" "github.com/wormhole-foundation/wormhole-explorer/parser/processor" "github.com/wormhole-foundation/wormhole-explorer/parser/queue" @@ -58,6 +59,12 @@ func Run() { logger.Fatal("failed to connect MongoDB", zap.Error(err)) } + // run the database migration. + err = migration.Run(db.Database) + if err != nil { + logger.Fatal("error running migration", zap.Error(err)) + } + // get alert client. alertClient, err := newAlertClient(config) if err != nil { diff --git a/parser/migration/migration.go b/parser/migration/migration.go new file mode 100644 index 000000000..8aa53e6e9 --- /dev/null +++ b/parser/migration/migration.go @@ -0,0 +1,37 @@ +package migration + +import ( + "context" + "errors" + + "github.com/wormhole-foundation/wormhole-explorer/parser/parser" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" +) + +// TODO: move this to migration tool that support mongodb. +func Run(db *mongo.Database) error { + // Created parsedVaa collection. + err := db.CreateCollection(context.TODO(), parser.ParsedVAACollection) + if err != nil && isNotAlreadyExistsError(err) { + return err + } + + // create index in observations collection by indexedAt. + indexToAddress := mongo.IndexModel{Keys: bson.D{{Key: "standardizedProperties.toAddress", Value: 1}}} + _, err = db.Collection(parser.ParsedVAACollection).Indexes().CreateOne(context.TODO(), indexToAddress) + if err != nil && isNotAlreadyExistsError(err) { + return err + } + + return nil +} + +func isNotAlreadyExistsError(err error) bool { + target := &mongo.CommandError{} + isCommandError := errors.As(err, target) + if !isCommandError || err.(mongo.CommandError).Code != 48 { + return true + } + return false +} diff --git a/parser/parser/repository.go b/parser/parser/repository.go index 434d65545..2dbfd8495 100644 --- a/parser/parser/repository.go +++ b/parser/parser/repository.go @@ -14,6 +14,8 @@ import ( // repository errors var ErrDocNotFound = errors.New("NOT FOUND") +const ParsedVAACollection = "parsedVaa" + // Repository definitions. type Repository struct { db *mongo.Database @@ -28,7 +30,7 @@ func NewRepository(db *mongo.Database, log *zap.Logger) *Repository { return &Repository{db, log, struct { parsedVaa *mongo.Collection }{ - parsedVaa: db.Collection("parsedVaa"), + parsedVaa: db.Collection(ParsedVAACollection), }} }