From b5af2cff2791875a7f853fe9a3d995e6575a2ca3 Mon Sep 17 00:00:00 2001 From: ricoberger Date: Sun, 28 Feb 2021 18:50:57 +0100 Subject: [PATCH] Add Prometheus as datasource for Applications This commit introduces the concept of datasources. Datasources are used to retrieve metrics, logs or traces for an application and maybe later also for other Kubernetes resources. In the first step we are adding Prometheus as datasource for Application metrics. For that the Application CRD was extended with a metrics section, where a user can define variables and charts for the metrics view of an application. The metrics section also contains a health field with a single chart, which can be used to display the health of an Application in the gallery overview. --- CHANGELOG.md | 1 + Makefile | 9 +- app/package.json | 95 +- app/src/App.tsx | 1 + app/src/app.css | 52 + .../components/applications/Application.tsx | 22 +- .../components/applications/Applications.tsx | 4 +- .../components/applications/details/Card.tsx | 25 - .../applications/details/DrawerPanel.tsx | 12 +- .../applications/details/metrics/Chart.tsx | 112 + .../applications/details/metrics/Charts.tsx | 66 + .../applications/details/metrics/Metrics.tsx | 123 + .../applications/details/metrics/Options.tsx | 160 + .../applications/details/metrics/Toolbar.tsx | 138 + .../applications/details/metrics/Variable.tsx | 41 + .../details/metrics/charts/Default.tsx | 100 + .../details/metrics/charts/Sparkline.tsx | 42 + .../details/resources/Resources.tsx | 2 +- .../components/applications/overview/Card.tsx | 85 + .../applications/overview/Chart.tsx | 48 + .../components/shared/EmptyStateSpinner.tsx | 24 + app/src/generated/proto/application_pb.d.ts | 291 ++ app/src/generated/proto/application_pb.js | 2289 +++++++++++++++ .../proto/application_pb_service.d.ts | 3 + .../generated/proto/application_pb_service.js | 3 + .../proto/applications_grpc_web_pb.js | 234 -- app/src/generated/proto/applications_pb.d.ts | 95 - app/src/generated/proto/applications_pb.js | 732 ----- .../proto/applications_pb_service.d.ts | 3 - .../proto/applications_pb_service.js | 3 - .../generated/proto/clusters_grpc_web_pb.js | 2 +- app/src/generated/proto/clusters_pb.d.ts | 16 +- app/src/generated/proto/clusters_pb.js | 46 +- .../proto/datasources_grpc_web_pb.js | 476 +++ app/src/generated/proto/datasources_pb.d.ts | 334 +++ app/src/generated/proto/datasources_pb.js | 2614 +++++++++++++++++ .../proto/datasources_pb_service.d.ts | 139 + .../generated/proto/datasources_pb_service.js | 221 ++ app/src/utils/helpers.ts | 8 + app/src/utils/proto.ts | 82 + app/yarn.lock | 346 ++- cmd/kobs/kobs.go | 6 +- deploy/docker/envoy/envoy.yaml | 6 + deploy/docker/kobs/config.yaml | 6 + .../kustomize/crds/kobs.io_applications.yaml | 127 + go.mod | 2 + go.sum | 263 ++ pkg/api/api.go | 10 +- pkg/api/clusters/cluster/cluster.go | 8 + pkg/api/datasources/datasource/datasource.go | 46 + .../datasource/prometheus/helpers.go | 66 + .../datasource/prometheus/prometheus.go | 269 ++ pkg/api/datasources/datasources.go | 113 + pkg/generated/proto/application.pb.go | 908 ++++++ .../proto/application_deepcopy.gen.go | 204 ++ pkg/generated/proto/applications.pb.go | 349 --- .../proto/applications_deepcopy.gen.go | 78 - pkg/generated/proto/applications_grpc.pb.go | 137 - pkg/generated/proto/clusters.pb.go | 183 +- pkg/generated/proto/datasources.pb.go | 1110 +++++++ .../proto/datasources_deepcopy.gen.go | 288 ++ pkg/generated/proto/datasources_grpc.pb.go | 245 ++ proto/application.proto | 88 + proto/applications.proto | 32 - proto/clusters.proto | 6 +- proto/datasources.proto | 101 + 66 files changed, 11908 insertions(+), 1842 deletions(-) delete mode 100644 app/src/components/applications/details/Card.tsx create mode 100644 app/src/components/applications/details/metrics/Chart.tsx create mode 100644 app/src/components/applications/details/metrics/Charts.tsx create mode 100644 app/src/components/applications/details/metrics/Metrics.tsx create mode 100644 app/src/components/applications/details/metrics/Options.tsx create mode 100644 app/src/components/applications/details/metrics/Toolbar.tsx create mode 100644 app/src/components/applications/details/metrics/Variable.tsx create mode 100644 app/src/components/applications/details/metrics/charts/Default.tsx create mode 100644 app/src/components/applications/details/metrics/charts/Sparkline.tsx create mode 100644 app/src/components/applications/overview/Card.tsx create mode 100644 app/src/components/applications/overview/Chart.tsx create mode 100644 app/src/components/shared/EmptyStateSpinner.tsx create mode 100644 app/src/generated/proto/application_pb.d.ts create mode 100644 app/src/generated/proto/application_pb.js create mode 100644 app/src/generated/proto/application_pb_service.d.ts create mode 100644 app/src/generated/proto/application_pb_service.js delete mode 100644 app/src/generated/proto/applications_grpc_web_pb.js delete mode 100644 app/src/generated/proto/applications_pb.d.ts delete mode 100644 app/src/generated/proto/applications_pb.js delete mode 100644 app/src/generated/proto/applications_pb_service.d.ts delete mode 100644 app/src/generated/proto/applications_pb_service.js create mode 100644 app/src/generated/proto/datasources_grpc_web_pb.js create mode 100644 app/src/generated/proto/datasources_pb.d.ts create mode 100644 app/src/generated/proto/datasources_pb.js create mode 100644 app/src/generated/proto/datasources_pb_service.d.ts create mode 100644 app/src/generated/proto/datasources_pb_service.js create mode 100644 app/src/utils/proto.ts create mode 100644 pkg/api/datasources/datasource/datasource.go create mode 100644 pkg/api/datasources/datasource/prometheus/helpers.go create mode 100644 pkg/api/datasources/datasource/prometheus/prometheus.go create mode 100644 pkg/api/datasources/datasources.go create mode 100644 pkg/generated/proto/application.pb.go create mode 100644 pkg/generated/proto/application_deepcopy.gen.go delete mode 100644 pkg/generated/proto/applications.pb.go delete mode 100644 pkg/generated/proto/applications_deepcopy.gen.go delete mode 100644 pkg/generated/proto/applications_grpc.pb.go create mode 100644 pkg/generated/proto/datasources.pb.go create mode 100644 pkg/generated/proto/datasources_deepcopy.gen.go create mode 100644 pkg/generated/proto/datasources_grpc.pb.go create mode 100644 proto/application.proto delete mode 100644 proto/applications.proto create mode 100644 proto/datasources.proto diff --git a/CHANGELOG.md b/CHANGELOG.md index 98481ac3a..76c794ded 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ NOTE: As semantic versioning states all 0.y.z releases can contain breaking chan ### Added - [#4](https://github.com/kobsio/kobs/pull/4): Add Custom Resource Definition for Applications. +- [#6](https://github.com/kobsio/kobs/pull/6): Add Prometheus as datasource for Application metrics. ### Fixed diff --git a/Makefile b/Makefile index 7da8248d6..ace03e2b7 100644 --- a/Makefile +++ b/Makefile @@ -20,11 +20,14 @@ generate: generate-proto generate-crd .PHONY: generate-proto generate-proto: @protoc --proto_path=proto --go_out=pkg/generated/proto --go_opt=paths=source_relative --go-grpc_out=pkg/generated/proto --go-grpc_opt=paths=source_relative --deepcopy_out=pkg/generated/proto --js_out=import_style=commonjs:app/src/generated/proto --plugin=protoc-gen-ts=app/node_modules/.bin/protoc-gen-ts --ts_out=service=grpc-web:app/src/generated/proto --grpc-web_out=import_style=commonjs,mode=grpcwebtext:app/src/generated/proto proto/clusters.proto - @protoc --proto_path=proto --go_out=pkg/generated/proto --go_opt=paths=source_relative --go-grpc_out=pkg/generated/proto --go-grpc_opt=paths=source_relative --deepcopy_out=pkg/generated/proto --js_out=import_style=commonjs:app/src/generated/proto --plugin=protoc-gen-ts=app/node_modules/.bin/protoc-gen-ts --ts_out=service=grpc-web:app/src/generated/proto --grpc-web_out=import_style=commonjs,mode=grpcwebtext:app/src/generated/proto proto/applications.proto + @protoc --proto_path=proto --go_out=pkg/generated/proto --go_opt=paths=source_relative --go-grpc_out=pkg/generated/proto --go-grpc_opt=paths=source_relative --deepcopy_out=pkg/generated/proto --js_out=import_style=commonjs:app/src/generated/proto --plugin=protoc-gen-ts=app/node_modules/.bin/protoc-gen-ts --ts_out=service=grpc-web:app/src/generated/proto --grpc-web_out=import_style=commonjs,mode=grpcwebtext:app/src/generated/proto proto/datasources.proto + @protoc --proto_path=proto --go_out=pkg/generated/proto --go_opt=paths=source_relative --go-grpc_out=pkg/generated/proto --go-grpc_opt=paths=source_relative --deepcopy_out=pkg/generated/proto --js_out=import_style=commonjs:app/src/generated/proto --plugin=protoc-gen-ts=app/node_modules/.bin/protoc-gen-ts --ts_out=service=grpc-web:app/src/generated/proto --grpc-web_out=import_style=commonjs,mode=grpcwebtext:app/src/generated/proto proto/application.proto @rm -rf ./pkg/generated/proto/clusters_deepcopy.gen.go - @rm -rf ./pkg/generated/proto/applications_deepcopy.gen.go + @rm -rf ./pkg/generated/proto/datasources_deepcopy.gen.go + @rm -rf ./pkg/generated/proto/application_deepcopy.gen.go @mv ./pkg/generated/proto/github.com/kobsio/kobs/pkg/generated/proto/clusters_deepcopy.gen.go ./pkg/generated/proto - @mv ./pkg/generated/proto/github.com/kobsio/kobs/pkg/generated/proto/applications_deepcopy.gen.go ./pkg/generated/proto + @mv ./pkg/generated/proto/github.com/kobsio/kobs/pkg/generated/proto/datasources_deepcopy.gen.go ./pkg/generated/proto + @mv ./pkg/generated/proto/github.com/kobsio/kobs/pkg/generated/proto/application_deepcopy.gen.go ./pkg/generated/proto @rm -rf ./pkg/generated/proto/github.com .PHONY: generate-crd diff --git a/app/package.json b/app/package.json index f01d32f78..5e1c51df7 100644 --- a/app/package.json +++ b/app/package.json @@ -23,9 +23,36 @@ ], "rules": { "react-hooks/exhaustive-deps": "error", - "sort-imports": ["error", {"ignoreCase": false, "ignoreDeclarationSort": false, "ignoreMemberSort": false, "memberSyntaxSortOrder": ["none", "all", "multiple", "single"], "allowSeparatedGroups": true}], - "sort-keys": ["error", "asc", {"caseSensitive": true, "natural": false, "minKeys": 2}], - "sort-vars": ["error", { "ignoreCase": false }], + "sort-imports": [ + "error", + { + "ignoreCase": false, + "ignoreDeclarationSort": false, + "ignoreMemberSort": false, + "memberSyntaxSortOrder": [ + "none", + "all", + "multiple", + "single" + ], + "allowSeparatedGroups": true + } + ], + "sort-keys": [ + "error", + "asc", + { + "caseSensitive": true, + "natural": false, + "minKeys": 2 + } + ], + "sort-vars": [ + "error", + { + "ignoreCase": false + } + ], "@typescript-eslint/explicit-function-return-type": "error", "@typescript-eslint/no-empty-function": "error", "@typescript-eslint/no-empty-interface": "error", @@ -35,12 +62,61 @@ "@typescript-eslint/no-use-before-define": "off", "@typescript-eslint/naming-convention": [ "error", - {"format": ["camelCase"], "selector": "default", "leadingUnderscore": "forbid", "trailingUnderscore": "forbid"}, - {"format": ["camelCase", "UPPER_CASE", "PascalCase"], "selector": "variable", "leadingUnderscore": "forbid", "trailingUnderscore": "forbid"}, - {"format": ["camelCase", "UPPER_CASE", "PascalCase"], "selector": "property", "leadingUnderscore": "forbid", "trailingUnderscore": "forbid"}, - {"format": ["PascalCase"], "selector": "interface", "leadingUnderscore": "forbid", "trailingUnderscore": "forbid", "prefix": ["I"]}, - {"format": ["PascalCase"], "selector": "typeAlias", "leadingUnderscore": "forbid", "trailingUnderscore": "forbid"}, - {"format": ["PascalCase"], "selector": "typeParameter", "leadingUnderscore": "forbid", "trailingUnderscore": "forbid"} + { + "format": [ + "camelCase" + ], + "selector": "default", + "leadingUnderscore": "forbid", + "trailingUnderscore": "forbid" + }, + { + "format": [ + "camelCase", + "UPPER_CASE", + "PascalCase" + ], + "selector": "variable", + "leadingUnderscore": "forbid", + "trailingUnderscore": "forbid" + }, + { + "format": [ + "camelCase", + "UPPER_CASE", + "PascalCase" + ], + "selector": "property", + "leadingUnderscore": "forbid", + "trailingUnderscore": "forbid" + }, + { + "format": [ + "PascalCase" + ], + "selector": "interface", + "leadingUnderscore": "forbid", + "trailingUnderscore": "forbid", + "prefix": [ + "I" + ] + }, + { + "format": [ + "PascalCase" + ], + "selector": "typeAlias", + "leadingUnderscore": "forbid", + "trailingUnderscore": "forbid" + }, + { + "format": [ + "PascalCase" + ], + "selector": "typeParameter", + "leadingUnderscore": "forbid", + "trailingUnderscore": "forbid" + } ] } }, @@ -66,6 +142,7 @@ "dependencies": { "@kubernetes/client-node": "^0.13.2", "@patternfly/patternfly": "^4.80.3", + "@patternfly/react-charts": "^6.14.2", "@patternfly/react-core": "^4.90.2", "@patternfly/react-table": "^4.20.15", "@types/google-protobuf": "^3.7.4", diff --git a/app/src/App.tsx b/app/src/App.tsx index c6b4985f4..f820d2226 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -5,6 +5,7 @@ import React from 'react'; import '@patternfly/react-core/dist/styles/base.css'; import '@patternfly/patternfly/patternfly.css'; import '@patternfly/patternfly/patternfly-addons.css'; +import '@patternfly/patternfly/patternfly-charts.css'; import Application from 'components/applications/Application'; import Applications from 'components/applications/Applications'; diff --git a/app/src/app.css b/app/src/app.css index 63e0cfade..e24e04ba0 100644 --- a/app/src/app.css +++ b/app/src/app.css @@ -48,3 +48,55 @@ .kobsio-pagesection-toolbar .pf-c-toolbar__content { padding: 0px; } + +/* kobsio-pagesection-tabs + * This is used if we display tabs at the bottom of a PageSection component, to remove the padding. This allows us to + * align the tabs line with the end of the PageSection. */ +.kobsio-pagesection-tabs { + padding-bottom: 0px; +} + +/* kobs-fullwidth + * We often need to modify the width of elements, so that they are taken the full width of the parent. For example to + * display an item in the toolbar, which is aligned on the right side. For that the following class can be used. */ +.kobs-fullwidth { + width: 100%; +} + +/* kobsio-options-list-item + * Apply some padding between the list items for smaller screens. */ +.kobsio-options-list-item { + padding-bottom: 16px; +} + +/* kobsio-charts-grid + * Apply some marging on the top of the charts grid. */ +.kobsio-charts-grid { + margin-top: 16px; +} + +/* kobsio-chart-container + * Set the width and height for a chart. The width and height is applied to the chart container and then used via + * useRef within the chart. */ +.kobsio-chart-container-default { + width: 100%; + height: 300px; +} + +.kobsio-chart-container-sparkline { + width: 100%; + height: 150px; + position: relative; +} + +.kobsio-chart-container-sparkline.small { + height: 75px; +} + +.kobsio-chart-container-sparkline-value { + width: 100%; + top: 63px; + font-size: 24px; + position: absolute; + text-align: center +} diff --git a/app/src/components/applications/Application.tsx b/app/src/components/applications/Application.tsx index fd05c717c..2d68c2ea1 100644 --- a/app/src/components/applications/Application.tsx +++ b/app/src/components/applications/Application.tsx @@ -16,8 +16,9 @@ import { Link, useHistory, useParams } from 'react-router-dom'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import { GetApplicationRequest, GetApplicationResponse } from 'generated/proto/clusters_pb'; -import { Application } from 'generated/proto/applications_pb'; +import { Application } from 'generated/proto/application_pb'; import { ClustersPromiseClient } from 'generated/proto/clusters_grpc_web_pb'; +import Metrics from 'components/applications/details/metrics/Metrics'; import Resources from 'components/applications/details/resources/Resources'; import Title from 'components/shared/Title'; import { apiURL } from 'utils/constants'; @@ -40,6 +41,7 @@ const Applications: React.FunctionComponent = () => { const [error, setError] = useState(''); const [activeTabKey, setActiveTabKey] = useState('resources'); const refResourcesContent = useRef(null); + const refMetricsContent = useRef(null); const goToOverview = (): void => { history.push('/'); @@ -98,7 +100,7 @@ const Applications: React.FunctionComponent = () => { return ( - + { tabContentId="refResources" tabContentRef={refResourcesContent} /> + <Tab + eventKey="metrics" + title={<TabTitleText>Metrics</TabTitleText>} + tabContentId="refMetrics" + tabContentRef={refMetricsContent} + /> </Tabs> </PageSection> <PageSection variant={PageSectionVariants.default}> - <TabContent eventKey={0} id="refResources" ref={refResourcesContent} aria-label="Resources"> - <Resources application={application} /> + <TabContent eventKey="resources" id="refResources" ref={refResourcesContent} aria-label="Resources"> + <div> + <Resources application={application} /> + </div> + </TabContent> + <TabContent eventKey="metrics" id="refMetrics" ref={refMetricsContent} aria-label="Metrics"> + {/* We have to check if the refMetricsContent is not null, because otherwise the Metrics component will be shown below the resources component. */} + <div>{refMetricsContent.current ? <Metrics application={application} /> : null}</div> </TabContent> </PageSection> </React.Fragment> diff --git a/app/src/components/applications/Applications.tsx b/app/src/components/applications/Applications.tsx index 69fa8adc5..adf2420b3 100644 --- a/app/src/components/applications/Applications.tsx +++ b/app/src/components/applications/Applications.tsx @@ -14,8 +14,8 @@ import React, { useState } from 'react'; import { GetApplicationsRequest, GetApplicationsResponse } from 'generated/proto/clusters_pb'; import { apiURL, applicationsDescription } from 'utils/constants'; -import { Application } from 'generated/proto/applications_pb'; -import Card from 'components/applications/details/Card'; +import { Application } from 'generated/proto/application_pb'; +import Card from 'components/applications/overview/Card'; import { ClustersPromiseClient } from 'generated/proto/clusters_grpc_web_pb'; import DrawerPanel from 'components/applications/details/DrawerPanel'; import Filter from 'components/resources/shared/Filter'; diff --git a/app/src/components/applications/details/Card.tsx b/app/src/components/applications/details/Card.tsx deleted file mode 100644 index 3abed08c8..000000000 --- a/app/src/components/applications/details/Card.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { CardBody, CardTitle, Card as PatternflyCard } from '@patternfly/react-core'; -import React from 'react'; - -import { Application } from 'generated/proto/applications_pb'; - -interface ICardProps { - application: Application; - select: (application: Application) => void; -} - -// Card displays a single application within the Applications gallery. The component requires the application and a -// select function as props. The select function is called, when the user clicks on the card. In the applications pages, -// this will then open the drawer with the selected application. -const Card: React.FunctionComponent<ICardProps> = ({ application, select }: ICardProps) => { - return ( - <PatternflyCard isSelectable={true} onClick={(): void => select(application)}> - <CardTitle>{application.getName()}</CardTitle> - <CardBody> - {application.getCluster()} {application.getNamespace()} - </CardBody> - </PatternflyCard> - ); -}; - -export default Card; diff --git a/app/src/components/applications/details/DrawerPanel.tsx b/app/src/components/applications/details/DrawerPanel.tsx index 2e10b60f2..054556ba2 100644 --- a/app/src/components/applications/details/DrawerPanel.tsx +++ b/app/src/components/applications/details/DrawerPanel.tsx @@ -14,7 +14,8 @@ import { import React, { useState } from 'react'; import { Link } from 'react-router-dom'; -import { Application } from 'generated/proto/applications_pb'; +import { Application } from 'generated/proto/application_pb'; +import Metrics from 'components/applications/details/metrics/Metrics'; import Resources from 'components/applications/details/resources/Resources'; import Title from 'components/shared/Title'; @@ -66,7 +67,14 @@ const DrawerPanel: React.FunctionComponent<IDrawerPanelProps> = ({ application, onSelect={(event, tabIndex): void => setActiveTabKey(tabIndex.toString())} > <Tab eventKey="resources" title={<TabTitleText>Resources</TabTitleText>}> - <Resources application={application} /> + <div> + <Resources application={application} /> + </div> + </Tab> + <Tab eventKey="metrics" title={<TabTitleText>Metrics</TabTitleText>}> + <div> + <Metrics application={application} /> + </div> </Tab> </Tabs> </DrawerPanelBody> diff --git a/app/src/components/applications/details/metrics/Chart.tsx b/app/src/components/applications/details/metrics/Chart.tsx new file mode 100644 index 000000000..b2741593d --- /dev/null +++ b/app/src/components/applications/details/metrics/Chart.tsx @@ -0,0 +1,112 @@ +import { Alert, AlertActionLink, AlertVariant, Card, CardBody, CardTitle } from '@patternfly/react-core'; +import React, { useCallback, useEffect, useState } from 'react'; + +import { DatasourceMetrics, GetMetricsRequest, GetMetricsResponse } from 'generated/proto/datasources_pb'; +import { + IApplicationMetricsVariable, + IDatasourceOptions, + convertApplicationMetricsVariablesToProto, + convertDatasourceOptionsToProto, +} from 'utils/proto'; +import { ApplicationMetricsChart } from 'generated/proto/application_pb'; +import { DatasourcesPromiseClient } from 'generated/proto/datasources_grpc_web_pb'; +import DefaultChart from 'components/applications/details/metrics/charts/Default'; +import EmptyStateSpinner from 'components/shared/EmptyStateSpinner'; +import SparklineChart from 'components/applications/details/metrics/charts/Sparkline'; +import { apiURL } from 'utils/constants'; + +const datasourcesService = new DatasourcesPromiseClient(apiURL, null, null); + +interface IChartProps { + datasourceName: string; + datasourceOptions: IDatasourceOptions; + variables: IApplicationMetricsVariable[]; + chart: ApplicationMetricsChart; +} + +// Chart component is used to fetch the data for an chart and to render the chart within a Card component. +const Chart: React.FunctionComponent<IChartProps> = ({ + datasourceName, + datasourceOptions, + variables, + chart, +}: IChartProps) => { + const [data, setData] = useState<DatasourceMetrics[]>([]); + const [error, setError] = useState<string>(''); + + // fetchData fetchs the data for a chart. If the gRPC call returns an error, we catch the error and set the + // corresponding error state. + const fetchData = useCallback(async () => { + try { + if (datasourceName !== '' && chart.getQueriesList().length > 0) { + const getMetricsRequest = new GetMetricsRequest(); + getMetricsRequest.setName(datasourceName); + getMetricsRequest.setOptions(convertDatasourceOptionsToProto(datasourceOptions)); + getMetricsRequest.setVariablesList(convertApplicationMetricsVariablesToProto(variables)); + getMetricsRequest.setQueriesList(chart.getQueriesList()); + + const getMetricsResponse: GetMetricsResponse = await datasourcesService.getMetrics(getMetricsRequest, null); + + setData(getMetricsResponse.getMetricsList()); + setError(''); + } + } catch (err) { + setError(err.message); + } + }, [datasourceName, datasourceOptions, variables, chart]); + + useEffect(() => { + fetchData(); + }, [fetchData]); + + // If an error occured during the gRPC call we show the error message in the card body. + if (error) { + return ( + <Card isFlat={true}> + <CardTitle>{chart.getTitle()}</CardTitle> + <CardBody> + <Alert + variant={AlertVariant.danger} + isInline={true} + title="Could not get metrics" + actionLinks={ + <React.Fragment> + <AlertActionLink onClick={fetchData}>Retry</AlertActionLink> + </React.Fragment> + } + > + <p>{error}</p> + </Alert> + </CardBody> + </Card> + ); + } + + // If the data length is zero, we show the empty state component with a spinner, because this only can happen on the + // first render. When the fetchData all was executed the data must be set or the error will be rendered befor this. + if (data.length === 0) { + return ( + <Card isFlat={true}> + <CardTitle>{chart.getTitle()}</CardTitle> + <CardBody> + <EmptyStateSpinner /> + </CardBody> + </Card> + ); + } + + return ( + <Card isFlat={true}> + <CardTitle>{chart.getTitle()}</CardTitle> + <CardBody> + {chart.getType() === 'sparkline' ? ( + <SparklineChart unit={chart.getUnit()} metrics={data} /> + ) : ( + <DefaultChart type={chart.getType()} unit={chart.getUnit()} stacked={chart.getStacked()} metrics={data} /> + )} + </CardBody> + </Card> + ); +}; + +export default Chart; diff --git a/app/src/components/applications/details/metrics/Charts.tsx b/app/src/components/applications/details/metrics/Charts.tsx new file mode 100644 index 000000000..36f8c4f2b --- /dev/null +++ b/app/src/components/applications/details/metrics/Charts.tsx @@ -0,0 +1,66 @@ +import { Grid, GridItem, Title, gridSpans } from '@patternfly/react-core'; +import React, { useEffect, useRef, useState } from 'react'; + +import { IApplicationMetricsVariable, IDatasourceOptions } from 'utils/proto'; +import { ApplicationMetricsChart } from 'generated/proto/application_pb'; +import Chart from 'components/applications/details/metrics/Chart'; + +interface IChartsProps { + datasourceName: string; + datasourceOptions: IDatasourceOptions; + variables: IApplicationMetricsVariable[]; + charts: ApplicationMetricsChart[]; +} + +// Charts renders a Grid of the user defined charts for an applicatication. The grid contains a small padding to the +// toolbar, which is rendered above. When the width of the grid is larger then 1200px, we apply the user defined size +// for each chart. If the width is below this value each chart will be rendered accross the complete width of the grid. +const Charts: React.FunctionComponent<IChartsProps> = ({ + datasourceName, + datasourceOptions, + variables, + charts, +}: IChartsProps) => { + const refGrid = useRef<HTMLDivElement>(null); + const [width, setWidth] = useState<number>(0); + + // useEffect is executed on every render, to determin the size of the grid and apply the user defined size for charts + // if necessary. + useEffect(() => { + if (refGrid && refGrid.current) { + setWidth(refGrid.current.getBoundingClientRect().width); + } + }, []); + + return ( + <div className="kobsio-charts-grid" ref={refGrid}> + <Grid hasGutter={true}> + {charts.map((chart, index) => ( + <GridItem + key={index} + span={ + width >= 1200 && chart.getSize() > 0 && chart.getSize() <= 12 && chart.getType() !== 'divider' + ? (chart.getSize() as gridSpans) + : 12 + } + > + {chart.getType() === 'divider' ? ( + <Title headingLevel="h6" size="lg"> + {chart.getTitle()} + + ) : ( + + )} + + ))} + + + ); +}; + +export default Charts; diff --git a/app/src/components/applications/details/metrics/Metrics.tsx b/app/src/components/applications/details/metrics/Metrics.tsx new file mode 100644 index 000000000..b5d5b80d2 --- /dev/null +++ b/app/src/components/applications/details/metrics/Metrics.tsx @@ -0,0 +1,123 @@ +import { Alert, AlertActionLink, AlertVariant } from '@patternfly/react-core'; +import React, { useCallback, useEffect, useState } from 'react'; +import ChartAreaIcon from '@patternfly/react-icons/dist/js/icons/chart-area-icon'; + +import { GetDatasourceRequest, GetDatasourceResponse } from 'generated/proto/datasources_pb'; +import { + IApplicationMetricsVariable, + IDatasourceOptions, + convertApplicationMetricsVariablesFromProto, +} from 'utils/proto'; +import { Application } from 'generated/proto/application_pb'; +import Charts from 'components/applications/details/metrics/Charts'; +import { DatasourcesPromiseClient } from 'generated/proto/datasources_grpc_web_pb'; +import NotDefined from 'components/applications/details/NotDefined'; +import Toolbar from 'components/applications/details/metrics/Toolbar'; +import { apiURL } from 'utils/constants'; + +const datasourcesService = new DatasourcesPromiseClient(apiURL, null, null); + +interface IMetricsProps { + application: Application; +} + +// Metrics the metrics component is used to display the metrics for an application. The metrics view consist of a +// toolbar, to display variables and different datasource specific options for the queries. It also contains a charts +// view, to display all user defined charts. +const Metrics: React.FunctionComponent = ({ application }: IMetricsProps) => { + const metrics = application.getMetrics(); + + const [datasourceName, setDatasourceName] = useState(''); + const [datasourceType, setDatasourceType] = useState(''); + const [datasourceOptions, setDatasourceOptions] = useState({ + resolution: '', + timeEnd: Math.floor(Date.now() / 1000), + timeStart: Math.floor(Date.now() / 1000) - 3600, + }); + const [variables, setVariables] = useState( + metrics ? convertApplicationMetricsVariablesFromProto(metrics.getVariablesList()) : [], + ); + const [error, setError] = useState(''); + + // fetchDatasourceDetails fetch all details, which are specific for a datasource. Currently this is only the type of + // the datasource, but can be extended in the future if needed. More information can be found in the datasources.proto + // file and the documentation for the GetDatasourceResponse message format. + const fetchDatasourceDetails = useCallback(async () => { + try { + if (!metrics) { + throw new Error('Metrics are not defined.'); + } else { + const getDatasourceRequest = new GetDatasourceRequest(); + getDatasourceRequest.setName(metrics.getDatasource()); + + const getDatasourceResponse: GetDatasourceResponse = await datasourcesService.getDatasource( + getDatasourceRequest, + null, + ); + + setDatasourceName(getDatasourceResponse.getName()); + setDatasourceType(getDatasourceResponse.getType()); + setError(''); + } + } catch (err) { + setError(err.message); + } + }, [metrics]); + + useEffect(() => { + fetchDatasourceDetails(); + }, [fetchDatasourceDetails]); + + // If the metrics seticon in the Application CR isn't defined, we return the NotDefined component, with a link to the + // documentation, where a user can find more information on who to define metrics. + if (!metrics) { + return ( + + ); + } + + // If an error occured during, we show the user the error, with an option to retry the request. + if (error) { + return ( + + Retry + + } + > +

{error}

+ + ); + } + + return ( + + setDatasourceOptions(opts)} + variables={variables} + setVariables={(vars): void => setVariables(vars)} + /> + + + + ); +}; + +export default Metrics; diff --git a/app/src/components/applications/details/metrics/Options.tsx b/app/src/components/applications/details/metrics/Options.tsx new file mode 100644 index 000000000..872dc5a69 --- /dev/null +++ b/app/src/components/applications/details/metrics/Options.tsx @@ -0,0 +1,160 @@ +import { + Button, + ButtonVariant, + Form, + FormGroup, + Level, + LevelItem, + Modal, + ModalVariant, + SimpleList, + SimpleListItem, + TextInput, +} from '@patternfly/react-core'; +import React, { useState } from 'react'; + +import { IDatasourceOptions } from 'utils/proto'; +import { formatTime } from 'utils/helpers'; + +interface IOptionsProps { + type: string; + options: IDatasourceOptions; + setOptions: (options: IDatasourceOptions) => void; +} + +// Options is the component, where the user can select various options for the current view. The user can select a time +// range for all queries via the quick select option or he can specify a start and end time via the input fields. Later +// we can also display datasource specific options within the modal component. +const Options: React.FunctionComponent = ({ options, setOptions }: IOptionsProps) => { + const [show, setShow] = useState(false); + const [timeStart, setTimeStart] = useState(formatTime(options.timeStart)); + const [timeEnd, setTimeEnd] = useState(formatTime(options.timeEnd)); + const [timeStartError, setTimeStartError] = useState(''); + const [timeEndError, setTimeEndError] = useState(''); + + // apply parses the value of the start and end input fields. If the user provided a correct data/time format, we + // change the start and end time to the new values. If the string couldn't be parsed, the user will see an error below + // the corresponding input field. + const apply = (): void => { + const parsedTimeStart = new Date(timeStart.replace(' ', 'T') + 'Z'); + const parsedTimeEnd = new Date(timeEnd.replace(' ', 'T') + 'Z'); + + if (parsedTimeStart.toString() === 'Invalid Date') { + setTimeStartError('Invalid time format.'); + setTimeEndError(''); + } else if (parsedTimeEnd.toString() === 'Invalid Date') { + setTimeStartError(''); + setTimeEndError('Invalid time format.'); + } else { + setTimeStartError(''); + setTimeEndError(''); + setOptions({ + ...options, + timeEnd: parsedTimeStart.getTime() / 1000, + timeStart: parsedTimeStart.getTime() / 1000, + }); + setShow(false); + } + }; + + // quick is the function for the quick select option. We always use the current time in seconds and substract the + // seconds specified in the quick select option. + const quick = (seconds: number): void => { + setOptions({ + ...options, + timeEnd: Math.floor(Date.now() / 1000), + timeStart: Math.floor(Date.now() / 1000) - seconds, + }); + setShow(false); + }; + + return ( + + + setShow(false)} + actions={[ + , + , + ]} + > + + +
+ + setTimeStart(value)} + /> + + + setTimeEnd(value)} + /> + +
+
+ + + quick(300)}>Last 5 Minutes + quick(900)}>Last 15 Minutes + quick(1800)}>Last 30 Minutes + quick(3600)}>Last 1 Hour + quick(10800)}>Last 3 Hours + quick(21600)}>Last 6 Hours + quick(43200)}>Last 12 Hours + + + + + quick(86400)}>Last 1 Day + quick(172800)}>Last 2 Days + quick(604800)}>Last 7 Days + quick(2592000)}>Last 30 Days + quick(7776000)}>Last 90 Days + quick(15552000)}>Last 6 Months + quick(31536000)}>Last 1 Year + + +
+
+
+ ); +}; + +export default Options; diff --git a/app/src/components/applications/details/metrics/Toolbar.tsx b/app/src/components/applications/details/metrics/Toolbar.tsx new file mode 100644 index 000000000..13c7bcf93 --- /dev/null +++ b/app/src/components/applications/details/metrics/Toolbar.tsx @@ -0,0 +1,138 @@ +import { + Alert, + AlertActionLink, + AlertVariant, + Toolbar as PatternflyToolbar, + ToolbarContent, + ToolbarGroup, + ToolbarItem, + ToolbarToggleGroup, +} from '@patternfly/react-core'; +import React, { useCallback, useEffect, useState } from 'react'; +import FilterIcon from '@patternfly/react-icons/dist/js/icons/filter-icon'; + +import { GetVariablesRequest, GetVariablesResponse } from 'generated/proto/datasources_pb'; +import { + IApplicationMetricsVariable, + IDatasourceOptions, + convertApplicationMetricsVariablesFromProto, + convertApplicationMetricsVariablesToProto, + convertDatasourceOptionsToProto, +} from 'utils/proto'; +import { DatasourcesPromiseClient } from 'generated/proto/datasources_grpc_web_pb'; +import Options from 'components/applications/details/metrics/Options'; +import Variable from 'components/applications/details/metrics/Variable'; +import { apiURL } from 'utils/constants'; + +const datasourcesService = new DatasourcesPromiseClient(apiURL, null, null); + +interface IToolbarProps { + datasourcenName: string; + datasourceType: string; + datasourceOptions: IDatasourceOptions; + setDatasourceOptions: (options: IDatasourceOptions) => void; + variables: IApplicationMetricsVariable[]; + setVariables: (variables: IApplicationMetricsVariable[]) => void; + isDrawer?: boolean; +} + +// Toolbar component displays a list of all variables and an options field. The variables are displayed via a dropdown +// and can be selected by the user. If the user selects a new value, the variables property will be changed via the +// setVariables function, so that the change is also propergated to the corresponding charts. The same counts for the +// datasource options. +const Toolbar: React.FunctionComponent = ({ + datasourcenName, + datasourceType, + datasourceOptions, + setDatasourceOptions, + variables, + setVariables, +}: IToolbarProps) => { + const [error, setError] = useState(''); + + // onSelectVariableValue is executed, when the user selects a new value for a variable. It will create a copy of the + // current variables, changes the value and sets the new values in the parent component. + const onSelectVariableValue = (value: string, index: number): void => { + const tmpVariables = [...variables]; + tmpVariables[index].value = value; + setVariables(tmpVariables); + }; + + // fetchVariables is used to fetch all values for all variables. When we successfully fetched all values we change, + // the passed in variables property. + // HACK: Since this ends in an endless rerendering and fetching we have omit the setVariables in the dependency array. + // We also have to compare the JSON representation of the variables prop and the loaded variables, to omit unnecessary + // rerenderings. Maybe we can also do this before the fetch, so that we do not fetch the variables twice. + const fetchVariables = useCallback(async () => { + try { + if (datasourcenName !== '' && variables.length > 0) { + const getVariablesRequest = new GetVariablesRequest(); + getVariablesRequest.setName(datasourcenName); + getVariablesRequest.setOptions(convertDatasourceOptionsToProto(datasourceOptions)); + getVariablesRequest.setVariablesList(convertApplicationMetricsVariablesToProto(variables)); + + const getVariablesResponse: GetVariablesResponse = await datasourcesService.getVariables( + getVariablesRequest, + null, + ); + + const tmpVariables = convertApplicationMetricsVariablesFromProto(getVariablesResponse.getVariablesList()); + if (JSON.stringify(tmpVariables) !== JSON.stringify(variables)) { + setVariables(tmpVariables); + } + setError(''); + } + } catch (err) { + setError(err.message); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [datasourcenName, datasourceOptions, variables]); + + useEffect(() => { + fetchVariables(); + }, [fetchVariables]); + + // If an error occured during, we show the user the error, with an option to retry the request. + if (error) { + return ( + + Retry + + } + > +

{error}

+
+ ); + } + + return ( + + + } breakpoint="lg"> + + {variables.map((variable, index) => ( + + onSelectVariableValue(value, index)} + /> + + ))} + + + + + + + + + + ); +}; + +export default Toolbar; diff --git a/app/src/components/applications/details/metrics/Variable.tsx b/app/src/components/applications/details/metrics/Variable.tsx new file mode 100644 index 000000000..def897867 --- /dev/null +++ b/app/src/components/applications/details/metrics/Variable.tsx @@ -0,0 +1,41 @@ +import React, { useState } from 'react'; +import { Select, SelectOption, SelectOptionObject, SelectVariant } from '@patternfly/react-core'; + +import { IApplicationMetricsVariable } from 'utils/proto'; + +interface IVariableProps { + variable: IApplicationMetricsVariable; + selectValue: (value: string) => void; +} + +// Variable is the component tp render a single variable in a Select component. When the user selects a new value, via +// use the passed in selectValue function to change the variable. +const Variable: React.FunctionComponent = ({ variable, selectValue }: IVariableProps) => { + const [show, setShow] = useState(false); + + const onSelect = ( + event: React.MouseEvent | React.ChangeEvent, + value: string | SelectOptionObject, + ): void => { + selectValue(value as string); + setShow(false); + }; + + return ( + + ); +}; + +export default Variable; diff --git a/app/src/components/applications/details/metrics/charts/Default.tsx b/app/src/components/applications/details/metrics/charts/Default.tsx new file mode 100644 index 000000000..98e6a3a23 --- /dev/null +++ b/app/src/components/applications/details/metrics/charts/Default.tsx @@ -0,0 +1,100 @@ +import { + Chart, + ChartArea, + ChartAxis, + ChartBar, + ChartGroup, + ChartLegendTooltip, + ChartLine, + ChartStack, + ChartThemeColor, + createContainer, +} from '@patternfly/react-charts'; +import React, { useEffect, useRef, useState } from 'react'; + +import { DatasourceMetrics } from 'generated/proto/datasources_pb'; +import { IDatasourceMetricsData } from 'utils/proto'; +import { formatTime } from 'utils/helpers'; + +interface ILabels { + datum: IDatasourceMetricsData; +} + +export interface IDefaultProps { + type: string; + unit: string; + stacked: boolean; + metrics: DatasourceMetrics[]; +} + +// Default represents our default chart types: area, bar and line chart. We display the user defined unit at the y axis +// of the chart. If the user enabled the stacked option the chart is wrapped in a ChartStack instead of the ChartGroup +// component. +// The documentation for the different chart types can be found in the Patternfly documentation: +// - Area Chart: https://www.patternfly.org/v4/charts/area-chart +// - Bar Chart: https://www.patternfly.org/v4/charts/bar-chart +// - Line Chart: https://www.patternfly.org/v4/charts/line-chart +// +// NOTE: Currently it is not possible to select a single time series in the chart. This should be changed in the future, +// by using an interactive legend: https://www.patternfly.org/v4/charts/legend-chart#interactive-legend +const Default: React.FunctionComponent = ({ type, unit, stacked, metrics }: IDefaultProps) => { + const refChart = useRef(null); + const [width, setWidth] = useState(0); + const [height, setHeight] = useState(0); + + // useEffect is executed on every render of this component. This is needed, so that we are able to use a width of 100% + // and a static height for the chart. + useEffect(() => { + if (refChart && refChart.current) { + setWidth(refChart.current.getBoundingClientRect().width); + setHeight(refChart.current.getBoundingClientRect().height); + } + }, []); + + const CursorVoronoiContainer = createContainer('voronoi', 'cursor'); + const legendData = metrics.map((metric, index) => ({ childName: `index${index}`, name: metric.getLabel() })); + const series = metrics.map((metric, index) => + type === 'area' ? ( + + ) : type === 'bar' ? ( + + ) : ( + + ), + ); + + return ( +
+ `${datum.y} ${unit}`} + labelComponent={ + formatTime(Math.floor(point.x / 1000))} + /> + } + mouseFollowTooltips + voronoiDimension="x" + voronoiPadding={0} + /> + } + height={height} + legendData={legendData} + legendPosition="bottom" + padding={{ bottom: 60, left: 60, right: 0, top: 0 }} + scale={{ x: 'time', y: 'linear' }} + themeColor={ChartThemeColor.multiOrdered} + width={width} + > + + + {stacked ? {series} : {series}} + +
+ ); +}; + +export default Default; diff --git a/app/src/components/applications/details/metrics/charts/Sparkline.tsx b/app/src/components/applications/details/metrics/charts/Sparkline.tsx new file mode 100644 index 000000000..8fa1265dd --- /dev/null +++ b/app/src/components/applications/details/metrics/charts/Sparkline.tsx @@ -0,0 +1,42 @@ +import { ChartArea, ChartGroup } from '@patternfly/react-charts'; +import React, { useEffect, useRef, useState } from 'react'; + +import { DatasourceMetrics } from 'generated/proto/datasources_pb'; + +export interface ISparklineProps { + unit: string; + metrics: DatasourceMetrics[]; +} + +// Sparkline displays a sparkline chart. The complete documentation for sparklines can be found in the Patternfly +// documentation https://www.patternfly.org/v4/charts/sparkline-chart. We also display the last/current value in the +// center of the sparkline, including the user defined unit. +const Sparkline: React.FunctionComponent = ({ unit, metrics }: ISparklineProps) => { + const refChart = useRef(null); + const [width, setWidth] = useState(0); + const [height, setHeight] = useState(0); + + // useEffect is executed on every render of this component. This is needed, so that we are able to use a width of 100% + // and a static height for the chart. + useEffect(() => { + if (refChart && refChart.current) { + setWidth(refChart.current.getBoundingClientRect().width); + setHeight(refChart.current.getBoundingClientRect().height); + } + }, []); + + return ( +
+
+ {metrics[0].getDataList()[metrics[0].getDataList().length - 1].getY()} {unit} +
+ + {metrics.map((metric, index) => ( + + ))} + +
+ ); +}; + +export default Sparkline; diff --git a/app/src/components/applications/details/resources/Resources.tsx b/app/src/components/applications/details/resources/Resources.tsx index 005772dd7..7e316dfdf 100644 --- a/app/src/components/applications/details/resources/Resources.tsx +++ b/app/src/components/applications/details/resources/Resources.tsx @@ -2,7 +2,7 @@ import { Accordion, AccordionContent, AccordionItem, AccordionToggle } from '@pa import React, { useState } from 'react'; import CubesIcon from '@patternfly/react-icons/dist/js/icons/cubes-icon'; -import { Application } from 'generated/proto/applications_pb'; +import { Application } from 'generated/proto/application_pb'; import NotDefined from 'components/applications/details/NotDefined'; import Resource from 'components/applications/details/resources/Resource'; import { resources } from 'components/resources/shared/helpers'; diff --git a/app/src/components/applications/overview/Card.tsx b/app/src/components/applications/overview/Card.tsx new file mode 100644 index 000000000..736ac7410 --- /dev/null +++ b/app/src/components/applications/overview/Card.tsx @@ -0,0 +1,85 @@ +import { CardBody, CardTitle, Card as PatternflyCard } from '@patternfly/react-core'; +import React, { useCallback, useEffect, useState } from 'react'; + +import { + DatasourceMetrics, + DatasourceOptions, + GetMetricsRequest, + GetMetricsResponse, +} from 'generated/proto/datasources_pb'; +import { Application } from 'generated/proto/application_pb'; +import Chart from 'components/applications/overview/Chart'; +import { DatasourcesPromiseClient } from 'generated/proto/datasources_grpc_web_pb'; +import { apiURL } from 'utils/constants'; + +const datasourcesService = new DatasourcesPromiseClient(apiURL, null, null); + +interface ICardProps { + application: Application; + select: (application: Application) => void; +} + +// Card displays a single application within the Applications gallery. The component requires the application and a +// select function as props. The select function is called, when the user clicks on the card. In the applications pages, +// this will then open the drawer with the selected application. +const Card: React.FunctionComponent = ({ application, select }: ICardProps) => { + const metrics = application.getMetrics(); + + const [data, setData] = useState([]); + const [error, setError] = useState(''); + + // fetchData is used to fetch the data for the health metric of an Application. The data is then displayed as + // sparkline within the card for the application in the gallery. + const fetchData = useCallback(async () => { + try { + if (metrics && metrics.hasHealth()) { + const options = new DatasourceOptions(); + options.setTimeend(Math.floor(Date.now() / 1000)); + options.setTimestart(Math.floor(Date.now() / 1000) - 3600); + + const getMetricsRequest = new GetMetricsRequest(); + getMetricsRequest.setName(metrics.getDatasource()); + getMetricsRequest.setOptions(options); + + const health = metrics.getHealth(); + if (health) { + getMetricsRequest.setQueriesList(health.getQueriesList()); + } + + const getMetricsResponse: GetMetricsResponse = await datasourcesService.getMetrics(getMetricsRequest, null); + + setData(getMetricsResponse.getMetricsList()); + setError(''); + } + } catch (err) { + setError(err.message); + } + }, [metrics]); + + useEffect(() => { + fetchData(); + }, [fetchData]); + + // The card for an application can have three different state. When an error occured during the data fetch, we display + // this error on the card. When all data was successfully loaded we display the sparkline. If the application doesn't + // define a health chart, we just display the namespace and cluster for the application in the card body. + return ( + select(application)}> + {application.getName()} + {error ? ( + Could not get health data: {error} + ) : data.length > 0 && metrics && metrics.hasHealth() ? ( + + + + ) : ( + +
Namespace: {application.getNamespace()}
+
Cluster: {application.getCluster()}
+
+ )} +
+ ); +}; + +export default Card; diff --git a/app/src/components/applications/overview/Chart.tsx b/app/src/components/applications/overview/Chart.tsx new file mode 100644 index 000000000..bd01b75fb --- /dev/null +++ b/app/src/components/applications/overview/Chart.tsx @@ -0,0 +1,48 @@ +import { ChartArea, ChartGroup } from '@patternfly/react-charts'; +import React, { useEffect, useRef, useState } from 'react'; + +import { DatasourceMetrics } from 'generated/proto/datasources_pb'; + +export interface IChartProps { + title?: string; + unit?: string; + metrics: DatasourceMetrics[]; +} + +// Chart is used to render a sparkline on the card of an application in the overview gallery. Above the sparkline we +// show the last/current value of the metric and the chart title. +const Chart: React.FunctionComponent = ({ title, unit, metrics }: IChartProps) => { + const refChart = useRef(null); + const [width, setWidth] = useState(0); + const [height, setHeight] = useState(0); + + // useEffect is executed on every render of this component. This is needed, so that we are able to use a width of 100% + // and a static height for the chart. + useEffect(() => { + if (refChart && refChart.current) { + setWidth(refChart.current.getBoundingClientRect().width); + setHeight(refChart.current.getBoundingClientRect().height); + } + }, []); + + return ( + +
+ {metrics[0].getDataList()[metrics[0].getDataList().length - 1].getY().toFixed(2)} {unit ? unit : ''} +
+ {title ? ( +
{title}
+ ) : null} + +
+ + {metrics.map((metric, index) => ( + + ))} + +
+
+ ); +}; + +export default Chart; diff --git a/app/src/components/shared/EmptyStateSpinner.tsx b/app/src/components/shared/EmptyStateSpinner.tsx new file mode 100644 index 000000000..29a27e756 --- /dev/null +++ b/app/src/components/shared/EmptyStateSpinner.tsx @@ -0,0 +1,24 @@ +import { EmptyState, EmptyStateIcon, Spinner, Title } from '@patternfly/react-core'; +import React from 'react'; + +interface IEmptyStateSpinnerProps { + title?: string; +} + +// EmptyStateSpinner is a component, which can be used to show an empty state with a spinner. The propose of this +// component is to show that the data isn't ready yet and must be fetched from the gRPC API. The component takes an +// optional title, which will be shown below the spinner. +const EmptyStateSpinner: React.FunctionComponent = ({ title }: IEmptyStateSpinnerProps) => { + return ( + + + {title ? ( + + {title} + + ) : null} + + ); +}; + +export default EmptyStateSpinner; diff --git a/app/src/generated/proto/application_pb.d.ts b/app/src/generated/proto/application_pb.d.ts new file mode 100644 index 000000000..e3f7b9b9a --- /dev/null +++ b/app/src/generated/proto/application_pb.d.ts @@ -0,0 +1,291 @@ +// package: application +// file: application.proto + +import * as jspb from "google-protobuf"; + +export class Application extends jspb.Message { + getCluster(): string; + setCluster(value: string): void; + + getNamespace(): string; + setNamespace(value: string): void; + + getName(): string; + setName(value: string): void; + + clearLinksList(): void; + getLinksList(): Array; + setLinksList(value: Array): void; + addLinks(value?: ApplicationLink, index?: number): ApplicationLink; + + clearResourcesList(): void; + getResourcesList(): Array; + setResourcesList(value: Array): void; + addResources(value?: ApplicationResources, index?: number): ApplicationResources; + + hasMetrics(): boolean; + clearMetrics(): void; + getMetrics(): ApplicationMetrics | undefined; + setMetrics(value?: ApplicationMetrics): void; + + hasLogs(): boolean; + clearLogs(): void; + getLogs(): ApplicationLogs | undefined; + setLogs(value?: ApplicationLogs): void; + + hasTraces(): boolean; + clearTraces(): void; + getTraces(): ApplicationTraces | undefined; + setTraces(value?: ApplicationTraces): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Application.AsObject; + static toObject(includeInstance: boolean, msg: Application): Application.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: Application, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Application; + static deserializeBinaryFromReader(message: Application, reader: jspb.BinaryReader): Application; +} + +export namespace Application { + export type AsObject = { + cluster: string, + namespace: string, + name: string, + linksList: Array, + resourcesList: Array, + metrics?: ApplicationMetrics.AsObject, + logs?: ApplicationLogs.AsObject, + traces?: ApplicationTraces.AsObject, + } +} + +export class ApplicationLink extends jspb.Message { + getTitle(): string; + setTitle(value: string): void; + + getLink(): string; + setLink(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ApplicationLink.AsObject; + static toObject(includeInstance: boolean, msg: ApplicationLink): ApplicationLink.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ApplicationLink, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ApplicationLink; + static deserializeBinaryFromReader(message: ApplicationLink, reader: jspb.BinaryReader): ApplicationLink; +} + +export namespace ApplicationLink { + export type AsObject = { + title: string, + link: string, + } +} + +export class ApplicationResources extends jspb.Message { + clearKindsList(): void; + getKindsList(): Array; + setKindsList(value: Array): void; + addKinds(value: string, index?: number): string; + + getSelector(): string; + setSelector(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ApplicationResources.AsObject; + static toObject(includeInstance: boolean, msg: ApplicationResources): ApplicationResources.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ApplicationResources, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ApplicationResources; + static deserializeBinaryFromReader(message: ApplicationResources, reader: jspb.BinaryReader): ApplicationResources; +} + +export namespace ApplicationResources { + export type AsObject = { + kindsList: Array, + selector: string, + } +} + +export class ApplicationMetrics extends jspb.Message { + getDatasource(): string; + setDatasource(value: string): void; + + hasHealth(): boolean; + clearHealth(): void; + getHealth(): ApplicationMetricsChart | undefined; + setHealth(value?: ApplicationMetricsChart): void; + + clearVariablesList(): void; + getVariablesList(): Array; + setVariablesList(value: Array): void; + addVariables(value?: ApplicationMetricsVariable, index?: number): ApplicationMetricsVariable; + + clearChartsList(): void; + getChartsList(): Array; + setChartsList(value: Array): void; + addCharts(value?: ApplicationMetricsChart, index?: number): ApplicationMetricsChart; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ApplicationMetrics.AsObject; + static toObject(includeInstance: boolean, msg: ApplicationMetrics): ApplicationMetrics.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ApplicationMetrics, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ApplicationMetrics; + static deserializeBinaryFromReader(message: ApplicationMetrics, reader: jspb.BinaryReader): ApplicationMetrics; +} + +export namespace ApplicationMetrics { + export type AsObject = { + datasource: string, + health?: ApplicationMetricsChart.AsObject, + variablesList: Array, + chartsList: Array, + } +} + +export class ApplicationMetricsVariable extends jspb.Message { + getName(): string; + setName(value: string): void; + + getLabel(): string; + setLabel(value: string): void; + + getQuery(): string; + setQuery(value: string): void; + + getAllowall(): boolean; + setAllowall(value: boolean): void; + + clearValuesList(): void; + getValuesList(): Array; + setValuesList(value: Array): void; + addValues(value: string, index?: number): string; + + getValue(): string; + setValue(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ApplicationMetricsVariable.AsObject; + static toObject(includeInstance: boolean, msg: ApplicationMetricsVariable): ApplicationMetricsVariable.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ApplicationMetricsVariable, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ApplicationMetricsVariable; + static deserializeBinaryFromReader(message: ApplicationMetricsVariable, reader: jspb.BinaryReader): ApplicationMetricsVariable; +} + +export namespace ApplicationMetricsVariable { + export type AsObject = { + name: string, + label: string, + query: string, + allowall: boolean, + valuesList: Array, + value: string, + } +} + +export class ApplicationMetricsChart extends jspb.Message { + getTitle(): string; + setTitle(value: string): void; + + getType(): string; + setType(value: string): void; + + getUnit(): string; + setUnit(value: string): void; + + getStacked(): boolean; + setStacked(value: boolean): void; + + getSize(): number; + setSize(value: number): void; + + clearQueriesList(): void; + getQueriesList(): Array; + setQueriesList(value: Array): void; + addQueries(value?: ApplicationMetricsQuery, index?: number): ApplicationMetricsQuery; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ApplicationMetricsChart.AsObject; + static toObject(includeInstance: boolean, msg: ApplicationMetricsChart): ApplicationMetricsChart.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ApplicationMetricsChart, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ApplicationMetricsChart; + static deserializeBinaryFromReader(message: ApplicationMetricsChart, reader: jspb.BinaryReader): ApplicationMetricsChart; +} + +export namespace ApplicationMetricsChart { + export type AsObject = { + title: string, + type: string, + unit: string, + stacked: boolean, + size: number, + queriesList: Array, + } +} + +export class ApplicationMetricsQuery extends jspb.Message { + getQuery(): string; + setQuery(value: string): void; + + getLabel(): string; + setLabel(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ApplicationMetricsQuery.AsObject; + static toObject(includeInstance: boolean, msg: ApplicationMetricsQuery): ApplicationMetricsQuery.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ApplicationMetricsQuery, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ApplicationMetricsQuery; + static deserializeBinaryFromReader(message: ApplicationMetricsQuery, reader: jspb.BinaryReader): ApplicationMetricsQuery; +} + +export namespace ApplicationMetricsQuery { + export type AsObject = { + query: string, + label: string, + } +} + +export class ApplicationLogs extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ApplicationLogs.AsObject; + static toObject(includeInstance: boolean, msg: ApplicationLogs): ApplicationLogs.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ApplicationLogs, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ApplicationLogs; + static deserializeBinaryFromReader(message: ApplicationLogs, reader: jspb.BinaryReader): ApplicationLogs; +} + +export namespace ApplicationLogs { + export type AsObject = { + } +} + +export class ApplicationTraces extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ApplicationTraces.AsObject; + static toObject(includeInstance: boolean, msg: ApplicationTraces): ApplicationTraces.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ApplicationTraces, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ApplicationTraces; + static deserializeBinaryFromReader(message: ApplicationTraces, reader: jspb.BinaryReader): ApplicationTraces; +} + +export namespace ApplicationTraces { + export type AsObject = { + } +} + diff --git a/app/src/generated/proto/application_pb.js b/app/src/generated/proto/application_pb.js new file mode 100644 index 000000000..d83f3a21d --- /dev/null +++ b/app/src/generated/proto/application_pb.js @@ -0,0 +1,2289 @@ +// source: application.proto +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +goog.exportSymbol('proto.application.Application', null, global); +goog.exportSymbol('proto.application.ApplicationLink', null, global); +goog.exportSymbol('proto.application.ApplicationLogs', null, global); +goog.exportSymbol('proto.application.ApplicationMetrics', null, global); +goog.exportSymbol('proto.application.ApplicationMetricsChart', null, global); +goog.exportSymbol('proto.application.ApplicationMetricsQuery', null, global); +goog.exportSymbol('proto.application.ApplicationMetricsVariable', null, global); +goog.exportSymbol('proto.application.ApplicationResources', null, global); +goog.exportSymbol('proto.application.ApplicationTraces', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.application.Application = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.application.Application.repeatedFields_, null); +}; +goog.inherits(proto.application.Application, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.application.Application.displayName = 'proto.application.Application'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.application.ApplicationLink = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.application.ApplicationLink, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.application.ApplicationLink.displayName = 'proto.application.ApplicationLink'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.application.ApplicationResources = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.application.ApplicationResources.repeatedFields_, null); +}; +goog.inherits(proto.application.ApplicationResources, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.application.ApplicationResources.displayName = 'proto.application.ApplicationResources'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.application.ApplicationMetrics = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.application.ApplicationMetrics.repeatedFields_, null); +}; +goog.inherits(proto.application.ApplicationMetrics, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.application.ApplicationMetrics.displayName = 'proto.application.ApplicationMetrics'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.application.ApplicationMetricsVariable = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.application.ApplicationMetricsVariable.repeatedFields_, null); +}; +goog.inherits(proto.application.ApplicationMetricsVariable, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.application.ApplicationMetricsVariable.displayName = 'proto.application.ApplicationMetricsVariable'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.application.ApplicationMetricsChart = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.application.ApplicationMetricsChart.repeatedFields_, null); +}; +goog.inherits(proto.application.ApplicationMetricsChart, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.application.ApplicationMetricsChart.displayName = 'proto.application.ApplicationMetricsChart'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.application.ApplicationMetricsQuery = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.application.ApplicationMetricsQuery, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.application.ApplicationMetricsQuery.displayName = 'proto.application.ApplicationMetricsQuery'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.application.ApplicationLogs = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.application.ApplicationLogs, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.application.ApplicationLogs.displayName = 'proto.application.ApplicationLogs'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.application.ApplicationTraces = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.application.ApplicationTraces, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.application.ApplicationTraces.displayName = 'proto.application.ApplicationTraces'; +} + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.application.Application.repeatedFields_ = [4,5]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.application.Application.prototype.toObject = function(opt_includeInstance) { + return proto.application.Application.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.application.Application} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.Application.toObject = function(includeInstance, msg) { + var f, obj = { + cluster: jspb.Message.getFieldWithDefault(msg, 1, ""), + namespace: jspb.Message.getFieldWithDefault(msg, 2, ""), + name: jspb.Message.getFieldWithDefault(msg, 3, ""), + linksList: jspb.Message.toObjectList(msg.getLinksList(), + proto.application.ApplicationLink.toObject, includeInstance), + resourcesList: jspb.Message.toObjectList(msg.getResourcesList(), + proto.application.ApplicationResources.toObject, includeInstance), + metrics: (f = msg.getMetrics()) && proto.application.ApplicationMetrics.toObject(includeInstance, f), + logs: (f = msg.getLogs()) && proto.application.ApplicationLogs.toObject(includeInstance, f), + traces: (f = msg.getTraces()) && proto.application.ApplicationTraces.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.application.Application} + */ +proto.application.Application.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.application.Application; + return proto.application.Application.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.application.Application} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.application.Application} + */ +proto.application.Application.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setCluster(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setNamespace(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 4: + var value = new proto.application.ApplicationLink; + reader.readMessage(value,proto.application.ApplicationLink.deserializeBinaryFromReader); + msg.addLinks(value); + break; + case 5: + var value = new proto.application.ApplicationResources; + reader.readMessage(value,proto.application.ApplicationResources.deserializeBinaryFromReader); + msg.addResources(value); + break; + case 6: + var value = new proto.application.ApplicationMetrics; + reader.readMessage(value,proto.application.ApplicationMetrics.deserializeBinaryFromReader); + msg.setMetrics(value); + break; + case 7: + var value = new proto.application.ApplicationLogs; + reader.readMessage(value,proto.application.ApplicationLogs.deserializeBinaryFromReader); + msg.setLogs(value); + break; + case 8: + var value = new proto.application.ApplicationTraces; + reader.readMessage(value,proto.application.ApplicationTraces.deserializeBinaryFromReader); + msg.setTraces(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.application.Application.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.application.Application.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.application.Application} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.Application.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getCluster(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getNamespace(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = message.getLinksList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 4, + f, + proto.application.ApplicationLink.serializeBinaryToWriter + ); + } + f = message.getResourcesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 5, + f, + proto.application.ApplicationResources.serializeBinaryToWriter + ); + } + f = message.getMetrics(); + if (f != null) { + writer.writeMessage( + 6, + f, + proto.application.ApplicationMetrics.serializeBinaryToWriter + ); + } + f = message.getLogs(); + if (f != null) { + writer.writeMessage( + 7, + f, + proto.application.ApplicationLogs.serializeBinaryToWriter + ); + } + f = message.getTraces(); + if (f != null) { + writer.writeMessage( + 8, + f, + proto.application.ApplicationTraces.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string cluster = 1; + * @return {string} + */ +proto.application.Application.prototype.getCluster = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.Application} returns this + */ +proto.application.Application.prototype.setCluster = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string namespace = 2; + * @return {string} + */ +proto.application.Application.prototype.getNamespace = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.Application} returns this + */ +proto.application.Application.prototype.setNamespace = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string name = 3; + * @return {string} + */ +proto.application.Application.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.Application} returns this + */ +proto.application.Application.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * repeated ApplicationLink links = 4; + * @return {!Array} + */ +proto.application.Application.prototype.getLinksList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.application.ApplicationLink, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.application.Application} returns this +*/ +proto.application.Application.prototype.setLinksList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 4, value); +}; + + +/** + * @param {!proto.application.ApplicationLink=} opt_value + * @param {number=} opt_index + * @return {!proto.application.ApplicationLink} + */ +proto.application.Application.prototype.addLinks = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.application.ApplicationLink, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.application.Application} returns this + */ +proto.application.Application.prototype.clearLinksList = function() { + return this.setLinksList([]); +}; + + +/** + * repeated ApplicationResources resources = 5; + * @return {!Array} + */ +proto.application.Application.prototype.getResourcesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.application.ApplicationResources, 5)); +}; + + +/** + * @param {!Array} value + * @return {!proto.application.Application} returns this +*/ +proto.application.Application.prototype.setResourcesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 5, value); +}; + + +/** + * @param {!proto.application.ApplicationResources=} opt_value + * @param {number=} opt_index + * @return {!proto.application.ApplicationResources} + */ +proto.application.Application.prototype.addResources = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 5, opt_value, proto.application.ApplicationResources, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.application.Application} returns this + */ +proto.application.Application.prototype.clearResourcesList = function() { + return this.setResourcesList([]); +}; + + +/** + * optional ApplicationMetrics metrics = 6; + * @return {?proto.application.ApplicationMetrics} + */ +proto.application.Application.prototype.getMetrics = function() { + return /** @type{?proto.application.ApplicationMetrics} */ ( + jspb.Message.getWrapperField(this, proto.application.ApplicationMetrics, 6)); +}; + + +/** + * @param {?proto.application.ApplicationMetrics|undefined} value + * @return {!proto.application.Application} returns this +*/ +proto.application.Application.prototype.setMetrics = function(value) { + return jspb.Message.setWrapperField(this, 6, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.application.Application} returns this + */ +proto.application.Application.prototype.clearMetrics = function() { + return this.setMetrics(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.application.Application.prototype.hasMetrics = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional ApplicationLogs logs = 7; + * @return {?proto.application.ApplicationLogs} + */ +proto.application.Application.prototype.getLogs = function() { + return /** @type{?proto.application.ApplicationLogs} */ ( + jspb.Message.getWrapperField(this, proto.application.ApplicationLogs, 7)); +}; + + +/** + * @param {?proto.application.ApplicationLogs|undefined} value + * @return {!proto.application.Application} returns this +*/ +proto.application.Application.prototype.setLogs = function(value) { + return jspb.Message.setWrapperField(this, 7, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.application.Application} returns this + */ +proto.application.Application.prototype.clearLogs = function() { + return this.setLogs(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.application.Application.prototype.hasLogs = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional ApplicationTraces traces = 8; + * @return {?proto.application.ApplicationTraces} + */ +proto.application.Application.prototype.getTraces = function() { + return /** @type{?proto.application.ApplicationTraces} */ ( + jspb.Message.getWrapperField(this, proto.application.ApplicationTraces, 8)); +}; + + +/** + * @param {?proto.application.ApplicationTraces|undefined} value + * @return {!proto.application.Application} returns this +*/ +proto.application.Application.prototype.setTraces = function(value) { + return jspb.Message.setWrapperField(this, 8, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.application.Application} returns this + */ +proto.application.Application.prototype.clearTraces = function() { + return this.setTraces(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.application.Application.prototype.hasTraces = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.application.ApplicationLink.prototype.toObject = function(opt_includeInstance) { + return proto.application.ApplicationLink.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.application.ApplicationLink} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationLink.toObject = function(includeInstance, msg) { + var f, obj = { + title: jspb.Message.getFieldWithDefault(msg, 1, ""), + link: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.application.ApplicationLink} + */ +proto.application.ApplicationLink.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.application.ApplicationLink; + return proto.application.ApplicationLink.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.application.ApplicationLink} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.application.ApplicationLink} + */ +proto.application.ApplicationLink.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTitle(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setLink(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.application.ApplicationLink.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.application.ApplicationLink.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.application.ApplicationLink} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationLink.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTitle(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getLink(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string title = 1; + * @return {string} + */ +proto.application.ApplicationLink.prototype.getTitle = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationLink} returns this + */ +proto.application.ApplicationLink.prototype.setTitle = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string link = 2; + * @return {string} + */ +proto.application.ApplicationLink.prototype.getLink = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationLink} returns this + */ +proto.application.ApplicationLink.prototype.setLink = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.application.ApplicationResources.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.application.ApplicationResources.prototype.toObject = function(opt_includeInstance) { + return proto.application.ApplicationResources.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.application.ApplicationResources} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationResources.toObject = function(includeInstance, msg) { + var f, obj = { + kindsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f, + selector: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.application.ApplicationResources} + */ +proto.application.ApplicationResources.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.application.ApplicationResources; + return proto.application.ApplicationResources.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.application.ApplicationResources} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.application.ApplicationResources} + */ +proto.application.ApplicationResources.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.addKinds(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setSelector(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.application.ApplicationResources.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.application.ApplicationResources.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.application.ApplicationResources} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationResources.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getKindsList(); + if (f.length > 0) { + writer.writeRepeatedString( + 1, + f + ); + } + f = message.getSelector(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * repeated string kinds = 1; + * @return {!Array} + */ +proto.application.ApplicationResources.prototype.getKindsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.application.ApplicationResources} returns this + */ +proto.application.ApplicationResources.prototype.setKindsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.application.ApplicationResources} returns this + */ +proto.application.ApplicationResources.prototype.addKinds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.application.ApplicationResources} returns this + */ +proto.application.ApplicationResources.prototype.clearKindsList = function() { + return this.setKindsList([]); +}; + + +/** + * optional string selector = 2; + * @return {string} + */ +proto.application.ApplicationResources.prototype.getSelector = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationResources} returns this + */ +proto.application.ApplicationResources.prototype.setSelector = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.application.ApplicationMetrics.repeatedFields_ = [3,4]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.application.ApplicationMetrics.prototype.toObject = function(opt_includeInstance) { + return proto.application.ApplicationMetrics.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.application.ApplicationMetrics} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationMetrics.toObject = function(includeInstance, msg) { + var f, obj = { + datasource: jspb.Message.getFieldWithDefault(msg, 1, ""), + health: (f = msg.getHealth()) && proto.application.ApplicationMetricsChart.toObject(includeInstance, f), + variablesList: jspb.Message.toObjectList(msg.getVariablesList(), + proto.application.ApplicationMetricsVariable.toObject, includeInstance), + chartsList: jspb.Message.toObjectList(msg.getChartsList(), + proto.application.ApplicationMetricsChart.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.application.ApplicationMetrics} + */ +proto.application.ApplicationMetrics.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.application.ApplicationMetrics; + return proto.application.ApplicationMetrics.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.application.ApplicationMetrics} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.application.ApplicationMetrics} + */ +proto.application.ApplicationMetrics.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setDatasource(value); + break; + case 2: + var value = new proto.application.ApplicationMetricsChart; + reader.readMessage(value,proto.application.ApplicationMetricsChart.deserializeBinaryFromReader); + msg.setHealth(value); + break; + case 3: + var value = new proto.application.ApplicationMetricsVariable; + reader.readMessage(value,proto.application.ApplicationMetricsVariable.deserializeBinaryFromReader); + msg.addVariables(value); + break; + case 4: + var value = new proto.application.ApplicationMetricsChart; + reader.readMessage(value,proto.application.ApplicationMetricsChart.deserializeBinaryFromReader); + msg.addCharts(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.application.ApplicationMetrics.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.application.ApplicationMetrics.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.application.ApplicationMetrics} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationMetrics.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getDatasource(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getHealth(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.application.ApplicationMetricsChart.serializeBinaryToWriter + ); + } + f = message.getVariablesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 3, + f, + proto.application.ApplicationMetricsVariable.serializeBinaryToWriter + ); + } + f = message.getChartsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 4, + f, + proto.application.ApplicationMetricsChart.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string datasource = 1; + * @return {string} + */ +proto.application.ApplicationMetrics.prototype.getDatasource = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationMetrics} returns this + */ +proto.application.ApplicationMetrics.prototype.setDatasource = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional ApplicationMetricsChart health = 2; + * @return {?proto.application.ApplicationMetricsChart} + */ +proto.application.ApplicationMetrics.prototype.getHealth = function() { + return /** @type{?proto.application.ApplicationMetricsChart} */ ( + jspb.Message.getWrapperField(this, proto.application.ApplicationMetricsChart, 2)); +}; + + +/** + * @param {?proto.application.ApplicationMetricsChart|undefined} value + * @return {!proto.application.ApplicationMetrics} returns this +*/ +proto.application.ApplicationMetrics.prototype.setHealth = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.application.ApplicationMetrics} returns this + */ +proto.application.ApplicationMetrics.prototype.clearHealth = function() { + return this.setHealth(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.application.ApplicationMetrics.prototype.hasHealth = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * repeated ApplicationMetricsVariable variables = 3; + * @return {!Array} + */ +proto.application.ApplicationMetrics.prototype.getVariablesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.application.ApplicationMetricsVariable, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.application.ApplicationMetrics} returns this +*/ +proto.application.ApplicationMetrics.prototype.setVariablesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 3, value); +}; + + +/** + * @param {!proto.application.ApplicationMetricsVariable=} opt_value + * @param {number=} opt_index + * @return {!proto.application.ApplicationMetricsVariable} + */ +proto.application.ApplicationMetrics.prototype.addVariables = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.application.ApplicationMetricsVariable, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.application.ApplicationMetrics} returns this + */ +proto.application.ApplicationMetrics.prototype.clearVariablesList = function() { + return this.setVariablesList([]); +}; + + +/** + * repeated ApplicationMetricsChart charts = 4; + * @return {!Array} + */ +proto.application.ApplicationMetrics.prototype.getChartsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.application.ApplicationMetricsChart, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.application.ApplicationMetrics} returns this +*/ +proto.application.ApplicationMetrics.prototype.setChartsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 4, value); +}; + + +/** + * @param {!proto.application.ApplicationMetricsChart=} opt_value + * @param {number=} opt_index + * @return {!proto.application.ApplicationMetricsChart} + */ +proto.application.ApplicationMetrics.prototype.addCharts = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.application.ApplicationMetricsChart, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.application.ApplicationMetrics} returns this + */ +proto.application.ApplicationMetrics.prototype.clearChartsList = function() { + return this.setChartsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.application.ApplicationMetricsVariable.repeatedFields_ = [5]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.application.ApplicationMetricsVariable.prototype.toObject = function(opt_includeInstance) { + return proto.application.ApplicationMetricsVariable.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.application.ApplicationMetricsVariable} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationMetricsVariable.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + label: jspb.Message.getFieldWithDefault(msg, 2, ""), + query: jspb.Message.getFieldWithDefault(msg, 3, ""), + allowall: jspb.Message.getBooleanFieldWithDefault(msg, 4, false), + valuesList: (f = jspb.Message.getRepeatedField(msg, 5)) == null ? undefined : f, + value: jspb.Message.getFieldWithDefault(msg, 6, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.application.ApplicationMetricsVariable} + */ +proto.application.ApplicationMetricsVariable.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.application.ApplicationMetricsVariable; + return proto.application.ApplicationMetricsVariable.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.application.ApplicationMetricsVariable} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.application.ApplicationMetricsVariable} + */ +proto.application.ApplicationMetricsVariable.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setLabel(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setQuery(value); + break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setAllowall(value); + break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.addValues(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setValue(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.application.ApplicationMetricsVariable.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.application.ApplicationMetricsVariable.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.application.ApplicationMetricsVariable} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationMetricsVariable.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getLabel(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getQuery(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = message.getAllowall(); + if (f) { + writer.writeBool( + 4, + f + ); + } + f = message.getValuesList(); + if (f.length > 0) { + writer.writeRepeatedString( + 5, + f + ); + } + f = message.getValue(); + if (f.length > 0) { + writer.writeString( + 6, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.application.ApplicationMetricsVariable.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationMetricsVariable} returns this + */ +proto.application.ApplicationMetricsVariable.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string label = 2; + * @return {string} + */ +proto.application.ApplicationMetricsVariable.prototype.getLabel = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationMetricsVariable} returns this + */ +proto.application.ApplicationMetricsVariable.prototype.setLabel = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string query = 3; + * @return {string} + */ +proto.application.ApplicationMetricsVariable.prototype.getQuery = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationMetricsVariable} returns this + */ +proto.application.ApplicationMetricsVariable.prototype.setQuery = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * optional bool allowAll = 4; + * @return {boolean} + */ +proto.application.ApplicationMetricsVariable.prototype.getAllowall = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.application.ApplicationMetricsVariable} returns this + */ +proto.application.ApplicationMetricsVariable.prototype.setAllowall = function(value) { + return jspb.Message.setProto3BooleanField(this, 4, value); +}; + + +/** + * repeated string values = 5; + * @return {!Array} + */ +proto.application.ApplicationMetricsVariable.prototype.getValuesList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 5)); +}; + + +/** + * @param {!Array} value + * @return {!proto.application.ApplicationMetricsVariable} returns this + */ +proto.application.ApplicationMetricsVariable.prototype.setValuesList = function(value) { + return jspb.Message.setField(this, 5, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.application.ApplicationMetricsVariable} returns this + */ +proto.application.ApplicationMetricsVariable.prototype.addValues = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 5, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.application.ApplicationMetricsVariable} returns this + */ +proto.application.ApplicationMetricsVariable.prototype.clearValuesList = function() { + return this.setValuesList([]); +}; + + +/** + * optional string value = 6; + * @return {string} + */ +proto.application.ApplicationMetricsVariable.prototype.getValue = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationMetricsVariable} returns this + */ +proto.application.ApplicationMetricsVariable.prototype.setValue = function(value) { + return jspb.Message.setProto3StringField(this, 6, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.application.ApplicationMetricsChart.repeatedFields_ = [6]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.application.ApplicationMetricsChart.prototype.toObject = function(opt_includeInstance) { + return proto.application.ApplicationMetricsChart.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.application.ApplicationMetricsChart} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationMetricsChart.toObject = function(includeInstance, msg) { + var f, obj = { + title: jspb.Message.getFieldWithDefault(msg, 1, ""), + type: jspb.Message.getFieldWithDefault(msg, 2, ""), + unit: jspb.Message.getFieldWithDefault(msg, 3, ""), + stacked: jspb.Message.getBooleanFieldWithDefault(msg, 4, false), + size: jspb.Message.getFieldWithDefault(msg, 5, 0), + queriesList: jspb.Message.toObjectList(msg.getQueriesList(), + proto.application.ApplicationMetricsQuery.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.application.ApplicationMetricsChart} + */ +proto.application.ApplicationMetricsChart.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.application.ApplicationMetricsChart; + return proto.application.ApplicationMetricsChart.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.application.ApplicationMetricsChart} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.application.ApplicationMetricsChart} + */ +proto.application.ApplicationMetricsChart.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setTitle(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setType(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setUnit(value); + break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setStacked(value); + break; + case 5: + var value = /** @type {number} */ (reader.readInt64()); + msg.setSize(value); + break; + case 6: + var value = new proto.application.ApplicationMetricsQuery; + reader.readMessage(value,proto.application.ApplicationMetricsQuery.deserializeBinaryFromReader); + msg.addQueries(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.application.ApplicationMetricsChart.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.application.ApplicationMetricsChart.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.application.ApplicationMetricsChart} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationMetricsChart.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTitle(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getType(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getUnit(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = message.getStacked(); + if (f) { + writer.writeBool( + 4, + f + ); + } + f = message.getSize(); + if (f !== 0) { + writer.writeInt64( + 5, + f + ); + } + f = message.getQueriesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 6, + f, + proto.application.ApplicationMetricsQuery.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string title = 1; + * @return {string} + */ +proto.application.ApplicationMetricsChart.prototype.getTitle = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationMetricsChart} returns this + */ +proto.application.ApplicationMetricsChart.prototype.setTitle = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string type = 2; + * @return {string} + */ +proto.application.ApplicationMetricsChart.prototype.getType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationMetricsChart} returns this + */ +proto.application.ApplicationMetricsChart.prototype.setType = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string unit = 3; + * @return {string} + */ +proto.application.ApplicationMetricsChart.prototype.getUnit = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationMetricsChart} returns this + */ +proto.application.ApplicationMetricsChart.prototype.setUnit = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * optional bool stacked = 4; + * @return {boolean} + */ +proto.application.ApplicationMetricsChart.prototype.getStacked = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.application.ApplicationMetricsChart} returns this + */ +proto.application.ApplicationMetricsChart.prototype.setStacked = function(value) { + return jspb.Message.setProto3BooleanField(this, 4, value); +}; + + +/** + * optional int64 size = 5; + * @return {number} + */ +proto.application.ApplicationMetricsChart.prototype.getSize = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.application.ApplicationMetricsChart} returns this + */ +proto.application.ApplicationMetricsChart.prototype.setSize = function(value) { + return jspb.Message.setProto3IntField(this, 5, value); +}; + + +/** + * repeated ApplicationMetricsQuery queries = 6; + * @return {!Array} + */ +proto.application.ApplicationMetricsChart.prototype.getQueriesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.application.ApplicationMetricsQuery, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.application.ApplicationMetricsChart} returns this +*/ +proto.application.ApplicationMetricsChart.prototype.setQueriesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 6, value); +}; + + +/** + * @param {!proto.application.ApplicationMetricsQuery=} opt_value + * @param {number=} opt_index + * @return {!proto.application.ApplicationMetricsQuery} + */ +proto.application.ApplicationMetricsChart.prototype.addQueries = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 6, opt_value, proto.application.ApplicationMetricsQuery, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.application.ApplicationMetricsChart} returns this + */ +proto.application.ApplicationMetricsChart.prototype.clearQueriesList = function() { + return this.setQueriesList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.application.ApplicationMetricsQuery.prototype.toObject = function(opt_includeInstance) { + return proto.application.ApplicationMetricsQuery.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.application.ApplicationMetricsQuery} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationMetricsQuery.toObject = function(includeInstance, msg) { + var f, obj = { + query: jspb.Message.getFieldWithDefault(msg, 1, ""), + label: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.application.ApplicationMetricsQuery} + */ +proto.application.ApplicationMetricsQuery.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.application.ApplicationMetricsQuery; + return proto.application.ApplicationMetricsQuery.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.application.ApplicationMetricsQuery} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.application.ApplicationMetricsQuery} + */ +proto.application.ApplicationMetricsQuery.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setQuery(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setLabel(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.application.ApplicationMetricsQuery.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.application.ApplicationMetricsQuery.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.application.ApplicationMetricsQuery} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationMetricsQuery.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getQuery(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getLabel(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string query = 1; + * @return {string} + */ +proto.application.ApplicationMetricsQuery.prototype.getQuery = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationMetricsQuery} returns this + */ +proto.application.ApplicationMetricsQuery.prototype.setQuery = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string label = 2; + * @return {string} + */ +proto.application.ApplicationMetricsQuery.prototype.getLabel = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.application.ApplicationMetricsQuery} returns this + */ +proto.application.ApplicationMetricsQuery.prototype.setLabel = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.application.ApplicationLogs.prototype.toObject = function(opt_includeInstance) { + return proto.application.ApplicationLogs.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.application.ApplicationLogs} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationLogs.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.application.ApplicationLogs} + */ +proto.application.ApplicationLogs.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.application.ApplicationLogs; + return proto.application.ApplicationLogs.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.application.ApplicationLogs} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.application.ApplicationLogs} + */ +proto.application.ApplicationLogs.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.application.ApplicationLogs.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.application.ApplicationLogs.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.application.ApplicationLogs} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationLogs.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.application.ApplicationTraces.prototype.toObject = function(opt_includeInstance) { + return proto.application.ApplicationTraces.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.application.ApplicationTraces} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationTraces.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.application.ApplicationTraces} + */ +proto.application.ApplicationTraces.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.application.ApplicationTraces; + return proto.application.ApplicationTraces.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.application.ApplicationTraces} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.application.ApplicationTraces} + */ +proto.application.ApplicationTraces.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.application.ApplicationTraces.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.application.ApplicationTraces.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.application.ApplicationTraces} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.application.ApplicationTraces.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + +goog.object.extend(exports, proto.application); diff --git a/app/src/generated/proto/application_pb_service.d.ts b/app/src/generated/proto/application_pb_service.d.ts new file mode 100644 index 000000000..ecdf33355 --- /dev/null +++ b/app/src/generated/proto/application_pb_service.d.ts @@ -0,0 +1,3 @@ +// package: application +// file: application.proto + diff --git a/app/src/generated/proto/application_pb_service.js b/app/src/generated/proto/application_pb_service.js new file mode 100644 index 000000000..ecdf33355 --- /dev/null +++ b/app/src/generated/proto/application_pb_service.js @@ -0,0 +1,3 @@ +// package: application +// file: application.proto + diff --git a/app/src/generated/proto/applications_grpc_web_pb.js b/app/src/generated/proto/applications_grpc_web_pb.js deleted file mode 100644 index b599064b7..000000000 --- a/app/src/generated/proto/applications_grpc_web_pb.js +++ /dev/null @@ -1,234 +0,0 @@ -/** - * @fileoverview gRPC-Web generated client stub for clusters - * @enhanceable - * @public - */ - -// GENERATED CODE -- DO NOT EDIT! - - -/* eslint-disable */ -// @ts-nocheck - - - -const grpc = {}; -grpc.web = require('grpc-web'); - -const proto = {}; -proto.clusters = require('./applications_pb.js'); - -/** - * @param {string} hostname - * @param {?Object} credentials - * @param {?Object} options - * @constructor - * @struct - * @final - */ -proto.clusters.ApplicationsClient = - function(hostname, credentials, options) { - if (!options) options = {}; - options['format'] = 'text'; - - /** - * @private @const {!grpc.web.GrpcWebClientBase} The client - */ - this.client_ = new grpc.web.GrpcWebClientBase(options); - - /** - * @private @const {string} The hostname - */ - this.hostname_ = hostname; - -}; - - -/** - * @param {string} hostname - * @param {?Object} credentials - * @param {?Object} options - * @constructor - * @struct - * @final - */ -proto.clusters.ApplicationsPromiseClient = - function(hostname, credentials, options) { - if (!options) options = {}; - options['format'] = 'text'; - - /** - * @private @const {!grpc.web.GrpcWebClientBase} The client - */ - this.client_ = new grpc.web.GrpcWebClientBase(options); - - /** - * @private @const {string} The hostname - */ - this.hostname_ = hostname; - -}; - - -/** - * @const - * @type {!grpc.web.MethodDescriptor< - * !proto.clusters.GetApplicationsRequest, - * !proto.clusters.GetApplicationsResponse>} - */ -const methodDescriptor_Applications_GetApplications = new grpc.web.MethodDescriptor( - '/clusters.Applications/GetApplications', - grpc.web.MethodType.UNARY, - proto.clusters.GetApplicationsRequest, - proto.clusters.GetApplicationsResponse, - /** - * @param {!proto.clusters.GetApplicationsRequest} request - * @return {!Uint8Array} - */ - function(request) { - return request.serializeBinary(); - }, - proto.clusters.GetApplicationsResponse.deserializeBinary -); - - -/** - * @const - * @type {!grpc.web.AbstractClientBase.MethodInfo< - * !proto.clusters.GetApplicationsRequest, - * !proto.clusters.GetApplicationsResponse>} - */ -const methodInfo_Applications_GetApplications = new grpc.web.AbstractClientBase.MethodInfo( - proto.clusters.GetApplicationsResponse, - /** - * @param {!proto.clusters.GetApplicationsRequest} request - * @return {!Uint8Array} - */ - function(request) { - return request.serializeBinary(); - }, - proto.clusters.GetApplicationsResponse.deserializeBinary -); - - -/** - * @param {!proto.clusters.GetApplicationsRequest} request The - * request proto - * @param {?Object} metadata User defined - * call metadata - * @param {function(?grpc.web.Error, ?proto.clusters.GetApplicationsResponse)} - * callback The callback function(error, response) - * @return {!grpc.web.ClientReadableStream|undefined} - * The XHR Node Readable Stream - */ -proto.clusters.ApplicationsClient.prototype.getApplications = - function(request, metadata, callback) { - return this.client_.rpcCall(this.hostname_ + - '/clusters.Applications/GetApplications', - request, - metadata || {}, - methodDescriptor_Applications_GetApplications, - callback); -}; - - -/** - * @param {!proto.clusters.GetApplicationsRequest} request The - * request proto - * @param {?Object} metadata User defined - * call metadata - * @return {!Promise} - * Promise that resolves to the response - */ -proto.clusters.ApplicationsPromiseClient.prototype.getApplications = - function(request, metadata) { - return this.client_.unaryCall(this.hostname_ + - '/clusters.Applications/GetApplications', - request, - metadata || {}, - methodDescriptor_Applications_GetApplications); -}; - - -/** - * @const - * @type {!grpc.web.MethodDescriptor< - * !proto.clusters.GetApplicationRequest, - * !proto.clusters.GetApplicationResponse>} - */ -const methodDescriptor_Applications_GetApplication = new grpc.web.MethodDescriptor( - '/clusters.Applications/GetApplication', - grpc.web.MethodType.UNARY, - proto.clusters.GetApplicationRequest, - proto.clusters.GetApplicationResponse, - /** - * @param {!proto.clusters.GetApplicationRequest} request - * @return {!Uint8Array} - */ - function(request) { - return request.serializeBinary(); - }, - proto.clusters.GetApplicationResponse.deserializeBinary -); - - -/** - * @const - * @type {!grpc.web.AbstractClientBase.MethodInfo< - * !proto.clusters.GetApplicationRequest, - * !proto.clusters.GetApplicationResponse>} - */ -const methodInfo_Applications_GetApplication = new grpc.web.AbstractClientBase.MethodInfo( - proto.clusters.GetApplicationResponse, - /** - * @param {!proto.clusters.GetApplicationRequest} request - * @return {!Uint8Array} - */ - function(request) { - return request.serializeBinary(); - }, - proto.clusters.GetApplicationResponse.deserializeBinary -); - - -/** - * @param {!proto.clusters.GetApplicationRequest} request The - * request proto - * @param {?Object} metadata User defined - * call metadata - * @param {function(?grpc.web.Error, ?proto.clusters.GetApplicationResponse)} - * callback The callback function(error, response) - * @return {!grpc.web.ClientReadableStream|undefined} - * The XHR Node Readable Stream - */ -proto.clusters.ApplicationsClient.prototype.getApplication = - function(request, metadata, callback) { - return this.client_.rpcCall(this.hostname_ + - '/clusters.Applications/GetApplication', - request, - metadata || {}, - methodDescriptor_Applications_GetApplication, - callback); -}; - - -/** - * @param {!proto.clusters.GetApplicationRequest} request The - * request proto - * @param {?Object} metadata User defined - * call metadata - * @return {!Promise} - * Promise that resolves to the response - */ -proto.clusters.ApplicationsPromiseClient.prototype.getApplication = - function(request, metadata) { - return this.client_.unaryCall(this.hostname_ + - '/clusters.Applications/GetApplication', - request, - metadata || {}, - methodDescriptor_Applications_GetApplication); -}; - - -module.exports = proto.clusters; - diff --git a/app/src/generated/proto/applications_pb.d.ts b/app/src/generated/proto/applications_pb.d.ts deleted file mode 100644 index 944aa3f63..000000000 --- a/app/src/generated/proto/applications_pb.d.ts +++ /dev/null @@ -1,95 +0,0 @@ -// package: applications -// file: applications.proto - -import * as jspb from "google-protobuf"; - -export class Application extends jspb.Message { - getCluster(): string; - setCluster(value: string): void; - - getNamespace(): string; - setNamespace(value: string): void; - - getName(): string; - setName(value: string): void; - - clearLinksList(): void; - getLinksList(): Array; - setLinksList(value: Array): void; - addLinks(value?: ApplicationLink, index?: number): ApplicationLink; - - clearResourcesList(): void; - getResourcesList(): Array; - setResourcesList(value: Array): void; - addResources(value?: ApplicationResources, index?: number): ApplicationResources; - - serializeBinary(): Uint8Array; - toObject(includeInstance?: boolean): Application.AsObject; - static toObject(includeInstance: boolean, msg: Application): Application.AsObject; - static extensions: {[key: number]: jspb.ExtensionFieldInfo}; - static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; - static serializeBinaryToWriter(message: Application, writer: jspb.BinaryWriter): void; - static deserializeBinary(bytes: Uint8Array): Application; - static deserializeBinaryFromReader(message: Application, reader: jspb.BinaryReader): Application; -} - -export namespace Application { - export type AsObject = { - cluster: string, - namespace: string, - name: string, - linksList: Array, - resourcesList: Array, - } -} - -export class ApplicationLink extends jspb.Message { - getTitle(): string; - setTitle(value: string): void; - - getLink(): string; - setLink(value: string): void; - - serializeBinary(): Uint8Array; - toObject(includeInstance?: boolean): ApplicationLink.AsObject; - static toObject(includeInstance: boolean, msg: ApplicationLink): ApplicationLink.AsObject; - static extensions: {[key: number]: jspb.ExtensionFieldInfo}; - static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; - static serializeBinaryToWriter(message: ApplicationLink, writer: jspb.BinaryWriter): void; - static deserializeBinary(bytes: Uint8Array): ApplicationLink; - static deserializeBinaryFromReader(message: ApplicationLink, reader: jspb.BinaryReader): ApplicationLink; -} - -export namespace ApplicationLink { - export type AsObject = { - title: string, - link: string, - } -} - -export class ApplicationResources extends jspb.Message { - clearKindsList(): void; - getKindsList(): Array; - setKindsList(value: Array): void; - addKinds(value: string, index?: number): string; - - getSelector(): string; - setSelector(value: string): void; - - serializeBinary(): Uint8Array; - toObject(includeInstance?: boolean): ApplicationResources.AsObject; - static toObject(includeInstance: boolean, msg: ApplicationResources): ApplicationResources.AsObject; - static extensions: {[key: number]: jspb.ExtensionFieldInfo}; - static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; - static serializeBinaryToWriter(message: ApplicationResources, writer: jspb.BinaryWriter): void; - static deserializeBinary(bytes: Uint8Array): ApplicationResources; - static deserializeBinaryFromReader(message: ApplicationResources, reader: jspb.BinaryReader): ApplicationResources; -} - -export namespace ApplicationResources { - export type AsObject = { - kindsList: Array, - selector: string, - } -} - diff --git a/app/src/generated/proto/applications_pb.js b/app/src/generated/proto/applications_pb.js deleted file mode 100644 index f93a1ffe7..000000000 --- a/app/src/generated/proto/applications_pb.js +++ /dev/null @@ -1,732 +0,0 @@ -// source: applications.proto -/** - * @fileoverview - * @enhanceable - * @suppress {messageConventions} JS Compiler reports an error if a variable or - * field starts with 'MSG_' and isn't a translatable message. - * @public - */ -// GENERATED CODE -- DO NOT EDIT! -/* eslint-disable */ -// @ts-nocheck - -var jspb = require('google-protobuf'); -var goog = jspb; -var global = Function('return this')(); - -goog.exportSymbol('proto.applications.Application', null, global); -goog.exportSymbol('proto.applications.ApplicationLink', null, global); -goog.exportSymbol('proto.applications.ApplicationResources', null, global); -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.applications.Application = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.applications.Application.repeatedFields_, null); -}; -goog.inherits(proto.applications.Application, jspb.Message); -if (goog.DEBUG && !COMPILED) { - /** - * @public - * @override - */ - proto.applications.Application.displayName = 'proto.applications.Application'; -} -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.applications.ApplicationLink = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.applications.ApplicationLink, jspb.Message); -if (goog.DEBUG && !COMPILED) { - /** - * @public - * @override - */ - proto.applications.ApplicationLink.displayName = 'proto.applications.ApplicationLink'; -} -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.applications.ApplicationResources = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.applications.ApplicationResources.repeatedFields_, null); -}; -goog.inherits(proto.applications.ApplicationResources, jspb.Message); -if (goog.DEBUG && !COMPILED) { - /** - * @public - * @override - */ - proto.applications.ApplicationResources.displayName = 'proto.applications.ApplicationResources'; -} - -/** - * List of repeated fields within this message type. - * @private {!Array} - * @const - */ -proto.applications.Application.repeatedFields_ = [4,5]; - - - -if (jspb.Message.GENERATE_TO_OBJECT) { -/** - * Creates an object representation of this proto. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * Optional fields that are not set will be set to undefined. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * net/proto2/compiler/js/internal/generator.cc#kKeyword. - * @param {boolean=} opt_includeInstance Deprecated. whether to include the - * JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @return {!Object} - */ -proto.applications.Application.prototype.toObject = function(opt_includeInstance) { - return proto.applications.Application.toObject(opt_includeInstance, this); -}; - - -/** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Deprecated. Whether to include - * the JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.applications.Application} msg The msg instance to transform. - * @return {!Object} - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.applications.Application.toObject = function(includeInstance, msg) { - var f, obj = { - cluster: jspb.Message.getFieldWithDefault(msg, 1, ""), - namespace: jspb.Message.getFieldWithDefault(msg, 2, ""), - name: jspb.Message.getFieldWithDefault(msg, 3, ""), - linksList: jspb.Message.toObjectList(msg.getLinksList(), - proto.applications.ApplicationLink.toObject, includeInstance), - resourcesList: jspb.Message.toObjectList(msg.getResourcesList(), - proto.applications.ApplicationResources.toObject, includeInstance) - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; -}; -} - - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.applications.Application} - */ -proto.applications.Application.deserializeBinary = function(bytes) { - var reader = new jspb.BinaryReader(bytes); - var msg = new proto.applications.Application; - return proto.applications.Application.deserializeBinaryFromReader(msg, reader); -}; - - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.applications.Application} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.applications.Application} - */ -proto.applications.Application.deserializeBinaryFromReader = function(msg, reader) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - var field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setCluster(value); - break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setNamespace(value); - break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setName(value); - break; - case 4: - var value = new proto.applications.ApplicationLink; - reader.readMessage(value,proto.applications.ApplicationLink.deserializeBinaryFromReader); - msg.addLinks(value); - break; - case 5: - var value = new proto.applications.ApplicationResources; - reader.readMessage(value,proto.applications.ApplicationResources.deserializeBinaryFromReader); - msg.addResources(value); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.applications.Application.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - proto.applications.Application.serializeBinaryToWriter(this, writer); - return writer.getResultBuffer(); -}; - - -/** - * Serializes the given message to binary data (in protobuf wire - * format), writing to the given BinaryWriter. - * @param {!proto.applications.Application} message - * @param {!jspb.BinaryWriter} writer - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.applications.Application.serializeBinaryToWriter = function(message, writer) { - var f = undefined; - f = message.getCluster(); - if (f.length > 0) { - writer.writeString( - 1, - f - ); - } - f = message.getNamespace(); - if (f.length > 0) { - writer.writeString( - 2, - f - ); - } - f = message.getName(); - if (f.length > 0) { - writer.writeString( - 3, - f - ); - } - f = message.getLinksList(); - if (f.length > 0) { - writer.writeRepeatedMessage( - 4, - f, - proto.applications.ApplicationLink.serializeBinaryToWriter - ); - } - f = message.getResourcesList(); - if (f.length > 0) { - writer.writeRepeatedMessage( - 5, - f, - proto.applications.ApplicationResources.serializeBinaryToWriter - ); - } -}; - - -/** - * optional string cluster = 1; - * @return {string} - */ -proto.applications.Application.prototype.getCluster = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); -}; - - -/** - * @param {string} value - * @return {!proto.applications.Application} returns this - */ -proto.applications.Application.prototype.setCluster = function(value) { - return jspb.Message.setProto3StringField(this, 1, value); -}; - - -/** - * optional string namespace = 2; - * @return {string} - */ -proto.applications.Application.prototype.getNamespace = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); -}; - - -/** - * @param {string} value - * @return {!proto.applications.Application} returns this - */ -proto.applications.Application.prototype.setNamespace = function(value) { - return jspb.Message.setProto3StringField(this, 2, value); -}; - - -/** - * optional string name = 3; - * @return {string} - */ -proto.applications.Application.prototype.getName = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); -}; - - -/** - * @param {string} value - * @return {!proto.applications.Application} returns this - */ -proto.applications.Application.prototype.setName = function(value) { - return jspb.Message.setProto3StringField(this, 3, value); -}; - - -/** - * repeated ApplicationLink links = 4; - * @return {!Array} - */ -proto.applications.Application.prototype.getLinksList = function() { - return /** @type{!Array} */ ( - jspb.Message.getRepeatedWrapperField(this, proto.applications.ApplicationLink, 4)); -}; - - -/** - * @param {!Array} value - * @return {!proto.applications.Application} returns this -*/ -proto.applications.Application.prototype.setLinksList = function(value) { - return jspb.Message.setRepeatedWrapperField(this, 4, value); -}; - - -/** - * @param {!proto.applications.ApplicationLink=} opt_value - * @param {number=} opt_index - * @return {!proto.applications.ApplicationLink} - */ -proto.applications.Application.prototype.addLinks = function(opt_value, opt_index) { - return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.applications.ApplicationLink, opt_index); -}; - - -/** - * Clears the list making it empty but non-null. - * @return {!proto.applications.Application} returns this - */ -proto.applications.Application.prototype.clearLinksList = function() { - return this.setLinksList([]); -}; - - -/** - * repeated ApplicationResources resources = 5; - * @return {!Array} - */ -proto.applications.Application.prototype.getResourcesList = function() { - return /** @type{!Array} */ ( - jspb.Message.getRepeatedWrapperField(this, proto.applications.ApplicationResources, 5)); -}; - - -/** - * @param {!Array} value - * @return {!proto.applications.Application} returns this -*/ -proto.applications.Application.prototype.setResourcesList = function(value) { - return jspb.Message.setRepeatedWrapperField(this, 5, value); -}; - - -/** - * @param {!proto.applications.ApplicationResources=} opt_value - * @param {number=} opt_index - * @return {!proto.applications.ApplicationResources} - */ -proto.applications.Application.prototype.addResources = function(opt_value, opt_index) { - return jspb.Message.addToRepeatedWrapperField(this, 5, opt_value, proto.applications.ApplicationResources, opt_index); -}; - - -/** - * Clears the list making it empty but non-null. - * @return {!proto.applications.Application} returns this - */ -proto.applications.Application.prototype.clearResourcesList = function() { - return this.setResourcesList([]); -}; - - - - - -if (jspb.Message.GENERATE_TO_OBJECT) { -/** - * Creates an object representation of this proto. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * Optional fields that are not set will be set to undefined. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * net/proto2/compiler/js/internal/generator.cc#kKeyword. - * @param {boolean=} opt_includeInstance Deprecated. whether to include the - * JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @return {!Object} - */ -proto.applications.ApplicationLink.prototype.toObject = function(opt_includeInstance) { - return proto.applications.ApplicationLink.toObject(opt_includeInstance, this); -}; - - -/** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Deprecated. Whether to include - * the JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.applications.ApplicationLink} msg The msg instance to transform. - * @return {!Object} - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.applications.ApplicationLink.toObject = function(includeInstance, msg) { - var f, obj = { - title: jspb.Message.getFieldWithDefault(msg, 1, ""), - link: jspb.Message.getFieldWithDefault(msg, 2, "") - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; -}; -} - - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.applications.ApplicationLink} - */ -proto.applications.ApplicationLink.deserializeBinary = function(bytes) { - var reader = new jspb.BinaryReader(bytes); - var msg = new proto.applications.ApplicationLink; - return proto.applications.ApplicationLink.deserializeBinaryFromReader(msg, reader); -}; - - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.applications.ApplicationLink} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.applications.ApplicationLink} - */ -proto.applications.ApplicationLink.deserializeBinaryFromReader = function(msg, reader) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - var field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setTitle(value); - break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setLink(value); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.applications.ApplicationLink.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - proto.applications.ApplicationLink.serializeBinaryToWriter(this, writer); - return writer.getResultBuffer(); -}; - - -/** - * Serializes the given message to binary data (in protobuf wire - * format), writing to the given BinaryWriter. - * @param {!proto.applications.ApplicationLink} message - * @param {!jspb.BinaryWriter} writer - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.applications.ApplicationLink.serializeBinaryToWriter = function(message, writer) { - var f = undefined; - f = message.getTitle(); - if (f.length > 0) { - writer.writeString( - 1, - f - ); - } - f = message.getLink(); - if (f.length > 0) { - writer.writeString( - 2, - f - ); - } -}; - - -/** - * optional string title = 1; - * @return {string} - */ -proto.applications.ApplicationLink.prototype.getTitle = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); -}; - - -/** - * @param {string} value - * @return {!proto.applications.ApplicationLink} returns this - */ -proto.applications.ApplicationLink.prototype.setTitle = function(value) { - return jspb.Message.setProto3StringField(this, 1, value); -}; - - -/** - * optional string link = 2; - * @return {string} - */ -proto.applications.ApplicationLink.prototype.getLink = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); -}; - - -/** - * @param {string} value - * @return {!proto.applications.ApplicationLink} returns this - */ -proto.applications.ApplicationLink.prototype.setLink = function(value) { - return jspb.Message.setProto3StringField(this, 2, value); -}; - - - -/** - * List of repeated fields within this message type. - * @private {!Array} - * @const - */ -proto.applications.ApplicationResources.repeatedFields_ = [1]; - - - -if (jspb.Message.GENERATE_TO_OBJECT) { -/** - * Creates an object representation of this proto. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * Optional fields that are not set will be set to undefined. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * net/proto2/compiler/js/internal/generator.cc#kKeyword. - * @param {boolean=} opt_includeInstance Deprecated. whether to include the - * JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @return {!Object} - */ -proto.applications.ApplicationResources.prototype.toObject = function(opt_includeInstance) { - return proto.applications.ApplicationResources.toObject(opt_includeInstance, this); -}; - - -/** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Deprecated. Whether to include - * the JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.applications.ApplicationResources} msg The msg instance to transform. - * @return {!Object} - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.applications.ApplicationResources.toObject = function(includeInstance, msg) { - var f, obj = { - kindsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f, - selector: jspb.Message.getFieldWithDefault(msg, 2, "") - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; -}; -} - - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.applications.ApplicationResources} - */ -proto.applications.ApplicationResources.deserializeBinary = function(bytes) { - var reader = new jspb.BinaryReader(bytes); - var msg = new proto.applications.ApplicationResources; - return proto.applications.ApplicationResources.deserializeBinaryFromReader(msg, reader); -}; - - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.applications.ApplicationResources} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.applications.ApplicationResources} - */ -proto.applications.ApplicationResources.deserializeBinaryFromReader = function(msg, reader) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - var field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.addKinds(value); - break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setSelector(value); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.applications.ApplicationResources.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - proto.applications.ApplicationResources.serializeBinaryToWriter(this, writer); - return writer.getResultBuffer(); -}; - - -/** - * Serializes the given message to binary data (in protobuf wire - * format), writing to the given BinaryWriter. - * @param {!proto.applications.ApplicationResources} message - * @param {!jspb.BinaryWriter} writer - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.applications.ApplicationResources.serializeBinaryToWriter = function(message, writer) { - var f = undefined; - f = message.getKindsList(); - if (f.length > 0) { - writer.writeRepeatedString( - 1, - f - ); - } - f = message.getSelector(); - if (f.length > 0) { - writer.writeString( - 2, - f - ); - } -}; - - -/** - * repeated string kinds = 1; - * @return {!Array} - */ -proto.applications.ApplicationResources.prototype.getKindsList = function() { - return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); -}; - - -/** - * @param {!Array} value - * @return {!proto.applications.ApplicationResources} returns this - */ -proto.applications.ApplicationResources.prototype.setKindsList = function(value) { - return jspb.Message.setField(this, 1, value || []); -}; - - -/** - * @param {string} value - * @param {number=} opt_index - * @return {!proto.applications.ApplicationResources} returns this - */ -proto.applications.ApplicationResources.prototype.addKinds = function(value, opt_index) { - return jspb.Message.addToRepeatedField(this, 1, value, opt_index); -}; - - -/** - * Clears the list making it empty but non-null. - * @return {!proto.applications.ApplicationResources} returns this - */ -proto.applications.ApplicationResources.prototype.clearKindsList = function() { - return this.setKindsList([]); -}; - - -/** - * optional string selector = 2; - * @return {string} - */ -proto.applications.ApplicationResources.prototype.getSelector = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); -}; - - -/** - * @param {string} value - * @return {!proto.applications.ApplicationResources} returns this - */ -proto.applications.ApplicationResources.prototype.setSelector = function(value) { - return jspb.Message.setProto3StringField(this, 2, value); -}; - - -goog.object.extend(exports, proto.applications); diff --git a/app/src/generated/proto/applications_pb_service.d.ts b/app/src/generated/proto/applications_pb_service.d.ts deleted file mode 100644 index 56a326391..000000000 --- a/app/src/generated/proto/applications_pb_service.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -// package: applications -// file: applications.proto - diff --git a/app/src/generated/proto/applications_pb_service.js b/app/src/generated/proto/applications_pb_service.js deleted file mode 100644 index 56a326391..000000000 --- a/app/src/generated/proto/applications_pb_service.js +++ /dev/null @@ -1,3 +0,0 @@ -// package: applications -// file: applications.proto - diff --git a/app/src/generated/proto/clusters_grpc_web_pb.js b/app/src/generated/proto/clusters_grpc_web_pb.js index 92ececac8..4ec843f82 100644 --- a/app/src/generated/proto/clusters_grpc_web_pb.js +++ b/app/src/generated/proto/clusters_grpc_web_pb.js @@ -16,7 +16,7 @@ const grpc = {}; grpc.web = require('grpc-web'); -var applications_pb = require('./applications_pb.js') +var application_pb = require('./application_pb.js') const proto = {}; proto.clusters = require('./clusters_pb.js'); diff --git a/app/src/generated/proto/clusters_pb.d.ts b/app/src/generated/proto/clusters_pb.d.ts index 6dd424baf..39ab5c1e3 100644 --- a/app/src/generated/proto/clusters_pb.d.ts +++ b/app/src/generated/proto/clusters_pb.d.ts @@ -2,7 +2,7 @@ // file: clusters.proto import * as jspb from "google-protobuf"; -import * as applications_pb from "./applications_pb"; +import * as application_pb from "./application_pb"; export class GetClustersRequest extends jspb.Message { serializeBinary(): Uint8Array; @@ -210,9 +210,9 @@ export namespace GetApplicationsRequest { export class GetApplicationsResponse extends jspb.Message { clearApplicationsList(): void; - getApplicationsList(): Array; - setApplicationsList(value: Array): void; - addApplications(value?: applications_pb.Application, index?: number): applications_pb.Application; + getApplicationsList(): Array; + setApplicationsList(value: Array): void; + addApplications(value?: application_pb.Application, index?: number): application_pb.Application; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetApplicationsResponse.AsObject; @@ -226,7 +226,7 @@ export class GetApplicationsResponse extends jspb.Message { export namespace GetApplicationsResponse { export type AsObject = { - applicationsList: Array, + applicationsList: Array, } } @@ -261,8 +261,8 @@ export namespace GetApplicationRequest { export class GetApplicationResponse extends jspb.Message { hasApplication(): boolean; clearApplication(): void; - getApplication(): applications_pb.Application | undefined; - setApplication(value?: applications_pb.Application): void; + getApplication(): application_pb.Application | undefined; + setApplication(value?: application_pb.Application): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetApplicationResponse.AsObject; @@ -276,7 +276,7 @@ export class GetApplicationResponse extends jspb.Message { export namespace GetApplicationResponse { export type AsObject = { - application?: applications_pb.Application.AsObject, + application?: application_pb.Application.AsObject, } } diff --git a/app/src/generated/proto/clusters_pb.js b/app/src/generated/proto/clusters_pb.js index 0ed67d416..44c9da96f 100644 --- a/app/src/generated/proto/clusters_pb.js +++ b/app/src/generated/proto/clusters_pb.js @@ -14,8 +14,8 @@ var jspb = require('google-protobuf'); var goog = jspb; var global = Function('return this')(); -var applications_pb = require('./applications_pb.js'); -goog.object.extend(proto, applications_pb); +var application_pb = require('./application_pb.js'); +goog.object.extend(proto, application_pb); goog.exportSymbol('proto.clusters.GetApplicationRequest', null, global); goog.exportSymbol('proto.clusters.GetApplicationResponse', null, global); goog.exportSymbol('proto.clusters.GetApplicationsRequest', null, global); @@ -1747,7 +1747,7 @@ proto.clusters.GetApplicationsResponse.prototype.toObject = function(opt_include proto.clusters.GetApplicationsResponse.toObject = function(includeInstance, msg) { var f, obj = { applicationsList: jspb.Message.toObjectList(msg.getApplicationsList(), - applications_pb.Application.toObject, includeInstance) + application_pb.Application.toObject, includeInstance) }; if (includeInstance) { @@ -1785,8 +1785,8 @@ proto.clusters.GetApplicationsResponse.deserializeBinaryFromReader = function(ms var field = reader.getFieldNumber(); switch (field) { case 1: - var value = new applications_pb.Application; - reader.readMessage(value,applications_pb.Application.deserializeBinaryFromReader); + var value = new application_pb.Application; + reader.readMessage(value,application_pb.Application.deserializeBinaryFromReader); msg.addApplications(value); break; default: @@ -1823,24 +1823,24 @@ proto.clusters.GetApplicationsResponse.serializeBinaryToWriter = function(messag writer.writeRepeatedMessage( 1, f, - applications_pb.Application.serializeBinaryToWriter + application_pb.Application.serializeBinaryToWriter ); } }; /** - * repeated applications.Application applications = 1; - * @return {!Array} + * repeated application.Application applications = 1; + * @return {!Array} */ proto.clusters.GetApplicationsResponse.prototype.getApplicationsList = function() { - return /** @type{!Array} */ ( - jspb.Message.getRepeatedWrapperField(this, applications_pb.Application, 1)); + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, application_pb.Application, 1)); }; /** - * @param {!Array} value + * @param {!Array} value * @return {!proto.clusters.GetApplicationsResponse} returns this */ proto.clusters.GetApplicationsResponse.prototype.setApplicationsList = function(value) { @@ -1849,12 +1849,12 @@ proto.clusters.GetApplicationsResponse.prototype.setApplicationsList = function( /** - * @param {!proto.applications.Application=} opt_value + * @param {!proto.application.Application=} opt_value * @param {number=} opt_index - * @return {!proto.applications.Application} + * @return {!proto.application.Application} */ proto.clusters.GetApplicationsResponse.prototype.addApplications = function(opt_value, opt_index) { - return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.applications.Application, opt_index); + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.application.Application, opt_index); }; @@ -2089,7 +2089,7 @@ proto.clusters.GetApplicationResponse.prototype.toObject = function(opt_includeI */ proto.clusters.GetApplicationResponse.toObject = function(includeInstance, msg) { var f, obj = { - application: (f = msg.getApplication()) && applications_pb.Application.toObject(includeInstance, f) + application: (f = msg.getApplication()) && application_pb.Application.toObject(includeInstance, f) }; if (includeInstance) { @@ -2127,8 +2127,8 @@ proto.clusters.GetApplicationResponse.deserializeBinaryFromReader = function(msg var field = reader.getFieldNumber(); switch (field) { case 1: - var value = new applications_pb.Application; - reader.readMessage(value,applications_pb.Application.deserializeBinaryFromReader); + var value = new application_pb.Application; + reader.readMessage(value,application_pb.Application.deserializeBinaryFromReader); msg.setApplication(value); break; default: @@ -2165,24 +2165,24 @@ proto.clusters.GetApplicationResponse.serializeBinaryToWriter = function(message writer.writeMessage( 1, f, - applications_pb.Application.serializeBinaryToWriter + application_pb.Application.serializeBinaryToWriter ); } }; /** - * optional applications.Application application = 1; - * @return {?proto.applications.Application} + * optional application.Application application = 1; + * @return {?proto.application.Application} */ proto.clusters.GetApplicationResponse.prototype.getApplication = function() { - return /** @type{?proto.applications.Application} */ ( - jspb.Message.getWrapperField(this, applications_pb.Application, 1)); + return /** @type{?proto.application.Application} */ ( + jspb.Message.getWrapperField(this, application_pb.Application, 1)); }; /** - * @param {?proto.applications.Application|undefined} value + * @param {?proto.application.Application|undefined} value * @return {!proto.clusters.GetApplicationResponse} returns this */ proto.clusters.GetApplicationResponse.prototype.setApplication = function(value) { diff --git a/app/src/generated/proto/datasources_grpc_web_pb.js b/app/src/generated/proto/datasources_grpc_web_pb.js new file mode 100644 index 000000000..e6774f235 --- /dev/null +++ b/app/src/generated/proto/datasources_grpc_web_pb.js @@ -0,0 +1,476 @@ +/** + * @fileoverview gRPC-Web generated client stub for datasources + * @enhanceable + * @public + */ + +// GENERATED CODE -- DO NOT EDIT! + + +/* eslint-disable */ +// @ts-nocheck + + + +const grpc = {}; +grpc.web = require('grpc-web'); + + +var application_pb = require('./application_pb.js') +const proto = {}; +proto.datasources = require('./datasources_pb.js'); + +/** + * @param {string} hostname + * @param {?Object} credentials + * @param {?Object} options + * @constructor + * @struct + * @final + */ +proto.datasources.DatasourcesClient = + function(hostname, credentials, options) { + if (!options) options = {}; + options['format'] = 'text'; + + /** + * @private @const {!grpc.web.GrpcWebClientBase} The client + */ + this.client_ = new grpc.web.GrpcWebClientBase(options); + + /** + * @private @const {string} The hostname + */ + this.hostname_ = hostname; + +}; + + +/** + * @param {string} hostname + * @param {?Object} credentials + * @param {?Object} options + * @constructor + * @struct + * @final + */ +proto.datasources.DatasourcesPromiseClient = + function(hostname, credentials, options) { + if (!options) options = {}; + options['format'] = 'text'; + + /** + * @private @const {!grpc.web.GrpcWebClientBase} The client + */ + this.client_ = new grpc.web.GrpcWebClientBase(options); + + /** + * @private @const {string} The hostname + */ + this.hostname_ = hostname; + +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.datasources.GetDatasourceRequest, + * !proto.datasources.GetDatasourceResponse>} + */ +const methodDescriptor_Datasources_GetDatasource = new grpc.web.MethodDescriptor( + '/datasources.Datasources/GetDatasource', + grpc.web.MethodType.UNARY, + proto.datasources.GetDatasourceRequest, + proto.datasources.GetDatasourceResponse, + /** + * @param {!proto.datasources.GetDatasourceRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.datasources.GetDatasourceResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.datasources.GetDatasourceRequest, + * !proto.datasources.GetDatasourceResponse>} + */ +const methodInfo_Datasources_GetDatasource = new grpc.web.AbstractClientBase.MethodInfo( + proto.datasources.GetDatasourceResponse, + /** + * @param {!proto.datasources.GetDatasourceRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.datasources.GetDatasourceResponse.deserializeBinary +); + + +/** + * @param {!proto.datasources.GetDatasourceRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.datasources.GetDatasourceResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.datasources.DatasourcesClient.prototype.getDatasource = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/datasources.Datasources/GetDatasource', + request, + metadata || {}, + methodDescriptor_Datasources_GetDatasource, + callback); +}; + + +/** + * @param {!proto.datasources.GetDatasourceRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.datasources.DatasourcesPromiseClient.prototype.getDatasource = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/datasources.Datasources/GetDatasource', + request, + metadata || {}, + methodDescriptor_Datasources_GetDatasource); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.datasources.GetVariablesRequest, + * !proto.datasources.GetVariablesResponse>} + */ +const methodDescriptor_Datasources_GetVariables = new grpc.web.MethodDescriptor( + '/datasources.Datasources/GetVariables', + grpc.web.MethodType.UNARY, + proto.datasources.GetVariablesRequest, + proto.datasources.GetVariablesResponse, + /** + * @param {!proto.datasources.GetVariablesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.datasources.GetVariablesResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.datasources.GetVariablesRequest, + * !proto.datasources.GetVariablesResponse>} + */ +const methodInfo_Datasources_GetVariables = new grpc.web.AbstractClientBase.MethodInfo( + proto.datasources.GetVariablesResponse, + /** + * @param {!proto.datasources.GetVariablesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.datasources.GetVariablesResponse.deserializeBinary +); + + +/** + * @param {!proto.datasources.GetVariablesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.datasources.GetVariablesResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.datasources.DatasourcesClient.prototype.getVariables = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/datasources.Datasources/GetVariables', + request, + metadata || {}, + methodDescriptor_Datasources_GetVariables, + callback); +}; + + +/** + * @param {!proto.datasources.GetVariablesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.datasources.DatasourcesPromiseClient.prototype.getVariables = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/datasources.Datasources/GetVariables', + request, + metadata || {}, + methodDescriptor_Datasources_GetVariables); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.datasources.GetMetricsRequest, + * !proto.datasources.GetMetricsResponse>} + */ +const methodDescriptor_Datasources_GetMetrics = new grpc.web.MethodDescriptor( + '/datasources.Datasources/GetMetrics', + grpc.web.MethodType.UNARY, + proto.datasources.GetMetricsRequest, + proto.datasources.GetMetricsResponse, + /** + * @param {!proto.datasources.GetMetricsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.datasources.GetMetricsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.datasources.GetMetricsRequest, + * !proto.datasources.GetMetricsResponse>} + */ +const methodInfo_Datasources_GetMetrics = new grpc.web.AbstractClientBase.MethodInfo( + proto.datasources.GetMetricsResponse, + /** + * @param {!proto.datasources.GetMetricsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.datasources.GetMetricsResponse.deserializeBinary +); + + +/** + * @param {!proto.datasources.GetMetricsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.datasources.GetMetricsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.datasources.DatasourcesClient.prototype.getMetrics = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/datasources.Datasources/GetMetrics', + request, + metadata || {}, + methodDescriptor_Datasources_GetMetrics, + callback); +}; + + +/** + * @param {!proto.datasources.GetMetricsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.datasources.DatasourcesPromiseClient.prototype.getMetrics = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/datasources.Datasources/GetMetrics', + request, + metadata || {}, + methodDescriptor_Datasources_GetMetrics); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.datasources.GetLogsRequest, + * !proto.datasources.GetLogsResponse>} + */ +const methodDescriptor_Datasources_GetLogs = new grpc.web.MethodDescriptor( + '/datasources.Datasources/GetLogs', + grpc.web.MethodType.UNARY, + proto.datasources.GetLogsRequest, + proto.datasources.GetLogsResponse, + /** + * @param {!proto.datasources.GetLogsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.datasources.GetLogsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.datasources.GetLogsRequest, + * !proto.datasources.GetLogsResponse>} + */ +const methodInfo_Datasources_GetLogs = new grpc.web.AbstractClientBase.MethodInfo( + proto.datasources.GetLogsResponse, + /** + * @param {!proto.datasources.GetLogsRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.datasources.GetLogsResponse.deserializeBinary +); + + +/** + * @param {!proto.datasources.GetLogsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.datasources.GetLogsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.datasources.DatasourcesClient.prototype.getLogs = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/datasources.Datasources/GetLogs', + request, + metadata || {}, + methodDescriptor_Datasources_GetLogs, + callback); +}; + + +/** + * @param {!proto.datasources.GetLogsRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.datasources.DatasourcesPromiseClient.prototype.getLogs = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/datasources.Datasources/GetLogs', + request, + metadata || {}, + methodDescriptor_Datasources_GetLogs); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.datasources.GetTracesRequest, + * !proto.datasources.GetTracesResponse>} + */ +const methodDescriptor_Datasources_GetTraces = new grpc.web.MethodDescriptor( + '/datasources.Datasources/GetTraces', + grpc.web.MethodType.UNARY, + proto.datasources.GetTracesRequest, + proto.datasources.GetTracesResponse, + /** + * @param {!proto.datasources.GetTracesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.datasources.GetTracesResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.datasources.GetTracesRequest, + * !proto.datasources.GetTracesResponse>} + */ +const methodInfo_Datasources_GetTraces = new grpc.web.AbstractClientBase.MethodInfo( + proto.datasources.GetTracesResponse, + /** + * @param {!proto.datasources.GetTracesRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.datasources.GetTracesResponse.deserializeBinary +); + + +/** + * @param {!proto.datasources.GetTracesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.datasources.GetTracesResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.datasources.DatasourcesClient.prototype.getTraces = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/datasources.Datasources/GetTraces', + request, + metadata || {}, + methodDescriptor_Datasources_GetTraces, + callback); +}; + + +/** + * @param {!proto.datasources.GetTracesRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.datasources.DatasourcesPromiseClient.prototype.getTraces = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/datasources.Datasources/GetTraces', + request, + metadata || {}, + methodDescriptor_Datasources_GetTraces); +}; + + +module.exports = proto.datasources; + diff --git a/app/src/generated/proto/datasources_pb.d.ts b/app/src/generated/proto/datasources_pb.d.ts new file mode 100644 index 000000000..749033908 --- /dev/null +++ b/app/src/generated/proto/datasources_pb.d.ts @@ -0,0 +1,334 @@ +// package: datasources +// file: datasources.proto + +import * as jspb from "google-protobuf"; +import * as application_pb from "./application_pb"; + +export class GetDatasourceRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetDatasourceRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetDatasourceRequest): GetDatasourceRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetDatasourceRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetDatasourceRequest; + static deserializeBinaryFromReader(message: GetDatasourceRequest, reader: jspb.BinaryReader): GetDatasourceRequest; +} + +export namespace GetDatasourceRequest { + export type AsObject = { + name: string, + } +} + +export class GetDatasourceResponse extends jspb.Message { + getName(): string; + setName(value: string): void; + + getType(): string; + setType(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetDatasourceResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetDatasourceResponse): GetDatasourceResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetDatasourceResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetDatasourceResponse; + static deserializeBinaryFromReader(message: GetDatasourceResponse, reader: jspb.BinaryReader): GetDatasourceResponse; +} + +export namespace GetDatasourceResponse { + export type AsObject = { + name: string, + type: string, + } +} + +export class GetVariablesRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + hasOptions(): boolean; + clearOptions(): void; + getOptions(): DatasourceOptions | undefined; + setOptions(value?: DatasourceOptions): void; + + clearVariablesList(): void; + getVariablesList(): Array; + setVariablesList(value: Array): void; + addVariables(value?: application_pb.ApplicationMetricsVariable, index?: number): application_pb.ApplicationMetricsVariable; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetVariablesRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetVariablesRequest): GetVariablesRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetVariablesRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetVariablesRequest; + static deserializeBinaryFromReader(message: GetVariablesRequest, reader: jspb.BinaryReader): GetVariablesRequest; +} + +export namespace GetVariablesRequest { + export type AsObject = { + name: string, + options?: DatasourceOptions.AsObject, + variablesList: Array, + } +} + +export class GetVariablesResponse extends jspb.Message { + clearVariablesList(): void; + getVariablesList(): Array; + setVariablesList(value: Array): void; + addVariables(value?: application_pb.ApplicationMetricsVariable, index?: number): application_pb.ApplicationMetricsVariable; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetVariablesResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetVariablesResponse): GetVariablesResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetVariablesResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetVariablesResponse; + static deserializeBinaryFromReader(message: GetVariablesResponse, reader: jspb.BinaryReader): GetVariablesResponse; +} + +export namespace GetVariablesResponse { + export type AsObject = { + variablesList: Array, + } +} + +export class GetMetricsRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + hasOptions(): boolean; + clearOptions(): void; + getOptions(): DatasourceOptions | undefined; + setOptions(value?: DatasourceOptions): void; + + clearVariablesList(): void; + getVariablesList(): Array; + setVariablesList(value: Array): void; + addVariables(value?: application_pb.ApplicationMetricsVariable, index?: number): application_pb.ApplicationMetricsVariable; + + clearQueriesList(): void; + getQueriesList(): Array; + setQueriesList(value: Array): void; + addQueries(value?: application_pb.ApplicationMetricsQuery, index?: number): application_pb.ApplicationMetricsQuery; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetMetricsRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetMetricsRequest): GetMetricsRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetMetricsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetMetricsRequest; + static deserializeBinaryFromReader(message: GetMetricsRequest, reader: jspb.BinaryReader): GetMetricsRequest; +} + +export namespace GetMetricsRequest { + export type AsObject = { + name: string, + options?: DatasourceOptions.AsObject, + variablesList: Array, + queriesList: Array, + } +} + +export class GetMetricsResponse extends jspb.Message { + clearMetricsList(): void; + getMetricsList(): Array; + setMetricsList(value: Array): void; + addMetrics(value?: DatasourceMetrics, index?: number): DatasourceMetrics; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetMetricsResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetMetricsResponse): GetMetricsResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetMetricsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetMetricsResponse; + static deserializeBinaryFromReader(message: GetMetricsResponse, reader: jspb.BinaryReader): GetMetricsResponse; +} + +export namespace GetMetricsResponse { + export type AsObject = { + metricsList: Array, + } +} + +export class GetLogsRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + hasOptions(): boolean; + clearOptions(): void; + getOptions(): DatasourceOptions | undefined; + setOptions(value?: DatasourceOptions): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetLogsRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetLogsRequest): GetLogsRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetLogsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetLogsRequest; + static deserializeBinaryFromReader(message: GetLogsRequest, reader: jspb.BinaryReader): GetLogsRequest; +} + +export namespace GetLogsRequest { + export type AsObject = { + name: string, + options?: DatasourceOptions.AsObject, + } +} + +export class GetLogsResponse extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetLogsResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetLogsResponse): GetLogsResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetLogsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetLogsResponse; + static deserializeBinaryFromReader(message: GetLogsResponse, reader: jspb.BinaryReader): GetLogsResponse; +} + +export namespace GetLogsResponse { + export type AsObject = { + } +} + +export class GetTracesRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + hasOptions(): boolean; + clearOptions(): void; + getOptions(): DatasourceOptions | undefined; + setOptions(value?: DatasourceOptions): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetTracesRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetTracesRequest): GetTracesRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetTracesRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetTracesRequest; + static deserializeBinaryFromReader(message: GetTracesRequest, reader: jspb.BinaryReader): GetTracesRequest; +} + +export namespace GetTracesRequest { + export type AsObject = { + name: string, + options?: DatasourceOptions.AsObject, + } +} + +export class GetTracesResponse extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetTracesResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetTracesResponse): GetTracesResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetTracesResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetTracesResponse; + static deserializeBinaryFromReader(message: GetTracesResponse, reader: jspb.BinaryReader): GetTracesResponse; +} + +export namespace GetTracesResponse { + export type AsObject = { + } +} + +export class DatasourceOptions extends jspb.Message { + getTimestart(): number; + setTimestart(value: number): void; + + getTimeend(): number; + setTimeend(value: number): void; + + getResolution(): string; + setResolution(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DatasourceOptions.AsObject; + static toObject(includeInstance: boolean, msg: DatasourceOptions): DatasourceOptions.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: DatasourceOptions, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DatasourceOptions; + static deserializeBinaryFromReader(message: DatasourceOptions, reader: jspb.BinaryReader): DatasourceOptions; +} + +export namespace DatasourceOptions { + export type AsObject = { + timestart: number, + timeend: number, + resolution: string, + } +} + +export class DatasourceMetrics extends jspb.Message { + getLabel(): string; + setLabel(value: string): void; + + getMin(): number; + setMin(value: number): void; + + getMax(): number; + setMax(value: number): void; + + clearDataList(): void; + getDataList(): Array; + setDataList(value: Array): void; + addData(value?: DatasourceMetricsData, index?: number): DatasourceMetricsData; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DatasourceMetrics.AsObject; + static toObject(includeInstance: boolean, msg: DatasourceMetrics): DatasourceMetrics.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: DatasourceMetrics, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DatasourceMetrics; + static deserializeBinaryFromReader(message: DatasourceMetrics, reader: jspb.BinaryReader): DatasourceMetrics; +} + +export namespace DatasourceMetrics { + export type AsObject = { + label: string, + min: number, + max: number, + dataList: Array, + } +} + +export class DatasourceMetricsData extends jspb.Message { + getX(): number; + setX(value: number): void; + + getY(): number; + setY(value: number): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DatasourceMetricsData.AsObject; + static toObject(includeInstance: boolean, msg: DatasourceMetricsData): DatasourceMetricsData.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: DatasourceMetricsData, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DatasourceMetricsData; + static deserializeBinaryFromReader(message: DatasourceMetricsData, reader: jspb.BinaryReader): DatasourceMetricsData; +} + +export namespace DatasourceMetricsData { + export type AsObject = { + x: number, + y: number, + } +} + diff --git a/app/src/generated/proto/datasources_pb.js b/app/src/generated/proto/datasources_pb.js new file mode 100644 index 000000000..e06311c4c --- /dev/null +++ b/app/src/generated/proto/datasources_pb.js @@ -0,0 +1,2614 @@ +// source: datasources.proto +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +var application_pb = require('./application_pb.js'); +goog.object.extend(proto, application_pb); +goog.exportSymbol('proto.datasources.DatasourceMetrics', null, global); +goog.exportSymbol('proto.datasources.DatasourceMetricsData', null, global); +goog.exportSymbol('proto.datasources.DatasourceOptions', null, global); +goog.exportSymbol('proto.datasources.GetDatasourceRequest', null, global); +goog.exportSymbol('proto.datasources.GetDatasourceResponse', null, global); +goog.exportSymbol('proto.datasources.GetLogsRequest', null, global); +goog.exportSymbol('proto.datasources.GetLogsResponse', null, global); +goog.exportSymbol('proto.datasources.GetMetricsRequest', null, global); +goog.exportSymbol('proto.datasources.GetMetricsResponse', null, global); +goog.exportSymbol('proto.datasources.GetTracesRequest', null, global); +goog.exportSymbol('proto.datasources.GetTracesResponse', null, global); +goog.exportSymbol('proto.datasources.GetVariablesRequest', null, global); +goog.exportSymbol('proto.datasources.GetVariablesResponse', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.GetDatasourceRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.datasources.GetDatasourceRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.GetDatasourceRequest.displayName = 'proto.datasources.GetDatasourceRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.GetDatasourceResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.datasources.GetDatasourceResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.GetDatasourceResponse.displayName = 'proto.datasources.GetDatasourceResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.GetVariablesRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.datasources.GetVariablesRequest.repeatedFields_, null); +}; +goog.inherits(proto.datasources.GetVariablesRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.GetVariablesRequest.displayName = 'proto.datasources.GetVariablesRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.GetVariablesResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.datasources.GetVariablesResponse.repeatedFields_, null); +}; +goog.inherits(proto.datasources.GetVariablesResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.GetVariablesResponse.displayName = 'proto.datasources.GetVariablesResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.GetMetricsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.datasources.GetMetricsRequest.repeatedFields_, null); +}; +goog.inherits(proto.datasources.GetMetricsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.GetMetricsRequest.displayName = 'proto.datasources.GetMetricsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.GetMetricsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.datasources.GetMetricsResponse.repeatedFields_, null); +}; +goog.inherits(proto.datasources.GetMetricsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.GetMetricsResponse.displayName = 'proto.datasources.GetMetricsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.GetLogsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.datasources.GetLogsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.GetLogsRequest.displayName = 'proto.datasources.GetLogsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.GetLogsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.datasources.GetLogsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.GetLogsResponse.displayName = 'proto.datasources.GetLogsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.GetTracesRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.datasources.GetTracesRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.GetTracesRequest.displayName = 'proto.datasources.GetTracesRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.GetTracesResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.datasources.GetTracesResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.GetTracesResponse.displayName = 'proto.datasources.GetTracesResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.DatasourceOptions = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.datasources.DatasourceOptions, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.DatasourceOptions.displayName = 'proto.datasources.DatasourceOptions'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.DatasourceMetrics = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.datasources.DatasourceMetrics.repeatedFields_, null); +}; +goog.inherits(proto.datasources.DatasourceMetrics, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.DatasourceMetrics.displayName = 'proto.datasources.DatasourceMetrics'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.datasources.DatasourceMetricsData = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.datasources.DatasourceMetricsData, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.datasources.DatasourceMetricsData.displayName = 'proto.datasources.DatasourceMetricsData'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.GetDatasourceRequest.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.GetDatasourceRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.GetDatasourceRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetDatasourceRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.GetDatasourceRequest} + */ +proto.datasources.GetDatasourceRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.GetDatasourceRequest; + return proto.datasources.GetDatasourceRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.GetDatasourceRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.GetDatasourceRequest} + */ +proto.datasources.GetDatasourceRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.GetDatasourceRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.GetDatasourceRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.GetDatasourceRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetDatasourceRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.datasources.GetDatasourceRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.datasources.GetDatasourceRequest} returns this + */ +proto.datasources.GetDatasourceRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.GetDatasourceResponse.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.GetDatasourceResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.GetDatasourceResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetDatasourceResponse.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + type: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.GetDatasourceResponse} + */ +proto.datasources.GetDatasourceResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.GetDatasourceResponse; + return proto.datasources.GetDatasourceResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.GetDatasourceResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.GetDatasourceResponse} + */ +proto.datasources.GetDatasourceResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.GetDatasourceResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.GetDatasourceResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.GetDatasourceResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetDatasourceResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getType(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.datasources.GetDatasourceResponse.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.datasources.GetDatasourceResponse} returns this + */ +proto.datasources.GetDatasourceResponse.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string type = 2; + * @return {string} + */ +proto.datasources.GetDatasourceResponse.prototype.getType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.datasources.GetDatasourceResponse} returns this + */ +proto.datasources.GetDatasourceResponse.prototype.setType = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.datasources.GetVariablesRequest.repeatedFields_ = [3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.GetVariablesRequest.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.GetVariablesRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.GetVariablesRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetVariablesRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + options: (f = msg.getOptions()) && proto.datasources.DatasourceOptions.toObject(includeInstance, f), + variablesList: jspb.Message.toObjectList(msg.getVariablesList(), + application_pb.ApplicationMetricsVariable.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.GetVariablesRequest} + */ +proto.datasources.GetVariablesRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.GetVariablesRequest; + return proto.datasources.GetVariablesRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.GetVariablesRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.GetVariablesRequest} + */ +proto.datasources.GetVariablesRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = new proto.datasources.DatasourceOptions; + reader.readMessage(value,proto.datasources.DatasourceOptions.deserializeBinaryFromReader); + msg.setOptions(value); + break; + case 3: + var value = new application_pb.ApplicationMetricsVariable; + reader.readMessage(value,application_pb.ApplicationMetricsVariable.deserializeBinaryFromReader); + msg.addVariables(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.GetVariablesRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.GetVariablesRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.GetVariablesRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetVariablesRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.datasources.DatasourceOptions.serializeBinaryToWriter + ); + } + f = message.getVariablesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 3, + f, + application_pb.ApplicationMetricsVariable.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.datasources.GetVariablesRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.datasources.GetVariablesRequest} returns this + */ +proto.datasources.GetVariablesRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional DatasourceOptions options = 2; + * @return {?proto.datasources.DatasourceOptions} + */ +proto.datasources.GetVariablesRequest.prototype.getOptions = function() { + return /** @type{?proto.datasources.DatasourceOptions} */ ( + jspb.Message.getWrapperField(this, proto.datasources.DatasourceOptions, 2)); +}; + + +/** + * @param {?proto.datasources.DatasourceOptions|undefined} value + * @return {!proto.datasources.GetVariablesRequest} returns this +*/ +proto.datasources.GetVariablesRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.datasources.GetVariablesRequest} returns this + */ +proto.datasources.GetVariablesRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.datasources.GetVariablesRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * repeated application.ApplicationMetricsVariable variables = 3; + * @return {!Array} + */ +proto.datasources.GetVariablesRequest.prototype.getVariablesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, application_pb.ApplicationMetricsVariable, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.datasources.GetVariablesRequest} returns this +*/ +proto.datasources.GetVariablesRequest.prototype.setVariablesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 3, value); +}; + + +/** + * @param {!proto.application.ApplicationMetricsVariable=} opt_value + * @param {number=} opt_index + * @return {!proto.application.ApplicationMetricsVariable} + */ +proto.datasources.GetVariablesRequest.prototype.addVariables = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.application.ApplicationMetricsVariable, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.datasources.GetVariablesRequest} returns this + */ +proto.datasources.GetVariablesRequest.prototype.clearVariablesList = function() { + return this.setVariablesList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.datasources.GetVariablesResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.GetVariablesResponse.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.GetVariablesResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.GetVariablesResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetVariablesResponse.toObject = function(includeInstance, msg) { + var f, obj = { + variablesList: jspb.Message.toObjectList(msg.getVariablesList(), + application_pb.ApplicationMetricsVariable.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.GetVariablesResponse} + */ +proto.datasources.GetVariablesResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.GetVariablesResponse; + return proto.datasources.GetVariablesResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.GetVariablesResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.GetVariablesResponse} + */ +proto.datasources.GetVariablesResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new application_pb.ApplicationMetricsVariable; + reader.readMessage(value,application_pb.ApplicationMetricsVariable.deserializeBinaryFromReader); + msg.addVariables(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.GetVariablesResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.GetVariablesResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.GetVariablesResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetVariablesResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getVariablesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + application_pb.ApplicationMetricsVariable.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated application.ApplicationMetricsVariable variables = 1; + * @return {!Array} + */ +proto.datasources.GetVariablesResponse.prototype.getVariablesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, application_pb.ApplicationMetricsVariable, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.datasources.GetVariablesResponse} returns this +*/ +proto.datasources.GetVariablesResponse.prototype.setVariablesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.application.ApplicationMetricsVariable=} opt_value + * @param {number=} opt_index + * @return {!proto.application.ApplicationMetricsVariable} + */ +proto.datasources.GetVariablesResponse.prototype.addVariables = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.application.ApplicationMetricsVariable, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.datasources.GetVariablesResponse} returns this + */ +proto.datasources.GetVariablesResponse.prototype.clearVariablesList = function() { + return this.setVariablesList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.datasources.GetMetricsRequest.repeatedFields_ = [3,4]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.GetMetricsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.GetMetricsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.GetMetricsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetMetricsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + options: (f = msg.getOptions()) && proto.datasources.DatasourceOptions.toObject(includeInstance, f), + variablesList: jspb.Message.toObjectList(msg.getVariablesList(), + application_pb.ApplicationMetricsVariable.toObject, includeInstance), + queriesList: jspb.Message.toObjectList(msg.getQueriesList(), + application_pb.ApplicationMetricsQuery.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.GetMetricsRequest} + */ +proto.datasources.GetMetricsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.GetMetricsRequest; + return proto.datasources.GetMetricsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.GetMetricsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.GetMetricsRequest} + */ +proto.datasources.GetMetricsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = new proto.datasources.DatasourceOptions; + reader.readMessage(value,proto.datasources.DatasourceOptions.deserializeBinaryFromReader); + msg.setOptions(value); + break; + case 3: + var value = new application_pb.ApplicationMetricsVariable; + reader.readMessage(value,application_pb.ApplicationMetricsVariable.deserializeBinaryFromReader); + msg.addVariables(value); + break; + case 4: + var value = new application_pb.ApplicationMetricsQuery; + reader.readMessage(value,application_pb.ApplicationMetricsQuery.deserializeBinaryFromReader); + msg.addQueries(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.GetMetricsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.GetMetricsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.GetMetricsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetMetricsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.datasources.DatasourceOptions.serializeBinaryToWriter + ); + } + f = message.getVariablesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 3, + f, + application_pb.ApplicationMetricsVariable.serializeBinaryToWriter + ); + } + f = message.getQueriesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 4, + f, + application_pb.ApplicationMetricsQuery.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.datasources.GetMetricsRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.datasources.GetMetricsRequest} returns this + */ +proto.datasources.GetMetricsRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional DatasourceOptions options = 2; + * @return {?proto.datasources.DatasourceOptions} + */ +proto.datasources.GetMetricsRequest.prototype.getOptions = function() { + return /** @type{?proto.datasources.DatasourceOptions} */ ( + jspb.Message.getWrapperField(this, proto.datasources.DatasourceOptions, 2)); +}; + + +/** + * @param {?proto.datasources.DatasourceOptions|undefined} value + * @return {!proto.datasources.GetMetricsRequest} returns this +*/ +proto.datasources.GetMetricsRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.datasources.GetMetricsRequest} returns this + */ +proto.datasources.GetMetricsRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.datasources.GetMetricsRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * repeated application.ApplicationMetricsVariable variables = 3; + * @return {!Array} + */ +proto.datasources.GetMetricsRequest.prototype.getVariablesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, application_pb.ApplicationMetricsVariable, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.datasources.GetMetricsRequest} returns this +*/ +proto.datasources.GetMetricsRequest.prototype.setVariablesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 3, value); +}; + + +/** + * @param {!proto.application.ApplicationMetricsVariable=} opt_value + * @param {number=} opt_index + * @return {!proto.application.ApplicationMetricsVariable} + */ +proto.datasources.GetMetricsRequest.prototype.addVariables = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.application.ApplicationMetricsVariable, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.datasources.GetMetricsRequest} returns this + */ +proto.datasources.GetMetricsRequest.prototype.clearVariablesList = function() { + return this.setVariablesList([]); +}; + + +/** + * repeated application.ApplicationMetricsQuery queries = 4; + * @return {!Array} + */ +proto.datasources.GetMetricsRequest.prototype.getQueriesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, application_pb.ApplicationMetricsQuery, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.datasources.GetMetricsRequest} returns this +*/ +proto.datasources.GetMetricsRequest.prototype.setQueriesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 4, value); +}; + + +/** + * @param {!proto.application.ApplicationMetricsQuery=} opt_value + * @param {number=} opt_index + * @return {!proto.application.ApplicationMetricsQuery} + */ +proto.datasources.GetMetricsRequest.prototype.addQueries = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.application.ApplicationMetricsQuery, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.datasources.GetMetricsRequest} returns this + */ +proto.datasources.GetMetricsRequest.prototype.clearQueriesList = function() { + return this.setQueriesList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.datasources.GetMetricsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.GetMetricsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.GetMetricsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.GetMetricsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetMetricsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + metricsList: jspb.Message.toObjectList(msg.getMetricsList(), + proto.datasources.DatasourceMetrics.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.GetMetricsResponse} + */ +proto.datasources.GetMetricsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.GetMetricsResponse; + return proto.datasources.GetMetricsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.GetMetricsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.GetMetricsResponse} + */ +proto.datasources.GetMetricsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.datasources.DatasourceMetrics; + reader.readMessage(value,proto.datasources.DatasourceMetrics.deserializeBinaryFromReader); + msg.addMetrics(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.GetMetricsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.GetMetricsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.GetMetricsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetMetricsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getMetricsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.datasources.DatasourceMetrics.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated DatasourceMetrics metrics = 1; + * @return {!Array} + */ +proto.datasources.GetMetricsResponse.prototype.getMetricsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.datasources.DatasourceMetrics, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.datasources.GetMetricsResponse} returns this +*/ +proto.datasources.GetMetricsResponse.prototype.setMetricsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.datasources.DatasourceMetrics=} opt_value + * @param {number=} opt_index + * @return {!proto.datasources.DatasourceMetrics} + */ +proto.datasources.GetMetricsResponse.prototype.addMetrics = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.datasources.DatasourceMetrics, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.datasources.GetMetricsResponse} returns this + */ +proto.datasources.GetMetricsResponse.prototype.clearMetricsList = function() { + return this.setMetricsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.GetLogsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.GetLogsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.GetLogsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetLogsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + options: (f = msg.getOptions()) && proto.datasources.DatasourceOptions.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.GetLogsRequest} + */ +proto.datasources.GetLogsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.GetLogsRequest; + return proto.datasources.GetLogsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.GetLogsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.GetLogsRequest} + */ +proto.datasources.GetLogsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = new proto.datasources.DatasourceOptions; + reader.readMessage(value,proto.datasources.DatasourceOptions.deserializeBinaryFromReader); + msg.setOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.GetLogsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.GetLogsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.GetLogsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetLogsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.datasources.DatasourceOptions.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.datasources.GetLogsRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.datasources.GetLogsRequest} returns this + */ +proto.datasources.GetLogsRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional DatasourceOptions options = 2; + * @return {?proto.datasources.DatasourceOptions} + */ +proto.datasources.GetLogsRequest.prototype.getOptions = function() { + return /** @type{?proto.datasources.DatasourceOptions} */ ( + jspb.Message.getWrapperField(this, proto.datasources.DatasourceOptions, 2)); +}; + + +/** + * @param {?proto.datasources.DatasourceOptions|undefined} value + * @return {!proto.datasources.GetLogsRequest} returns this +*/ +proto.datasources.GetLogsRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.datasources.GetLogsRequest} returns this + */ +proto.datasources.GetLogsRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.datasources.GetLogsRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.GetLogsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.GetLogsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.GetLogsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetLogsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.GetLogsResponse} + */ +proto.datasources.GetLogsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.GetLogsResponse; + return proto.datasources.GetLogsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.GetLogsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.GetLogsResponse} + */ +proto.datasources.GetLogsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.GetLogsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.GetLogsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.GetLogsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetLogsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.GetTracesRequest.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.GetTracesRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.GetTracesRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetTracesRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + options: (f = msg.getOptions()) && proto.datasources.DatasourceOptions.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.GetTracesRequest} + */ +proto.datasources.GetTracesRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.GetTracesRequest; + return proto.datasources.GetTracesRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.GetTracesRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.GetTracesRequest} + */ +proto.datasources.GetTracesRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = new proto.datasources.DatasourceOptions; + reader.readMessage(value,proto.datasources.DatasourceOptions.deserializeBinaryFromReader); + msg.setOptions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.GetTracesRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.GetTracesRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.GetTracesRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetTracesRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getOptions(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.datasources.DatasourceOptions.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.datasources.GetTracesRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.datasources.GetTracesRequest} returns this + */ +proto.datasources.GetTracesRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional DatasourceOptions options = 2; + * @return {?proto.datasources.DatasourceOptions} + */ +proto.datasources.GetTracesRequest.prototype.getOptions = function() { + return /** @type{?proto.datasources.DatasourceOptions} */ ( + jspb.Message.getWrapperField(this, proto.datasources.DatasourceOptions, 2)); +}; + + +/** + * @param {?proto.datasources.DatasourceOptions|undefined} value + * @return {!proto.datasources.GetTracesRequest} returns this +*/ +proto.datasources.GetTracesRequest.prototype.setOptions = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.datasources.GetTracesRequest} returns this + */ +proto.datasources.GetTracesRequest.prototype.clearOptions = function() { + return this.setOptions(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.datasources.GetTracesRequest.prototype.hasOptions = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.GetTracesResponse.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.GetTracesResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.GetTracesResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetTracesResponse.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.GetTracesResponse} + */ +proto.datasources.GetTracesResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.GetTracesResponse; + return proto.datasources.GetTracesResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.GetTracesResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.GetTracesResponse} + */ +proto.datasources.GetTracesResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.GetTracesResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.GetTracesResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.GetTracesResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.GetTracesResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.DatasourceOptions.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.DatasourceOptions.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.DatasourceOptions} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.DatasourceOptions.toObject = function(includeInstance, msg) { + var f, obj = { + timestart: jspb.Message.getFieldWithDefault(msg, 1, 0), + timeend: jspb.Message.getFieldWithDefault(msg, 2, 0), + resolution: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.DatasourceOptions} + */ +proto.datasources.DatasourceOptions.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.DatasourceOptions; + return proto.datasources.DatasourceOptions.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.DatasourceOptions} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.DatasourceOptions} + */ +proto.datasources.DatasourceOptions.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setTimestart(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setTimeend(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setResolution(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.DatasourceOptions.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.DatasourceOptions.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.DatasourceOptions} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.DatasourceOptions.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTimestart(); + if (f !== 0) { + writer.writeInt64( + 1, + f + ); + } + f = message.getTimeend(); + if (f !== 0) { + writer.writeInt64( + 2, + f + ); + } + f = message.getResolution(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional int64 timeStart = 1; + * @return {number} + */ +proto.datasources.DatasourceOptions.prototype.getTimestart = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.datasources.DatasourceOptions} returns this + */ +proto.datasources.DatasourceOptions.prototype.setTimestart = function(value) { + return jspb.Message.setProto3IntField(this, 1, value); +}; + + +/** + * optional int64 timeEnd = 2; + * @return {number} + */ +proto.datasources.DatasourceOptions.prototype.getTimeend = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.datasources.DatasourceOptions} returns this + */ +proto.datasources.DatasourceOptions.prototype.setTimeend = function(value) { + return jspb.Message.setProto3IntField(this, 2, value); +}; + + +/** + * optional string resolution = 3; + * @return {string} + */ +proto.datasources.DatasourceOptions.prototype.getResolution = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.datasources.DatasourceOptions} returns this + */ +proto.datasources.DatasourceOptions.prototype.setResolution = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.datasources.DatasourceMetrics.repeatedFields_ = [4]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.DatasourceMetrics.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.DatasourceMetrics.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.DatasourceMetrics} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.DatasourceMetrics.toObject = function(includeInstance, msg) { + var f, obj = { + label: jspb.Message.getFieldWithDefault(msg, 1, ""), + min: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0), + max: jspb.Message.getFloatingPointFieldWithDefault(msg, 3, 0.0), + dataList: jspb.Message.toObjectList(msg.getDataList(), + proto.datasources.DatasourceMetricsData.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.DatasourceMetrics} + */ +proto.datasources.DatasourceMetrics.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.DatasourceMetrics; + return proto.datasources.DatasourceMetrics.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.DatasourceMetrics} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.DatasourceMetrics} + */ +proto.datasources.DatasourceMetrics.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setLabel(value); + break; + case 2: + var value = /** @type {number} */ (reader.readDouble()); + msg.setMin(value); + break; + case 3: + var value = /** @type {number} */ (reader.readDouble()); + msg.setMax(value); + break; + case 4: + var value = new proto.datasources.DatasourceMetricsData; + reader.readMessage(value,proto.datasources.DatasourceMetricsData.deserializeBinaryFromReader); + msg.addData(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.DatasourceMetrics.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.DatasourceMetrics.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.DatasourceMetrics} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.DatasourceMetrics.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getLabel(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getMin(); + if (f !== 0.0) { + writer.writeDouble( + 2, + f + ); + } + f = message.getMax(); + if (f !== 0.0) { + writer.writeDouble( + 3, + f + ); + } + f = message.getDataList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 4, + f, + proto.datasources.DatasourceMetricsData.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string label = 1; + * @return {string} + */ +proto.datasources.DatasourceMetrics.prototype.getLabel = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.datasources.DatasourceMetrics} returns this + */ +proto.datasources.DatasourceMetrics.prototype.setLabel = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional double min = 2; + * @return {number} + */ +proto.datasources.DatasourceMetrics.prototype.getMin = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.datasources.DatasourceMetrics} returns this + */ +proto.datasources.DatasourceMetrics.prototype.setMin = function(value) { + return jspb.Message.setProto3FloatField(this, 2, value); +}; + + +/** + * optional double max = 3; + * @return {number} + */ +proto.datasources.DatasourceMetrics.prototype.getMax = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 3, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.datasources.DatasourceMetrics} returns this + */ +proto.datasources.DatasourceMetrics.prototype.setMax = function(value) { + return jspb.Message.setProto3FloatField(this, 3, value); +}; + + +/** + * repeated DatasourceMetricsData data = 4; + * @return {!Array} + */ +proto.datasources.DatasourceMetrics.prototype.getDataList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.datasources.DatasourceMetricsData, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.datasources.DatasourceMetrics} returns this +*/ +proto.datasources.DatasourceMetrics.prototype.setDataList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 4, value); +}; + + +/** + * @param {!proto.datasources.DatasourceMetricsData=} opt_value + * @param {number=} opt_index + * @return {!proto.datasources.DatasourceMetricsData} + */ +proto.datasources.DatasourceMetrics.prototype.addData = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.datasources.DatasourceMetricsData, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.datasources.DatasourceMetrics} returns this + */ +proto.datasources.DatasourceMetrics.prototype.clearDataList = function() { + return this.setDataList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.datasources.DatasourceMetricsData.prototype.toObject = function(opt_includeInstance) { + return proto.datasources.DatasourceMetricsData.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.datasources.DatasourceMetricsData} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.DatasourceMetricsData.toObject = function(includeInstance, msg) { + var f, obj = { + x: jspb.Message.getFieldWithDefault(msg, 1, 0), + y: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.datasources.DatasourceMetricsData} + */ +proto.datasources.DatasourceMetricsData.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.datasources.DatasourceMetricsData; + return proto.datasources.DatasourceMetricsData.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.datasources.DatasourceMetricsData} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.datasources.DatasourceMetricsData} + */ +proto.datasources.DatasourceMetricsData.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setX(value); + break; + case 2: + var value = /** @type {number} */ (reader.readDouble()); + msg.setY(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.datasources.DatasourceMetricsData.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.datasources.DatasourceMetricsData.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.datasources.DatasourceMetricsData} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.datasources.DatasourceMetricsData.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getX(); + if (f !== 0) { + writer.writeInt64( + 1, + f + ); + } + f = message.getY(); + if (f !== 0.0) { + writer.writeDouble( + 2, + f + ); + } +}; + + +/** + * optional int64 x = 1; + * @return {number} + */ +proto.datasources.DatasourceMetricsData.prototype.getX = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.datasources.DatasourceMetricsData} returns this + */ +proto.datasources.DatasourceMetricsData.prototype.setX = function(value) { + return jspb.Message.setProto3IntField(this, 1, value); +}; + + +/** + * optional double y = 2; + * @return {number} + */ +proto.datasources.DatasourceMetricsData.prototype.getY = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.datasources.DatasourceMetricsData} returns this + */ +proto.datasources.DatasourceMetricsData.prototype.setY = function(value) { + return jspb.Message.setProto3FloatField(this, 2, value); +}; + + +goog.object.extend(exports, proto.datasources); diff --git a/app/src/generated/proto/datasources_pb_service.d.ts b/app/src/generated/proto/datasources_pb_service.d.ts new file mode 100644 index 000000000..c3d5271aa --- /dev/null +++ b/app/src/generated/proto/datasources_pb_service.d.ts @@ -0,0 +1,139 @@ +// package: datasources +// file: datasources.proto + +import * as datasources_pb from "./datasources_pb"; +import {grpc} from "@improbable-eng/grpc-web"; + +type DatasourcesGetDatasource = { + readonly methodName: string; + readonly service: typeof Datasources; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof datasources_pb.GetDatasourceRequest; + readonly responseType: typeof datasources_pb.GetDatasourceResponse; +}; + +type DatasourcesGetVariables = { + readonly methodName: string; + readonly service: typeof Datasources; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof datasources_pb.GetVariablesRequest; + readonly responseType: typeof datasources_pb.GetVariablesResponse; +}; + +type DatasourcesGetMetrics = { + readonly methodName: string; + readonly service: typeof Datasources; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof datasources_pb.GetMetricsRequest; + readonly responseType: typeof datasources_pb.GetMetricsResponse; +}; + +type DatasourcesGetLogs = { + readonly methodName: string; + readonly service: typeof Datasources; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof datasources_pb.GetLogsRequest; + readonly responseType: typeof datasources_pb.GetLogsResponse; +}; + +type DatasourcesGetTraces = { + readonly methodName: string; + readonly service: typeof Datasources; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof datasources_pb.GetTracesRequest; + readonly responseType: typeof datasources_pb.GetTracesResponse; +}; + +export class Datasources { + static readonly serviceName: string; + static readonly GetDatasource: DatasourcesGetDatasource; + static readonly GetVariables: DatasourcesGetVariables; + static readonly GetMetrics: DatasourcesGetMetrics; + static readonly GetLogs: DatasourcesGetLogs; + static readonly GetTraces: DatasourcesGetTraces; +} + +export type ServiceError = { message: string, code: number; metadata: grpc.Metadata } +export type Status = { details: string, code: number; metadata: grpc.Metadata } + +interface UnaryResponse { + cancel(): void; +} +interface ResponseStream { + cancel(): void; + on(type: 'data', handler: (message: T) => void): ResponseStream; + on(type: 'end', handler: (status?: Status) => void): ResponseStream; + on(type: 'status', handler: (status: Status) => void): ResponseStream; +} +interface RequestStream { + write(message: T): RequestStream; + end(): void; + cancel(): void; + on(type: 'end', handler: (status?: Status) => void): RequestStream; + on(type: 'status', handler: (status: Status) => void): RequestStream; +} +interface BidirectionalStream { + write(message: ReqT): BidirectionalStream; + end(): void; + cancel(): void; + on(type: 'data', handler: (message: ResT) => void): BidirectionalStream; + on(type: 'end', handler: (status?: Status) => void): BidirectionalStream; + on(type: 'status', handler: (status: Status) => void): BidirectionalStream; +} + +export class DatasourcesClient { + readonly serviceHost: string; + + constructor(serviceHost: string, options?: grpc.RpcOptions); + getDatasource( + requestMessage: datasources_pb.GetDatasourceRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: datasources_pb.GetDatasourceResponse|null) => void + ): UnaryResponse; + getDatasource( + requestMessage: datasources_pb.GetDatasourceRequest, + callback: (error: ServiceError|null, responseMessage: datasources_pb.GetDatasourceResponse|null) => void + ): UnaryResponse; + getVariables( + requestMessage: datasources_pb.GetVariablesRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: datasources_pb.GetVariablesResponse|null) => void + ): UnaryResponse; + getVariables( + requestMessage: datasources_pb.GetVariablesRequest, + callback: (error: ServiceError|null, responseMessage: datasources_pb.GetVariablesResponse|null) => void + ): UnaryResponse; + getMetrics( + requestMessage: datasources_pb.GetMetricsRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: datasources_pb.GetMetricsResponse|null) => void + ): UnaryResponse; + getMetrics( + requestMessage: datasources_pb.GetMetricsRequest, + callback: (error: ServiceError|null, responseMessage: datasources_pb.GetMetricsResponse|null) => void + ): UnaryResponse; + getLogs( + requestMessage: datasources_pb.GetLogsRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: datasources_pb.GetLogsResponse|null) => void + ): UnaryResponse; + getLogs( + requestMessage: datasources_pb.GetLogsRequest, + callback: (error: ServiceError|null, responseMessage: datasources_pb.GetLogsResponse|null) => void + ): UnaryResponse; + getTraces( + requestMessage: datasources_pb.GetTracesRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: datasources_pb.GetTracesResponse|null) => void + ): UnaryResponse; + getTraces( + requestMessage: datasources_pb.GetTracesRequest, + callback: (error: ServiceError|null, responseMessage: datasources_pb.GetTracesResponse|null) => void + ): UnaryResponse; +} + diff --git a/app/src/generated/proto/datasources_pb_service.js b/app/src/generated/proto/datasources_pb_service.js new file mode 100644 index 000000000..919f3c3a4 --- /dev/null +++ b/app/src/generated/proto/datasources_pb_service.js @@ -0,0 +1,221 @@ +// package: datasources +// file: datasources.proto + +var datasources_pb = require("./datasources_pb"); +var grpc = require("@improbable-eng/grpc-web").grpc; + +var Datasources = (function () { + function Datasources() {} + Datasources.serviceName = "datasources.Datasources"; + return Datasources; +}()); + +Datasources.GetDatasource = { + methodName: "GetDatasource", + service: Datasources, + requestStream: false, + responseStream: false, + requestType: datasources_pb.GetDatasourceRequest, + responseType: datasources_pb.GetDatasourceResponse +}; + +Datasources.GetVariables = { + methodName: "GetVariables", + service: Datasources, + requestStream: false, + responseStream: false, + requestType: datasources_pb.GetVariablesRequest, + responseType: datasources_pb.GetVariablesResponse +}; + +Datasources.GetMetrics = { + methodName: "GetMetrics", + service: Datasources, + requestStream: false, + responseStream: false, + requestType: datasources_pb.GetMetricsRequest, + responseType: datasources_pb.GetMetricsResponse +}; + +Datasources.GetLogs = { + methodName: "GetLogs", + service: Datasources, + requestStream: false, + responseStream: false, + requestType: datasources_pb.GetLogsRequest, + responseType: datasources_pb.GetLogsResponse +}; + +Datasources.GetTraces = { + methodName: "GetTraces", + service: Datasources, + requestStream: false, + responseStream: false, + requestType: datasources_pb.GetTracesRequest, + responseType: datasources_pb.GetTracesResponse +}; + +exports.Datasources = Datasources; + +function DatasourcesClient(serviceHost, options) { + this.serviceHost = serviceHost; + this.options = options || {}; +} + +DatasourcesClient.prototype.getDatasource = function getDatasource(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(Datasources.GetDatasource, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +DatasourcesClient.prototype.getVariables = function getVariables(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(Datasources.GetVariables, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +DatasourcesClient.prototype.getMetrics = function getMetrics(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(Datasources.GetMetrics, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +DatasourcesClient.prototype.getLogs = function getLogs(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(Datasources.GetLogs, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +DatasourcesClient.prototype.getTraces = function getTraces(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(Datasources.GetTraces, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +exports.DatasourcesClient = DatasourcesClient; + diff --git a/app/src/utils/helpers.ts b/app/src/utils/helpers.ts index 02bf9ede4..f6d1461cc 100644 --- a/app/src/utils/helpers.ts +++ b/app/src/utils/helpers.ts @@ -20,3 +20,11 @@ export const timeDifference = (current: number, previous: number): string => { return Math.round(elapsed / msPerYear) + 'y'; } }; + +// formatTime formats an given timestamp in a uniform way accross the kobs UI. +export const formatTime = (timestamp: number): string => { + const d = new Date(timestamp * 1000); + return `${d.getFullYear()}-${('0' + (d.getMonth() + 1)).slice(-2)}-${('0' + d.getDate()).slice(-2)} ${( + '0' + d.getHours() + ).slice(-2)}:${('0' + d.getMinutes()).slice(-2)}:${('0' + d.getSeconds()).slice(-2)}`; +}; diff --git a/app/src/utils/proto.ts b/app/src/utils/proto.ts new file mode 100644 index 000000000..271667c56 --- /dev/null +++ b/app/src/utils/proto.ts @@ -0,0 +1,82 @@ +import { ApplicationMetricsVariable } from 'generated/proto/application_pb'; +import { DatasourceOptions } from 'generated/proto/datasources_pb'; + +// IDatasourceOptions must implement the DatasourceOptions message format from the datasources.proto file. It is used, +// to enable the usage of DatasourceOptions message formate within a React State. +export interface IDatasourceOptions { + resolution: string; + timeEnd: number; + timeStart: number; +} + +// convertDatasourceOptionsToProto converts a variable which implements the IDatasourceOptions interface to the +// DatasourceOptions message, so that we can use the options within a gRPC call. +export const convertDatasourceOptionsToProto = (options: IDatasourceOptions): DatasourceOptions => { + const datasourceOptions = new DatasourceOptions(); + datasourceOptions.setTimestart(options.timeStart); + datasourceOptions.setTimeend(options.timeEnd); + datasourceOptions.setResolution(options.resolution); + + return datasourceOptions; +}; + +// IApplicationMetricsVariable must implement the ApplicationMetricsVariable message format from the application.proto +// file. It is used, to allow the usage of the ApplicationMetricsVariable format via useState. +export interface IApplicationMetricsVariable { + allowAll: boolean; + label: string; + name: string; + query: string; + value: string; + values: string[]; +} + +// convertApplicationMetricsVariablesToProto converts an array of type IApplicationMetricsVariable to the corresponding +// protobuf message formate ApplicationMetricsVariable. +export const convertApplicationMetricsVariablesToProto = ( + variables: IApplicationMetricsVariable[], +): ApplicationMetricsVariable[] => { + const applicationMetricsVariables: ApplicationMetricsVariable[] = []; + + for (let i = 0; i < variables.length; i++) { + const applicationMetricsVariable = new ApplicationMetricsVariable(); + applicationMetricsVariable.setName(variables[i].name); + applicationMetricsVariable.setLabel(variables[i].label); + applicationMetricsVariable.setQuery(variables[i].query); + applicationMetricsVariable.setAllowall(variables[i].allowAll); + applicationMetricsVariable.setValuesList(variables[i].values); + applicationMetricsVariable.setValue(variables[i].value); + + applicationMetricsVariables.push(applicationMetricsVariable); + } + + return applicationMetricsVariables; +}; + +// convertApplicationMetricsVariablesFromProto converts the protobuf message formate ApplicationMetricsVariable to an +// array of type IApplicationMetricsVariable. +export const convertApplicationMetricsVariablesFromProto = ( + variables: ApplicationMetricsVariable[], +): IApplicationMetricsVariable[] => { + const applicationMetricsVariables: IApplicationMetricsVariable[] = []; + + for (let i = 0; i < variables.length; i++) { + applicationMetricsVariables.push({ + allowAll: variables[i].getAllowall(), + label: variables[i].getLabel(), + name: variables[i].getName(), + query: variables[i].getQuery(), + value: variables[i].getValue(), + values: variables[i].getValuesList(), + }); + } + + return applicationMetricsVariables; +}; + +// IDatasourceMetricsData must implement the DatasourceMetricsData message format from the datasources.proto file. It is +// used within the charts to access the x and y points of an time series. +export interface IDatasourceMetricsData { + x: number; + y: number; +} diff --git a/app/yarn.lock b/app/yarn.lock index 5d9ba0e30..39d1de592 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -1456,6 +1456,38 @@ resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.80.3.tgz#fa979eb34f14bbc705f8354b15c3c81df1d36340" integrity sha512-YLUk4L6iCBXql92YP6zHg0FdlnEkd5/3V+uz/A3UoBuuDdEoyDpx4M/Tf56R7IXmYiRaHE1mToJHPDYypIlnmw== +"@patternfly/patternfly@4.87.3": + version "4.87.3" + resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.87.3.tgz#eb2e9b22aa8f6f106580e7451bf204a06cb9949e" + integrity sha512-hDNMPa7B1zKD8LWFZO4SS5hC/N+yvuci2sAn8HJd+EIbAvbMAUkRsyZ0/XO3BG3RVtpSlgq7q8x1pAHC/FTFuA== + +"@patternfly/react-charts@^6.14.2": + version "6.14.2" + resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.14.2.tgz#20d5b98af4504c2e2e38e4836088dfa54fb324cf" + integrity sha512-QfO+wJRCj6Wof/18KWpY0XmZKXhv4y2QsmLtjMoGtZbbjHtEUwXA+lYc4agj9k+CEpm+3xXR2GOoNSwaSZN3RA== + dependencies: + "@patternfly/patternfly" "4.87.3" + "@patternfly/react-styles" "^4.8.2" + "@patternfly/react-tokens" "^4.10.2" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.19" + tslib "1.13.0" + victory-area "^35.4.4" + victory-axis "^35.4.4" + victory-bar "^35.4.4" + victory-chart "^35.4.4" + victory-core "^35.4.4" + victory-create-container "^35.4.4" + victory-group "^35.4.4" + victory-legend "^35.4.4" + victory-line "^35.4.4" + victory-pie "^35.4.4" + victory-scatter "^35.4.4" + victory-stack "^35.4.4" + victory-tooltip "^35.4.4" + victory-voronoi-container "^35.4.4" + victory-zoom-container "^35.4.4" + "@patternfly/react-core@^4.90.2": version "4.90.2" resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.90.2.tgz#d03346d8f3a8d785e076b93df296ce4fa79d9dbe" @@ -1479,6 +1511,11 @@ resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.7.29.tgz#a11cc8a9d4c4a0ac9c6bc298a47477473eaa430c" integrity sha512-eAO9xh2+IQHIBCihmwNuDVCeAWhGXIhbUNJEwZzvevYuH4Pnl0X8YaWoYmM2ZfL8ZdagRTLvjGW+hoZGkUyCBQ== +"@patternfly/react-styles@^4.8.2": + version "4.8.2" + resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.8.2.tgz#4796a77b658541d75d616e2e2a00fc5d7ec42bc7" + integrity sha512-JLVZTUYa8LIyASLvfiAgByLgNcg+OPkuXSh8Za5KdjqrBaNVQ3Wlul+oWQGwlGjbq7KSiyDg1oWemxOuLJH1VQ== + "@patternfly/react-table@^4.20.15": version "4.20.15" resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.20.15.tgz#f40ea3eb47b7d05dbae2e7d7668209fe08c111af" @@ -1492,6 +1529,11 @@ lodash "^4.17.19" tslib "1.13.0" +"@patternfly/react-tokens@^4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.10.2.tgz#fd0054379ac81c8490b901b5b8fb408263ce91fe" + integrity sha512-/G1MENPxVY7X9UUuieO79yfjJ3g6KjBUBsBQVKOQplCxuvcRCF1MpmQKAxfg9Yb804MbPY+IVzVD3c4u9S3Iww== + "@patternfly/react-tokens@^4.9.26": version "4.9.26" resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.9.26.tgz#320759bceef71ff752d79acea278c6cdada9e51f" @@ -4085,6 +4127,80 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= +d3-array@^1.2.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + +d3-collection@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== + +d3-color@1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" + integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== + +d3-ease@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.7.tgz#9a834890ef8b8ae8c558b2fe55bd57f5993b85e2" + integrity sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ== + +d3-format@1: + version "1.4.5" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" + integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== + +d3-interpolate@1, d3-interpolate@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" + integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== + dependencies: + d3-color "1" + +d3-path@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + +d3-scale@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d" + integrity sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw== + dependencies: + d3-array "^1.2.0" + d3-collection "1" + d3-color "1" + d3-format "1" + d3-interpolate "1" + d3-time "1" + d3-time-format "2" + +d3-shape@^1.0.0, d3-shape@^1.2.0: + version "1.3.7" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + +d3-time-format@2: + version "2.3.0" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.3.0.tgz#107bdc028667788a8924ba040faf1fbccd5a7850" + integrity sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ== + dependencies: + d3-time "1" + +d3-time@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" + integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== + +d3-timer@^1.0.0: + version "1.0.10" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" + integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw== + d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -4239,6 +4355,18 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +delaunator@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-4.0.1.tgz#3d779687f57919a7a418f8ab947d3bddb6846957" + integrity sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag== + +delaunay-find@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/delaunay-find/-/delaunay-find-0.0.5.tgz#5fb37e6509da934881b4b16c08898ac89862c097" + integrity sha512-7yAJ/wmKWj3SgqjtkGqT/RCwI0HWAo5YnHMoF5nYXD8cdci+YSo23iPmgrZUNOpDxRWN91PqxUvMMr2lKpjr+w== + dependencies: + delaunator "^4.0.0" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -5822,7 +5950,7 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.1.0: +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -7139,7 +7267,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -9323,7 +9451,7 @@ prop-types-extra@^1.1.0: react-is "^16.3.2" warning "^4.0.0" -prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -9548,6 +9676,11 @@ react-error-overlay@^6.0.9: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== +react-fast-compare@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -11576,6 +11709,213 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +victory-area@^35.4.4: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-area/-/victory-area-35.4.8.tgz#6c46a7871fc370257d49dddd6cba24306eb31aed" + integrity sha512-eNr6ZFonAhCHoCetA9g5fJxFn+g+5YpgBmlbxwzE7kgKg+jH7+ViD/R2aNcY6aoljiRyE6DbSVAxDiksPp0q1A== + dependencies: + d3-shape "^1.2.0" + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-axis@^35.4.4, victory-axis@^35.4.8: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-axis/-/victory-axis-35.4.8.tgz#0a7fa1889d8a6fd9bb6b50f49ef3097b2e2740be" + integrity sha512-+DcevVoIL6tjbTHwGZ2DzZiRl+Pwwowuf99mL10ECRzY+Iuc+s+x4o3gpw/HWJ/dGOyD+kPKPcwilmaQLnEOhQ== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-bar@^35.4.4: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-bar/-/victory-bar-35.4.8.tgz#8d5e92d0ff02edf932c119a114fefe6f79dabe63" + integrity sha512-9EUxHoX2R7t/iOZEWDtpypX13V2+Pngo2V3I9uW7lHtg+SCKTjGjHP1sJSbwLP3WxHl7dHg3Jg+ok04cych6XQ== + dependencies: + d3-shape "^1.2.0" + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-brush-container@^35.4.8: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-brush-container/-/victory-brush-container-35.4.8.tgz#de8004a19c03c9a9b00e00052f682e7dad0b6892" + integrity sha512-/nTpCijvLfCr86M5P3sr8umLsRJM7GaYODqagRChcPIS5O4oEzRZsgEVhOYmWZZiS56PIjMoLAzMBvgsiwBsDg== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + react-fast-compare "^2.0.0" + victory-core "^35.4.8" + +victory-chart@^35.4.4: + version "35.4.9" + resolved "https://registry.yarnpkg.com/victory-chart/-/victory-chart-35.4.9.tgz#542caae68cde0dabeaab8dbff81eb630cd69daa6" + integrity sha512-OM8LFjBdzc2iujPlNj7WuwygMdCFjKLGWPN9dxzkpPhGaqQnH+k1rQaEz/DQC42x83QRlU93VwVcRTl9h3MzeA== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + react-fast-compare "^2.0.0" + victory-axis "^35.4.8" + victory-core "^35.4.8" + victory-polar-axis "^35.4.8" + victory-shared-events "^35.4.9" + +victory-core@^35.4.4, victory-core@^35.4.8: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-core/-/victory-core-35.4.8.tgz#c62a6a28b8aa8ad6bbff36e7fbe8945215ddfaf0" + integrity sha512-4yhNeeyttEe24mAG4DUPP3RvditQU+364WTnUS05ZHPrACyDWYTOfN5+L0GzmvkJ3kbteQkfX3UJgpHwwqVmug== + dependencies: + d3-ease "^1.0.0" + d3-interpolate "^1.1.1" + d3-scale "^1.0.0" + d3-shape "^1.2.0" + d3-timer "^1.0.0" + lodash "^4.17.19" + prop-types "^15.5.8" + react-fast-compare "^2.0.0" + +victory-create-container@^35.4.4: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-create-container/-/victory-create-container-35.4.8.tgz#d0f5d2b6d664bc29399899db15c01e59b56a3b43" + integrity sha512-1qYRi+npvvWurDjdrC2IthxvTWeKcP1nw8bw2OpL+oG21k/mQBrPGT2GtAmUBGp3e8LDr6BwrCx32FGd01PWYw== + dependencies: + lodash "^4.17.19" + victory-brush-container "^35.4.8" + victory-core "^35.4.8" + victory-cursor-container "^35.4.8" + victory-selection-container "^35.4.8" + victory-voronoi-container "^35.4.8" + victory-zoom-container "^35.4.8" + +victory-cursor-container@^35.4.8: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-cursor-container/-/victory-cursor-container-35.4.8.tgz#ca85dd05ecec929dac93c53640b6d874c725a2f7" + integrity sha512-KLQug3j4dY8nkcL5CrPqO/pz48hH9chLS86eFiN56gUzLCHx81lEujc01YrsFxQat1cOyC3LghyM+pnexLMWEQ== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-group@^35.4.4: + version "35.4.9" + resolved "https://registry.yarnpkg.com/victory-group/-/victory-group-35.4.9.tgz#55b3049d80147843eadf86355dcf02e867a56f3c" + integrity sha512-JhJYD/ykPVKFq8ZATTpj8zA1Y8f6pXVoD9o/qBcRMggyfjPglV4rGdg6NnFCTV5bK/YMV5jYiSvZpdJlBtQpPQ== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + react-fast-compare "^2.0.0" + victory-core "^35.4.8" + victory-shared-events "^35.4.9" + +victory-legend@^35.4.4: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-legend/-/victory-legend-35.4.8.tgz#179d34f747d4e40ccb3ab9215367d355034cdac3" + integrity sha512-QI8zZLm8JipzzlAfJjpJm1MHl6FVcXWJOqU2XMl18RCkwDesukIiBO4dU8UAvNRkqxLRmkJzywFXSp3LFEah0Q== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-line@^35.4.4: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-line/-/victory-line-35.4.8.tgz#0460196a5cf66a0f04121d644884e7c5f9605a57" + integrity sha512-RJ/Wqon7PS07NRZnlku2C8+cJ48ruunizvKtl7HVv15e1hybo/dCg3dD2IizrO6vF/ja8Iv/RZ2YBDe/nWywrg== + dependencies: + d3-shape "^1.2.0" + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-pie@^35.4.4: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-pie/-/victory-pie-35.4.8.tgz#8c33927a892249f255ee219a982c72acffefd443" + integrity sha512-1+FnHdlqYqQzuiA/Psa77dsXcK1sKbXEUjNgnwfEZSUY2HX5v3fQ0sk4AiZhnVVsz6Rp+Wl4We/cca1PHp7i/w== + dependencies: + d3-shape "^1.0.0" + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-polar-axis@^35.4.8: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-polar-axis/-/victory-polar-axis-35.4.8.tgz#daedd7aa26a515acd476adb176a8e6a29c6934db" + integrity sha512-rhNGYUj7A70ZoHyta0ma3WD12Kv162Mf0AmFLvfxC6W+4eh2uwgGE8j+CJBW+/HbzLhFoeDY+aTe0FqJPLiO4A== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-scatter@^35.4.4: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-scatter/-/victory-scatter-35.4.8.tgz#8e48c8b5669cb7096bb09aabfbe3c288ad880729" + integrity sha512-UWyYgUhvdMFBkzBrgvN5WFCFX1E7tG6EjLNvAhsMoGK2eVH69QzC7Aiun+hLeXUXcssg2Gi1+f/w4rrxpdpZzw== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-selection-container@^35.4.8: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-selection-container/-/victory-selection-container-35.4.8.tgz#e356700230b731b015a0f3a8820e7c62b86c6ab7" + integrity sha512-2I2pEoUwjEltm0hJO+EwTlcrVhfvchph3OlcGp3N/Kw9q5veS/gfvcQMwur0FjS2GNwwCSjW/Gbv8zv31B/xFg== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-shared-events@^35.4.9: + version "35.4.9" + resolved "https://registry.yarnpkg.com/victory-shared-events/-/victory-shared-events-35.4.9.tgz#e613acbd154d990728276de47de5c37f6960164f" + integrity sha512-AW6iYsZn+2kmRNb+RKzAze6z8/u5uQakBpkKsVl/AI43uzlWNEQELIfJOcFfTbM2Qo1vkwJCSz0S9mrbt2meAw== + dependencies: + json-stringify-safe "^5.0.1" + lodash "^4.17.19" + prop-types "^15.5.8" + react-fast-compare "^2.0.0" + victory-core "^35.4.8" + +victory-stack@^35.4.4: + version "35.4.9" + resolved "https://registry.yarnpkg.com/victory-stack/-/victory-stack-35.4.9.tgz#d4b2b490c284da277f507c2d7a88a4ec0312314b" + integrity sha512-fePjKUM5zfp3+5lJPtow/6HAglwcVb1JBDNIsrpChn78G3NvbpTZUlMlNdbSmE1+xDLFEWBGJ9oUI/gjjWynGA== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + react-fast-compare "^2.0.0" + victory-core "^35.4.8" + victory-shared-events "^35.4.9" + +victory-tooltip@^35.4.4, victory-tooltip@^35.4.8: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-tooltip/-/victory-tooltip-35.4.8.tgz#0d29276d3717cfbf500dd3d571c2087cd7c7a4c8" + integrity sha512-CZLsLgfxUA6PdaIxUgIk4DJfoo5DRM70OLTZFekctQkvwt2S6Fc7DSv47ZvFw7nL6SEVaNjwsDmTZnabUJb+4Q== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + +victory-voronoi-container@^35.4.4, victory-voronoi-container@^35.4.8: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-voronoi-container/-/victory-voronoi-container-35.4.8.tgz#ab25bcc5b34cacf08fe8d738b88d89c8f9c98d1c" + integrity sha512-+rQRr2SwdixwxvUSF4NUsPj7yWpkeQcQZWcPz8NNNpaCBxN1HNVQ41W7DmAZ98Spta2gkrk6888Q31zQeiGDXw== + dependencies: + delaunay-find "0.0.5" + lodash "^4.17.19" + prop-types "^15.5.8" + react-fast-compare "^2.0.0" + victory-core "^35.4.8" + victory-tooltip "^35.4.8" + +victory-zoom-container@^35.4.4, victory-zoom-container@^35.4.8: + version "35.4.8" + resolved "https://registry.yarnpkg.com/victory-zoom-container/-/victory-zoom-container-35.4.8.tgz#4e9a86bf79245a3937b7a60163b47bc8e5ff15ae" + integrity sha512-jLHm0/wttiRIzCEdxK3SL/emNUkfc9Rt64I2Yp+9OuP+YJP+5/MkuavjjnYaVowBD3sbn6ByGBMkJ8e+Q/U7dA== + dependencies: + lodash "^4.17.19" + prop-types "^15.5.8" + victory-core "^35.4.8" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" diff --git a/cmd/kobs/kobs.go b/cmd/kobs/kobs.go index a173599dd..5715a431d 100644 --- a/cmd/kobs/kobs.go +++ b/cmd/kobs/kobs.go @@ -9,6 +9,7 @@ import ( "github.com/kobsio/kobs/pkg/api" "github.com/kobsio/kobs/pkg/api/clusters" + "github.com/kobsio/kobs/pkg/api/datasources/datasource" "github.com/kobsio/kobs/pkg/app" "github.com/kobsio/kobs/pkg/metrics" "github.com/kobsio/kobs/pkg/version" @@ -20,7 +21,8 @@ import ( // Config is the complete configuration for kobs. type Config struct { - Clusters clusters.Config `yaml:"clusters"` + Clusters clusters.Config `yaml:"clusters"` + Datasources []datasource.Config `yaml:"datasources"` } var ( @@ -125,7 +127,7 @@ func main() { } go appServer.Start() - apiServer, err := api.New(config.Clusters) + apiServer, err := api.New(config.Clusters, config.Datasources) if err != nil { log.WithError(err).Fatalf("Could not create API server.") } diff --git a/deploy/docker/envoy/envoy.yaml b/deploy/docker/envoy/envoy.yaml index 374903b94..cc47b6628 100644 --- a/deploy/docker/envoy/envoy.yaml +++ b/deploy/docker/envoy/envoy.yaml @@ -37,6 +37,12 @@ static_resources: cluster: api-server max_stream_duration: grpc_timeout_header_max: 0s + - match: + prefix: "/datasources." + route: + cluster: api-server + max_stream_duration: + grpc_timeout_header_max: 0s - match: prefix: "/" route: diff --git a/deploy/docker/kobs/config.yaml b/deploy/docker/kobs/config.yaml index 3922bfc45..0ff589a46 100644 --- a/deploy/docker/kobs/config.yaml +++ b/deploy/docker/kobs/config.yaml @@ -7,3 +7,9 @@ clusters: metrics: prometheus logs: elasticsearch traces: jaeger + +datasources: + - name: prometheus + type: prometheus + prometheus: + address: http://localhost:9090 diff --git a/deploy/kustomize/crds/kobs.io_applications.yaml b/deploy/kustomize/crds/kobs.io_applications.yaml index 31b1f5186..229cd29c6 100644 --- a/deploy/kustomize/crds/kobs.io_applications.yaml +++ b/deploy/kustomize/crds/kobs.io_applications.yaml @@ -53,6 +53,131 @@ spec: type: string type: object type: array + logs: + type: object + metrics: + description: ApplicationMetrics defines the structure of the metrics + section of an application. It contains the name of the datasource, + which is the same as the metrics datasource for a cluster, when the + user doesn't set this field in the Application CR. It also contains + a list of variables and charts. The health field can contain a single + chart, which is used to display the health of an application in the + applications overview. + properties: + charts: + items: + description: ApplicationMetricsChart represents a chart for the + metrics view. A chart must contain a title, a type (line, area, + bar chart, etc.). It can also contain a unit for the y axis. + If the stacked option is set to true all series for the chart + will be stacked. The size parameter can be used to define the + width of a chart for large screens. We are using a 12 column + grid to display the charts, so the number must be between 1 + and 12. The last option is a list of queries, which are executed + against the datasource (e.g. For Prometheus this will be a list + of PromQL queries). + properties: + queries: + items: + description: ApplicationMetricsQuery presents a single query + to get the data, which should be shown in the chart for + the metrics section. A query consists of a query string + (e.g. PromQL) and a lable. The query and the label can + contain variables via Go templating syntax (e.g. {{ .VARIABLE-NAME + }}). For Prometheus the label can also contain a label + from the returned series with the same syntax (e.g. {{ + .SERIES-LABEL }}). + properties: + label: + type: string + query: + type: string + type: object + type: array + size: + format: int64 + type: integer + stacked: + type: boolean + title: + type: string + type: + type: string + unit: + type: string + type: object + type: array + datasource: + type: string + health: + description: ApplicationMetricsChart represents a chart for the + metrics view. A chart must contain a title, a type (line, area, + bar chart, etc.). It can also contain a unit for the y axis. If + the stacked option is set to true all series for the chart will + be stacked. The size parameter can be used to define the width + of a chart for large screens. We are using a 12 column grid to + display the charts, so the number must be between 1 and 12. The + last option is a list of queries, which are executed against the + datasource (e.g. For Prometheus this will be a list of PromQL + queries). + properties: + queries: + items: + description: ApplicationMetricsQuery presents a single query + to get the data, which should be shown in the chart for + the metrics section. A query consists of a query string + (e.g. PromQL) and a lable. The query and the label can contain + variables via Go templating syntax (e.g. {{ .VARIABLE-NAME + }}). For Prometheus the label can also contain a label from + the returned series with the same syntax (e.g. {{ .SERIES-LABEL + }}). + properties: + label: + type: string + query: + type: string + type: object + type: array + size: + format: int64 + type: integer + stacked: + type: boolean + title: + type: string + type: + type: string + unit: + type: string + type: object + variables: + items: + description: ApplicationMetricsVariable specifies a variable, + which can be used within the charts. A variable must contain + a name, a label and a query. It also can set the allowAll field + to true, which will include an "All" option in the variables + values. The values and value field must not be provided by the + user. These fields will be set by the GetVariables call. If + a user provide a "value", we will try to use it as the selected + value. + properties: + allowAll: + type: boolean + label: + type: string + name: + type: string + query: + type: string + value: + type: string + values: + items: + type: string + type: array + type: object + type: array + type: object name: type: string namespace: @@ -73,6 +198,8 @@ spec: type: string type: object type: array + traces: + type: object type: object required: - spec diff --git a/go.mod b/go.mod index 0f7ed824a..4b011f50b 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,8 @@ go 1.15 require ( github.com/gogo/protobuf v1.3.2 github.com/golang/protobuf v1.4.3 + github.com/prometheus/client_golang v1.9.0 + github.com/prometheus/common v0.15.0 github.com/sirupsen/logrus v1.7.0 github.com/spf13/pflag v1.0.5 google.golang.org/grpc v1.35.0 diff --git a/go.sum b/go.sum index fbd312f16..0e4e6e8b1 100644 --- a/go.sum +++ b/go.sum @@ -33,40 +33,92 @@ github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBp github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= @@ -81,12 +133,19 @@ github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8 github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= @@ -110,6 +169,7 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -129,6 +189,7 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -136,23 +197,65 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= @@ -161,8 +264,24 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= @@ -171,28 +290,108 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.9.0 h1:Rrch9mh17XcxvEu9D9DEpb4isxjGBtcevQjKvxPRQIU= +github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.15.0 h1:4fgOnadei3EZvgRwxJ7RMpG1k1pOZth5Pc13tyspaKM= +github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= @@ -201,16 +400,34 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE= @@ -248,7 +465,12 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -258,6 +480,7 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -266,6 +489,7 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -282,23 +506,33 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -306,10 +540,14 @@ golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e h1:AyodaIpKjppX+cBfTASF2E1US3H2JFBj920Ot3rtDjs= +golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -317,11 +555,14 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -329,6 +570,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -339,6 +581,8 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -346,6 +590,7 @@ golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -361,6 +606,7 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -372,6 +618,7 @@ google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/ google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= @@ -382,6 +629,7 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -397,10 +645,15 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -418,26 +671,35 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -466,3 +728,4 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/pkg/api/api.go b/pkg/api/api.go index 7dabdd847..c9a636b73 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -5,6 +5,8 @@ import ( "os" "github.com/kobsio/kobs/pkg/api/clusters" + "github.com/kobsio/kobs/pkg/api/datasources" + "github.com/kobsio/kobs/pkg/api/datasources/datasource" "github.com/kobsio/kobs/pkg/generated/proto" "github.com/sirupsen/logrus" @@ -48,7 +50,7 @@ func (s *Server) Stop() { } // New return a new API server. -func New(clustersConfig clusters.Config) (*Server, error) { +func New(clustersConfig clusters.Config, datasourcesConfig []datasource.Config) (*Server, error) { listener, err := net.Listen("tcp", address) if err != nil { return nil, err @@ -59,9 +61,15 @@ func New(clustersConfig clusters.Config) (*Server, error) { return nil, err } + d, err := datasources.Load(datasourcesConfig) + if err != nil { + return nil, err + } + grpcServer := grpc.NewServer() reflection.Register(grpcServer) proto.RegisterClustersServer(grpcServer, c) + proto.RegisterDatasourcesServer(grpcServer, d) return &Server{ listener: listener, diff --git a/pkg/api/clusters/cluster/cluster.go b/pkg/api/clusters/cluster/cluster.go index 1c9b721d6..d5a135ee0 100644 --- a/pkg/api/clusters/cluster/cluster.go +++ b/pkg/api/clusters/cluster/cluster.go @@ -128,6 +128,10 @@ func (c *Cluster) GetApplications(ctx context.Context, namespace string) ([]*pro application.Namespace = app.Namespace application.Name = app.Name + if application.Metrics != nil && application.Metrics.Datasource == "" { + application.Metrics.Datasource = c.options.datasources.Metrics + } + applications = append(applications, application) } @@ -148,6 +152,10 @@ func (c *Cluster) GetApplication(ctx context.Context, namespace, name string) (* application.Namespace = namespace application.Name = name + if application.Metrics != nil && application.Metrics.Datasource == "" { + application.Metrics.Datasource = c.options.datasources.Metrics + } + return application, nil } diff --git a/pkg/api/datasources/datasource/datasource.go b/pkg/api/datasources/datasource/datasource.go new file mode 100644 index 000000000..d775fe465 --- /dev/null +++ b/pkg/api/datasources/datasource/datasource.go @@ -0,0 +1,46 @@ +package datasource + +import ( + "context" + + "github.com/kobsio/kobs/pkg/api/datasources/datasource/prometheus" + "github.com/kobsio/kobs/pkg/generated/proto" + + "github.com/sirupsen/logrus" +) + +var ( + log = logrus.WithFields(logrus.Fields{"package": "datasource"}) +) + +// Config is the configuration for a datasource. Each datasource must contain a name and type. Each datasource also +// contains a type specific configuration. +type Config struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Prometheus prometheus.Config `yaml:"prometheus"` +} + +// Datasource is the interface, which must be implemented by each datasource. Also when a datasource doesn't support +// logs or traces like Prometheus, it must implement the corresponding method, but it should return an error when the +// method is called. +type Datasource interface { + GetDatasource() (string, string) + GetVariables(ctx context.Context, options *proto.DatasourceOptions, variables []*proto.ApplicationMetricsVariable) ([]*proto.ApplicationMetricsVariable, error) + GetMetrics(ctx context.Context, options *proto.DatasourceOptions, variables []*proto.ApplicationMetricsVariable, queries []*proto.ApplicationMetricsQuery) ([]*proto.DatasourceMetrics, error) + GetLogs(ctx context.Context, options *proto.DatasourceOptions) error + GetTraces(ctx context.Context, options *proto.DatasourceOptions) error +} + +// New returns a new datasource for the given configuration. It checks the provided type and returns the corresponding +// datasource config. If the user provided an invalid datasource we just log a warning, but we do not return an error. +func New(config Config) (Datasource, error) { + switch config.Type { + case "prometheus": + log.WithFields(logrus.Fields{"name": config.Name, "type": config.Type}).Debugf("Load datasource.") + return prometheus.New(config.Name, config.Prometheus) + default: + log.WithFields(logrus.Fields{"type": config.Type}).Warnf("Invalid datasource.") + return nil, nil + } +} diff --git a/pkg/api/datasources/datasource/prometheus/helpers.go b/pkg/api/datasources/datasource/prometheus/helpers.go new file mode 100644 index 000000000..28faf8d4e --- /dev/null +++ b/pkg/api/datasources/datasource/prometheus/helpers.go @@ -0,0 +1,66 @@ +package prometheus + +import ( + "bytes" + "text/template" + "time" +) + +// appendIfMissing appends a value to a slice, when this values doesn't exist in the slice already. +func appendIfMissing(items []string, item string) []string { + for _, ele := range items { + if ele == item { + return items + } + } + + return append(items, item) +} + +// valueExists checks if an value exists in a slice. When the value exists the function returns true, if not it will +// return false. +func valueExists(items []string, item string) bool { + for _, ele := range items { + if ele == item { + return true + } + } + + return false +} + +// queryInterpolation is used to replace variables in a query. +func queryInterpolation(query string, variables map[string]string) (string, error) { + tpl, err := template.New("query").Parse(query) + if err != nil { + return "", err + } + + var buf bytes.Buffer + err = tpl.Execute(&buf, variables) + if err != nil { + return "", err + } + + return buf.String(), nil +} + +// getSteps returns the duration for the Prometheus resolution for a given start and end time. +func getSteps(start, end int64) time.Duration { + switch seconds := end - start; { + case seconds <= 6*3600: + return time.Duration(30 * time.Second) + case seconds <= 12*3600: + return time.Duration(60 * time.Second) + case seconds <= 24*3600: + return time.Duration(120 * time.Second) + case seconds <= 2*24*3600: + return time.Duration(300 * time.Second) + case seconds <= 7*24*3600: + return time.Duration(1800 * time.Second) + case seconds <= 30*24*3600: + return time.Duration(3600 * time.Second) + default: + return time.Duration((end-start)/1000) * time.Second + } +} diff --git a/pkg/api/datasources/datasource/prometheus/prometheus.go b/pkg/api/datasources/datasource/prometheus/prometheus.go new file mode 100644 index 000000000..6773660d0 --- /dev/null +++ b/pkg/api/datasources/datasource/prometheus/prometheus.go @@ -0,0 +1,269 @@ +package prometheus + +import ( + "context" + "fmt" + "net/http" + "strings" + "time" + + "github.com/kobsio/kobs/pkg/generated/proto" + + "github.com/prometheus/client_golang/api" + v1 "github.com/prometheus/client_golang/api/prometheus/v1" + "github.com/prometheus/common/model" + "github.com/sirupsen/logrus" +) + +var ( + log = logrus.WithFields(logrus.Fields{"package": "prometheus"}) +) + +// Config contains all required fields to create a new Prometheus datasource. +type Config struct { + Address string `yaml:"address"` + Username string `yaml:"username"` + Password string `yaml:"password"` + Token string `yaml:"token"` +} + +type basicAuthTransport struct { + Transport http.RoundTripper + username string + password string +} + +type tokenAuthTransporter struct { + Transport http.RoundTripper + token string +} + +func (bat basicAuthTransport) RoundTrip(req *http.Request) (*http.Response, error) { + req.SetBasicAuth(bat.username, bat.password) + return bat.Transport.RoundTrip(req) +} + +func (tat tokenAuthTransporter) RoundTrip(req *http.Request) (*http.Response, error) { + req.Header.Set("Authorization", "Bearer "+tat.token) + return tat.Transport.RoundTrip(req) +} + +// Prometheus implements the Prometheus datasource. +type Prometheus struct { + name string + v1api v1.API +} + +// GetDatasource returns the details for the datasource. Currently this is only the name and the type of the datasource. +func (p *Prometheus) GetDatasource() (string, string) { + return p.name, "prometheus" +} + +// GetVariables returns all variable values. The values are label values for a Prometheus time series. The labels are +// retrieved via a PromQL query. +// To get the values we are looping over all queries and pre selecting the first value or all values, when the option +// is set. So we can use a variable in a following query. +func (p *Prometheus) GetVariables(ctx context.Context, options *proto.DatasourceOptions, variables []*proto.ApplicationMetricsVariable) ([]*proto.ApplicationMetricsVariable, error) { + if options == nil { + return nil, fmt.Errorf("datasource options are missing") + } + + var selectedValues map[string]string + selectedValues = make(map[string]string, len(variables)) + + for i := 0; i < len(variables); i++ { + query, err := queryInterpolation(variables[i].Query, selectedValues) + if err != nil { + return nil, err + } + + log.WithFields(logrus.Fields{"query": query}).Tracef("Query variables.") + + labelSets, _, err := p.v1api.Series(ctx, []string{query}, time.Unix(options.TimeStart, 0), time.Unix(options.TimeEnd, 0)) + if err != nil { + return nil, err + } + + var values []string + for _, labelSet := range labelSets { + if value, ok := labelSet[model.LabelName(variables[i].Label)]; ok { + values = appendIfMissing(values, string(value)) + } + } + + variables[i].Values = values + + if variables[i].AllowAll { + variables[i].Values = append([]string{"All"}, variables[i].Values...) + } + + if variables[i].Value == "" && len(variables[i].Values) > 0 { + variables[i].Value = variables[i].Values[0] + } else { + if !valueExists(variables[i].Values, variables[i].Value) && len(variables[i].Values) > 0 { + variables[i].Value = variables[i].Values[0] + } + } + + if variables[i].Value == "All" { + selectedValues[variables[i].Name] = strings.Join(variables[i].Values[1:], "|") + } else { + selectedValues[variables[i].Name] = variables[i].Value + } + } + + return variables, nil +} + +// GetMetrics returns all metrics for all given queries. For that we are creating a map of with the selected values for +// all variables. Then we are looping through the list of variables, replacing the variables with the selected value and +// run the PromQL against the configured Prometheus instance. In the last step we transform the result, so that it can +// be used in the React UI. +func (p *Prometheus) GetMetrics(ctx context.Context, options *proto.DatasourceOptions, variables []*proto.ApplicationMetricsVariable, queries []*proto.ApplicationMetricsQuery) ([]*proto.DatasourceMetrics, error) { + var selectedVariableValues map[string]string + selectedVariableValues = make(map[string]string, len(variables)) + + for _, variable := range variables { + if variable.Value == "All" { + selectedVariableValues[variable.Name] = strings.Join(variable.Values[1:], "|") + } else { + selectedVariableValues[variable.Name] = variable.Value + } + } + + if options == nil { + return nil, fmt.Errorf("options are missing") + } + + steps := getSteps(options.TimeStart, options.TimeEnd) + if options.Resolution != "" { + parsedDuration, err := time.ParseDuration(options.Resolution) + if err == nil { + steps = parsedDuration + } + } + + r := v1.Range{ + Start: time.Unix(options.TimeStart, 0), + End: time.Unix(options.TimeEnd, 0), + Step: steps, + } + + var metrics []*proto.DatasourceMetrics + + for _, query := range queries { + interpolatedQuery, err := queryInterpolation(query.Query, selectedVariableValues) + if err != nil { + return nil, err + } + + log.WithFields(logrus.Fields{"query": interpolatedQuery, "start": r.Start, "end": r.End}).Tracef("Query time series.") + + result, _, err := p.v1api.QueryRange(ctx, interpolatedQuery, r) + if err != nil { + return nil, err + } + + streams, ok := result.(model.Matrix) + if !ok { + return nil, err + } + + for _, stream := range streams { + var min float64 + var max float64 + + var data []*proto.DatasourceMetricsData + for index, value := range stream.Values { + val := float64(value.Value) + + if index == 0 { + min = val + max = val + } else { + if val < min { + min = val + } else if val > max { + max = val + } + } + + data = append(data, &proto.DatasourceMetricsData{ + X: value.Timestamp.Unix() * 1000, + Y: val, + }) + } + + var labels map[string]string + labels = make(map[string]string) + + for key, value := range stream.Metric { + labels[string(key)] = string(value) + } + + label, err := queryInterpolation(query.Label, labels) + if err != nil { + metrics = append(metrics, &proto.DatasourceMetrics{ + Label: query.Label, + Min: min, + Max: max, + Data: data, + }) + } else { + metrics = append(metrics, &proto.DatasourceMetrics{ + Label: label, + Min: min, + Max: max, + Data: data, + }) + } + } + } + + return metrics, nil +} + +// GetLogs is not implemented for Prometheus. +func (p *Prometheus) GetLogs(ctx context.Context, options *proto.DatasourceOptions) error { + return fmt.Errorf("logs interface isn't implemented for prometheus") +} + +// GetTraces is not implemented for Prometheus. +func (p *Prometheus) GetTraces(ctx context.Context, options *proto.DatasourceOptions) error { + return fmt.Errorf("traces interface isn't implemented for prometheus") +} + +// New returns a new Prometheus datasource, which implements the datasource interface. A Prometheus datasource, contains +// a Prometheus API client. We also set the round tripper for basic or token authentication, when the settings are +// provided. +func New(name string, config Config) (*Prometheus, error) { + roundTripper := api.DefaultRoundTripper + + if config.Username != "" && config.Password != "" { + roundTripper = basicAuthTransport{ + Transport: roundTripper, + username: config.Username, + password: config.Password, + } + } + + if config.Token != "" { + roundTripper = tokenAuthTransporter{ + Transport: roundTripper, + token: config.Token, + } + } + + client, err := api.NewClient(api.Config{ + Address: config.Address, + RoundTripper: roundTripper, + }) + if err != nil { + return nil, err + } + + return &Prometheus{ + name: name, + v1api: v1.NewAPI(client), + }, nil +} diff --git a/pkg/api/datasources/datasources.go b/pkg/api/datasources/datasources.go new file mode 100644 index 000000000..606599d3c --- /dev/null +++ b/pkg/api/datasources/datasources.go @@ -0,0 +1,113 @@ +package datasources + +import ( + "context" + "fmt" + + "github.com/kobsio/kobs/pkg/api/datasources/datasource" + "github.com/kobsio/kobs/pkg/generated/proto" + + "github.com/sirupsen/logrus" +) + +var ( + log = logrus.WithFields(logrus.Fields{"package": "datasources"}) +) + +// Datasources contains all loaded datasources and implements the datasources service from the protocol buffers +// definition. +type Datasources struct { + proto.UnimplementedDatasourcesServer + datasources []datasource.Datasource +} + +func (d *Datasources) getDatasource(name string) datasource.Datasource { + for _, ds := range d.datasources { + n, _ := ds.GetDatasource() + if n == name { + return ds + } + } + + return nil +} + +// GetDatasource implements the GetDatasource from the Datasources service. It will return the name and type of a +// datasource by name. If no datasource for the given name could be found and error is returned. +func (d *Datasources) GetDatasource(ctx context.Context, getDatasourceRequest *proto.GetDatasourceRequest) (*proto.GetDatasourceResponse, error) { + log.WithFields(logrus.Fields{"name": getDatasourceRequest.Name}).Tracef("Get datasource.") + + ds := d.getDatasource(getDatasourceRequest.Name) + if ds == nil { + return nil, fmt.Errorf("invalid datasource name") + } + + n, t := ds.GetDatasource() + + return &proto.GetDatasourceResponse{ + Name: n, + Type: t, + }, nil +} + +// GetVariables implements the GetVariables for the Datasources service. It returns the variables for a metrics view, +// including the values and value field. +func (d *Datasources) GetVariables(ctx context.Context, getVariablesRequest *proto.GetVariablesRequest) (*proto.GetVariablesResponse, error) { + log.WithFields(logrus.Fields{"name": getVariablesRequest.Name}).Tracef("Get variables.") + + ds := d.getDatasource(getVariablesRequest.Name) + if ds == nil { + return nil, fmt.Errorf("invalid datasource name") + } + + variables, err := ds.GetVariables(ctx, getVariablesRequest.Options, getVariablesRequest.Variables) + if err != nil { + return nil, err + } + + return &proto.GetVariablesResponse{ + Variables: variables, + }, nil +} + +// GetMetrics implements the GetMetrics for the Datasources service. It returns the a series of metrics for a list of +// given queries. +func (d *Datasources) GetMetrics(ctx context.Context, getMetricsRequest *proto.GetMetricsRequest) (*proto.GetMetricsResponse, error) { + log.WithFields(logrus.Fields{"name": getMetricsRequest.Name}).Tracef("Get metrics.") + + ds := d.getDatasource(getMetricsRequest.Name) + if ds == nil { + return nil, fmt.Errorf("invalid datasource name") + } + + metrics, err := ds.GetMetrics(ctx, getMetricsRequest.Options, getMetricsRequest.Variables, getMetricsRequest.Queries) + if err != nil { + return nil, err + } + + return &proto.GetMetricsResponse{ + Metrics: metrics, + }, nil +} + +// Load loads all given datasources from the configuration, so that we can use them within the datasources gRPC service. +func Load(config []datasource.Config) (*Datasources, error) { + var datasources []datasource.Datasource + + for _, dsConfig := range config { + ds, err := datasource.New(dsConfig) + if err != nil { + return nil, err + } + + if ds != nil { + datasources = append(datasources, ds) + } + } + + log.WithFields(logrus.Fields{"datasources count": len(datasources)}).Debugf("Loaded datasources.") + + return &Datasources{ + datasources: datasources, + }, nil +} diff --git a/pkg/generated/proto/application.pb.go b/pkg/generated/proto/application.pb.go new file mode 100644 index 000000000..2d058ea83 --- /dev/null +++ b/pkg/generated/proto/application.pb.go @@ -0,0 +1,908 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0 +// protoc v3.14.0 +// source: application.proto + +package proto + +import ( + proto "github.com/golang/protobuf/proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +// Application is the specification for an application. This specification is also used for the Kubernetes CRD as +// ApplicationSpec. +// This is also the reason why we use istio.io/tools/cmd/protoc-gen-deepcopy within the code generation, to generate the +// deepcopy function, which are required to use the Application within a CRD. +type Application struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Links []*ApplicationLink `protobuf:"bytes,4,rep,name=links,proto3" json:"links,omitempty"` + Resources []*ApplicationResources `protobuf:"bytes,5,rep,name=resources,proto3" json:"resources,omitempty"` + Metrics *ApplicationMetrics `protobuf:"bytes,6,opt,name=metrics,proto3" json:"metrics,omitempty"` + Logs *ApplicationLogs `protobuf:"bytes,7,opt,name=logs,proto3" json:"logs,omitempty"` + Traces *ApplicationTraces `protobuf:"bytes,8,opt,name=traces,proto3" json:"traces,omitempty"` +} + +func (x *Application) Reset() { + *x = Application{} + if protoimpl.UnsafeEnabled { + mi := &file_application_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Application) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Application) ProtoMessage() {} + +func (x *Application) ProtoReflect() protoreflect.Message { + mi := &file_application_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Application.ProtoReflect.Descriptor instead. +func (*Application) Descriptor() ([]byte, []int) { + return file_application_proto_rawDescGZIP(), []int{0} +} + +func (x *Application) GetCluster() string { + if x != nil { + return x.Cluster + } + return "" +} + +func (x *Application) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *Application) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Application) GetLinks() []*ApplicationLink { + if x != nil { + return x.Links + } + return nil +} + +func (x *Application) GetResources() []*ApplicationResources { + if x != nil { + return x.Resources + } + return nil +} + +func (x *Application) GetMetrics() *ApplicationMetrics { + if x != nil { + return x.Metrics + } + return nil +} + +func (x *Application) GetLogs() *ApplicationLogs { + if x != nil { + return x.Logs + } + return nil +} + +func (x *Application) GetTraces() *ApplicationTraces { + if x != nil { + return x.Traces + } + return nil +} + +// ApplicationLink is the format of a link, which can be provided within an application. A link consists of a title, +// which is displayed in the frontend and the link link (title=Example, link=https://example.com). +type ApplicationLink struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Link string `protobuf:"bytes,2,opt,name=link,proto3" json:"link,omitempty"` +} + +func (x *ApplicationLink) Reset() { + *x = ApplicationLink{} + if protoimpl.UnsafeEnabled { + mi := &file_application_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationLink) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationLink) ProtoMessage() {} + +func (x *ApplicationLink) ProtoReflect() protoreflect.Message { + mi := &file_application_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationLink.ProtoReflect.Descriptor instead. +func (*ApplicationLink) Descriptor() ([]byte, []int) { + return file_application_proto_rawDescGZIP(), []int{1} +} + +func (x *ApplicationLink) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *ApplicationLink) GetLink() string { + if x != nil { + return x.Link + } + return "" +} + +// ApplicationResources is the specification to retrieve all Kubernetes resources, which can be associated with the +// application. For that, a list of kinds (deployments, pods, statefulsets) as specified in +// app/src/components/resources/helpers.tsx and a selector must be set. Currently only label selector is supported, +// e.g. app=example. +type ApplicationResources struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kinds []string `protobuf:"bytes,1,rep,name=kinds,proto3" json:"kinds,omitempty"` + Selector string `protobuf:"bytes,2,opt,name=selector,proto3" json:"selector,omitempty"` +} + +func (x *ApplicationResources) Reset() { + *x = ApplicationResources{} + if protoimpl.UnsafeEnabled { + mi := &file_application_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationResources) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationResources) ProtoMessage() {} + +func (x *ApplicationResources) ProtoReflect() protoreflect.Message { + mi := &file_application_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationResources.ProtoReflect.Descriptor instead. +func (*ApplicationResources) Descriptor() ([]byte, []int) { + return file_application_proto_rawDescGZIP(), []int{2} +} + +func (x *ApplicationResources) GetKinds() []string { + if x != nil { + return x.Kinds + } + return nil +} + +func (x *ApplicationResources) GetSelector() string { + if x != nil { + return x.Selector + } + return "" +} + +// ApplicationMetrics defines the structure of the metrics section of an application. It contains the name of the +// datasource, which is the same as the metrics datasource for a cluster, when the user doesn't set this field in the +// Application CR. It also contains a list of variables and charts. +// The health field can contain a single chart, which is used to display the health of an application in the +// applications overview. +type ApplicationMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Datasource string `protobuf:"bytes,1,opt,name=datasource,proto3" json:"datasource,omitempty"` + Health *ApplicationMetricsChart `protobuf:"bytes,2,opt,name=health,proto3" json:"health,omitempty"` + Variables []*ApplicationMetricsVariable `protobuf:"bytes,3,rep,name=variables,proto3" json:"variables,omitempty"` + Charts []*ApplicationMetricsChart `protobuf:"bytes,4,rep,name=charts,proto3" json:"charts,omitempty"` +} + +func (x *ApplicationMetrics) Reset() { + *x = ApplicationMetrics{} + if protoimpl.UnsafeEnabled { + mi := &file_application_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationMetrics) ProtoMessage() {} + +func (x *ApplicationMetrics) ProtoReflect() protoreflect.Message { + mi := &file_application_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationMetrics.ProtoReflect.Descriptor instead. +func (*ApplicationMetrics) Descriptor() ([]byte, []int) { + return file_application_proto_rawDescGZIP(), []int{3} +} + +func (x *ApplicationMetrics) GetDatasource() string { + if x != nil { + return x.Datasource + } + return "" +} + +func (x *ApplicationMetrics) GetHealth() *ApplicationMetricsChart { + if x != nil { + return x.Health + } + return nil +} + +func (x *ApplicationMetrics) GetVariables() []*ApplicationMetricsVariable { + if x != nil { + return x.Variables + } + return nil +} + +func (x *ApplicationMetrics) GetCharts() []*ApplicationMetricsChart { + if x != nil { + return x.Charts + } + return nil +} + +// ApplicationMetricsVariable specifies a variable, which can be used within the charts. A variable must contain a name, +// a label and a query. It also can set the allowAll field to true, which will include an "All" option in the variables +// values. +// The values and value field must not be provided by the user. These fields will be set by the GetVariables call. If a +// user provide a "value", we will try to use it as the selected value. +type ApplicationMetricsVariable struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` + Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` + AllowAll bool `protobuf:"varint,4,opt,name=allowAll,proto3" json:"allowAll,omitempty"` + Values []string `protobuf:"bytes,5,rep,name=values,proto3" json:"values,omitempty"` + Value string `protobuf:"bytes,6,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ApplicationMetricsVariable) Reset() { + *x = ApplicationMetricsVariable{} + if protoimpl.UnsafeEnabled { + mi := &file_application_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationMetricsVariable) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationMetricsVariable) ProtoMessage() {} + +func (x *ApplicationMetricsVariable) ProtoReflect() protoreflect.Message { + mi := &file_application_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationMetricsVariable.ProtoReflect.Descriptor instead. +func (*ApplicationMetricsVariable) Descriptor() ([]byte, []int) { + return file_application_proto_rawDescGZIP(), []int{4} +} + +func (x *ApplicationMetricsVariable) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ApplicationMetricsVariable) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *ApplicationMetricsVariable) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *ApplicationMetricsVariable) GetAllowAll() bool { + if x != nil { + return x.AllowAll + } + return false +} + +func (x *ApplicationMetricsVariable) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +func (x *ApplicationMetricsVariable) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +// ApplicationMetricsChart represents a chart for the metrics view. A chart must contain a title, a type (line, area, +// bar chart, etc.). It can also contain a unit for the y axis. If the stacked option is set to true all series for the +// chart will be stacked. The size parameter can be used to define the width of a chart for large screens. We are using +// a 12 column grid to display the charts, so the number must be between 1 and 12. The last option is a list of queries, +// which are executed against the datasource (e.g. For Prometheus this will be a list of PromQL queries). +type ApplicationMetricsChart struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + Unit string `protobuf:"bytes,3,opt,name=unit,proto3" json:"unit,omitempty"` + Stacked bool `protobuf:"varint,4,opt,name=stacked,proto3" json:"stacked,omitempty"` + Size int64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` + Queries []*ApplicationMetricsQuery `protobuf:"bytes,6,rep,name=queries,proto3" json:"queries,omitempty"` +} + +func (x *ApplicationMetricsChart) Reset() { + *x = ApplicationMetricsChart{} + if protoimpl.UnsafeEnabled { + mi := &file_application_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationMetricsChart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationMetricsChart) ProtoMessage() {} + +func (x *ApplicationMetricsChart) ProtoReflect() protoreflect.Message { + mi := &file_application_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationMetricsChart.ProtoReflect.Descriptor instead. +func (*ApplicationMetricsChart) Descriptor() ([]byte, []int) { + return file_application_proto_rawDescGZIP(), []int{5} +} + +func (x *ApplicationMetricsChart) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *ApplicationMetricsChart) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *ApplicationMetricsChart) GetUnit() string { + if x != nil { + return x.Unit + } + return "" +} + +func (x *ApplicationMetricsChart) GetStacked() bool { + if x != nil { + return x.Stacked + } + return false +} + +func (x *ApplicationMetricsChart) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *ApplicationMetricsChart) GetQueries() []*ApplicationMetricsQuery { + if x != nil { + return x.Queries + } + return nil +} + +// ApplicationMetricsQuery presents a single query to get the data, which should be shown in the chart for the metrics +// section. A query consists of a query string (e.g. PromQL) and a lable. The query and the label can contain variables +// via Go templating syntax (e.g. {{ .VARIABLE-NAME }}). For Prometheus the label can also contain a label from the +// returned series with the same syntax (e.g. {{ .SERIES-LABEL }}). +type ApplicationMetricsQuery struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` +} + +func (x *ApplicationMetricsQuery) Reset() { + *x = ApplicationMetricsQuery{} + if protoimpl.UnsafeEnabled { + mi := &file_application_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationMetricsQuery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationMetricsQuery) ProtoMessage() {} + +func (x *ApplicationMetricsQuery) ProtoReflect() protoreflect.Message { + mi := &file_application_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationMetricsQuery.ProtoReflect.Descriptor instead. +func (*ApplicationMetricsQuery) Descriptor() ([]byte, []int) { + return file_application_proto_rawDescGZIP(), []int{6} +} + +func (x *ApplicationMetricsQuery) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *ApplicationMetricsQuery) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +type ApplicationLogs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ApplicationLogs) Reset() { + *x = ApplicationLogs{} + if protoimpl.UnsafeEnabled { + mi := &file_application_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationLogs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationLogs) ProtoMessage() {} + +func (x *ApplicationLogs) ProtoReflect() protoreflect.Message { + mi := &file_application_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationLogs.ProtoReflect.Descriptor instead. +func (*ApplicationLogs) Descriptor() ([]byte, []int) { + return file_application_proto_rawDescGZIP(), []int{7} +} + +type ApplicationTraces struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ApplicationTraces) Reset() { + *x = ApplicationTraces{} + if protoimpl.UnsafeEnabled { + mi := &file_application_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationTraces) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationTraces) ProtoMessage() {} + +func (x *ApplicationTraces) ProtoReflect() protoreflect.Message { + mi := &file_application_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationTraces.ProtoReflect.Descriptor instead. +func (*ApplicationTraces) Descriptor() ([]byte, []int) { + return file_application_proto_rawDescGZIP(), []int{8} +} + +var File_application_proto protoreflect.FileDescriptor + +var file_application_proto_rawDesc = []byte{ + 0x0a, 0x11, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0xf3, 0x02, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x05, + 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, + 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x12, 0x39, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x30, 0x0a, 0x04, + 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x36, + 0x0a, 0x06, 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x06, + 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x22, 0x3b, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, + 0x69, 0x6e, 0x6b, 0x22, 0x48, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6b, + 0x69, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x69, 0x6e, 0x64, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0xf7, 0x01, + 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x72, 0x74, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x12, 0x45, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x09, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x63, 0x68, 0x61, + 0x72, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x72, 0x74, 0x52, + 0x06, 0x63, 0x68, 0x61, 0x72, 0x74, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x1a, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, + 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, + 0x6c, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0xc5, 0x01, 0x0a, 0x17, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, + 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x74, 0x61, + 0x63, 0x6b, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0x45, 0x0a, 0x17, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, + 0x11, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, + 0x67, 0x73, 0x22, 0x13, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x6f, 0x62, 0x73, 0x69, 0x6f, 0x2f, 0x6b, 0x6f, 0x62, + 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_application_proto_rawDescOnce sync.Once + file_application_proto_rawDescData = file_application_proto_rawDesc +) + +func file_application_proto_rawDescGZIP() []byte { + file_application_proto_rawDescOnce.Do(func() { + file_application_proto_rawDescData = protoimpl.X.CompressGZIP(file_application_proto_rawDescData) + }) + return file_application_proto_rawDescData +} + +var file_application_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_application_proto_goTypes = []interface{}{ + (*Application)(nil), // 0: application.Application + (*ApplicationLink)(nil), // 1: application.ApplicationLink + (*ApplicationResources)(nil), // 2: application.ApplicationResources + (*ApplicationMetrics)(nil), // 3: application.ApplicationMetrics + (*ApplicationMetricsVariable)(nil), // 4: application.ApplicationMetricsVariable + (*ApplicationMetricsChart)(nil), // 5: application.ApplicationMetricsChart + (*ApplicationMetricsQuery)(nil), // 6: application.ApplicationMetricsQuery + (*ApplicationLogs)(nil), // 7: application.ApplicationLogs + (*ApplicationTraces)(nil), // 8: application.ApplicationTraces +} +var file_application_proto_depIdxs = []int32{ + 1, // 0: application.Application.links:type_name -> application.ApplicationLink + 2, // 1: application.Application.resources:type_name -> application.ApplicationResources + 3, // 2: application.Application.metrics:type_name -> application.ApplicationMetrics + 7, // 3: application.Application.logs:type_name -> application.ApplicationLogs + 8, // 4: application.Application.traces:type_name -> application.ApplicationTraces + 5, // 5: application.ApplicationMetrics.health:type_name -> application.ApplicationMetricsChart + 4, // 6: application.ApplicationMetrics.variables:type_name -> application.ApplicationMetricsVariable + 5, // 7: application.ApplicationMetrics.charts:type_name -> application.ApplicationMetricsChart + 6, // 8: application.ApplicationMetricsChart.queries:type_name -> application.ApplicationMetricsQuery + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_application_proto_init() } +func file_application_proto_init() { + if File_application_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_application_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Application); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_application_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationLink); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_application_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationResources); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_application_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationMetrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_application_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationMetricsVariable); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_application_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationMetricsChart); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_application_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationMetricsQuery); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_application_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationLogs); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_application_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationTraces); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_application_proto_rawDesc, + NumEnums: 0, + NumMessages: 9, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_application_proto_goTypes, + DependencyIndexes: file_application_proto_depIdxs, + MessageInfos: file_application_proto_msgTypes, + }.Build() + File_application_proto = out.File + file_application_proto_rawDesc = nil + file_application_proto_goTypes = nil + file_application_proto_depIdxs = nil +} diff --git a/pkg/generated/proto/application_deepcopy.gen.go b/pkg/generated/proto/application_deepcopy.gen.go new file mode 100644 index 000000000..324c48b51 --- /dev/null +++ b/pkg/generated/proto/application_deepcopy.gen.go @@ -0,0 +1,204 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: application.proto + +package proto + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// DeepCopyInto supports using Application within kubernetes types, where deepcopy-gen is used. +func (in *Application) DeepCopyInto(out *Application) { + p := proto.Clone(in).(*Application) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Application. Required by controller-gen. +func (in *Application) DeepCopy() *Application { + if in == nil { + return nil + } + out := new(Application) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Application. Required by controller-gen. +func (in *Application) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using ApplicationLink within kubernetes types, where deepcopy-gen is used. +func (in *ApplicationLink) DeepCopyInto(out *ApplicationLink) { + p := proto.Clone(in).(*ApplicationLink) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationLink. Required by controller-gen. +func (in *ApplicationLink) DeepCopy() *ApplicationLink { + if in == nil { + return nil + } + out := new(ApplicationLink) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationLink. Required by controller-gen. +func (in *ApplicationLink) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using ApplicationResources within kubernetes types, where deepcopy-gen is used. +func (in *ApplicationResources) DeepCopyInto(out *ApplicationResources) { + p := proto.Clone(in).(*ApplicationResources) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationResources. Required by controller-gen. +func (in *ApplicationResources) DeepCopy() *ApplicationResources { + if in == nil { + return nil + } + out := new(ApplicationResources) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationResources. Required by controller-gen. +func (in *ApplicationResources) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using ApplicationMetrics within kubernetes types, where deepcopy-gen is used. +func (in *ApplicationMetrics) DeepCopyInto(out *ApplicationMetrics) { + p := proto.Clone(in).(*ApplicationMetrics) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationMetrics. Required by controller-gen. +func (in *ApplicationMetrics) DeepCopy() *ApplicationMetrics { + if in == nil { + return nil + } + out := new(ApplicationMetrics) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationMetrics. Required by controller-gen. +func (in *ApplicationMetrics) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using ApplicationMetricsVariable within kubernetes types, where deepcopy-gen is used. +func (in *ApplicationMetricsVariable) DeepCopyInto(out *ApplicationMetricsVariable) { + p := proto.Clone(in).(*ApplicationMetricsVariable) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationMetricsVariable. Required by controller-gen. +func (in *ApplicationMetricsVariable) DeepCopy() *ApplicationMetricsVariable { + if in == nil { + return nil + } + out := new(ApplicationMetricsVariable) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationMetricsVariable. Required by controller-gen. +func (in *ApplicationMetricsVariable) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using ApplicationMetricsChart within kubernetes types, where deepcopy-gen is used. +func (in *ApplicationMetricsChart) DeepCopyInto(out *ApplicationMetricsChart) { + p := proto.Clone(in).(*ApplicationMetricsChart) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationMetricsChart. Required by controller-gen. +func (in *ApplicationMetricsChart) DeepCopy() *ApplicationMetricsChart { + if in == nil { + return nil + } + out := new(ApplicationMetricsChart) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationMetricsChart. Required by controller-gen. +func (in *ApplicationMetricsChart) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using ApplicationMetricsQuery within kubernetes types, where deepcopy-gen is used. +func (in *ApplicationMetricsQuery) DeepCopyInto(out *ApplicationMetricsQuery) { + p := proto.Clone(in).(*ApplicationMetricsQuery) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationMetricsQuery. Required by controller-gen. +func (in *ApplicationMetricsQuery) DeepCopy() *ApplicationMetricsQuery { + if in == nil { + return nil + } + out := new(ApplicationMetricsQuery) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationMetricsQuery. Required by controller-gen. +func (in *ApplicationMetricsQuery) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using ApplicationLogs within kubernetes types, where deepcopy-gen is used. +func (in *ApplicationLogs) DeepCopyInto(out *ApplicationLogs) { + p := proto.Clone(in).(*ApplicationLogs) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationLogs. Required by controller-gen. +func (in *ApplicationLogs) DeepCopy() *ApplicationLogs { + if in == nil { + return nil + } + out := new(ApplicationLogs) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationLogs. Required by controller-gen. +func (in *ApplicationLogs) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using ApplicationTraces within kubernetes types, where deepcopy-gen is used. +func (in *ApplicationTraces) DeepCopyInto(out *ApplicationTraces) { + p := proto.Clone(in).(*ApplicationTraces) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationTraces. Required by controller-gen. +func (in *ApplicationTraces) DeepCopy() *ApplicationTraces { + if in == nil { + return nil + } + out := new(ApplicationTraces) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationTraces. Required by controller-gen. +func (in *ApplicationTraces) DeepCopyInterface() interface{} { + return in.DeepCopy() +} diff --git a/pkg/generated/proto/applications.pb.go b/pkg/generated/proto/applications.pb.go deleted file mode 100644 index ad800d509..000000000 --- a/pkg/generated/proto/applications.pb.go +++ /dev/null @@ -1,349 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.25.0 -// protoc v3.14.0 -// source: applications.proto - -package proto - -import ( - proto "github.com/golang/protobuf/proto" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -// Application is the specification for an application. This specification is also used for the Kubernetes CRD as -// ApplicationSpec. -// This is also the reason why we use istio.io/tools/cmd/protoc-gen-deepcopy within the code generation, to generate the -// deepcopy function, which are required to use the Application within a CRD. -type Application struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` - Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Links []*ApplicationLink `protobuf:"bytes,4,rep,name=links,proto3" json:"links,omitempty"` - Resources []*ApplicationResources `protobuf:"bytes,5,rep,name=resources,proto3" json:"resources,omitempty"` -} - -func (x *Application) Reset() { - *x = Application{} - if protoimpl.UnsafeEnabled { - mi := &file_applications_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Application) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Application) ProtoMessage() {} - -func (x *Application) ProtoReflect() protoreflect.Message { - mi := &file_applications_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Application.ProtoReflect.Descriptor instead. -func (*Application) Descriptor() ([]byte, []int) { - return file_applications_proto_rawDescGZIP(), []int{0} -} - -func (x *Application) GetCluster() string { - if x != nil { - return x.Cluster - } - return "" -} - -func (x *Application) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} - -func (x *Application) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Application) GetLinks() []*ApplicationLink { - if x != nil { - return x.Links - } - return nil -} - -func (x *Application) GetResources() []*ApplicationResources { - if x != nil { - return x.Resources - } - return nil -} - -// ApplicationLink is the format of a link, which can be provided within an application. A link consists of a title, -// which is displayed in the frontend and the link link (title=Example, link=https://example.com). -type ApplicationLink struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Link string `protobuf:"bytes,2,opt,name=link,proto3" json:"link,omitempty"` -} - -func (x *ApplicationLink) Reset() { - *x = ApplicationLink{} - if protoimpl.UnsafeEnabled { - mi := &file_applications_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ApplicationLink) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ApplicationLink) ProtoMessage() {} - -func (x *ApplicationLink) ProtoReflect() protoreflect.Message { - mi := &file_applications_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ApplicationLink.ProtoReflect.Descriptor instead. -func (*ApplicationLink) Descriptor() ([]byte, []int) { - return file_applications_proto_rawDescGZIP(), []int{1} -} - -func (x *ApplicationLink) GetTitle() string { - if x != nil { - return x.Title - } - return "" -} - -func (x *ApplicationLink) GetLink() string { - if x != nil { - return x.Link - } - return "" -} - -// ApplicationResources is the specification to retrieve all Kubernetes resources, which can be associated with the -// application. For that, a list of kinds (deployments, pods, statefulsets) as specified in -// app/src/components/resources/helpers.tsx and a selector must be set. Currently only label selector is supported, -// e.g. app=example. -type ApplicationResources struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Kinds []string `protobuf:"bytes,1,rep,name=kinds,proto3" json:"kinds,omitempty"` - Selector string `protobuf:"bytes,2,opt,name=selector,proto3" json:"selector,omitempty"` -} - -func (x *ApplicationResources) Reset() { - *x = ApplicationResources{} - if protoimpl.UnsafeEnabled { - mi := &file_applications_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ApplicationResources) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ApplicationResources) ProtoMessage() {} - -func (x *ApplicationResources) ProtoReflect() protoreflect.Message { - mi := &file_applications_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ApplicationResources.ProtoReflect.Descriptor instead. -func (*ApplicationResources) Descriptor() ([]byte, []int) { - return file_applications_proto_rawDescGZIP(), []int{2} -} - -func (x *ApplicationResources) GetKinds() []string { - if x != nil { - return x.Kinds - } - return nil -} - -func (x *ApplicationResources) GetSelector() string { - if x != nil { - return x.Selector - } - return "" -} - -var File_applications_proto protoreflect.FileDescriptor - -var file_applications_proto_rawDesc = []byte{ - 0x0a, 0x12, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, - 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, 0x69, - 0x6e, 0x6b, 0x73, 0x12, 0x40, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x3b, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x69, - 0x6e, 0x6b, 0x22, 0x48, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6b, 0x69, - 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x2c, 0x5a, 0x2a, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x6f, 0x62, 0x73, 0x69, - 0x6f, 0x2f, 0x6b, 0x6f, 0x62, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_applications_proto_rawDescOnce sync.Once - file_applications_proto_rawDescData = file_applications_proto_rawDesc -) - -func file_applications_proto_rawDescGZIP() []byte { - file_applications_proto_rawDescOnce.Do(func() { - file_applications_proto_rawDescData = protoimpl.X.CompressGZIP(file_applications_proto_rawDescData) - }) - return file_applications_proto_rawDescData -} - -var file_applications_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_applications_proto_goTypes = []interface{}{ - (*Application)(nil), // 0: applications.Application - (*ApplicationLink)(nil), // 1: applications.ApplicationLink - (*ApplicationResources)(nil), // 2: applications.ApplicationResources -} -var file_applications_proto_depIdxs = []int32{ - 1, // 0: applications.Application.links:type_name -> applications.ApplicationLink - 2, // 1: applications.Application.resources:type_name -> applications.ApplicationResources - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_applications_proto_init() } -func file_applications_proto_init() { - if File_applications_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_applications_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Application); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_applications_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplicationLink); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_applications_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplicationResources); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_applications_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_applications_proto_goTypes, - DependencyIndexes: file_applications_proto_depIdxs, - MessageInfos: file_applications_proto_msgTypes, - }.Build() - File_applications_proto = out.File - file_applications_proto_rawDesc = nil - file_applications_proto_goTypes = nil - file_applications_proto_depIdxs = nil -} diff --git a/pkg/generated/proto/applications_deepcopy.gen.go b/pkg/generated/proto/applications_deepcopy.gen.go deleted file mode 100644 index 7b6f105d9..000000000 --- a/pkg/generated/proto/applications_deepcopy.gen.go +++ /dev/null @@ -1,78 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: applications.proto - -package proto - -import ( - fmt "fmt" - proto "github.com/gogo/protobuf/proto" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// DeepCopyInto supports using Application within kubernetes types, where deepcopy-gen is used. -func (in *Application) DeepCopyInto(out *Application) { - p := proto.Clone(in).(*Application) - *out = *p -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Application. Required by controller-gen. -func (in *Application) DeepCopy() *Application { - if in == nil { - return nil - } - out := new(Application) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Application. Required by controller-gen. -func (in *Application) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using ApplicationLink within kubernetes types, where deepcopy-gen is used. -func (in *ApplicationLink) DeepCopyInto(out *ApplicationLink) { - p := proto.Clone(in).(*ApplicationLink) - *out = *p -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationLink. Required by controller-gen. -func (in *ApplicationLink) DeepCopy() *ApplicationLink { - if in == nil { - return nil - } - out := new(ApplicationLink) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationLink. Required by controller-gen. -func (in *ApplicationLink) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using ApplicationResources within kubernetes types, where deepcopy-gen is used. -func (in *ApplicationResources) DeepCopyInto(out *ApplicationResources) { - p := proto.Clone(in).(*ApplicationResources) - *out = *p -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationResources. Required by controller-gen. -func (in *ApplicationResources) DeepCopy() *ApplicationResources { - if in == nil { - return nil - } - out := new(ApplicationResources) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationResources. Required by controller-gen. -func (in *ApplicationResources) DeepCopyInterface() interface{} { - return in.DeepCopy() -} diff --git a/pkg/generated/proto/applications_grpc.pb.go b/pkg/generated/proto/applications_grpc.pb.go deleted file mode 100644 index da2ef3963..000000000 --- a/pkg/generated/proto/applications_grpc.pb.go +++ /dev/null @@ -1,137 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. - -package proto - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -// ApplicationsClient is the client API for Applications service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type ApplicationsClient interface { - GetApplications(ctx context.Context, in *GetApplicationsRequest, opts ...grpc.CallOption) (*GetApplicationsResponse, error) - GetApplication(ctx context.Context, in *GetApplicationRequest, opts ...grpc.CallOption) (*GetApplicationResponse, error) -} - -type applicationsClient struct { - cc grpc.ClientConnInterface -} - -func NewApplicationsClient(cc grpc.ClientConnInterface) ApplicationsClient { - return &applicationsClient{cc} -} - -func (c *applicationsClient) GetApplications(ctx context.Context, in *GetApplicationsRequest, opts ...grpc.CallOption) (*GetApplicationsResponse, error) { - out := new(GetApplicationsResponse) - err := c.cc.Invoke(ctx, "/clusters.Applications/GetApplications", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *applicationsClient) GetApplication(ctx context.Context, in *GetApplicationRequest, opts ...grpc.CallOption) (*GetApplicationResponse, error) { - out := new(GetApplicationResponse) - err := c.cc.Invoke(ctx, "/clusters.Applications/GetApplication", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ApplicationsServer is the server API for Applications service. -// All implementations must embed UnimplementedApplicationsServer -// for forward compatibility -type ApplicationsServer interface { - GetApplications(context.Context, *GetApplicationsRequest) (*GetApplicationsResponse, error) - GetApplication(context.Context, *GetApplicationRequest) (*GetApplicationResponse, error) - mustEmbedUnimplementedApplicationsServer() -} - -// UnimplementedApplicationsServer must be embedded to have forward compatible implementations. -type UnimplementedApplicationsServer struct { -} - -func (UnimplementedApplicationsServer) GetApplications(context.Context, *GetApplicationsRequest) (*GetApplicationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetApplications not implemented") -} -func (UnimplementedApplicationsServer) GetApplication(context.Context, *GetApplicationRequest) (*GetApplicationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetApplication not implemented") -} -func (UnimplementedApplicationsServer) mustEmbedUnimplementedApplicationsServer() {} - -// UnsafeApplicationsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to ApplicationsServer will -// result in compilation errors. -type UnsafeApplicationsServer interface { - mustEmbedUnimplementedApplicationsServer() -} - -func RegisterApplicationsServer(s grpc.ServiceRegistrar, srv ApplicationsServer) { - s.RegisterService(&Applications_ServiceDesc, srv) -} - -func _Applications_GetApplications_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetApplicationsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ApplicationsServer).GetApplications(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/clusters.Applications/GetApplications", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ApplicationsServer).GetApplications(ctx, req.(*GetApplicationsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Applications_GetApplication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetApplicationRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ApplicationsServer).GetApplication(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/clusters.Applications/GetApplication", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ApplicationsServer).GetApplication(ctx, req.(*GetApplicationRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// Applications_ServiceDesc is the grpc.ServiceDesc for Applications service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Applications_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "clusters.Applications", - HandlerType: (*ApplicationsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetApplications", - Handler: _Applications_GetApplications_Handler, - }, - { - MethodName: "GetApplication", - Handler: _Applications_GetApplication_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "applications.proto", -} diff --git a/pkg/generated/proto/clusters.pb.go b/pkg/generated/proto/clusters.pb.go index f272e3dc7..82fbcc418 100644 --- a/pkg/generated/proto/clusters.pb.go +++ b/pkg/generated/proto/clusters.pb.go @@ -637,96 +637,95 @@ var File_clusters_proto protoreflect.FileDescriptor var file_clusters_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x12, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x14, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x31, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x32, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x37, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x22, 0xb5, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x49, 0x0a, 0x14, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x67, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1c, - 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x22, 0x54, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, + 0x12, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x11, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x14, 0x0a, + 0x12, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x31, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x32, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x37, 0x0a, 0x15, 0x47, 0x65, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x22, 0xb5, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x49, 0x0a, 0x14, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x67, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1c, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x54, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x57, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3c, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x63, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, + 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0xae, 0x03, 0x0a, 0x08, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0f, 0x47, 0x65, 0x74, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x63, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3b, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0xae, 0x03, 0x0a, - 0x08, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0c, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, - 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x6f, 0x62, 0x73, - 0x69, 0x6f, 0x2f, 0x6b, 0x6f, 0x62, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x6f, 0x62, 0x73, 0x69, 0x6f, 0x2f, + 0x6b, 0x6f, 0x62, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -754,12 +753,12 @@ var file_clusters_proto_goTypes = []interface{}{ (*GetApplicationsResponse)(nil), // 8: clusters.GetApplicationsResponse (*GetApplicationRequest)(nil), // 9: clusters.GetApplicationRequest (*GetApplicationResponse)(nil), // 10: clusters.GetApplicationResponse - (*Application)(nil), // 11: applications.Application + (*Application)(nil), // 11: application.Application } var file_clusters_proto_depIdxs = []int32{ 6, // 0: clusters.GetResourcesResponse.resources:type_name -> clusters.Resources - 11, // 1: clusters.GetApplicationsResponse.applications:type_name -> applications.Application - 11, // 2: clusters.GetApplicationResponse.application:type_name -> applications.Application + 11, // 1: clusters.GetApplicationsResponse.applications:type_name -> application.Application + 11, // 2: clusters.GetApplicationResponse.application:type_name -> application.Application 0, // 3: clusters.Clusters.GetClusters:input_type -> clusters.GetClustersRequest 2, // 4: clusters.Clusters.GetNamespaces:input_type -> clusters.GetNamespacesRequest 4, // 5: clusters.Clusters.GetResources:input_type -> clusters.GetResourcesRequest @@ -782,7 +781,7 @@ func file_clusters_proto_init() { if File_clusters_proto != nil { return } - file_applications_proto_init() + file_application_proto_init() if !protoimpl.UnsafeEnabled { file_clusters_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClustersRequest); i { diff --git a/pkg/generated/proto/datasources.pb.go b/pkg/generated/proto/datasources.pb.go new file mode 100644 index 000000000..2e2868508 --- /dev/null +++ b/pkg/generated/proto/datasources.pb.go @@ -0,0 +1,1110 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0 +// protoc v3.14.0 +// source: datasources.proto + +package proto + +import ( + proto "github.com/golang/protobuf/proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +// GetDatasourceRequest is the request message to get the type of a datasource. Each datasource can be identified by +// it's name, so that only the name is required in this request. +type GetDatasourceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GetDatasourceRequest) Reset() { + *x = GetDatasourceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDatasourceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDatasourceRequest) ProtoMessage() {} + +func (x *GetDatasourceRequest) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDatasourceRequest.ProtoReflect.Descriptor instead. +func (*GetDatasourceRequest) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{0} +} + +func (x *GetDatasourceRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// GetDatasourceResponse is the response for a GetDatasource request. At the moment this only returns the type of the, +// datasource, but it can be extended later with other properties for a datasource. +// This request should never return any confidential properties of a datasource like username / password, which is +// required for the authentication against the datasource. +type GetDatasourceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *GetDatasourceResponse) Reset() { + *x = GetDatasourceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDatasourceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDatasourceResponse) ProtoMessage() {} + +func (x *GetDatasourceResponse) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDatasourceResponse.ProtoReflect.Descriptor instead. +func (*GetDatasourceResponse) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{1} +} + +func (x *GetDatasourceResponse) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetDatasourceResponse) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +// GetVariablesRequest is the request data needed to get all variables for the metrics view of an application. The +// request contains various options for the datasource (like start/end time) and the variables of an application. It +// also contains the name of the datasource, which should be used. +type GetVariablesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Options *DatasourceOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"` + Variables []*ApplicationMetricsVariable `protobuf:"bytes,3,rep,name=variables,proto3" json:"variables,omitempty"` +} + +func (x *GetVariablesRequest) Reset() { + *x = GetVariablesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetVariablesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetVariablesRequest) ProtoMessage() {} + +func (x *GetVariablesRequest) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetVariablesRequest.ProtoReflect.Descriptor instead. +func (*GetVariablesRequest) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{2} +} + +func (x *GetVariablesRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetVariablesRequest) GetOptions() *DatasourceOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *GetVariablesRequest) GetVariables() []*ApplicationMetricsVariable { + if x != nil { + return x.Variables + } + return nil +} + +// GetVariablesResponse is the response for a GetVariables request, it contains the variables of the application, with +// the values and value field. +type GetVariablesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Variables []*ApplicationMetricsVariable `protobuf:"bytes,1,rep,name=variables,proto3" json:"variables,omitempty"` +} + +func (x *GetVariablesResponse) Reset() { + *x = GetVariablesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetVariablesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetVariablesResponse) ProtoMessage() {} + +func (x *GetVariablesResponse) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetVariablesResponse.ProtoReflect.Descriptor instead. +func (*GetVariablesResponse) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{3} +} + +func (x *GetVariablesResponse) GetVariables() []*ApplicationMetricsVariable { + if x != nil { + return x.Variables + } + return nil +} + +// GetMetricsRequest is the structure of a call to get a time series for a chart. It must contain the name of the +// datasource, options like the start/end time and the user defined queries for the chart. +type GetMetricsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Options *DatasourceOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"` + Variables []*ApplicationMetricsVariable `protobuf:"bytes,3,rep,name=variables,proto3" json:"variables,omitempty"` + Queries []*ApplicationMetricsQuery `protobuf:"bytes,4,rep,name=queries,proto3" json:"queries,omitempty"` +} + +func (x *GetMetricsRequest) Reset() { + *x = GetMetricsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMetricsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMetricsRequest) ProtoMessage() {} + +func (x *GetMetricsRequest) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMetricsRequest.ProtoReflect.Descriptor instead. +func (*GetMetricsRequest) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{4} +} + +func (x *GetMetricsRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetMetricsRequest) GetOptions() *DatasourceOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *GetMetricsRequest) GetVariables() []*ApplicationMetricsVariable { + if x != nil { + return x.Variables + } + return nil +} + +func (x *GetMetricsRequest) GetQueries() []*ApplicationMetricsQuery { + if x != nil { + return x.Queries + } + return nil +} + +// GetMetricsResponse is the response for a GetMetrics request. It contains the data needed to render the chart in the +// React UI. +type GetMetricsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Metrics []*DatasourceMetrics `protobuf:"bytes,1,rep,name=metrics,proto3" json:"metrics,omitempty"` +} + +func (x *GetMetricsResponse) Reset() { + *x = GetMetricsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMetricsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMetricsResponse) ProtoMessage() {} + +func (x *GetMetricsResponse) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMetricsResponse.ProtoReflect.Descriptor instead. +func (*GetMetricsResponse) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{5} +} + +func (x *GetMetricsResponse) GetMetrics() []*DatasourceMetrics { + if x != nil { + return x.Metrics + } + return nil +} + +type GetLogsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Options *DatasourceOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"` +} + +func (x *GetLogsRequest) Reset() { + *x = GetLogsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetLogsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetLogsRequest) ProtoMessage() {} + +func (x *GetLogsRequest) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetLogsRequest.ProtoReflect.Descriptor instead. +func (*GetLogsRequest) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{6} +} + +func (x *GetLogsRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetLogsRequest) GetOptions() *DatasourceOptions { + if x != nil { + return x.Options + } + return nil +} + +type GetLogsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetLogsResponse) Reset() { + *x = GetLogsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetLogsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetLogsResponse) ProtoMessage() {} + +func (x *GetLogsResponse) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetLogsResponse.ProtoReflect.Descriptor instead. +func (*GetLogsResponse) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{7} +} + +type GetTracesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Options *DatasourceOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"` +} + +func (x *GetTracesRequest) Reset() { + *x = GetTracesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTracesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTracesRequest) ProtoMessage() {} + +func (x *GetTracesRequest) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTracesRequest.ProtoReflect.Descriptor instead. +func (*GetTracesRequest) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{8} +} + +func (x *GetTracesRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetTracesRequest) GetOptions() *DatasourceOptions { + if x != nil { + return x.Options + } + return nil +} + +type GetTracesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetTracesResponse) Reset() { + *x = GetTracesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTracesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTracesResponse) ProtoMessage() {} + +func (x *GetTracesResponse) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTracesResponse.ProtoReflect.Descriptor instead. +func (*GetTracesResponse) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{9} +} + +// DatasourceOptions contains various options, which are need to get metrics, logs and traces across different +// datasources. These can be general options like start time, end time and datasource specific options like the +// resolution for Prometheus series. +type DatasourceOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TimeStart int64 `protobuf:"varint,1,opt,name=timeStart,proto3" json:"timeStart,omitempty"` + TimeEnd int64 `protobuf:"varint,2,opt,name=timeEnd,proto3" json:"timeEnd,omitempty"` + Resolution string `protobuf:"bytes,3,opt,name=resolution,proto3" json:"resolution,omitempty"` +} + +func (x *DatasourceOptions) Reset() { + *x = DatasourceOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DatasourceOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DatasourceOptions) ProtoMessage() {} + +func (x *DatasourceOptions) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DatasourceOptions.ProtoReflect.Descriptor instead. +func (*DatasourceOptions) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{10} +} + +func (x *DatasourceOptions) GetTimeStart() int64 { + if x != nil { + return x.TimeStart + } + return 0 +} + +func (x *DatasourceOptions) GetTimeEnd() int64 { + if x != nil { + return x.TimeEnd + } + return 0 +} + +func (x *DatasourceOptions) GetResolution() string { + if x != nil { + return x.Resolution + } + return "" +} + +// DatasourceMetrics contains the label and all data points for a metric. It also contains the minimum and maximum value +// of all data points. +type DatasourceMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Label string `protobuf:"bytes,1,opt,name=label,proto3" json:"label,omitempty"` + Min float64 `protobuf:"fixed64,2,opt,name=min,proto3" json:"min,omitempty"` + Max float64 `protobuf:"fixed64,3,opt,name=max,proto3" json:"max,omitempty"` + Data []*DatasourceMetricsData `protobuf:"bytes,4,rep,name=data,proto3" json:"data,omitempty"` +} + +func (x *DatasourceMetrics) Reset() { + *x = DatasourceMetrics{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DatasourceMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DatasourceMetrics) ProtoMessage() {} + +func (x *DatasourceMetrics) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DatasourceMetrics.ProtoReflect.Descriptor instead. +func (*DatasourceMetrics) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{11} +} + +func (x *DatasourceMetrics) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *DatasourceMetrics) GetMin() float64 { + if x != nil { + return x.Min + } + return 0 +} + +func (x *DatasourceMetrics) GetMax() float64 { + if x != nil { + return x.Max + } + return 0 +} + +func (x *DatasourceMetrics) GetData() []*DatasourceMetricsData { + if x != nil { + return x.Data + } + return nil +} + +// DatasourceMetricsData is one data point for a metric. Each data point contains a timestamp and a value, where x is +// the timestamp and y is the value. +type DatasourceMetricsData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + X int64 `protobuf:"varint,1,opt,name=x,proto3" json:"x,omitempty"` + Y float64 `protobuf:"fixed64,2,opt,name=y,proto3" json:"y,omitempty"` +} + +func (x *DatasourceMetricsData) Reset() { + *x = DatasourceMetricsData{} + if protoimpl.UnsafeEnabled { + mi := &file_datasources_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DatasourceMetricsData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DatasourceMetricsData) ProtoMessage() {} + +func (x *DatasourceMetricsData) ProtoReflect() protoreflect.Message { + mi := &file_datasources_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DatasourceMetricsData.ProtoReflect.Descriptor instead. +func (*DatasourceMetricsData) Descriptor() ([]byte, []int) { + return file_datasources_proto_rawDescGZIP(), []int{12} +} + +func (x *DatasourceMetricsData) GetX() int64 { + if x != nil { + return x.X + } + return 0 +} + +func (x *DatasourceMetricsData) GetY() float64 { + if x != nil { + return x.Y + } + return 0 +} + +var File_datasources_proto protoreflect.FileDescriptor + +var file_datasources_proto_rawDesc = []byte{ + 0x0a, 0x11, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x1a, 0x11, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x3f, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x22, 0xaa, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x07, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x5d, 0x0a, + 0x14, 0x47, 0x65, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0xe8, 0x01, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x45, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x09, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, + 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0x4e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, + 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x5e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x6f, + 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x6f, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x60, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x13, 0x0a, 0x11, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x6b, 0x0a, 0x11, 0x44, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x85, + 0x01, 0x0a, 0x11, 0x44, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, + 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x36, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x33, 0x0a, 0x15, 0x44, 0x61, 0x74, 0x61, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, + 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x01, 0x79, 0x32, 0xa5, 0x03, 0x0a, 0x0b, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x0d, 0x47, + 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0a, + 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1e, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, + 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x63, + 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6b, 0x6f, 0x62, 0x73, 0x69, 0x6f, 0x2f, 0x6b, 0x6f, 0x62, 0x73, 0x2f, 0x70, 0x6b, + 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_datasources_proto_rawDescOnce sync.Once + file_datasources_proto_rawDescData = file_datasources_proto_rawDesc +) + +func file_datasources_proto_rawDescGZIP() []byte { + file_datasources_proto_rawDescOnce.Do(func() { + file_datasources_proto_rawDescData = protoimpl.X.CompressGZIP(file_datasources_proto_rawDescData) + }) + return file_datasources_proto_rawDescData +} + +var file_datasources_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_datasources_proto_goTypes = []interface{}{ + (*GetDatasourceRequest)(nil), // 0: datasources.GetDatasourceRequest + (*GetDatasourceResponse)(nil), // 1: datasources.GetDatasourceResponse + (*GetVariablesRequest)(nil), // 2: datasources.GetVariablesRequest + (*GetVariablesResponse)(nil), // 3: datasources.GetVariablesResponse + (*GetMetricsRequest)(nil), // 4: datasources.GetMetricsRequest + (*GetMetricsResponse)(nil), // 5: datasources.GetMetricsResponse + (*GetLogsRequest)(nil), // 6: datasources.GetLogsRequest + (*GetLogsResponse)(nil), // 7: datasources.GetLogsResponse + (*GetTracesRequest)(nil), // 8: datasources.GetTracesRequest + (*GetTracesResponse)(nil), // 9: datasources.GetTracesResponse + (*DatasourceOptions)(nil), // 10: datasources.DatasourceOptions + (*DatasourceMetrics)(nil), // 11: datasources.DatasourceMetrics + (*DatasourceMetricsData)(nil), // 12: datasources.DatasourceMetricsData + (*ApplicationMetricsVariable)(nil), // 13: application.ApplicationMetricsVariable + (*ApplicationMetricsQuery)(nil), // 14: application.ApplicationMetricsQuery +} +var file_datasources_proto_depIdxs = []int32{ + 10, // 0: datasources.GetVariablesRequest.options:type_name -> datasources.DatasourceOptions + 13, // 1: datasources.GetVariablesRequest.variables:type_name -> application.ApplicationMetricsVariable + 13, // 2: datasources.GetVariablesResponse.variables:type_name -> application.ApplicationMetricsVariable + 10, // 3: datasources.GetMetricsRequest.options:type_name -> datasources.DatasourceOptions + 13, // 4: datasources.GetMetricsRequest.variables:type_name -> application.ApplicationMetricsVariable + 14, // 5: datasources.GetMetricsRequest.queries:type_name -> application.ApplicationMetricsQuery + 11, // 6: datasources.GetMetricsResponse.metrics:type_name -> datasources.DatasourceMetrics + 10, // 7: datasources.GetLogsRequest.options:type_name -> datasources.DatasourceOptions + 10, // 8: datasources.GetTracesRequest.options:type_name -> datasources.DatasourceOptions + 12, // 9: datasources.DatasourceMetrics.data:type_name -> datasources.DatasourceMetricsData + 0, // 10: datasources.Datasources.GetDatasource:input_type -> datasources.GetDatasourceRequest + 2, // 11: datasources.Datasources.GetVariables:input_type -> datasources.GetVariablesRequest + 4, // 12: datasources.Datasources.GetMetrics:input_type -> datasources.GetMetricsRequest + 6, // 13: datasources.Datasources.GetLogs:input_type -> datasources.GetLogsRequest + 8, // 14: datasources.Datasources.GetTraces:input_type -> datasources.GetTracesRequest + 1, // 15: datasources.Datasources.GetDatasource:output_type -> datasources.GetDatasourceResponse + 3, // 16: datasources.Datasources.GetVariables:output_type -> datasources.GetVariablesResponse + 5, // 17: datasources.Datasources.GetMetrics:output_type -> datasources.GetMetricsResponse + 7, // 18: datasources.Datasources.GetLogs:output_type -> datasources.GetLogsResponse + 9, // 19: datasources.Datasources.GetTraces:output_type -> datasources.GetTracesResponse + 15, // [15:20] is the sub-list for method output_type + 10, // [10:15] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name +} + +func init() { file_datasources_proto_init() } +func file_datasources_proto_init() { + if File_datasources_proto != nil { + return + } + file_application_proto_init() + if !protoimpl.UnsafeEnabled { + file_datasources_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDatasourceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDatasourceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetVariablesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetVariablesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMetricsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMetricsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetLogsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetLogsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTracesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTracesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DatasourceOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DatasourceMetrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datasources_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DatasourceMetricsData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_datasources_proto_rawDesc, + NumEnums: 0, + NumMessages: 13, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_datasources_proto_goTypes, + DependencyIndexes: file_datasources_proto_depIdxs, + MessageInfos: file_datasources_proto_msgTypes, + }.Build() + File_datasources_proto = out.File + file_datasources_proto_rawDesc = nil + file_datasources_proto_goTypes = nil + file_datasources_proto_depIdxs = nil +} diff --git a/pkg/generated/proto/datasources_deepcopy.gen.go b/pkg/generated/proto/datasources_deepcopy.gen.go new file mode 100644 index 000000000..17ab16653 --- /dev/null +++ b/pkg/generated/proto/datasources_deepcopy.gen.go @@ -0,0 +1,288 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: datasources.proto + +package proto + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// DeepCopyInto supports using GetDatasourceRequest within kubernetes types, where deepcopy-gen is used. +func (in *GetDatasourceRequest) DeepCopyInto(out *GetDatasourceRequest) { + p := proto.Clone(in).(*GetDatasourceRequest) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GetDatasourceRequest. Required by controller-gen. +func (in *GetDatasourceRequest) DeepCopy() *GetDatasourceRequest { + if in == nil { + return nil + } + out := new(GetDatasourceRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GetDatasourceRequest. Required by controller-gen. +func (in *GetDatasourceRequest) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using GetDatasourceResponse within kubernetes types, where deepcopy-gen is used. +func (in *GetDatasourceResponse) DeepCopyInto(out *GetDatasourceResponse) { + p := proto.Clone(in).(*GetDatasourceResponse) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GetDatasourceResponse. Required by controller-gen. +func (in *GetDatasourceResponse) DeepCopy() *GetDatasourceResponse { + if in == nil { + return nil + } + out := new(GetDatasourceResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GetDatasourceResponse. Required by controller-gen. +func (in *GetDatasourceResponse) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using GetVariablesRequest within kubernetes types, where deepcopy-gen is used. +func (in *GetVariablesRequest) DeepCopyInto(out *GetVariablesRequest) { + p := proto.Clone(in).(*GetVariablesRequest) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GetVariablesRequest. Required by controller-gen. +func (in *GetVariablesRequest) DeepCopy() *GetVariablesRequest { + if in == nil { + return nil + } + out := new(GetVariablesRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GetVariablesRequest. Required by controller-gen. +func (in *GetVariablesRequest) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using GetVariablesResponse within kubernetes types, where deepcopy-gen is used. +func (in *GetVariablesResponse) DeepCopyInto(out *GetVariablesResponse) { + p := proto.Clone(in).(*GetVariablesResponse) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GetVariablesResponse. Required by controller-gen. +func (in *GetVariablesResponse) DeepCopy() *GetVariablesResponse { + if in == nil { + return nil + } + out := new(GetVariablesResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GetVariablesResponse. Required by controller-gen. +func (in *GetVariablesResponse) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using GetMetricsRequest within kubernetes types, where deepcopy-gen is used. +func (in *GetMetricsRequest) DeepCopyInto(out *GetMetricsRequest) { + p := proto.Clone(in).(*GetMetricsRequest) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GetMetricsRequest. Required by controller-gen. +func (in *GetMetricsRequest) DeepCopy() *GetMetricsRequest { + if in == nil { + return nil + } + out := new(GetMetricsRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GetMetricsRequest. Required by controller-gen. +func (in *GetMetricsRequest) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using GetMetricsResponse within kubernetes types, where deepcopy-gen is used. +func (in *GetMetricsResponse) DeepCopyInto(out *GetMetricsResponse) { + p := proto.Clone(in).(*GetMetricsResponse) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GetMetricsResponse. Required by controller-gen. +func (in *GetMetricsResponse) DeepCopy() *GetMetricsResponse { + if in == nil { + return nil + } + out := new(GetMetricsResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GetMetricsResponse. Required by controller-gen. +func (in *GetMetricsResponse) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using GetLogsRequest within kubernetes types, where deepcopy-gen is used. +func (in *GetLogsRequest) DeepCopyInto(out *GetLogsRequest) { + p := proto.Clone(in).(*GetLogsRequest) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GetLogsRequest. Required by controller-gen. +func (in *GetLogsRequest) DeepCopy() *GetLogsRequest { + if in == nil { + return nil + } + out := new(GetLogsRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GetLogsRequest. Required by controller-gen. +func (in *GetLogsRequest) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using GetLogsResponse within kubernetes types, where deepcopy-gen is used. +func (in *GetLogsResponse) DeepCopyInto(out *GetLogsResponse) { + p := proto.Clone(in).(*GetLogsResponse) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GetLogsResponse. Required by controller-gen. +func (in *GetLogsResponse) DeepCopy() *GetLogsResponse { + if in == nil { + return nil + } + out := new(GetLogsResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GetLogsResponse. Required by controller-gen. +func (in *GetLogsResponse) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using GetTracesRequest within kubernetes types, where deepcopy-gen is used. +func (in *GetTracesRequest) DeepCopyInto(out *GetTracesRequest) { + p := proto.Clone(in).(*GetTracesRequest) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GetTracesRequest. Required by controller-gen. +func (in *GetTracesRequest) DeepCopy() *GetTracesRequest { + if in == nil { + return nil + } + out := new(GetTracesRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GetTracesRequest. Required by controller-gen. +func (in *GetTracesRequest) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using GetTracesResponse within kubernetes types, where deepcopy-gen is used. +func (in *GetTracesResponse) DeepCopyInto(out *GetTracesResponse) { + p := proto.Clone(in).(*GetTracesResponse) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GetTracesResponse. Required by controller-gen. +func (in *GetTracesResponse) DeepCopy() *GetTracesResponse { + if in == nil { + return nil + } + out := new(GetTracesResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GetTracesResponse. Required by controller-gen. +func (in *GetTracesResponse) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using DatasourceOptions within kubernetes types, where deepcopy-gen is used. +func (in *DatasourceOptions) DeepCopyInto(out *DatasourceOptions) { + p := proto.Clone(in).(*DatasourceOptions) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DatasourceOptions. Required by controller-gen. +func (in *DatasourceOptions) DeepCopy() *DatasourceOptions { + if in == nil { + return nil + } + out := new(DatasourceOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new DatasourceOptions. Required by controller-gen. +func (in *DatasourceOptions) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using DatasourceMetrics within kubernetes types, where deepcopy-gen is used. +func (in *DatasourceMetrics) DeepCopyInto(out *DatasourceMetrics) { + p := proto.Clone(in).(*DatasourceMetrics) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DatasourceMetrics. Required by controller-gen. +func (in *DatasourceMetrics) DeepCopy() *DatasourceMetrics { + if in == nil { + return nil + } + out := new(DatasourceMetrics) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new DatasourceMetrics. Required by controller-gen. +func (in *DatasourceMetrics) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using DatasourceMetricsData within kubernetes types, where deepcopy-gen is used. +func (in *DatasourceMetricsData) DeepCopyInto(out *DatasourceMetricsData) { + p := proto.Clone(in).(*DatasourceMetricsData) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DatasourceMetricsData. Required by controller-gen. +func (in *DatasourceMetricsData) DeepCopy() *DatasourceMetricsData { + if in == nil { + return nil + } + out := new(DatasourceMetricsData) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new DatasourceMetricsData. Required by controller-gen. +func (in *DatasourceMetricsData) DeepCopyInterface() interface{} { + return in.DeepCopy() +} diff --git a/pkg/generated/proto/datasources_grpc.pb.go b/pkg/generated/proto/datasources_grpc.pb.go new file mode 100644 index 000000000..383795087 --- /dev/null +++ b/pkg/generated/proto/datasources_grpc.pb.go @@ -0,0 +1,245 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package proto + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// DatasourcesClient is the client API for Datasources service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type DatasourcesClient interface { + GetDatasource(ctx context.Context, in *GetDatasourceRequest, opts ...grpc.CallOption) (*GetDatasourceResponse, error) + GetVariables(ctx context.Context, in *GetVariablesRequest, opts ...grpc.CallOption) (*GetVariablesResponse, error) + GetMetrics(ctx context.Context, in *GetMetricsRequest, opts ...grpc.CallOption) (*GetMetricsResponse, error) + GetLogs(ctx context.Context, in *GetLogsRequest, opts ...grpc.CallOption) (*GetLogsResponse, error) + GetTraces(ctx context.Context, in *GetTracesRequest, opts ...grpc.CallOption) (*GetTracesResponse, error) +} + +type datasourcesClient struct { + cc grpc.ClientConnInterface +} + +func NewDatasourcesClient(cc grpc.ClientConnInterface) DatasourcesClient { + return &datasourcesClient{cc} +} + +func (c *datasourcesClient) GetDatasource(ctx context.Context, in *GetDatasourceRequest, opts ...grpc.CallOption) (*GetDatasourceResponse, error) { + out := new(GetDatasourceResponse) + err := c.cc.Invoke(ctx, "/datasources.Datasources/GetDatasource", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasourcesClient) GetVariables(ctx context.Context, in *GetVariablesRequest, opts ...grpc.CallOption) (*GetVariablesResponse, error) { + out := new(GetVariablesResponse) + err := c.cc.Invoke(ctx, "/datasources.Datasources/GetVariables", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasourcesClient) GetMetrics(ctx context.Context, in *GetMetricsRequest, opts ...grpc.CallOption) (*GetMetricsResponse, error) { + out := new(GetMetricsResponse) + err := c.cc.Invoke(ctx, "/datasources.Datasources/GetMetrics", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasourcesClient) GetLogs(ctx context.Context, in *GetLogsRequest, opts ...grpc.CallOption) (*GetLogsResponse, error) { + out := new(GetLogsResponse) + err := c.cc.Invoke(ctx, "/datasources.Datasources/GetLogs", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datasourcesClient) GetTraces(ctx context.Context, in *GetTracesRequest, opts ...grpc.CallOption) (*GetTracesResponse, error) { + out := new(GetTracesResponse) + err := c.cc.Invoke(ctx, "/datasources.Datasources/GetTraces", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// DatasourcesServer is the server API for Datasources service. +// All implementations must embed UnimplementedDatasourcesServer +// for forward compatibility +type DatasourcesServer interface { + GetDatasource(context.Context, *GetDatasourceRequest) (*GetDatasourceResponse, error) + GetVariables(context.Context, *GetVariablesRequest) (*GetVariablesResponse, error) + GetMetrics(context.Context, *GetMetricsRequest) (*GetMetricsResponse, error) + GetLogs(context.Context, *GetLogsRequest) (*GetLogsResponse, error) + GetTraces(context.Context, *GetTracesRequest) (*GetTracesResponse, error) + mustEmbedUnimplementedDatasourcesServer() +} + +// UnimplementedDatasourcesServer must be embedded to have forward compatible implementations. +type UnimplementedDatasourcesServer struct { +} + +func (UnimplementedDatasourcesServer) GetDatasource(context.Context, *GetDatasourceRequest) (*GetDatasourceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDatasource not implemented") +} +func (UnimplementedDatasourcesServer) GetVariables(context.Context, *GetVariablesRequest) (*GetVariablesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetVariables not implemented") +} +func (UnimplementedDatasourcesServer) GetMetrics(context.Context, *GetMetricsRequest) (*GetMetricsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMetrics not implemented") +} +func (UnimplementedDatasourcesServer) GetLogs(context.Context, *GetLogsRequest) (*GetLogsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetLogs not implemented") +} +func (UnimplementedDatasourcesServer) GetTraces(context.Context, *GetTracesRequest) (*GetTracesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTraces not implemented") +} +func (UnimplementedDatasourcesServer) mustEmbedUnimplementedDatasourcesServer() {} + +// UnsafeDatasourcesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to DatasourcesServer will +// result in compilation errors. +type UnsafeDatasourcesServer interface { + mustEmbedUnimplementedDatasourcesServer() +} + +func RegisterDatasourcesServer(s grpc.ServiceRegistrar, srv DatasourcesServer) { + s.RegisterService(&Datasources_ServiceDesc, srv) +} + +func _Datasources_GetDatasource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDatasourceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasourcesServer).GetDatasource(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/datasources.Datasources/GetDatasource", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasourcesServer).GetDatasource(ctx, req.(*GetDatasourceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datasources_GetVariables_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVariablesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasourcesServer).GetVariables(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/datasources.Datasources/GetVariables", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasourcesServer).GetVariables(ctx, req.(*GetVariablesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datasources_GetMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMetricsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasourcesServer).GetMetrics(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/datasources.Datasources/GetMetrics", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasourcesServer).GetMetrics(ctx, req.(*GetMetricsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datasources_GetLogs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetLogsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasourcesServer).GetLogs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/datasources.Datasources/GetLogs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasourcesServer).GetLogs(ctx, req.(*GetLogsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Datasources_GetTraces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTracesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatasourcesServer).GetTraces(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/datasources.Datasources/GetTraces", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatasourcesServer).GetTraces(ctx, req.(*GetTracesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Datasources_ServiceDesc is the grpc.ServiceDesc for Datasources service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Datasources_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "datasources.Datasources", + HandlerType: (*DatasourcesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetDatasource", + Handler: _Datasources_GetDatasource_Handler, + }, + { + MethodName: "GetVariables", + Handler: _Datasources_GetVariables_Handler, + }, + { + MethodName: "GetMetrics", + Handler: _Datasources_GetMetrics_Handler, + }, + { + MethodName: "GetLogs", + Handler: _Datasources_GetLogs_Handler, + }, + { + MethodName: "GetTraces", + Handler: _Datasources_GetTraces_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "datasources.proto", +} diff --git a/proto/application.proto b/proto/application.proto new file mode 100644 index 000000000..6ced1d32f --- /dev/null +++ b/proto/application.proto @@ -0,0 +1,88 @@ +syntax = "proto3"; +package application; + +option go_package = "github.com/kobsio/kobs/pkg/generated/proto"; + +// Application is the specification for an application. This specification is also used for the Kubernetes CRD as +// ApplicationSpec. +// This is also the reason why we use istio.io/tools/cmd/protoc-gen-deepcopy within the code generation, to generate the +// deepcopy function, which are required to use the Application within a CRD. +message Application { + string cluster = 1; + string namespace = 2; + string name = 3; + repeated ApplicationLink links = 4; + repeated ApplicationResources resources = 5; + ApplicationMetrics metrics = 6; + ApplicationLogs logs = 7; + ApplicationTraces traces = 8; +} + +// ApplicationLink is the format of a link, which can be provided within an application. A link consists of a title, +// which is displayed in the frontend and the link link (title=Example, link=https://example.com). +message ApplicationLink { + string title = 1; + string link = 2; +} + +// ApplicationResources is the specification to retrieve all Kubernetes resources, which can be associated with the +// application. For that, a list of kinds (deployments, pods, statefulsets) as specified in +// app/src/components/resources/helpers.tsx and a selector must be set. Currently only label selector is supported, +// e.g. app=example. +message ApplicationResources { + repeated string kinds = 1; + string selector = 2; +} + +// ApplicationMetrics defines the structure of the metrics section of an application. It contains the name of the +// datasource, which is the same as the metrics datasource for a cluster, when the user doesn't set this field in the +// Application CR. It also contains a list of variables and charts. +// The health field can contain a single chart, which is used to display the health of an application in the +// applications overview. +message ApplicationMetrics { + string datasource = 1; + ApplicationMetricsChart health = 2; + repeated ApplicationMetricsVariable variables = 3; + repeated ApplicationMetricsChart charts = 4; +} + +// ApplicationMetricsVariable specifies a variable, which can be used within the charts. A variable must contain a name, +// a label and a query. It also can set the allowAll field to true, which will include an "All" option in the variables +// values. +// The values and value field must not be provided by the user. These fields will be set by the GetVariables call. If a +// user provide a "value", we will try to use it as the selected value. +message ApplicationMetricsVariable { + string name = 1; + string label = 2; + string query = 3; + bool allowAll = 4; + repeated string values = 5; + string value = 6; +} + +// ApplicationMetricsChart represents a chart for the metrics view. A chart must contain a title, a type (line, area, +// bar chart, etc.). It can also contain a unit for the y axis. If the stacked option is set to true all series for the +// chart will be stacked. The size parameter can be used to define the width of a chart for large screens. We are using +// a 12 column grid to display the charts, so the number must be between 1 and 12. The last option is a list of queries, +// which are executed against the datasource (e.g. For Prometheus this will be a list of PromQL queries). +message ApplicationMetricsChart { + string title = 1; + string type = 2; + string unit = 3; + bool stacked = 4; + int64 size = 5; + repeated ApplicationMetricsQuery queries = 6; +} + +// ApplicationMetricsQuery presents a single query to get the data, which should be shown in the chart for the metrics +// section. A query consists of a query string (e.g. PromQL) and a lable. The query and the label can contain variables +// via Go templating syntax (e.g. {{ .VARIABLE-NAME }}). For Prometheus the label can also contain a label from the +// returned series with the same syntax (e.g. {{ .SERIES-LABEL }}). +message ApplicationMetricsQuery { + string query = 1; + string label = 2; +} + +message ApplicationLogs {} + +message ApplicationTraces {} diff --git a/proto/applications.proto b/proto/applications.proto deleted file mode 100644 index 0ca3afcd4..000000000 --- a/proto/applications.proto +++ /dev/null @@ -1,32 +0,0 @@ -syntax = "proto3"; -package applications; - -option go_package = "github.com/kobsio/kobs/pkg/generated/proto"; - -// Application is the specification for an application. This specification is also used for the Kubernetes CRD as -// ApplicationSpec. -// This is also the reason why we use istio.io/tools/cmd/protoc-gen-deepcopy within the code generation, to generate the -// deepcopy function, which are required to use the Application within a CRD. -message Application { - string cluster = 1; - string namespace = 2; - string name = 3; - repeated ApplicationLink links = 4; - repeated ApplicationResources resources = 5; -} - -// ApplicationLink is the format of a link, which can be provided within an application. A link consists of a title, -// which is displayed in the frontend and the link link (title=Example, link=https://example.com). -message ApplicationLink { - string title = 1; - string link = 2; -} - -// ApplicationResources is the specification to retrieve all Kubernetes resources, which can be associated with the -// application. For that, a list of kinds (deployments, pods, statefulsets) as specified in -// app/src/components/resources/helpers.tsx and a selector must be set. Currently only label selector is supported, -// e.g. app=example. -message ApplicationResources { - repeated string kinds = 1; - string selector = 2; -} diff --git a/proto/clusters.proto b/proto/clusters.proto index 827906391..7e19cceca 100644 --- a/proto/clusters.proto +++ b/proto/clusters.proto @@ -3,7 +3,7 @@ package clusters; option go_package = "github.com/kobsio/kobs/pkg/generated/proto"; -import "applications.proto"; +import "application.proto"; // Clusters is the service to execute requests against all loaded Kubernetes clusters. The service can be used to get // all clusters, the namespaces for clusters and various Kubernetes resources. @@ -71,7 +71,7 @@ message GetApplicationsRequest { // GetApplicationsResponse is the response for a GetApplications request, which returns a list of applications. message GetApplicationsResponse { - repeated applications.Application applications = 1; + repeated application.Application applications = 1; } // GetApplicationRequest is the format to get a single application. Each application can be identified by the cluster, @@ -84,5 +84,5 @@ message GetApplicationRequest { // GetApplicationResponse is the response for a GetApplication request, which returns a single application. message GetApplicationResponse { - applications.Application application = 1; + application.Application application = 1; } diff --git a/proto/datasources.proto b/proto/datasources.proto new file mode 100644 index 000000000..75a1daa52 --- /dev/null +++ b/proto/datasources.proto @@ -0,0 +1,101 @@ +syntax = "proto3"; +package datasources; + +option go_package = "github.com/kobsio/kobs/pkg/generated/proto"; + +import "application.proto"; + +// Datasources implements the service for all datasource related requests. The service provides some general functions, +// like returning the type of a datasource for a given name. The service is also responsible for the implementation of +// the datasource specific functions. +service Datasources { + rpc GetDatasource(GetDatasourceRequest) returns (GetDatasourceResponse) {} + rpc GetVariables(GetVariablesRequest) returns (GetVariablesResponse) {} + rpc GetMetrics(GetMetricsRequest) returns (GetMetricsResponse) {} + rpc GetLogs(GetLogsRequest) returns (GetLogsResponse) {} + rpc GetTraces(GetTracesRequest) returns (GetTracesResponse) {} +} + +// GetDatasourceRequest is the request message to get the type of a datasource. Each datasource can be identified by +// it's name, so that only the name is required in this request. +message GetDatasourceRequest { + string name = 1; +} + +// GetDatasourceResponse is the response for a GetDatasource request. At the moment this only returns the type of the, +// datasource, but it can be extended later with other properties for a datasource. +// This request should never return any confidential properties of a datasource like username / password, which is +// required for the authentication against the datasource. +message GetDatasourceResponse { + string name = 1; + string type = 2; +} + +// GetVariablesRequest is the request data needed to get all variables for the metrics view of an application. The +// request contains various options for the datasource (like start/end time) and the variables of an application. It +// also contains the name of the datasource, which should be used. +message GetVariablesRequest { + string name = 1; + DatasourceOptions options = 2; + repeated application.ApplicationMetricsVariable variables = 3; +} + +// GetVariablesResponse is the response for a GetVariables request, it contains the variables of the application, with +// the values and value field. +message GetVariablesResponse { + repeated application.ApplicationMetricsVariable variables = 1; +} + +// GetMetricsRequest is the structure of a call to get a time series for a chart. It must contain the name of the +// datasource, options like the start/end time and the user defined queries for the chart. +message GetMetricsRequest { + string name = 1; + DatasourceOptions options = 2; + repeated application.ApplicationMetricsVariable variables = 3; + repeated application.ApplicationMetricsQuery queries = 4; +} + +// GetMetricsResponse is the response for a GetMetrics request. It contains the data needed to render the chart in the +// React UI. +message GetMetricsResponse { + repeated DatasourceMetrics metrics = 1; +} + +message GetLogsRequest { + string name = 1; + DatasourceOptions options = 2; +} + +message GetLogsResponse {} + +message GetTracesRequest { + string name = 1; + DatasourceOptions options = 2; +} + +message GetTracesResponse {} + +// DatasourceOptions contains various options, which are need to get metrics, logs and traces across different +// datasources. These can be general options like start time, end time and datasource specific options like the +// resolution for Prometheus series. +message DatasourceOptions { + int64 timeStart = 1; + int64 timeEnd = 2; + string resolution = 3; +} + +// DatasourceMetrics contains the label and all data points for a metric. It also contains the minimum and maximum value +// of all data points. +message DatasourceMetrics { + string label = 1; + double min = 2; + double max = 3; + repeated DatasourceMetricsData data = 4; +} + +// DatasourceMetricsData is one data point for a metric. Each data point contains a timestamp and a value, where x is +// the timestamp and y is the value. +message DatasourceMetricsData { + int64 x = 1; + double y = 2; +}