28654e237e
Added MongoDB instances of DB tables Updated some DB interfaces Added logging to count cleanup
71 lines
2.0 KiB
Go
71 lines
2.0 KiB
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"github.com/CalebQ42/darkstorm-server/internal/backend"
|
|
"github.com/google/uuid"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
)
|
|
|
|
type MongoCrashTable struct {
|
|
*MongoTable[backend.CrashReport]
|
|
archiveCol *mongo.Collection
|
|
}
|
|
|
|
func NewMongoCrashTable(crashCol *mongo.Collection, archiveCol *mongo.Collection) *MongoCrashTable {
|
|
return &MongoCrashTable{
|
|
MongoTable: NewMongoTable[backend.CrashReport](crashCol),
|
|
archiveCol: archiveCol,
|
|
}
|
|
}
|
|
|
|
func (m *MongoCrashTable) Archive(toArchive backend.ArchivedCrash) error {
|
|
if toArchive.Platform == "" {
|
|
toArchive.Platform = "all"
|
|
}
|
|
_, err := m.archiveCol.InsertOne(context.Background(), toArchive)
|
|
return err
|
|
}
|
|
|
|
func (m *MongoCrashTable) IsArchived(ind backend.IndividualCrash) bool {
|
|
res := m.archiveCol.FindOne(context.Background(),
|
|
bson.M{"error": ind.Error, "stack": ind.Stack, "platform": bson.M{"$in": []string{ind.Platform, "all"}}},
|
|
)
|
|
return res.Err() == nil
|
|
}
|
|
|
|
func (m *MongoCrashTable) InsertCrash(ind backend.IndividualCrash) error {
|
|
first, _, _ := strings.Cut(ind.Stack, "\n")
|
|
_, err := m.col.UpdateOne(context.Background(),
|
|
bson.M{"error": ind.Error, "firstLine": first, //filter main report
|
|
"individual.stack": ind.Stack, "individual.platform": ind.Platform}, //filter individual
|
|
bson.M{"$inc": bson.M{"individual.count": 1}}, //increment count
|
|
)
|
|
if err == mongo.ErrNoDocuments {
|
|
ind.Count = 1
|
|
_, err = m.col.UpdateOne(context.Background(),
|
|
bson.M{"error": ind.Error, "firstLine": first}, //filter
|
|
bson.M{"$push": bson.M{"individual": ind}}, //Add new individual report
|
|
)
|
|
if err == mongo.ErrNoDocuments {
|
|
var id uuid.UUID
|
|
id, err = uuid.NewV7()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = m.col.InsertOne(context.Background(),
|
|
backend.CrashReport{
|
|
ID: id.String(),
|
|
Error: ind.Error,
|
|
FirstLine: first,
|
|
Individual: []backend.IndividualCrash{ind},
|
|
},
|
|
)
|
|
}
|
|
}
|
|
return err
|
|
}
|