|
@@ -418,16 +418,56 @@ export class Database extends SQLiteController {
|
|
|
async queryServiceCheckData(serverID: number, confID: number, from: Date, to: Date) {
|
|
async queryServiceCheckData(serverID: number, confID: number, from: Date, to: Date) {
|
|
|
const result = await this.stmt(
|
|
const result = await this.stmt(
|
|
|
`
|
|
`
|
|
|
- SELECT
|
|
|
|
|
- HealthCheckDataEntry.*
|
|
|
|
|
- FROM HealthCheckDataEntry
|
|
|
|
|
- JOIN HealthCheckConfig ON HealthCheckConfig.ID = HealthCheckDataEntry.ConfigID
|
|
|
|
|
|
|
+ SELECT DataEntryChanges.*
|
|
|
|
|
+ FROM HealthCheckConfig
|
|
|
|
|
+ JOIN (
|
|
|
|
|
+ SELECT * FROM (
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ *
|
|
|
|
|
+ FROM HealthCheckDataEntry
|
|
|
|
|
+ WHERE ConfigID = ?
|
|
|
|
|
+ AND Timestamp BETWEEN ? AND ?
|
|
|
|
|
+ ORDER BY ID
|
|
|
|
|
+ LIMIT 0, 1
|
|
|
|
|
+ ) AS FIRST_STATE
|
|
|
|
|
+
|
|
|
|
|
+ UNION --+--+--
|
|
|
|
|
+
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ ID,
|
|
|
|
|
+ ConfigID,
|
|
|
|
|
+ Timestamp,
|
|
|
|
|
+ Status,
|
|
|
|
|
+ Message
|
|
|
|
|
+ FROM
|
|
|
|
|
+ (
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ HealthCheckDataEntry.*,
|
|
|
|
|
+ LAG(Status) OVER (ORDER BY ConfigID, Timestamp) AS previous_state,
|
|
|
|
|
+ LAG(Message) OVER (ORDER BY ConfigID, Timestamp) AS previous_msg
|
|
|
|
|
+ FROM HealthCheckDataEntry
|
|
|
|
|
+ WHERE ConfigID = ?
|
|
|
|
|
+ )
|
|
|
|
|
+ WHERE Status <> previous_state
|
|
|
|
|
+ AND Message <> previous_msg
|
|
|
|
|
+
|
|
|
|
|
+ UNION --+--+--
|
|
|
|
|
+
|
|
|
|
|
+ SELECT * FROM (
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ *
|
|
|
|
|
+ FROM HealthCheckDataEntry
|
|
|
|
|
+ WHERE ConfigID = ?
|
|
|
|
|
+ AND Timestamp BETWEEN ? AND ?
|
|
|
|
|
+ ORDER BY ID DESC
|
|
|
|
|
+ LIMIT 0, 1
|
|
|
|
|
+ ) AS LAST_STATE
|
|
|
|
|
+ ORDER BY ConfigID, Timestamp
|
|
|
|
|
+ ) AS DataEntryChanges ON DataEntryChanges.ConfigID = HealthCheckConfig.ID
|
|
|
WHERE HealthCheckConfig.ServerID = ?
|
|
WHERE HealthCheckConfig.ServerID = ?
|
|
|
- AND HealthCheckDataEntry.ConfigID = ?
|
|
|
|
|
- AND HealthCheckDataEntry.Timestamp BETWEEN ? AND ?
|
|
|
|
|
- ORDER BY Timestamp, ID;
|
|
|
|
|
- `,
|
|
|
|
|
- [serverID, confID, from.getTime(), to.getTime()]
|
|
|
|
|
|
|
+ AND DataEntryChanges.Timestamp BETWEEN ? AND ?
|
|
|
|
|
+ ORDER BY Timestamp, ID;`,
|
|
|
|
|
+ [confID, from.getTime(), to.getTime(), confID, confID, from.getTime(), to.getTime(), serverID, from.getTime(), to.getTime()]
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
const mapByTimestamp = result.rows.reduce((res: Map<number, ServiceCheckDataEntry[]>, row) => {
|
|
const mapByTimestamp = result.rows.reduce((res: Map<number, ServiceCheckDataEntry[]>, row) => {
|