From 02f91d26ff8ee95580dc6bc715ecb932eb166111 Mon Sep 17 00:00:00 2001 From: Simon Larsen Date: Mon, 5 Aug 2024 15:40:20 -0600 Subject: [PATCH] refactor: Update import statements for ProbeMonitor and ServerMonitor to use ProbeMonitorResponse and ServerMonitorResponse --- App/FeatureSet/Workers/Index.ts | 3 ++ Common/Types/Monitor/MonitorType.ts | 2 +- Common/Types/ObjectID.ts | 3 +- .../1722892318363-MigrationName.ts | 41 +++++++++++++++++ .../Postgres/SchemaMigrations/Index.ts | 2 + .../Monitor/LogMonitor/LogMonitorStepFrom.tsx | 2 +- .../Monitor/SummaryView/LogMonitorView.tsx | 44 +++++++++++++++++++ .../Monitor/SummaryView/Summary.tsx | 3 ++ .../Monitor/SummaryView/SummaryInfo.tsx | 17 ++++++- .../Types/TelemetryMonitorSummary.ts | 4 ++ Dashboard/src/Pages/Monitor/View/Index.tsx | 10 ++++- .../src/Utils/Form/Monitor/CriteriaFilter.ts | 3 +- 12 files changed, 125 insertions(+), 9 deletions(-) create mode 100644 CommonServer/Infrastructure/Postgres/SchemaMigrations/1722892318363-MigrationName.ts create mode 100644 Dashboard/src/Components/Monitor/SummaryView/LogMonitorView.tsx create mode 100644 Dashboard/src/Components/Monitor/SummaryView/Types/TelemetryMonitorSummary.ts diff --git a/App/FeatureSet/Workers/Index.ts b/App/FeatureSet/Workers/Index.ts index 50154aac31..6199371fa4 100644 --- a/App/FeatureSet/Workers/Index.ts +++ b/App/FeatureSet/Workers/Index.ts @@ -67,6 +67,9 @@ import logger from "CommonServer/Utils/Logger"; import "./Jobs/Probe/SendOwnerAddedNotification"; import "./Jobs/Probe/UpdateConnectionStatus"; +// Telemetry Monitors. +import "./Jobs/TelemetryMonitor/MonitorTelemetryMonitor"; + const WorkersFeatureSet: FeatureSet = { init: async (): Promise => { try { diff --git a/Common/Types/Monitor/MonitorType.ts b/Common/Types/Monitor/MonitorType.ts index 242601e029..63d601841d 100644 --- a/Common/Types/Monitor/MonitorType.ts +++ b/Common/Types/Monitor/MonitorType.ts @@ -108,7 +108,7 @@ export class MonitorTypeHelper { monitorType: MonitorType.Logs, title: "Logs", description: "This monitor type lets you monitor logs from any source.", - } + }, // , // { // monitorType: MonitorType.Metrics, diff --git a/Common/Types/ObjectID.ts b/Common/Types/ObjectID.ts index f70c66d0b4..7a1a01c3c3 100644 --- a/Common/Types/ObjectID.ts +++ b/Common/Types/ObjectID.ts @@ -48,8 +48,7 @@ export default class ObjectID extends DatabaseProperty { } public static toJSONArray(ids: Array): Array { - - if(!ids || ids.length === 0) { + if (!ids || ids.length === 0) { return []; } diff --git a/CommonServer/Infrastructure/Postgres/SchemaMigrations/1722892318363-MigrationName.ts b/CommonServer/Infrastructure/Postgres/SchemaMigrations/1722892318363-MigrationName.ts new file mode 100644 index 0000000000..56f5361239 --- /dev/null +++ b/CommonServer/Infrastructure/Postgres/SchemaMigrations/1722892318363-MigrationName.ts @@ -0,0 +1,41 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class MigrationName1722892318363 implements MigrationInterface { + public name = "MigrationName1722892318363"; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "Monitor" ADD "telemetryMonitorNextMonitorAt" TIMESTAMP WITH TIME ZONE`, + ); + await queryRunner.query( + `ALTER TABLE "Monitor" ADD "telemetryMonitorLastMonitorAt" TIMESTAMP WITH TIME ZONE`, + ); + await queryRunner.query( + `ALTER TABLE "Incident" ADD "telemetryQuery" jsonb`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_540a4857bf04eabc59775ca210" ON "Monitor" ("telemetryMonitorNextMonitorAt") `, + ); + await queryRunner.query( + `CREATE INDEX "IDX_02bae6cdc6d5b3092ac393fbb3" ON "Monitor" ("telemetryMonitorLastMonitorAt") `, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `DROP INDEX "public"."IDX_02bae6cdc6d5b3092ac393fbb3"`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_540a4857bf04eabc59775ca210"`, + ); + await queryRunner.query( + `ALTER TABLE "Incident" DROP COLUMN "telemetryQuery"`, + ); + await queryRunner.query( + `ALTER TABLE "Monitor" DROP COLUMN "telemetryMonitorLastMonitorAt"`, + ); + await queryRunner.query( + `ALTER TABLE "Monitor" DROP COLUMN "telemetryMonitorNextMonitorAt"`, + ); + } +} diff --git a/CommonServer/Infrastructure/Postgres/SchemaMigrations/Index.ts b/CommonServer/Infrastructure/Postgres/SchemaMigrations/Index.ts index 39bc401aac..a38ceb8cc6 100644 --- a/CommonServer/Infrastructure/Postgres/SchemaMigrations/Index.ts +++ b/CommonServer/Infrastructure/Postgres/SchemaMigrations/Index.ts @@ -37,6 +37,7 @@ import { MigrationName1721754545771 } from "./1721754545771-MigrationName"; import { MigrationName1721779190475 } from "./1721779190475-MigrationName"; import { MigrationName1722031205897 } from "./1722031205897-MigrationName"; import { MigrationName1722543640526 } from "./1722543640526-MigrationName"; +import { MigrationName1722892318363 } from "./1722892318363-MigrationName"; export default [ InitialMigration, @@ -78,4 +79,5 @@ export default [ MigrationName1721779190475, MigrationName1722031205897, MigrationName1722543640526, + MigrationName1722892318363, ]; diff --git a/Dashboard/src/Components/Form/Monitor/LogMonitor/LogMonitorStepFrom.tsx b/Dashboard/src/Components/Form/Monitor/LogMonitor/LogMonitorStepFrom.tsx index a4bd244b0e..c56296769d 100644 --- a/Dashboard/src/Components/Form/Monitor/LogMonitor/LogMonitorStepFrom.tsx +++ b/Dashboard/src/Components/Form/Monitor/LogMonitor/LogMonitorStepFrom.tsx @@ -84,7 +84,7 @@ const LogMonitorStepForm: FunctionComponent = ( value: 86400, }, ], - title: "Monitor Logs for Last", + title: "Monitor Logs for", isAdvancedFilter: true, }, { diff --git a/Dashboard/src/Components/Monitor/SummaryView/LogMonitorView.tsx b/Dashboard/src/Components/Monitor/SummaryView/LogMonitorView.tsx new file mode 100644 index 0000000000..d93a49947c --- /dev/null +++ b/Dashboard/src/Components/Monitor/SummaryView/LogMonitorView.tsx @@ -0,0 +1,44 @@ +import OneUptimeDate from "Common/Types/Date"; +import InfoCard from "CommonUI/src/Components/InfoCard/InfoCard"; +import React, { FunctionComponent, ReactElement } from "react"; +import TelemetryMonitorSummary from "./Types/TelemetryMonitorSummary"; + +export interface ComponentProps { + telemetryMonitorSummary?: TelemetryMonitorSummary | undefined; +} + +const WebsiteMonitorSummaryView: FunctionComponent = ( + props: ComponentProps, +): ReactElement => { + + return ( +
+
+ + +
+
+ ); +}; + +export default WebsiteMonitorSummaryView; diff --git a/Dashboard/src/Components/Monitor/SummaryView/Summary.tsx b/Dashboard/src/Components/Monitor/SummaryView/Summary.tsx index 79e971eca4..16d8122f14 100644 --- a/Dashboard/src/Components/Monitor/SummaryView/Summary.tsx +++ b/Dashboard/src/Components/Monitor/SummaryView/Summary.tsx @@ -10,6 +10,7 @@ import Card from "CommonUI/src/Components/Card/Card"; import { MonitorStepProbeResponse } from "Common/Models/DatabaseModels/MonitorProbe"; import Probe from "Common/Models/DatabaseModels/Probe"; import React, { FunctionComponent, ReactElement, useEffect } from "react"; +import TelemetryMonitorSummary from "./Types/TelemetryMonitorSummary"; export interface ComponentProps { probeMonitorResponses?: Array | undefined; @@ -17,6 +18,7 @@ export interface ComponentProps { serverMonitorResponse?: ServerMonitorResponse | undefined; probes?: Array; monitorType: MonitorType; + telemetryMonitorSummary?: TelemetryMonitorSummary | undefined; } const Summary: FunctionComponent = ( @@ -81,6 +83,7 @@ const Summary: FunctionComponent = ( probeMonitorResponses={probeResponses} incomingMonitorRequest={props.incomingMonitorRequest} serverMonitorResponse={props.serverMonitorResponse} + telemetryMonitorSummary={props.telemetryMonitorSummary} /> diff --git a/Dashboard/src/Components/Monitor/SummaryView/SummaryInfo.tsx b/Dashboard/src/Components/Monitor/SummaryView/SummaryInfo.tsx index 271cd3877b..e0e3d17ad2 100644 --- a/Dashboard/src/Components/Monitor/SummaryView/SummaryInfo.tsx +++ b/Dashboard/src/Components/Monitor/SummaryView/SummaryInfo.tsx @@ -12,12 +12,16 @@ import MonitorType, { import ProbeMonitorResponse from "Common/Types/Probe/ProbeMonitorResponse"; import ErrorMessage from "CommonUI/src/Components/ErrorMessage/ErrorMessage"; import React, { FunctionComponent, ReactElement } from "react"; +import LogMonitorSummaryView from "./LogMonitorView"; +import TelemetryMonitorSummary from "./Types/TelemetryMonitorSummary"; + export interface ComponentProps { monitorType: MonitorType; probeMonitorResponses?: Array | undefined; // this is an array because of multiple monitor steps. incomingMonitorRequest?: IncomingMonitorRequest | undefined; serverMonitorResponse?: ServerMonitorResponse | undefined; + telemetryMonitorSummary?: TelemetryMonitorSummary | undefined; } const SummaryInfo: FunctionComponent = ( @@ -85,6 +89,15 @@ const SummaryInfo: FunctionComponent = ( ); } + if (props.monitorType === MonitorType.Logs) { + return ( + + ); + } + return <>; }; @@ -124,7 +137,7 @@ const SummaryInfo: FunctionComponent = ( )} {props.incomingMonitorRequest && - props.monitorType === MonitorType.IncomingRequest ? ( + props.monitorType === MonitorType.IncomingRequest ? ( @@ -133,7 +146,7 @@ const SummaryInfo: FunctionComponent = ( )} {props.monitorType === MonitorType.Server && - props.serverMonitorResponse ? ( + props.serverMonitorResponse ? ( diff --git a/Dashboard/src/Components/Monitor/SummaryView/Types/TelemetryMonitorSummary.ts b/Dashboard/src/Components/Monitor/SummaryView/Types/TelemetryMonitorSummary.ts new file mode 100644 index 0000000000..48bda08370 --- /dev/null +++ b/Dashboard/src/Components/Monitor/SummaryView/Types/TelemetryMonitorSummary.ts @@ -0,0 +1,4 @@ +export default interface TelemetryMonitorSummary { + lastCheckedAt?: Date | undefined; + nextCheckAt?: Date | undefined; +} diff --git a/Dashboard/src/Pages/Monitor/View/Index.tsx b/Dashboard/src/Pages/Monitor/View/Index.tsx index d4d3b74459..37a7cabeea 100644 --- a/Dashboard/src/Pages/Monitor/View/Index.tsx +++ b/Dashboard/src/Pages/Monitor/View/Index.tsx @@ -3,7 +3,7 @@ import DisabledWarning from "../../../Components/Monitor/DisabledWarning"; import IncomingMonitorLink from "../../../Components/Monitor/IncomingRequestMonitor/IncomingMonitorLink"; import { MonitorCharts } from "../../../Components/Monitor/MonitorCharts/MonitorChart"; import ServerMonitorDocumentation from "../../../Components/Monitor/ServerMonitor/Documentation"; -import Metrics from "../../../Components/Monitor/SummaryView/Summary"; +import Summary from "../../../Components/Monitor/SummaryView/Summary"; import ProbeUtil from "../../../Utils/Probe"; import PageComponentProps from "../../PageComponentProps"; import InBetween from "Common/Types/BaseDatabase/InBetween"; @@ -184,6 +184,8 @@ const MonitorView: FunctionComponent = (): ReactElement => { serverMonitorResponse: true, isNoProbeEnabledOnThisMonitor: true, isAllProbesDisconnectedFromThisMonitor: true, + telemetryMonitorLastMonitorAt: true, + telemetryMonitorNextMonitorAt: true, }, }); @@ -600,12 +602,16 @@ const MonitorView: FunctionComponent = (): ReactElement => { /> - {shouldFetchMonitorMetrics && getMonitorMetricsChartGroup()} diff --git a/Dashboard/src/Utils/Form/Monitor/CriteriaFilter.ts b/Dashboard/src/Utils/Form/Monitor/CriteriaFilter.ts index 70d00cf6d5..910e1868fd 100644 --- a/Dashboard/src/Utils/Form/Monitor/CriteriaFilter.ts +++ b/Dashboard/src/Utils/Form/Monitor/CriteriaFilter.ts @@ -261,7 +261,8 @@ export default class CriteriaFilterUtil { i.value === FilterType.GreaterThan || i.value === FilterType.LessThan || i.value === FilterType.LessThanOrEqualTo || - i.value === FilterType.GreaterThanOrEqualTo + i.value === FilterType.GreaterThanOrEqualTo || + i.value === FilterType.EqualTo ); }); }