set mongo structs strictly in one place
+ split file
This commit is contained in:
		
							
								
								
									
										46
									
								
								cmd/mongo_struct.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								cmd/mongo_struct.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | package logmower | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"time" | ||||||
|  |  | ||||||
|  | 	"go.mongodb.org/mongo-driver/bson" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // when editing, also edit everything in this file! | ||||||
|  | type mLog struct { | ||||||
|  | 	HostInfo    HostInfo | ||||||
|  | 	File        string | ||||||
|  | 	Offset      int64  // byte offset where log entry ends at | ||||||
|  | 	Content     string // TODO: | ||||||
|  | 	ShipTime    time.Time | ||||||
|  | 	CollectTime time.Time | ||||||
|  | 	StdErr      bool | ||||||
|  | 	Format      string // F or P TODO: what does it mean? Is there a well-defined log format for cri-o? | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	mongoKeyHostInfo     = "host_info" | ||||||
|  | 	mongoKeyId           = "id" | ||||||
|  | 	mongoKeyHostInfoId   = mongoKeyHostInfo + "." + mongoKeyId | ||||||
|  | 	mongoKeyFileBasename = "file" | ||||||
|  | 	mongoKeyOffset       = "offset" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // not using marshal, since it is <0.1x performance | ||||||
|  | func (l *mLog) toBson() bson.M { | ||||||
|  | 	// DO NOT USE QUOTED STRINGS! Move them to const and use variable instead | ||||||
|  | 	return bson.M{ | ||||||
|  | 		mongoKeyHostInfo: bson.M{ | ||||||
|  | 			mongoKeyId: l.HostInfo.id, | ||||||
|  | 			"name":     l.HostInfo.name, | ||||||
|  | 			"arch":     l.HostInfo.arch, | ||||||
|  | 		}, | ||||||
|  | 		mongoKeyFileBasename: l.File, | ||||||
|  | 		mongoKeyOffset:       l.Offset, | ||||||
|  | 		"content":            l.Content, | ||||||
|  | 		"ship_time":          l.ShipTime, | ||||||
|  | 		"container_time":     l.CollectTime, | ||||||
|  | 		"stderr":             l.StdErr, | ||||||
|  | 		"format":             l.Format, | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -8,7 +8,6 @@ import ( | |||||||
| 	"github.com/jtagcat/util" | 	"github.com/jtagcat/util" | ||||||
| 	prom "github.com/prometheus/client_golang/prometheus" | 	prom "github.com/prometheus/client_golang/prometheus" | ||||||
| 	"github.com/prometheus/client_golang/prometheus/promauto" | 	"github.com/prometheus/client_golang/prometheus/promauto" | ||||||
| 	"go.mongodb.org/mongo-driver/bson" |  | ||||||
| 	"go.uber.org/zap" | 	"go.uber.org/zap" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -124,33 +123,3 @@ func (s *submitter) sender(name string, sendQueue <-chan mLog) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| // when editing, also edit toBson(); all bson.D (and bson.M) uses |  | ||||||
| type mLog struct { |  | ||||||
| 	HostInfo    HostInfo |  | ||||||
| 	File        string |  | ||||||
| 	Offset      int64  // byte offset where log entry ends at |  | ||||||
| 	Content     string // TODO: |  | ||||||
| 	ShipTime    time.Time |  | ||||||
| 	CollectTime time.Time |  | ||||||
| 	StdErr      bool |  | ||||||
| 	Format      string // F or P TODO: what does it mean? Is there a well-defined log format for cri-o? |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // not using marshal, since it is <0.1x performance |  | ||||||
| func (l *mLog) toBson() bson.M { |  | ||||||
| 	return bson.M{ |  | ||||||
| 		"host_info": bson.M{ |  | ||||||
| 			"id":   l.HostInfo.id, |  | ||||||
| 			"name": l.HostInfo.name, |  | ||||||
| 			"arch": l.HostInfo.arch, |  | ||||||
| 		}, |  | ||||||
| 		"filename":       l.File, |  | ||||||
| 		"offset":         l.Offset, |  | ||||||
| 		"content":        l.Content, |  | ||||||
| 		"ship_time":      l.ShipTime, |  | ||||||
| 		"container_time": l.CollectTime, |  | ||||||
| 		"stderr":         l.StdErr, |  | ||||||
| 		"format":         l.Format, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -83,8 +83,8 @@ func (s *submitter) shipFileRoutine(ctx context.Context, name string, sendQueue | |||||||
|  |  | ||||||
| 	// get files with offset | 	// get files with offset | ||||||
| 	offsetResult, err := mongoWithErr(s.db.FindOne(mongoTimeoutCtx(ctx), | 	offsetResult, err := mongoWithErr(s.db.FindOne(mongoTimeoutCtx(ctx), | ||||||
| 		bson.D{{Key: "hostinfo.id", Value: s.hostInfo.id}, {Key: "file", Value: baseName}}, | 		bson.D{{Key: mongoKeyHostInfoId, Value: s.hostInfo.id}, {Key: mongoKeyFileBasename, Value: baseName}}, | ||||||
| 		&mongoOpt.FindOneOptions{Sort: bson.D{{Key: "offset", Value: -1}}}, // sort descending (get largest) | 		&mongoOpt.FindOneOptions{Sort: bson.D{{Key: mongoKeyOffset, Value: -1}}}, // sort descending (get largest) | ||||||
| 	)) | 	)) | ||||||
|  |  | ||||||
| 	if err != nil && !errors.Is(err, mongo.ErrNoDocuments) { | 	if err != nil && !errors.Is(err, mongo.ErrNoDocuments) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user