203 lines
5.7 KiB
Go
203 lines
5.7 KiB
Go
|
package mgo
|
||
|
|
||
|
import (
|
||
|
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
|
||
|
|
||
|
"github.com/globalsign/mgo"
|
||
|
"github.com/globalsign/mgo/bson"
|
||
|
)
|
||
|
|
||
|
// Collection provides a mgo.Collection along with
|
||
|
// data used for APM Tracing.
|
||
|
type Collection struct {
|
||
|
*mgo.Collection
|
||
|
cfg mongoConfig
|
||
|
}
|
||
|
|
||
|
// Create invokes and traces Collection.Create
|
||
|
func (c *Collection) Create(info *mgo.CollectionInfo) error {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.Create(info)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// DropCollection invokes and traces Collection.DropCollection
|
||
|
func (c *Collection) DropCollection() error {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.DropCollection()
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// EnsureIndexKey invokes and traces Collection.EnsureIndexKey
|
||
|
func (c *Collection) EnsureIndexKey(key ...string) error {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.EnsureIndexKey(key...)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// EnsureIndex invokes and traces Collection.EnsureIndex
|
||
|
func (c *Collection) EnsureIndex(index mgo.Index) error {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.EnsureIndex(index)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// DropIndex invokes and traces Collection.DropIndex
|
||
|
func (c *Collection) DropIndex(key ...string) error {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.DropIndex(key...)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// DropIndexName invokes and traces Collection.DropIndexName
|
||
|
func (c *Collection) DropIndexName(name string) error {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.DropIndexName(name)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Indexes invokes and traces Collection.Indexes
|
||
|
func (c *Collection) Indexes() (indexes []mgo.Index, err error) {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
indexes, err = c.Collection.Indexes()
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return indexes, err
|
||
|
}
|
||
|
|
||
|
// Insert invokes and traces Collectin.Insert
|
||
|
func (c *Collection) Insert(docs ...interface{}) error {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.Insert(docs...)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Find invokes and traces Collection.Find
|
||
|
func (c *Collection) Find(query interface{}) *Query {
|
||
|
return &Query{
|
||
|
Query: c.Collection.Find(query),
|
||
|
cfg: c.cfg,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// FindId invokes and traces Collection.FindId
|
||
|
func (c *Collection) FindId(id interface{}) *Query { // nolint
|
||
|
return &Query{
|
||
|
Query: c.Collection.FindId(id),
|
||
|
cfg: c.cfg,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Count invokes and traces Collection.Count
|
||
|
func (c *Collection) Count() (n int, err error) {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
n, err = c.Collection.Count()
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return n, err
|
||
|
}
|
||
|
|
||
|
// Bulk creates a trace ready wrapper around Collection.Bulk
|
||
|
func (c *Collection) Bulk() *Bulk {
|
||
|
return &Bulk{
|
||
|
Bulk: c.Collection.Bulk(),
|
||
|
cfg: c.cfg,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// NewIter invokes and traces Collection.Iter
|
||
|
func (c *Collection) NewIter(session *mgo.Session, firstBatch []bson.Raw, cursorId int64, err error) *Iter { // nolint
|
||
|
return &Iter{
|
||
|
Iter: c.Collection.NewIter(session, firstBatch, cursorId, err),
|
||
|
cfg: c.cfg,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Pipe invokes and traces Collection.Pipe
|
||
|
func (c *Collection) Pipe(pipeline interface{}) *Pipe {
|
||
|
return &Pipe{
|
||
|
Pipe: c.Collection.Pipe(pipeline),
|
||
|
cfg: c.cfg,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Update invokes and traces Collection.Update
|
||
|
func (c *Collection) Update(selector interface{}, update interface{}) error {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.Update(selector, update)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// UpdateId invokes and traces Collection.UpdateId
|
||
|
func (c *Collection) UpdateId(id interface{}, update interface{}) error { // nolint
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.UpdateId(id, update)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// UpdateAll invokes and traces Collection.UpdateAll
|
||
|
func (c *Collection) UpdateAll(selector interface{}, update interface{}) (info *mgo.ChangeInfo, err error) {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
info, err = c.Collection.UpdateAll(selector, update)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return info, err
|
||
|
}
|
||
|
|
||
|
// Upsert invokes and traces Collection.Upsert
|
||
|
func (c *Collection) Upsert(selector interface{}, update interface{}) (info *mgo.ChangeInfo, err error) {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
info, err = c.Collection.Upsert(selector, update)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return info, err
|
||
|
}
|
||
|
|
||
|
// UpsertId invokes and traces Collection.UpsertId
|
||
|
func (c *Collection) UpsertId(id interface{}, update interface{}) (info *mgo.ChangeInfo, err error) { // nolint
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
info, err = c.Collection.UpsertId(id, update)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return info, err
|
||
|
}
|
||
|
|
||
|
// Remove invokes and traces Collection.Remove
|
||
|
func (c *Collection) Remove(selector interface{}) error {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.Remove(selector)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// RemoveId invokes and traces Collection.RemoveId
|
||
|
func (c *Collection) RemoveId(id interface{}) error { // nolint
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
err := c.Collection.RemoveId(id)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// RemoveAll invokes and traces Collection.RemoveAll
|
||
|
func (c *Collection) RemoveAll(selector interface{}) (info *mgo.ChangeInfo, err error) {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
info, err = c.Collection.RemoveAll(selector)
|
||
|
span.Finish(tracer.WithError(err))
|
||
|
return info, err
|
||
|
}
|
||
|
|
||
|
// Repair invokes and traces Collection.Repair
|
||
|
func (c *Collection) Repair() *Iter {
|
||
|
span := newChildSpanFromContext(c.cfg)
|
||
|
iter := c.Collection.Repair()
|
||
|
span.Finish()
|
||
|
return &Iter{
|
||
|
Iter: iter,
|
||
|
cfg: c.cfg,
|
||
|
}
|
||
|
}
|