//Aggregation query for events to summarise the nodes by current state.
db.getCollection('nodes').aggregate([ //get all nodes from the group HQDEV { $match: {group: "HQDev"} }, //Get all the states for the matched nodes { $lookup: { from: "state", localField: "_id", foreignField: "node", as: "states" } }, //unwinds the states array creating a document per state with node config data { $unwind: { path: "$states" } }, //We only want open states { $match: {'states.state': {$eq: 'open'}} }, // group by the node, the state and the stateful element { $group : { _id : {node: "$_id", state: "$states.state", stateful: "$states.stateful" }, total: {$sum: 1} } }, //Then group by node and collecting all the states for the node { $group : { _id : "$_id.node", states: { $push: { state: "$_id.state", stateful: "$_id.stateful", count: "$total"}} } }, ])
Aggregation query for events to summarise the events by the priority.
Takes all events after a certain time and which are not acknowledged
Firstly it groups by the event name and priority, and counts the amount of events
db.getCollection('events').aggregate([ { $match: { "time": { "$gte": 1577836800 }, "acknowledged": { "$eq": 0 } } }, { $group: { _id: { event: "$event", priority: "$priority" }, priorities: { $push: "$priority" }, total: { $sum: 1 } } }, { $group: { _id: "$_id.event", priorities: { $push: { priority: "$_id.priority", count: "$total" } }, } } ])