github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/model/event/event_finder.go (about) 1 package event 2 3 import ( 4 "github.com/evergreen-ci/evergreen/db" 5 "gopkg.in/mgo.v2/bson" 6 ) 7 8 // === DB Logic === 9 10 // Find takes a collection storing events and a query, generated 11 // by one of the query functions, and returns a slice of events. 12 func Find(coll string, query db.Q) ([]Event, error) { 13 events := []Event{} 14 err := db.FindAllQ(coll, query, &events) 15 return events, err 16 } 17 18 // === Queries === 19 20 // Host Events 21 func HostEventsForId(id string) db.Q { 22 return db.Query(bson.D{ 23 {DataKey + "." + ResourceTypeKey, ResourceTypeHost}, 24 {ResourceIdKey, id}, 25 }) 26 } 27 28 func MostRecentHostEvents(id string, n int) db.Q { 29 return HostEventsForId(id).Sort([]string{"-" + TimestampKey}).Limit(n) 30 } 31 32 func HostEventsInOrder(id string) db.Q { 33 return HostEventsForId(id).Sort([]string{TimestampKey}) 34 } 35 36 // Task Events 37 func TaskEventsForId(id string) db.Q { 38 return db.Query(bson.D{ 39 {DataKey + "." + ResourceTypeKey, ResourceTypeTask}, 40 {ResourceIdKey, id}, 41 }) 42 } 43 44 func MostRecentTaskEvents(id string, n int) db.Q { 45 return TaskEventsForId(id).Sort([]string{"-" + TimestampKey}).Limit(n) 46 } 47 48 func TaskEventsInOrder(id string) db.Q { 49 return TaskEventsForId(id).Sort([]string{TimestampKey}) 50 } 51 52 // Distro Events 53 func DistroEventsForId(id string) db.Q { 54 return db.Query(bson.D{ 55 {DataKey + "." + ResourceTypeKey, ResourceTypeDistro}, 56 {ResourceIdKey, id}, 57 }) 58 } 59 60 func MostRecentDistroEvents(id string, n int) db.Q { 61 return DistroEventsForId(id).Sort([]string{"-" + TimestampKey}).Limit(n) 62 } 63 64 func DistroEventsInOrder(id string) db.Q { 65 return DistroEventsForId(id).Sort([]string{TimestampKey}) 66 } 67 68 // Scheduler Events 69 func SchedulerEventsForId(distroId string) db.Q { 70 return db.Query(bson.D{ 71 {DataKey + "." + ResourceTypeKey, ResourceTypeScheduler}, 72 {ResourceIdKey, distroId}, 73 }) 74 } 75 76 func RecentSchedulerEvents(distroId string, n int) db.Q { 77 return SchedulerEventsForId(distroId).Sort([]string{"-" + TimestampKey}).Limit(n) 78 } 79 80 // TaskSystemInfoEvents builds a query for system info, 81 // (e.g. aggregate information about the system as a whole) collected 82 // during a task. 83 func TaskSystemInfoEvents(taskId string, n int) db.Q { 84 // TODO: (EVG-1497) decide on an better index/sort 85 return db.Query(bson.D{ 86 {DataKey + "." + ResourceTypeKey, EventTaskSystemInfo}, 87 {ResourceIdKey, taskId}, 88 {TypeKey, EventTaskSystemInfo}, 89 }).Sort([]string{TimestampKey}).Limit(n) 90 } 91 92 // TaskProcessInfoEvents builds a query for process info, which 93 // returns information about each process (and children) spawned 94 // during task execution. 95 func TaskProcessInfoEvents(taskId string, n int) db.Q { 96 // TODO: (EVG-1497) decide on an better index/sort 97 return db.Query(bson.D{ 98 {DataKey + "." + ResourceTypeKey, EventTaskProcessInfo}, 99 {ResourceIdKey, taskId}, 100 {TypeKey, EventTaskProcessInfo}, 101 }).Sort([]string{TimestampKey}).Limit(n) 102 }