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  }