diff --git a/cmds/admin_server/server/server.go b/cmds/admin_server/server/server.go index 820b5898..80c8709a 100644 --- a/cmds/admin_server/server/server.go +++ b/cmds/admin_server/server/server.go @@ -68,6 +68,34 @@ func (l *Log) ToStorageLog() storage.Log { } } +func toServerLog(l *storage.Log) Log { + return Log{ + JobID: l.JobID, + LogData: l.LogData, + Date: l.Date, + LogLevel: l.LogLevel, + } +} + +type Result struct { + Logs []Log `json:"logs"` + Count uint64 `json:"count"` + Page uint `json:"page"` + PageSize uint `json:"page_size"` +} + +func toServerResult(r *storage.Result) Result { + var result Result + result.Count = r.Count + result.Page = r.Page + result.PageSize = r.PageSize + + for _, log := range r.Logs { + result.Logs = append(result.Logs, toServerLog(&log)) + } + return result +} + type RouteHandler struct { storage storage.Storage log logger.Logger @@ -125,7 +153,7 @@ func (r *RouteHandler) getLogs(c *gin.Context) { return } - c.JSON(http.StatusOK, result) + c.JSON(http.StatusOK, toServerResult(result)) } func initRouter(ctx xcontext.Context, rh RouteHandler) *gin.Engine { diff --git a/cmds/admin_server/storage/mongo/mongo.go b/cmds/admin_server/storage/mongo/mongo.go index 2f39f799..fc5fb71e 100644 --- a/cmds/admin_server/storage/mongo/mongo.go +++ b/cmds/admin_server/storage/mongo/mongo.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "strings" + "time" "github.com/linuxboot/contest/cmds/admin_server/storage" "github.com/linuxboot/contest/pkg/xcontext" @@ -63,7 +64,7 @@ func toMongoQuery(query storage.Query) bson.D { if query.Text != nil { q = append(q, bson.E{ - Key: "logdata", + Key: "log_data", Value: bson.M{ "$regex": primitive.Regex{Pattern: *query.Text, Options: "ig"}, }, @@ -94,7 +95,7 @@ func toMongoQuery(query storage.Query) bson.D { levels := strings.Split(*query.LogLevel, ",") q = append(q, bson.E{ - Key: "loglevel", + Key: "log_level", Value: bson.M{ "$in": levels, }, @@ -106,7 +107,8 @@ func toMongoQuery(query storage.Query) bson.D { } func (s *MongoStorage) StoreLog(ctx xcontext.Context, log storage.Log) error { - _, err := s.collection.InsertOne(ctx, log) + mongoLog := toMongoLog(&log) + _, err := s.collection.InsertOne(ctx, mongoLog) if err != nil { // for better debugging ctx.Errorf("Error while inserting into the db: %v", err) @@ -134,15 +136,20 @@ func (s *MongoStorage) GetLogs(ctx xcontext.Context, query storage.Query) (*stor return nil, storage.ErrQuery } - var logs []storage.Log + var logs []Log err = cur.All(ctx, &logs) if err != nil { ctx.Errorf("Error while reading query result from db: %v", err) return nil, storage.ErrQuery } + // convert to storage logs + storageLogs := make([]storage.Log, 0, len(logs)) + for _, log := range logs { + storageLogs = append(storageLogs, log.toStorageLog()) + } return &storage.Result{ - Logs: logs, + Logs: storageLogs, Count: uint64(count), Page: query.Page, PageSize: query.PageSize, @@ -152,3 +159,28 @@ func (s *MongoStorage) GetLogs(ctx xcontext.Context, query storage.Query) (*stor func (s *MongoStorage) Close(ctx xcontext.Context) error { return s.dbClient.Disconnect(ctx) } + +type Log struct { + JobID uint64 `bson:"job_id"` + LogData string `bson:"log_data"` + Date time.Time `bson:"date"` + LogLevel string `bson:"log_level"` +} + +func (l *Log) toStorageLog() storage.Log { + return storage.Log{ + JobID: l.JobID, + LogData: l.LogData, + Date: l.Date, + LogLevel: l.LogLevel, + } +} + +func toMongoLog(l *storage.Log) Log { + return Log{ + JobID: l.JobID, + LogData: l.LogData, + Date: l.Date, + LogLevel: l.LogLevel, + } +} diff --git a/cmds/admin_server/storage/storage.go b/cmds/admin_server/storage/storage.go index c539e62c..d15a4435 100644 --- a/cmds/admin_server/storage/storage.go +++ b/cmds/admin_server/storage/storage.go @@ -27,10 +27,10 @@ type Storage interface { // Log defines the basic log info pushed by the server type Log struct { - JobID uint64 `json:"jobID"` - LogData string `json:"logData"` - Date time.Time `json:"date"` - LogLevel string `json:"logLevel"` + JobID uint64 + LogData string + Date time.Time + LogLevel string } // Query defines the different options to filter with @@ -46,8 +46,8 @@ type Query struct { //Result defines the expected result returned from the db type Result struct { - Logs []Log `json:"logs"` - Count uint64 `json:"count"` - Page uint `json:"page"` - PageSize uint `json:"pageSize"` + Logs []Log + Count uint64 + Page uint + PageSize uint } diff --git a/tests/integ/admin_server/getlogs_test.go b/tests/integ/admin_server/getlogs_test.go index 85e68503..a5a03374 100644 --- a/tests/integ/admin_server/getlogs_test.go +++ b/tests/integ/admin_server/getlogs_test.go @@ -55,7 +55,7 @@ func generateRandomLogs(db *mongo.Client, count int) error { level := logLevels[rand.Intn(len(logLevels))] data := randomText() - logs = append(logs, storage.Log{ + logs = append(logs, mongoStorage.Log{ JobID: uint64(jobID), LogLevel: level, LogData: data, @@ -231,7 +231,7 @@ func TestLogQuery(t *testing.T) { PageSize: &pageSize, }, dbQuery: bson.M{ - "logdata": bson.M{"$regex": primitive.Regex{Pattern: "a", Options: "ig"}}, + "log_data": bson.M{"$regex": primitive.Regex{Pattern: "a", Options: "ig"}}, }, }, { @@ -243,7 +243,7 @@ func TestLogQuery(t *testing.T) { PageSize: &pageSize, }, dbQuery: bson.M{ - "loglevel": "info", + "log_level": "info", }, }, { @@ -255,7 +255,7 @@ func TestLogQuery(t *testing.T) { PageSize: &pageSize, }, dbQuery: bson.M{ - "loglevel": bson.M{"$in": []string{"info", "debug"}}, + "log_level": bson.M{"$in": []string{"info", "debug"}}, }, }, { @@ -313,12 +313,12 @@ func TestLogQuery(t *testing.T) { PageSize: &pageSize, }, dbQuery: bson.M{ - "logdata": bson.M{"$regex": primitive.Regex{Pattern: "a", Options: "ig"}}, + "log_data": bson.M{"$regex": primitive.Regex{Pattern: "a", Options: "ig"}}, "date": bson.M{ "$lte": primitive.NewDateTimeFromTime(endDate), "$gte": primitive.NewDateTimeFromTime(startDate), }, - "loglevel": "info", + "log_level": "info", }, }, } diff --git a/tests/integ/admin_server/logendpoint_test.go b/tests/integ/admin_server/logendpoint_test.go index 7f49deb5..7cf70c73 100644 --- a/tests/integ/admin_server/logendpoint_test.go +++ b/tests/integ/admin_server/logendpoint_test.go @@ -19,7 +19,6 @@ import ( "time" "github.com/linuxboot/contest/cmds/admin_server/server" - "github.com/linuxboot/contest/cmds/admin_server/storage" mongoStorage "github.com/linuxboot/contest/cmds/admin_server/storage/mongo" "github.com/stretchr/testify/require" "go.mongodb.org/mongo-driver/bson" @@ -58,7 +57,7 @@ func submitLog(addr string, log server.Log) error { return err } -func getAllLogs(t *testing.T, db *mongo.Client) []storage.Log { +func getAllLogs(t *testing.T, db *mongo.Client) []mongoStorage.Log { cur, err := db.Database(mongoStorage.DefaultDB). Collection(mongoStorage.DefaultCollection). Find(context.Background(), bson.D{{}}) @@ -66,9 +65,9 @@ func getAllLogs(t *testing.T, db *mongo.Client) []storage.Log { t.Fatal(err) } - var dbLogs []storage.Log + var dbLogs []mongoStorage.Log for cur.Next(context.Background()) { - var log storage.Log + var log mongoStorage.Log err := cur.Decode(&log) if err != nil { t.Fatal(err)