forked from hagen1778/tsbs
/
mongo.go
70 lines (58 loc) · 1.55 KB
/
mongo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package query
import (
"fmt"
"sync"
"github.com/globalsign/mgo/bson"
)
// Mongo encodes a Mongo request. This will be serialized for use
// by the tsbs_run_queries_mongo program.
type Mongo struct {
HumanLabel []byte
HumanDescription []byte
CollectionName []byte
BsonDoc []bson.M
ID uint64
}
// MongoPool is a sync.Pool of Mongo Query types
var MongoPool = sync.Pool{
New: func() interface{} {
return &Mongo{
HumanLabel: []byte{},
HumanDescription: []byte{},
CollectionName: []byte{},
BsonDoc: []bson.M{},
}
},
}
// NewMongo returns a new Mongo Query instance
func NewMongo() *Mongo {
return MongoPool.Get().(*Mongo)
}
// GetID returns the ID of this Query
func (q *Mongo) GetID() uint64 {
return q.ID
}
// SetID sets the ID for this Query
func (q *Mongo) SetID(id uint64) {
q.ID = id
}
// String produces a debug-ready description of a Query.
func (q *Mongo) String() string {
return fmt.Sprintf("HumanLabel: %s, HumanDescription: %s", q.HumanLabel, q.HumanDescription)
}
// HumanLabelName returns the human readable name of this Query
func (q *Mongo) HumanLabelName() []byte {
return q.HumanLabel
}
// HumanDescriptionName returns the human readable description of this Query
func (q *Mongo) HumanDescriptionName() []byte {
return q.HumanDescription
}
// Release resets and returns this Query to its pool
func (q *Mongo) Release() {
q.HumanLabel = q.HumanLabel[:0]
q.HumanDescription = q.HumanDescription[:0]
q.CollectionName = q.CollectionName[:0]
q.BsonDoc = nil
MongoPool.Put(q)
}