From 572d006d9fdc0c544e7188125f10e5d6113b8455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Tue, 23 Jun 2020 14:08:17 +0100 Subject: [PATCH] [Observability]Adding specific Return APIs for each plugin (#69257) * Adding specific apis for each plugin * adding metric hosts stat * addressing PR comment * addressing PR comments * changing series to key/value * exporting interfaces * adding label to stat * refactoring types Co-authored-by: Elastic Machine --- .../observability/public/data_handler.ts | 23 ++++- .../public/typings/data_handler/index.d.ts | 42 --------- .../typings/fetch_data_response/index.d.ts | 86 +++++++++++++++++++ 3 files changed, 107 insertions(+), 44 deletions(-) delete mode 100644 x-pack/plugins/observability/public/typings/data_handler/index.d.ts create mode 100644 x-pack/plugins/observability/public/typings/fetch_data_response/index.d.ts diff --git a/x-pack/plugins/observability/public/data_handler.ts b/x-pack/plugins/observability/public/data_handler.ts index 30a7357404d23..8f80f79b2e829 100644 --- a/x-pack/plugins/observability/public/data_handler.ts +++ b/x-pack/plugins/observability/public/data_handler.ts @@ -4,9 +4,23 @@ * you may not use this file except in compliance with the Elastic License. */ -import { FetchData, HasData } from './typings/data_handler'; +import { ObservabilityFetchDataResponse, FetchDataResponse } from './typings/fetch_data_response'; import { ObservabilityApp } from '../typings/common'; +interface FetchDataParams { + // The start timestamp in milliseconds of the queried time interval + startTime: string; + // The end timestamp in milliseconds of the queried time interval + endTime: string; + // The aggregation bucket size in milliseconds if applicable to the data source + bucketSize: string; +} + +export type FetchData = ( + fetchDataParams: FetchDataParams +) => Promise; +export type HasData = () => Promise; + interface DataHandler { fetchData: FetchData; hasData: HasData; @@ -14,7 +28,12 @@ interface DataHandler { const dataHandlers: Partial> = {}; -export type RegisterDataHandler = (params: { appName: ObservabilityApp } & DataHandler) => void; +export type RegisterDataHandler = (params: { + appName: T; + fetchData: FetchData; + hasData: HasData; +}) => void; + export const registerDataHandler: RegisterDataHandler = ({ appName, fetchData, hasData }) => { dataHandlers[appName] = { fetchData, hasData }; }; diff --git a/x-pack/plugins/observability/public/typings/data_handler/index.d.ts b/x-pack/plugins/observability/public/typings/data_handler/index.d.ts deleted file mode 100644 index a208e4e7c223d..0000000000000 --- a/x-pack/plugins/observability/public/typings/data_handler/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -interface Stat { - label: string; - value: string; - color?: string; -} - -export interface Coordinates { - x: number; - y?: number; -} - -interface Series { - label: string; - coordinates: Coordinates[]; - color?: string; - key?: string; -} - -interface FetchDataResponse { - title: string; - appLink: string; - stats: Stat[]; - series: Series[]; -} -interface FetchDataParams { - // The start timestamp in milliseconds of the queried time interval - startTime: string; - // The end timestamp in milliseconds of the queried time interval - endTime: string; - // The aggregation bucket size in milliseconds if applicable to the data source - bucketSize: string; -} - -export type FetchData = (fetchDataParams: FetchDataParams) => Promise; - -export type HasData = () => Promise; diff --git a/x-pack/plugins/observability/public/typings/fetch_data_response/index.d.ts b/x-pack/plugins/observability/public/typings/fetch_data_response/index.d.ts new file mode 100644 index 0000000000000..30ecb24a58a5a --- /dev/null +++ b/x-pack/plugins/observability/public/typings/fetch_data_response/index.d.ts @@ -0,0 +1,86 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +interface Percentage { + label: string; + pct: number; + color?: string; +} +interface Bytes { + label: string; + bytes: number; + color?: string; +} +interface Numeral { + label: string; + value: number; + color?: string; +} + +export interface Coordinates { + x: number; + y?: number; +} + +interface Series { + label: string; + coordinates: Coordinates[]; + color?: string; +} + +export interface FetchDataResponse { + title: string; + appLink: string; +} + +export interface LogsFetchDataResponse extends FetchDataResponse { + stats: Record; + series: Record; +} + +export interface MetricsFetchDataResponse extends FetchDataResponse { + stats: { + hosts: Numeral; + cpu: Percentage; + memory: Percentage; + disk: Percentage; + inboundTraffic: Bytes; + outboundTraffic: Bytes; + }; + series: { + inboundTraffic: Series; + outboundTraffic: Series; + }; +} + +export interface UptimeFetchDataResponse extends FetchDataResponse { + stats: { + monitors: Numeral; + up: Numeral; + down: Numeral; + }; + series: { + up: Series; + down: Series; + }; +} + +export interface ApmFetchDataResponse extends FetchDataResponse { + stats: { + services: Numeral; + transactions: Numeral; + }; + series: { + transactions: Series; + }; +} + +export interface ObservabilityFetchDataResponse { + apm: ApmFetchDataResponse; + infra_metrics: MetricsFetchDataResponse; + infra_logs: LogsFetchDataResponse; + uptime: UptimeFetchDataResponse; +}