feat: tracing
Some checks failed
continuous-integration/drone/pr Build is failing

This commit is contained in:
Dawid Wysokiński 2022-09-12 06:35:43 +02:00
parent ed51e5999b
commit c8eb38d689
Signed by: Kichiyaki
GPG Key ID: B5445E357FB8B892
9 changed files with 119 additions and 4 deletions

View File

@ -5,8 +5,11 @@ import (
"gitea.dwysokinski.me/twhelp/core/internal/domain"
"github.com/uptrace/bun"
"go.opentelemetry.io/otel"
)
var tracer = otel.Tracer("gitea.dwysokinski.me/twhelp/core/internal/bundb")
func appendODSetClauses(q *bun.InsertQuery) *bun.InsertQuery {
return q.Set("rank_att = EXCLUDED.rank_att").
Set("score_att = EXCLUDED.score_att").

View File

@ -9,6 +9,7 @@ import (
"gitea.dwysokinski.me/twhelp/core/internal/bundb/internal/model"
"gitea.dwysokinski.me/twhelp/core/internal/domain"
"github.com/uptrace/bun"
"go.opentelemetry.io/otel/codes"
)
type Ennoblement struct {
@ -20,6 +21,9 @@ func NewEnnoblement(db *bun.DB) *Ennoblement {
}
func (e *Ennoblement) Create(ctx context.Context, params ...domain.CreateEnnoblementParams) error {
ctx, span := tracer.Start(ctx, "Ennoblement.Create")
defer span.End()
if len(params) == 0 {
return nil
}
@ -32,6 +36,8 @@ func (e *Ennoblement) Create(ctx context.Context, params ...domain.CreateEnnoble
Model(&ennoblements).
Returning("NULL").
Exec(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return fmt.Errorf("something went wrong while inserting ennoblements into db: %w", err)
}
@ -39,6 +45,9 @@ func (e *Ennoblement) Create(ctx context.Context, params ...domain.CreateEnnoble
}
func (e *Ennoblement) List(ctx context.Context, params domain.ListEnnoblementsParams) ([]domain.Ennoblement, int64, error) {
ctx, span := tracer.Start(ctx, "Ennoblement.List")
defer span.End()
var ennoblements []model.Ennoblement
var count int
var err error
@ -49,6 +58,8 @@ func (e *Ennoblement) List(ctx context.Context, params domain.ListEnnoblementsPa
q, err = listEnnoblementsParamsApplier{params}.apply(q)
if err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, 0, fmt.Errorf("listEnnoblementsParamsApplier.apply: %w", err)
}
@ -58,6 +69,8 @@ func (e *Ennoblement) List(ctx context.Context, params domain.ListEnnoblementsPa
err = q.Scan(ctx)
}
if err != nil && !errors.Is(err, sql.ErrNoRows) {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, 0, fmt.Errorf("couldn't select ennoblements from the db: %w", err)
}
@ -65,6 +78,7 @@ func (e *Ennoblement) List(ctx context.Context, params domain.ListEnnoblementsPa
for _, ennoblement := range ennoblements {
result = append(result, ennoblement.ToDomain())
}
return result, int64(count), nil
}

View File

@ -8,6 +8,7 @@ import (
"time"
"gitea.dwysokinski.me/twhelp/core/internal/bundb/internal/model"
"go.opentelemetry.io/otel/codes"
"gitea.dwysokinski.me/twhelp/core/internal/domain"
"github.com/uptrace/bun"
@ -22,6 +23,9 @@ func NewPlayer(db *bun.DB) *Player {
}
func (p *Player) CreateOrUpdate(ctx context.Context, params ...domain.CreatePlayerParams) error {
ctx, span := tracer.Start(ctx, "Player.CreateOrUpdate")
defer span.End()
if len(params) == 0 {
return nil
}
@ -42,6 +46,8 @@ func (p *Player) CreateOrUpdate(ctx context.Context, params ...domain.CreatePlay
Apply(appendODSetClauses).
Returning("NULL").
Exec(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return fmt.Errorf("something went wrong while inserting players into db: %w", err)
}
@ -49,6 +55,9 @@ func (p *Player) CreateOrUpdate(ctx context.Context, params ...domain.CreatePlay
}
func (p *Player) DeleteByID(ctx context.Context, ids ...int64) error {
ctx, span := tracer.Start(ctx, "Player.DeleteByID")
defer span.End()
if len(ids) == 0 {
return nil
}
@ -61,6 +70,8 @@ func (p *Player) DeleteByID(ctx context.Context, ids ...int64) error {
Set("tribe_id = NULL").
Returning("NULL").
Exec(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return fmt.Errorf("couldn't delete players: %w", err)
}
@ -68,6 +79,9 @@ func (p *Player) DeleteByID(ctx context.Context, ids ...int64) error {
}
func (p *Player) List(ctx context.Context, params domain.ListPlayersParams) ([]domain.Player, int64, error) {
ctx, span := tracer.Start(ctx, "Player.List")
defer span.End()
var players []model.Player
var count int
var err error
@ -78,6 +92,8 @@ func (p *Player) List(ctx context.Context, params domain.ListPlayersParams) ([]d
q, err = listPlayersParamsApplier{params}.apply(q)
if err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, 0, fmt.Errorf("listPlayersParamsApplier.apply: %w", err)
}
@ -87,6 +103,8 @@ func (p *Player) List(ctx context.Context, params domain.ListPlayersParams) ([]d
err = q.Scan(ctx)
}
if err != nil && !errors.Is(err, sql.ErrNoRows) {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, 0, fmt.Errorf("couldn't select players from the db: %w", err)
}

View File

@ -8,6 +8,9 @@ import (
"time"
"gitea.dwysokinski.me/twhelp/core/internal/bundb/internal/model"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"
"gitea.dwysokinski.me/twhelp/core/internal/domain"
"github.com/uptrace/bun"
@ -22,6 +25,9 @@ func NewServer(db *bun.DB) *Server {
}
func (s *Server) CreateOrUpdate(ctx context.Context, params ...domain.CreateServerParams) ([]domain.Server, error) {
ctx, span := tracer.Start(ctx, "Server.CreateOrUpdate")
defer span.End()
if len(params) == 0 {
return nil, nil
}
@ -45,6 +51,8 @@ func (s *Server) CreateOrUpdate(ctx context.Context, params ...domain.CreateServ
Set("open = EXCLUDED.open").
Returning("*").
Exec(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, fmt.Errorf("something went wrong while inserting servers into db: %w", err)
}
@ -52,10 +60,14 @@ func (s *Server) CreateOrUpdate(ctx context.Context, params ...domain.CreateServ
for _, srv := range servers {
result = append(result, srv.ToDomain())
}
return result, nil
}
func (s *Server) List(ctx context.Context, params domain.ListServersParams) ([]domain.Server, int64, error) {
ctx, span := tracer.Start(ctx, "Server.List")
defer span.End()
var servers []model.Server
var count int
var err error
@ -70,6 +82,8 @@ func (s *Server) List(ctx context.Context, params domain.ListServersParams) ([]d
err = q.Scan(ctx)
}
if err != nil && !errors.Is(err, sql.ErrNoRows) {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, 0, fmt.Errorf("couldn't select servers from the db: %w", err)
}
@ -77,11 +91,19 @@ func (s *Server) List(ctx context.Context, params domain.ListServersParams) ([]d
for _, server := range servers {
result = append(result, server.ToDomain())
}
return result, int64(count), nil
}
func (s *Server) UpdateByKey(ctx context.Context, key string, params domain.UpdateServerParams) (domain.Server, error) {
ctx, span := tracer.Start(ctx, "Server.UpdateByKey", trace.WithAttributes(
attribute.String("server.key", key),
))
defer span.End()
if params.IsZero() {
span.RecordError(domain.ErrNothingToUpdate)
span.SetStatus(codes.Error, domain.ErrNothingToUpdate.Error())
return domain.Server{}, domain.ErrNothingToUpdate
}
@ -94,6 +116,8 @@ func (s *Server) UpdateByKey(ctx context.Context, key string, params domain.Upda
Returning("*").
Exec(ctx)
if err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return domain.Server{}, fmt.Errorf("couldn't update server (key=%s): %w", key, err)
}
if affected, _ := res.RowsAffected(); affected == 0 {

View File

@ -8,6 +8,9 @@ import (
"time"
"gitea.dwysokinski.me/twhelp/core/internal/bundb/internal/model"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"
"gitea.dwysokinski.me/twhelp/core/internal/domain"
"github.com/uptrace/bun"
@ -22,6 +25,9 @@ func NewTribe(db *bun.DB) *Tribe {
}
func (t *Tribe) CreateOrUpdate(ctx context.Context, params ...domain.CreateTribeParams) error {
ctx, span := tracer.Start(ctx, "Tribe.CreateOrUpdate")
defer span.End()
if len(params) == 0 {
return nil
}
@ -44,6 +50,8 @@ func (t *Tribe) CreateOrUpdate(ctx context.Context, params ...domain.CreateTribe
Apply(appendODSetClauses).
Returning("NULL").
Exec(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return fmt.Errorf("something went wrong while inserting tribes into db: %w", err)
}
@ -51,6 +59,9 @@ func (t *Tribe) CreateOrUpdate(ctx context.Context, params ...domain.CreateTribe
}
func (t *Tribe) DeleteByID(ctx context.Context, ids ...int64) error {
ctx, span := tracer.Start(ctx, "Tribe.DeleteByID")
defer span.End()
if len(ids) == 0 {
return nil
}
@ -62,6 +73,8 @@ func (t *Tribe) DeleteByID(ctx context.Context, ids ...int64) error {
Set("deleted_at = ?", time.Now()).
Returning("NULL").
Exec(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return fmt.Errorf("couldn't delete tribes: %w", err)
}
@ -69,6 +82,12 @@ func (t *Tribe) DeleteByID(ctx context.Context, ids ...int64) error {
}
func (t *Tribe) UpdateDominance(ctx context.Context, serverKey string, numPlayerVillages int64) error {
ctx, span := tracer.Start(ctx, "Tribe.UpdateDominance", trace.WithAttributes(
attribute.String("server.key", serverKey),
attribute.Int64("server.num_player_villages", numPlayerVillages),
))
defer span.End()
q := t.db.NewUpdate().
Model(&model.Tribe{}).
Returning("NULL").
@ -80,6 +99,8 @@ func (t *Tribe) UpdateDominance(ctx context.Context, serverKey string, numPlayer
q = q.Set("dominance = 0")
}
if _, err := q.Exec(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return fmt.Errorf("couldn't update dominance (server=%s): %w", serverKey, err)
}
@ -87,6 +108,9 @@ func (t *Tribe) UpdateDominance(ctx context.Context, serverKey string, numPlayer
}
func (t *Tribe) List(ctx context.Context, params domain.ListTribesParams) ([]domain.Tribe, int64, error) {
ctx, span := tracer.Start(ctx, "Tribe.List")
defer span.End()
var tribes []model.Tribe
var count int
var err error
@ -97,6 +121,8 @@ func (t *Tribe) List(ctx context.Context, params domain.ListTribesParams) ([]dom
q, err = listTribesParamsApplier{params}.apply(q)
if err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, 0, fmt.Errorf("listTribesParamsApplier.apply: %w", err)
}
@ -106,6 +132,8 @@ func (t *Tribe) List(ctx context.Context, params domain.ListTribesParams) ([]dom
err = q.Scan(ctx)
}
if err != nil && !errors.Is(err, sql.ErrNoRows) {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, 0, fmt.Errorf("couldn't select tribes from the db: %w", err)
}
@ -113,6 +141,7 @@ func (t *Tribe) List(ctx context.Context, params domain.ListTribesParams) ([]dom
for _, tribe := range tribes {
result = append(result, tribe.ToDomain())
}
return result, int64(count), nil
}

View File

@ -8,6 +8,9 @@ import (
"gitea.dwysokinski.me/twhelp/core/internal/bundb/internal/model"
"gitea.dwysokinski.me/twhelp/core/internal/domain"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"
"github.com/uptrace/bun"
)
@ -21,6 +24,9 @@ func NewVersion(db *bun.DB) *Version {
}
func (v *Version) List(ctx context.Context, params domain.ListVersionsParams) ([]domain.Version, int64, error) {
ctx, span := tracer.Start(ctx, "Version.List")
defer span.End()
var versions []model.Version
var count int
var err error
@ -34,6 +40,8 @@ func (v *Version) List(ctx context.Context, params domain.ListVersionsParams) ([
err = q.Scan(ctx)
}
if err != nil && !errors.Is(err, sql.ErrNoRows) {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, 0, fmt.Errorf("couldn't select versions from the db: %w", err)
}
@ -41,16 +49,24 @@ func (v *Version) List(ctx context.Context, params domain.ListVersionsParams) ([
for _, version := range versions {
result = append(result, version.ToDomain())
}
return result, int64(count), nil
}
func (v *Version) GetByCode(ctx context.Context, code string) (domain.Version, error) {
ctx, span := tracer.Start(ctx, "Version.GetByCode", trace.WithAttributes(
attribute.String("version.code", code),
))
defer span.End()
var version model.Version
if err := v.db.NewSelect().
Model(&version).
Where("code = ?", code).
Scan(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
if errors.Is(err, sql.ErrNoRows) {
return domain.Version{}, domain.VersionNotFoundError{VerCode: code}
}

View File

@ -7,6 +7,7 @@ import (
"fmt"
"gitea.dwysokinski.me/twhelp/core/internal/bundb/internal/model"
"go.opentelemetry.io/otel/codes"
"gitea.dwysokinski.me/twhelp/core/internal/domain"
"github.com/uptrace/bun"
@ -21,6 +22,9 @@ func NewVillage(db *bun.DB) *Village {
}
func (v *Village) CreateOrUpdate(ctx context.Context, params ...domain.CreateVillageParams) error {
ctx, span := tracer.Start(ctx, "Village.CreateOrUpdate")
defer span.End()
if len(params) == 0 {
return nil
}
@ -41,6 +45,8 @@ func (v *Village) CreateOrUpdate(ctx context.Context, params ...domain.CreateVil
Set("player_id = EXCLUDED.player_id").
Returning("NULL").
Exec(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return fmt.Errorf("something went wrong while inserting villages into db: %w", err)
}
@ -48,6 +54,9 @@ func (v *Village) CreateOrUpdate(ctx context.Context, params ...domain.CreateVil
}
func (v *Village) List(ctx context.Context, params domain.ListVillagesParams) ([]domain.Village, int64, error) {
ctx, span := tracer.Start(ctx, "Village.List")
defer span.End()
var villages []model.Village
var count int
var err error
@ -62,6 +71,8 @@ func (v *Village) List(ctx context.Context, params domain.ListVillagesParams) ([
err = q.Scan(ctx)
}
if err != nil && !errors.Is(err, sql.ErrNoRows) {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, 0, fmt.Errorf("couldn't select villages from the db: %w", err)
}

View File

@ -165,7 +165,7 @@ func (s *Server) UpdateInfoAndConfig(ctx context.Context, key, url string) error
func (s *Server) UpdateNumPlayers(ctx context.Context, key string, numPlayers int64) error {
ctx, span := tracer.Start(ctx, "Server.UpdateNumPlayers", trace.WithAttributes(
attribute.String("server.key", key),
attribute.Int64("num_players", numPlayers),
attribute.Int64("server.num_players", numPlayers),
))
defer span.End()
@ -188,7 +188,7 @@ func (s *Server) UpdateNumPlayers(ctx context.Context, key string, numPlayers in
func (s *Server) UpdateNumTribes(ctx context.Context, key string, numTribes int64) error {
ctx, span := tracer.Start(ctx, "Server.UpdateNumTribes", trace.WithAttributes(
attribute.String("server.key", key),
attribute.Int64("num_tribes", numTribes),
attribute.Int64("server.num_tribes", numTribes),
))
defer span.End()
@ -211,7 +211,7 @@ func (s *Server) UpdateNumTribes(ctx context.Context, key string, numTribes int6
func (s *Server) UpdateNumVillages(ctx context.Context, key string, numVillages int64) error {
ctx, span := tracer.Start(ctx, "Server.UpdateNumVillages", trace.WithAttributes(
attribute.String("server.key", key),
attribute.Int64("num_villages", numVillages),
attribute.Int64("server.num_villages", numVillages),
))
defer span.End()

View File

@ -159,7 +159,7 @@ func (t *Tribe) delete(ctx context.Context, key string, existing []domain.BaseTr
func (t *Tribe) UpdateDominance(ctx context.Context, serverKey string, numPlayerVillages int64) error {
ctx, span := tracer.Start(ctx, "Tribe.UpdateDominance", trace.WithAttributes(
attribute.String("server.key", serverKey),
attribute.Int64("num_player_villages", numPlayerVillages),
attribute.Int64("server.num_player_villages", numPlayerVillages),
))
defer span.End()