MCPcopy
hub / github.com/msgbyte/tianji / getMonitorSummaryWithDay

Function getMonitorSummaryWithDay

src/server/model/monitor/index.ts:73–126  ·  view source on GitHub ↗
(
  monitorId: string,
  beforeDay: number = 30,
  timezone = 'utc'
)

Source from the content-addressed store, hash-verified

71}
72
73export async function getMonitorSummaryWithDay(
74 monitorId: string,
75 beforeDay: number = 30,
76 timezone = 'utc'
77) {
78 interface MonitorSummaryItem {
79 day: string;
80 total_count: number;
81 up_count: number;
82 up_rate: number;
83 }
84
85 const list = await prisma.$queryRaw<MonitorSummaryItem[]>`
86 SELECT
87 ${getDateQuery('"createdAt"', 'day', timezone)} AS day,
88 COUNT(1) AS total_count,
89 SUM(CASE WHEN "value" >= 0 THEN 1 ELSE 0 END) AS up_count,
90 (SUM(CASE WHEN "value" >= 0 THEN 1 ELSE 0 END) * 100.0 / COUNT(1)) AS up_rate
91 FROM
92 "MonitorData"
93 WHERE
94 "monitorId" = ${monitorId} AND
95 "createdAt" AT TIME ZONE ${timezone} >= CURRENT_DATE - INTERVAL '1 day' * ${beforeDay}
96 GROUP BY
97 1
98 ORDER BY
99 day;`;
100
101 const map: Record<string, MonitorSummaryItem> = {};
102 for (const item of list) {
103 const date = dayjs(item.day).format('YYYY-MM-DD');
104 map[date] = item;
105 }
106
107 return Array.from({ length: beforeDay }).map((_, i) => {
108 const target = dayjs().subtract(i, 'days').format('YYYY-MM-DD');
109
110 if (map[target]) {
111 return {
112 day: target,
113 totalCount: Number(map[target].total_count),
114 upCount: Number(map[target].up_count),
115 upRate: Number(Number(map[target].up_rate).toFixed(1)),
116 };
117 } else {
118 return {
119 day: target,
120 totalCount: 0,
121 upCount: 0,
122 upRate: 0,
123 };
124 }
125 });
126}
127
128/**
129 * create audit log which can query by log

Callers 1

monitor.tsFile · 0.85

Calls 1

getDateQueryFunction · 0.50

Tested by

no test coverage detected