modify query
This commit is contained in:
1 parent
3e995c82aa
commit
6f96e77fec
2 files changed
+101
-127
No files matched your search
@@ -313,7 +313,7 @@ const DetailsPage = () => {
|
||||
<Typography component="span">
|
||||
{hoveredUptimeData !== null
|
||||
? hoveredUptimeData.totalChecks
|
||||
: (monitor.groupUpChecks[0]?.overallTotalChecks ?? 0)}
|
||||
: (monitor.groupUpChecks[0]?.upChecksCount ?? 0)}
|
||||
</Typography>
|
||||
{hoveredUptimeData !== null && hoveredUptimeData.time !== null && (
|
||||
<Typography
|
||||
@@ -340,8 +340,8 @@ const DetailsPage = () => {
|
||||
{hoveredUptimeData !== null
|
||||
? Math.floor(hoveredUptimeData.groupUptimePercentage * 100)
|
||||
: Math.floor(
|
||||
monitor?.groupUpChecks[0]?.overallUptimePercentage ??
|
||||
0 * 100
|
||||
(monitor?.groupUpChecks[0]?.overallUptimePercentage ?? 0) *
|
||||
100
|
||||
)}
|
||||
<Typography component="span">%</Typography>
|
||||
</Typography>
|
||||
@@ -365,7 +365,7 @@ const DetailsPage = () => {
|
||||
<Typography component="span">
|
||||
{hoveredIncidentsData !== null
|
||||
? hoveredIncidentsData.totalChecks
|
||||
: (monitor.groupDownChecks[0]?.overallTotalChecks ?? 0)}
|
||||
: (monitor.groupDownChecks[0]?.downChecksCount ?? 0)}
|
||||
</Typography>
|
||||
{hoveredIncidentsData !== null &&
|
||||
hoveredIncidentsData.time !== null && (
|
||||
|
||||
@@ -388,49 +388,29 @@ const getUptimeDetailsById = async (req) => {
|
||||
|
||||
const dateString = formatLookup[dateRange];
|
||||
|
||||
const groupUpChecks = await Check.aggregate([
|
||||
const groupedChecks = await Check.aggregate([
|
||||
{
|
||||
$match: {
|
||||
monitorId: monitor._id,
|
||||
createdAt: { $gte: dates.start, $lte: dates.end },
|
||||
status: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
$group: {
|
||||
_id: null,
|
||||
totalChecks: { $sum: 1 },
|
||||
upChecks: { $sum: { $cond: [{ $eq: ["$status", true] }, 1, 0] } },
|
||||
avgResponseTime: { $avg: "$responseTime" },
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
uptimePercentage: {
|
||||
$divide: ["$upChecks", "$totalChecks"],
|
||||
},
|
||||
overallTotalChecks: "$totalChecks",
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "checks",
|
||||
let: { monitorId: monitor._id, start: dates.start, end: dates.end },
|
||||
pipeline: [
|
||||
$facet: {
|
||||
upChecksCount: [
|
||||
{
|
||||
$match: {
|
||||
status: true,
|
||||
$expr: {
|
||||
$and: [
|
||||
{ $eq: ["$monitorId", "$$monitorId"] },
|
||||
{ $gte: ["$createdAt", "$$start"] },
|
||||
{ $lte: ["$createdAt", "$$end"] },
|
||||
],
|
||||
},
|
||||
},
|
||||
$match: { status: true },
|
||||
},
|
||||
{
|
||||
$sort: { createdAt: 1 },
|
||||
$group: {
|
||||
_id: null,
|
||||
totalChecks: { $sum: 1 },
|
||||
},
|
||||
},
|
||||
],
|
||||
upChecks: [
|
||||
{
|
||||
$match: { status: true },
|
||||
},
|
||||
{
|
||||
$group: {
|
||||
@@ -440,12 +420,8 @@ const getUptimeDetailsById = async (req) => {
|
||||
date: "$createdAt",
|
||||
},
|
||||
},
|
||||
upChecks: {
|
||||
$sum: {
|
||||
$cond: [{ $eq: ["$status", true] }, 1, 0],
|
||||
},
|
||||
},
|
||||
totalChecks: { $sum: 1 },
|
||||
upChecks: { $sum: { $cond: [{ $eq: ["$status", true] }, 1, 0] } },
|
||||
avgResponseTime: { $avg: "$responseTime" },
|
||||
},
|
||||
},
|
||||
@@ -456,72 +432,24 @@ const getUptimeDetailsById = async (req) => {
|
||||
groupUptimePercentage: { $divide: ["$upChecks", "$totalChecks"] },
|
||||
},
|
||||
},
|
||||
],
|
||||
as: "groupedResults",
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: "$groupedResults",
|
||||
},
|
||||
{
|
||||
$replaceRoot: {
|
||||
newRoot: {
|
||||
$mergeObjects: [
|
||||
"$groupedResults",
|
||||
{ overallUptimePercentage: "$uptimePercentage" },
|
||||
{ overallTotalChecks: "$overallTotalChecks" },
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$sort: { _id: 1 },
|
||||
},
|
||||
]);
|
||||
|
||||
const groupDownChecks = await Check.aggregate([
|
||||
{
|
||||
$match: {
|
||||
monitorId: monitor._id,
|
||||
createdAt: { $gte: dates.start, $lte: dates.end },
|
||||
status: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
$group: {
|
||||
_id: null,
|
||||
totalChecks: { $sum: 1 },
|
||||
upChecks: { $sum: { $cond: [{ $eq: ["$status", true] }, 1, 0] } },
|
||||
avgResponseTime: { $avg: "$responseTime" },
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
uptimePercentage: {
|
||||
$divide: ["$upChecks", "$totalChecks"],
|
||||
},
|
||||
overallTotalChecks: "$totalChecks",
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "checks",
|
||||
let: { monitorId: monitor._id, start: dates.start, end: dates.end },
|
||||
pipeline: [
|
||||
{
|
||||
$match: {
|
||||
status: false,
|
||||
$expr: {
|
||||
$and: [
|
||||
{ $eq: ["$monitorId", "$$monitorId"] },
|
||||
{ $gte: ["$createdAt", "$$start"] },
|
||||
{ $lte: ["$createdAt", "$$end"] },
|
||||
],
|
||||
},
|
||||
},
|
||||
$sort: { _id: 1 },
|
||||
},
|
||||
],
|
||||
downChecksCount: [
|
||||
{
|
||||
$match: { status: false },
|
||||
},
|
||||
{
|
||||
$sort: { createdAt: 1 },
|
||||
$group: {
|
||||
_id: null,
|
||||
totalChecks: { $sum: 1 },
|
||||
},
|
||||
},
|
||||
],
|
||||
downChecks: [
|
||||
{
|
||||
$match: { status: false },
|
||||
},
|
||||
{
|
||||
$group: {
|
||||
@@ -531,12 +459,8 @@ const getUptimeDetailsById = async (req) => {
|
||||
date: "$createdAt",
|
||||
},
|
||||
},
|
||||
upChecks: {
|
||||
$sum: {
|
||||
$cond: [{ $eq: ["$status", true] }, 1, 0],
|
||||
},
|
||||
},
|
||||
totalChecks: { $sum: 1 },
|
||||
downChecks: { $sum: { $cond: [{ $eq: ["$status", false] }, 1, 0] } },
|
||||
avgResponseTime: { $avg: "$responseTime" },
|
||||
},
|
||||
},
|
||||
@@ -544,38 +468,88 @@ const getUptimeDetailsById = async (req) => {
|
||||
$project: {
|
||||
totalChecks: 1,
|
||||
avgResponseTime: 1,
|
||||
groupUptimePercentage: { $divide: ["$upChecks", "$totalChecks"] },
|
||||
groupUptimePercentage: { $divide: ["$downChecks", "$totalChecks"] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$sort: { _id: 1 },
|
||||
},
|
||||
],
|
||||
overall: [
|
||||
{
|
||||
$group: {
|
||||
_id: null,
|
||||
totalChecks: { $sum: 1 },
|
||||
groupAvgResponseTime: { $avg: "$responseTime" },
|
||||
upChecks: { $sum: { $cond: [{ $eq: ["$status", true] }, 1, 0] } },
|
||||
},
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
uptimePercentage: { $divide: ["$upChecks", "$totalChecks"] },
|
||||
totalChecks: 1,
|
||||
groupAvgResponseTime: 1,
|
||||
},
|
||||
},
|
||||
],
|
||||
as: "groupedResults",
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: "$groupedResults",
|
||||
},
|
||||
{
|
||||
$replaceRoot: {
|
||||
newRoot: {
|
||||
$mergeObjects: [
|
||||
"$groupedResults",
|
||||
{ overallUptimePercentage: "$uptimePercentage" },
|
||||
{ overallTotalChecks: "$overallTotalChecks" },
|
||||
],
|
||||
$project: {
|
||||
upChecks: {
|
||||
$map: {
|
||||
input: "$upChecks",
|
||||
as: "check",
|
||||
in: {
|
||||
$mergeObjects: [
|
||||
"$$check",
|
||||
{
|
||||
overallUptimePercentage: {
|
||||
$arrayElemAt: ["$overall.uptimePercentage", 0],
|
||||
},
|
||||
overallTotalChecks: { $arrayElemAt: ["$overall.totalChecks", 0] },
|
||||
upChecksCount: {
|
||||
$arrayElemAt: ["$upChecksCount.totalChecks", 0],
|
||||
},
|
||||
groupAvgResponseTime: {
|
||||
$arrayElemAt: ["$overall.groupAvgResponseTime", 0],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
downChecks: {
|
||||
$map: {
|
||||
input: "$downChecks",
|
||||
as: "check",
|
||||
in: {
|
||||
$mergeObjects: [
|
||||
"$$check",
|
||||
{
|
||||
overallUptimePercentage: {
|
||||
$arrayElemAt: ["$overall.uptimePercentage", 0],
|
||||
},
|
||||
overallTotalChecks: { $arrayElemAt: ["$overall.totalChecks", 0] },
|
||||
downChecksCount: {
|
||||
$arrayElemAt: ["$downChecksCount.totalChecks", 0],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$sort: { _id: 1 },
|
||||
},
|
||||
]);
|
||||
|
||||
const monitorStats = {
|
||||
...monitor.toObject(),
|
||||
};
|
||||
console.log(groupedChecks);
|
||||
monitorStats.aggregateData = aggregateResults[0];
|
||||
monitorStats.groupUpChecks = groupUpChecks;
|
||||
monitorStats.groupDownChecks = groupDownChecks;
|
||||
monitorStats.groupUpChecks = groupedChecks[0].upChecks;
|
||||
monitorStats.groupDownChecks = groupedChecks[0].downChecks;
|
||||
|
||||
return monitorStats;
|
||||
} catch (error) {
|
||||
|
||||
Reference in new issue
Block a user