47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
|
package infraestructure
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/pkg/errors"
|
||
|
"go.mongodb.org/mongo-driver/bson"
|
||
|
"go.mongodb.org/mongo-driver/mongo"
|
||
|
"go.uber.org/zap"
|
||
|
)
|
||
|
|
||
|
// Repository definition.
|
||
|
type Repository struct {
|
||
|
db *mongo.Database
|
||
|
logger *zap.Logger
|
||
|
}
|
||
|
|
||
|
// NewRepository create a new Repository.
|
||
|
func NewRepository(db *mongo.Database, logger *zap.Logger) *Repository {
|
||
|
return &Repository{db: db,
|
||
|
logger: logger.With(zap.String("module", "InfraestructureRepository")),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// GetMongoStatus get mongo server status
|
||
|
func (r *Repository) GetMongoStatus(ctx context.Context) (*MongoStatus, error) {
|
||
|
command := bson.D{{Key: "serverStatus", Value: 1}}
|
||
|
result := r.db.RunCommand(ctx, command)
|
||
|
if result.Err() != nil {
|
||
|
requestID := fmt.Sprintf("%v", ctx.Value("requestid"))
|
||
|
r.logger.Error("failed execute command mongo serverStatus",
|
||
|
zap.Error(result.Err()), zap.String("requestID", requestID))
|
||
|
return nil, errors.WithStack(result.Err())
|
||
|
}
|
||
|
|
||
|
var mongoStatus MongoStatus
|
||
|
err := result.Decode(&mongoStatus)
|
||
|
if err != nil {
|
||
|
requestID := fmt.Sprintf("%v", ctx.Value("requestid"))
|
||
|
r.logger.Error("failed decoding cursor to *MongoStatus", zap.Error(err),
|
||
|
zap.String("requestID", requestID))
|
||
|
return nil, errors.WithStack(err)
|
||
|
}
|
||
|
return &mongoStatus, nil
|
||
|
}
|