From e9000c6d16a1fbeb9e2604d5136c04befa917a23 Mon Sep 17 00:00:00 2001 From: anatoleam Date: Wed, 6 Dec 2023 15:38:01 +0100 Subject: [PATCH 1/4] mod request priority --- data/mutate/emote_set.active_emote.mutation.go | 2 +- data/mutate/message.mod_request.go | 3 ++- go.mod | 2 +- go.sum | 2 ++ internal/api/gql/v3/resolvers/query/query.mod_requests.go | 2 +- internal/api/rest/v3/routes/emotes/emotes.process.go | 5 ++++- 6 files changed, 11 insertions(+), 5 deletions(-) diff --git a/data/mutate/emote_set.active_emote.mutation.go b/data/mutate/emote_set.active_emote.mutation.go index 47cf98a2..8b68bf42 100644 --- a/data/mutate/emote_set.active_emote.mutation.go +++ b/data/mutate/emote_set.active_emote.mutation.go @@ -330,7 +330,7 @@ func (m *Mutate) EditEmotesInSet(ctx context.Context, esb *structures.EmoteSetBu TargetID: tgt.emote.ID, Wish: "personal_use", }) - if err := m.SendModRequestMessage(ctx, mb); err != nil { + if err := m.SendModRequestMessage(ctx, mb, 0); err != nil { z.Errorw("failed to send personal_use mod request message", "error", err) } } diff --git a/data/mutate/message.mod_request.go b/data/mutate/message.mod_request.go index 9142995a..58d34dc9 100644 --- a/data/mutate/message.mod_request.go +++ b/data/mutate/message.mod_request.go @@ -11,7 +11,7 @@ import ( "go.mongodb.org/mongo-driver/bson/primitive" ) -func (m *Mutate) SendModRequestMessage(ctx context.Context, mb *structures.MessageBuilder[structures.MessageDataModRequest]) error { +func (m *Mutate) SendModRequestMessage(ctx context.Context, mb *structures.MessageBuilder[structures.MessageDataModRequest], weight int32) error { if mb == nil { return errors.ErrInternalIncompleteMutation() } else if mb.IsTainted() { @@ -60,6 +60,7 @@ func (m *Mutate) SendModRequestMessage(ctx context.Context, mb *structures.Messa MessageID: msgID, Kind: structures.MessageKindModRequest, Timestamp: time.Now(), + Weight: weight, }) mb.MarkAsTainted() diff --git a/go.mod b/go.mod index cc229507..028547c5 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/nats-io/nats.go v1.28.0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/prometheus/client_golang v1.14.0 - github.com/seventv/common v0.0.0-20231206031419-1ba3f2c093f6 + github.com/seventv/common v0.0.0-20231206143048-3810874764f0 github.com/seventv/compactdisc v0.0.0-20221006190906-ccfe99954e48 github.com/seventv/image-processor/go v0.0.0-20221128171540-d050701ac324 github.com/seventv/message-queue/go v0.0.0-20231201171845-1bb9d5db6881 diff --git a/go.sum b/go.sum index b52c9c97..1507ceec 100644 --- a/go.sum +++ b/go.sum @@ -356,6 +356,8 @@ github.com/seventv/common v0.0.0-20231202052307-1d4dd4479600 h1:qwu6BlOxmKPBe9S8 github.com/seventv/common v0.0.0-20231202052307-1d4dd4479600/go.mod h1:jHHFe3uNMyzb/ReDqMvaI/A1euvV/PW/G+2PhcWQqWw= github.com/seventv/common v0.0.0-20231206031419-1ba3f2c093f6 h1:A1aHPZxG5XU+rqpuWFm5oeUaV/CwcjVfFmdzdw7Kpzw= github.com/seventv/common v0.0.0-20231206031419-1ba3f2c093f6/go.mod h1:jHHFe3uNMyzb/ReDqMvaI/A1euvV/PW/G+2PhcWQqWw= +github.com/seventv/common v0.0.0-20231206143048-3810874764f0 h1:mcNiALWjv9uHzRn8E5LWor0JRTs8iJGkVle/zaNLKaE= +github.com/seventv/common v0.0.0-20231206143048-3810874764f0/go.mod h1:jHHFe3uNMyzb/ReDqMvaI/A1euvV/PW/G+2PhcWQqWw= github.com/seventv/compactdisc v0.0.0-20221006190906-ccfe99954e48 h1:IqWrtt/yob45YnOQ5Wwkbf8qP22eKVtg0WzfyEkGnFg= github.com/seventv/compactdisc v0.0.0-20221006190906-ccfe99954e48/go.mod h1:T+ldp0YQe03s44+A5HHHI/jB3ZmWqOIaNouEqAS+1Dk= github.com/seventv/image-processor/go v0.0.0-20221128171540-d050701ac324 h1:iU3wWepRTbkNoTAPR23m6TAW6Yb9pOMCYVr0K++OBAw= diff --git a/internal/api/gql/v3/resolvers/query/query.mod_requests.go b/internal/api/gql/v3/resolvers/query/query.mod_requests.go index dc7e174d..0813a3ab 100644 --- a/internal/api/gql/v3/resolvers/query/query.mod_requests.go +++ b/internal/api/gql/v3/resolvers/query/query.mod_requests.go @@ -48,7 +48,7 @@ func (r *Resolver) ModRequests(ctx context.Context, afterIDArg *primitive.Object Actor: &actor, Filter: match, Limit: limit, - Sort: bson.M{"_id": 1}, + Sort: bson.M{"_id": 1, "weight": -1}, Targets: map[structures.ObjectKind]bool{ structures.ObjectKindEmote: true, }, diff --git a/internal/api/rest/v3/routes/emotes/emotes.process.go b/internal/api/rest/v3/routes/emotes/emotes.process.go index 8f6d052d..48009623 100644 --- a/internal/api/rest/v3/routes/emotes/emotes.process.go +++ b/internal/api/rest/v3/routes/emotes/emotes.process.go @@ -276,7 +276,10 @@ func (epl *EmoteProcessingListener) HandleResultEvent(ctx context.Context, evt t ActorCountryName: actorCountryName, ActorCountryCode: actorCountryCode, }) - if err = epl.Ctx.Inst().Mutate.SendModRequestMessage(ctx, mb); err != nil { + + rsWeight := utils.Ternary(eb.Emote.Owner.HasPermission(structures.RolePermissionFeatureMessagingPriority), 100, 0) + + if err = epl.Ctx.Inst().Mutate.SendModRequestMessage(ctx, mb, int32(rsWeight)); err != nil { zap.S().Errorw("failed to send mod request message for new emote", "error", err, "EMOTE_ID", id, From 95a8afc061adfcd2592c3c19c997ec499b183952 Mon Sep 17 00:00:00 2001 From: anatoleam Date: Wed, 6 Dec 2023 15:57:50 +0100 Subject: [PATCH 2/4] wrong property used (fix panic) --- internal/api/rest/v3/routes/emotes/emotes.process.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/rest/v3/routes/emotes/emotes.process.go b/internal/api/rest/v3/routes/emotes/emotes.process.go index 48009623..97334af5 100644 --- a/internal/api/rest/v3/routes/emotes/emotes.process.go +++ b/internal/api/rest/v3/routes/emotes/emotes.process.go @@ -277,7 +277,7 @@ func (epl *EmoteProcessingListener) HandleResultEvent(ctx context.Context, evt t ActorCountryCode: actorCountryCode, }) - rsWeight := utils.Ternary(eb.Emote.Owner.HasPermission(structures.RolePermissionFeatureMessagingPriority), 100, 0) + rsWeight := utils.Ternary(emoteOwner.HasPermission(structures.RolePermissionFeatureMessagingPriority), 100, 0) if err = epl.Ctx.Inst().Mutate.SendModRequestMessage(ctx, mb, int32(rsWeight)); err != nil { zap.S().Errorw("failed to send mod request message for new emote", From 7bc07ac793e083b16cdd8b73da82c7bde9ae02d0 Mon Sep 17 00:00:00 2001 From: anatoleam Date: Thu, 7 Dec 2023 04:42:24 +0100 Subject: [PATCH 3/4] ordered sort --- data/query/query.messages.go | 35 +++++++++++++++++-- .../v3/resolvers/query/query.mod_requests.go | 2 +- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/data/query/query.messages.go b/data/query/query.messages.go index bfc07eea..cd0b7f20 100644 --- a/data/query/query.messages.go +++ b/data/query/query.messages.go @@ -2,10 +2,17 @@ package query import ( "context" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "strconv" "sync" + "time" "github.com/seventv/common/errors" "github.com/seventv/common/mongo" + "github.com/seventv/common/redis" "github.com/seventv/common/structures/v3" "github.com/seventv/common/structures/v3/aggregations" "go.mongodb.org/mongo-driver/bson" @@ -89,7 +96,7 @@ func (q *Query) Messages(ctx context.Context, filter bson.M, opt MessageQueryOpt qr := &QueryResult[structures.Message[bson.Raw]]{} if opt.Sort == nil { - opt.Sort = bson.M{"_id": -1} + opt.Sort = bson.D{{Key: "_id", Value: -1}} } if opt.UnreadOnly { @@ -119,9 +126,26 @@ func (q *Query) Messages(ctx context.Context, filter bson.M, opt MessageQueryOpt wg := sync.WaitGroup{} wg.Add(1) + h := sha256.New() + + fb, err := json.Marshal(filter) + if err == nil { + h.Write(fb) + } + + rKey := q.redis.ComposeKey("api", "messages", hex.EncodeToString(h.Sum(nil)), "count") + go func() { defer wg.Done() + count, err := q.redis.Get(ctx, rKey) + if err != redis.Nil { + n, _ := strconv.ParseInt(count, 10, 64) + + qr.setTotal(n) + return + } + cur, err := q.mongo.Collection(mongo.CollectionNameMessagesRead).Aggregate(ctx, aggregations.Combine( matcherPipeline, func() mongo.Pipeline { @@ -158,8 +182,12 @@ func (q *Query) Messages(ctx context.Context, filter bson.M, opt MessageQueryOpt } qr.setTotal(v.Count) + + q.redis.SetEX(ctx, rKey, v.Count, time.Minute*5) }() + fmt.Println(opt.Sort) + cur, err := q.mongo.Collection(mongo.CollectionNameMessagesRead).Aggregate(ctx, aggregations.Combine( matcherPipeline, mongo.Pipeline{ @@ -180,6 +208,7 @@ func (q *Query) Messages(ctx context.Context, filter bson.M, opt MessageQueryOpt bson.M{ "timestamp": "$timestamp", "read": "$read", + "weight": "$weight", }, }, }, @@ -233,7 +262,7 @@ type ModRequestMessagesQueryOptions struct { Targets map[structures.ObjectKind]bool TargetIDs []primitive.ObjectID Filter bson.M - Sort bson.M + Sort bson.D Limit int SkipPermissionCheck bool } @@ -244,5 +273,5 @@ type MessageQueryOptions struct { UnreadOnly bool MessageFilter bson.M FilterRecipients []primitive.ObjectID - Sort bson.M + Sort bson.D } diff --git a/internal/api/gql/v3/resolvers/query/query.mod_requests.go b/internal/api/gql/v3/resolvers/query/query.mod_requests.go index 0813a3ab..bec9e198 100644 --- a/internal/api/gql/v3/resolvers/query/query.mod_requests.go +++ b/internal/api/gql/v3/resolvers/query/query.mod_requests.go @@ -48,7 +48,7 @@ func (r *Resolver) ModRequests(ctx context.Context, afterIDArg *primitive.Object Actor: &actor, Filter: match, Limit: limit, - Sort: bson.M{"_id": 1, "weight": -1}, + Sort: bson.D{{Key: "weight", Value: -1}, {Key: "_id", Value: 1}}, // bson.M{"_id": 1, "weight": -1}, Targets: map[structures.ObjectKind]bool{ structures.ObjectKindEmote: true, }, From 81b5238d67be9472a517696152861d97d9aa7302 Mon Sep 17 00:00:00 2001 From: anatoleam Date: Thu, 7 Dec 2023 10:52:59 +0100 Subject: [PATCH 4/4] switch ci runner --- .github/workflows/ci.yaml | 4 ++-- data/query/query.messages.go | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index acb5678d..deb8069b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -33,7 +33,7 @@ env: jobs: ci: name: API Lint, Build, Test, Deploy - runs-on: aws-runner + runs-on: seventv env: GOLANGCI_LINT_CACHE: /home/runner/.cache/golangci-lint concurrency: @@ -144,7 +144,7 @@ jobs: validate: name: API Deploy Validation needs: ci - runs-on: ubuntu-latest + runs-on: seventv permissions: pull-requests: write defaults: diff --git a/data/query/query.messages.go b/data/query/query.messages.go index cd0b7f20..976792a9 100644 --- a/data/query/query.messages.go +++ b/data/query/query.messages.go @@ -5,7 +5,6 @@ import ( "crypto/sha256" "encoding/hex" "encoding/json" - "fmt" "strconv" "sync" "time" @@ -186,8 +185,6 @@ func (q *Query) Messages(ctx context.Context, filter bson.M, opt MessageQueryOpt q.redis.SetEX(ctx, rKey, v.Count, time.Minute*5) }() - fmt.Println(opt.Sort) - cur, err := q.mongo.Collection(mongo.CollectionNameMessagesRead).Aggregate(ctx, aggregations.Combine( matcherPipeline, mongo.Pipeline{