plugin(kiali): add kiali-frontend (#2223)

Signed-off-by: Alberto Gutierrez <aljesusg@gmail.com>
This commit is contained in:
Alberto Gutierrez 2025-01-03 14:07:33 +01:00 committed by GitHub
parent 7add5920d8
commit 59cab9a0d8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
662 changed files with 209988 additions and 3639 deletions

View File

@ -0,0 +1,6 @@
---
'@backstage-community/plugin-kiali-backend': patch
'@backstage-community/plugin-kiali': patch
---
The `kiali` and `kiali-backend` plugins from the [janus-idp/backstage-plugins](https://github.com/janus-idp/backstage-plugins) repository were migrated to the community plugins, based on commit [92a16c5](https://github.com/janus-idp/backstage-plugins/commit/92a16c5). The migration was performed by following the manual migration steps outlined in the [Community Plugins CONTRIBUTING guide](https://github.com/backstage/community-plugins/blob/main/CONTRIBUTING.md#migrating-a-plugin)

View File

@ -0,0 +1,64 @@
# Development environment
## Full Setup
1. Configure you `app-config.local.yaml` with kiali configuration
```yaml
catalog:
providers:
# highlight-add-start
kiali:
# Required. Kiali endpoint
url: ${KIALI_ENDPOINT}
# Optional. Required by token authentication
serviceAccountToken: ${KIALI_SERVICE_ACCOUNT_TOKEN}
# Optional. defaults false
skipTLSVerify: true
# Optional
caData: ${KIALI_CONFIG_CA_DATA}
# Optional. Local path to CA file
caFile: ''
# Optional. Time in seconds that session is enabled, defaults to 1 minute.
sessionTime: 60
# highlight-add-end
```
2. Run
```bash
export KIALI_BASE_URL=https://kiali-istio-system.apps-crc.testing;`
yarn start:backstage
```
## Configure auth
### Token authentication
1. Set the parameters in app-config.local.yaml
```yaml
catalog:
providers:
# highlight-add-start
kiali:
# Required. Kiali endpoint
url: ${KIALI_ENDPOINT}
# Optional. Required by token authentication
serviceAccountToken: ${KIALI_SERVICE_ACCOUNT_TOKEN}
# Optional. defaults false
skipTLSVerify: true
# Optional
```
2. To get `KIALI_SERVICE_ACCOUNT_TOKEN` create your service account and create the token
```bash
kubectl create token $KIALI_SERVICE_ACCOUNT
```
or if you installed kiali with the operator then execute
```bash
export KIALI_SERVICE_ACCOUNT_TOKEN=$(kubectl describe secret $(kubectl get secret -n istio-system | grep kiali-service-account-token | cut -d" " -f1) -n istio-system | grep token: | cut -d ":" -f2 | sed 's/^ *//')
```

View File

@ -1,16 +1,162 @@
# [Backstage](https://backstage.io)
# Kiali plugin for Backstage
This is your newly scaffolded Backstage App, Good Luck!
The Kiali Plugin
This plugin exposes information about your entity-specific ServiceMesh objects.
To start the app, run:
## Capabilities
```sh
yarn install
yarn dev
The Kiali plugin has the following capabilities:
- Overview
- Metrics by namespace
- Health by namespace
- Canary info
- Istio Config warnings
- Worklist
## For administrators
### Setting up the Kiali plugin
#### Prerequisites
- The following annotation is added to the entity's `catalog-info.yaml` file to identify whether an entity contains the Kubernetes resources:
```yaml
annotations:
...
kiali.io/namespace: <RESOURCE_NS>
```
#### Setting up the Kiali frontend package
1. Install the Kiali plugin using the following commands:
```console
yarn workspace app add @backstage-community/plugin-kiali
```
2. Select the components that you want to use, such as:
- `KialiPage`: This is a standalone page or dashboard displaying all namespaces in the mesh. You can add `KialiPage` to `packages/app/src/App.tsx` file as follows:
```tsx title="packages/app/src/App.tsx"
/* highlight-add-next-line */
import { KialiPage } from '@backstage-community/plugin-kiali';
const routes = (
<FlatRoutes>
{/* ... */}
{/* highlight-add-next-line */}
<Route path="/kiali" element={<KialiPage />} />
</FlatRoutes>
);
```
You can also update navigation in `packages/app/src/components/Root/Root.tsx` as follows:
```tsx title="packages/app/src/components/Root/Root.tsx"
/* highlight-add-next-line */
import { KialiIcon } from '@backstage-community/plugin-kiali';
export const Root = ({ children }: PropsWithChildren<{}>) => (
<SidebarPage>
<Sidebar>
<SidebarGroup label="Menu" icon={<MenuIcon />}>
{/* ... */}
{/* highlight-add-next-line */}
<SidebarItem icon={KialiIcon} to="kiali" text="Kiali" />
</SidebarGroup>
{/* ... */}
</Sidebar>
{children}
</SidebarPage>
);
```
- `EntityKialiContent`: This component is a React context provided for Kiali data, which is related to the current entity. The `EntityKialiContent` component is used to display any data on the React components mentioned in `packages/app/src/components/catalog/EntityPage.tsx`:
```tsx title="packages/app/src/components/catalog/EntityPage.tsx"
/* highlight-add-next-line */
import { EntityKialiContent } from '@backstage-community/plugin-kiali';
const serviceEntityPage = (
<EntityLayout>
{/* ... */}
{/* highlight-add-start */}
<EntityLayout.Route path="/kiali" title="kiali">
<EntityKialiContent />
</EntityLayout.Route>
{/* highlight-add-end */}
</EntityLayout>
);
```
3. Configure you `app-config.yaml` with kiali configuration
```yaml
catalog:
providers:
# highlight-add-start
kiali:
# Required. Kiali endpoint
url: ${KIALI_ENDPOINT}
# Optional. Required by token authentication
serviceAccountToken: ${KIALI_SERVICE_ACCOUNT_TOKEN}
# Optional. defaults false
skipTLSVerify: true
# Optional
caData: ${KIALI_CONFIG_CA_DATA}
# Optional. Local path to CA file
caFile: ''
# Optional. Time in seconds that session is enabled, defaults to 1 minute.
sessionTime: 60
# highlight-add-end
```
To generate knip reports for this app, run:
Authentication methods:
```sh
yarn backstage-repo-tools knip-reports
```
- anonymous [Read docs about this authentication in kiali.io](https://kiali.io/docs/configuration/authentication/anonymous/)
- token [Read docs about this authentication in kiali.io](https://kiali.io/docs/configuration/authentication/token/)
The following table describes the parameters that you can configure to enable the plugin under `catalog.providers.keycloakOrg.<ENVIRONMENT_NAME>` object in the `app-config.yaml` file:
| Name | Description | Default Value | Required |
| --------------------- | -------------------------------------------------------------------------------------------------------------------- | ------------- | --------------------------------------- |
| `url` | Location of the Kiali server, such as `https://localhost:4000` | "" | Yes |
| `serviceAccountToken` | Service Account Token which is used for querying data from Kiali | "" | Yes if using token based authentication |
| `skipTLSVerify` | Skip TLS certificate verification presented by the API server | false | No |
| `caData` | Base64-encoded certificate authority bundle in PEM format | "" | No |
| `caFile` | Filesystem path (on the host where the Backstage process is running) to a certificate authority bundle in PEM format | "" | No |
| `sessionTime` | Time in seconds that session is enabled | 60 | No |
## For users
We have 2 ways to consume the Kiali plugin, entity view or full view.
1. Open your Backstage application and select a component from the **Catalog** page.
![catalog-list](./images/docs/EntityStep.png)
2. We can see the GraphCard in the overview section
![GraphCard](./images/docs/GraphCard.png)
3. Go to the **Kiali** tab.
The **Kiali** tab displays the Overview view associated to a Servicemesh.
![overview-tab](./images/docs/EntityView.png)
An If we scroll down we can see the full picture
![overview-tab](./images/docs/EntityFullView.png)
To see the full view we can select the kiali option sidebar.
![kialiPage](./images/docs/KialiPage.png)
## Development
To develop/contribute in kiali plugin follow [these instructions](./DEVELOPMENT.md)

View File

@ -0,0 +1,107 @@
app:
title: Kiali - The Console for Istio Service Mesh
baseUrl: http://localhost:3000
organization:
name: Kiali Community
backend:
# Used for enabling authentication, secret is shared by all backend plugins
# See https://backstage.io/docs/auth/service-to-service-auth for
# information on the format
# auth:
# keys:
# - secret: ${BACKEND_SECRET}
baseUrl: http://localhost:7007
listen:
port: 7007
# Uncomment the following host directive to bind to specific interfaces
# host: 127.0.0.1
csp:
connect-src: ["'self'", 'http:', 'https:']
# Content-Security-Policy directives follow the Helmet format: https://helmetjs.github.io/#reference
# Default Helmet Content-Security-Policy values can be removed by setting the key to false
cors:
origin: http://localhost:3000
methods: [GET, HEAD, PATCH, POST, PUT, DELETE]
credentials: true
# This is for local development only, it is not recommended to use this in production
# The production database configuration is stored in app-config.production.yaml
database:
client: better-sqlite3
connection: ':memory:'
# workingDirectory: /tmp # Use this to configure a working directory for the scaffolder, defaults to the OS temp-dir
integrations:
github:
- host: github.com
# This is a Personal Access Token or PAT from GitHub. You can find out how to generate this token, and more information
# about setting up the GitHub integration here: https://backstage.io/docs/integrations/github/locations#configuration
token: ${GITHUB_TOKEN}
### Example for how to add your GitHub Enterprise instance using the API:
# - host: ghe.example.net
# apiBaseUrl: https://ghe.example.net/api/v3
# token: ${GHE_TOKEN}
proxy:
### Example for how to add a proxy endpoint for the frontend.
### A typical reason to do this is to handle HTTPS and CORS for internal services.
# endpoints:
# '/test':
# target: 'https://example.com'
# changeOrigin: true
# Reference documentation http://backstage.io/docs/features/techdocs/configuration
# Note: After experimenting with basic setup, use CI/CD to generate docs
# and an external cloud storage when deploying TechDocs for production use-case.
# https://backstage.io/docs/features/techdocs/how-to-guides#how-to-migrate-from-techdocs-basic-to-recommended-deployment-approach
techdocs:
builder: 'local' # Alternatives - 'external'
generator:
runIn: 'docker' # Alternatives - 'local'
publisher:
type: 'local' # Alternatives - 'googleGcs' or 'awsS3'. Read documentation for using alternatives.
auth:
# see https://backstage.io/docs/auth/ to learn about auth providers
providers:
# See https://backstage.io/docs/auth/guest/provider
guest: {}
scaffolder:
# see https://backstage.io/docs/features/software-templates/configuration for software template options
catalog:
import:
entityFilename: catalog-info.yaml
pullRequestBranchName: backstage-integration
rules:
- allow: [Component, System, API, Resource, Location]
locations:
# Local example data, file locations are relative to the backend process, typically `packages/backend`
- type: file
target: ../../examples/kialiEntities.yaml
kubernetes:
# see https://backstage.io/docs/features/kubernetes/configuration for kubernetes configuration options
kiali:
# See the README file for configuration
url: ${KIALI_BASE_URL}
# Optional. Kiali public URL to redirect to standalone Kiali. When not specified, url will be used.
# urlExternal: ''
# Optional. Required by token authentication
# serviceAccountToken: ${KIALI_SERVICE_ACCOUNT_TOKEN}
# Optional. defaults false
skipTLSVerify: true
# Optional
# caData: ${KIALI_CONFIG_CA_DATA}
# Optional. Local path to CA file
# caFile: ''
# Optional. Time in seconds that session is enabled, defaults to 1 minute.
sessionTime: 60
# see https://backstage.io/docs/permissions/getting-started for more on the permission framework
permission:
# setting this to `false` will disable permissions
enabled: true

View File

@ -1 +1 @@
{ "version": "1.32.0" }
{ "version": "1.32.2" }

View File

@ -0,0 +1,34 @@
---
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: istio-system
description: Namespace istio-system.
tags:
- istio
- kiali
- core
- servicemesh
annotations:
'kiali.io/namespace': istio-system
spec:
type: service
lifecycle: production
owner: user:guest
---
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: bookinfo
description: Bookinfo Application
tags:
- bookinfo
- kiali
- core
- servicemesh
annotations:
'kiali.io/namespace': bookinfo
spec:
type: service
lifecycle: production
owner: user:guest

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -6,6 +6,9 @@
"node": "18 || 20"
},
"scripts": {
"start:backstage": "concurrently -c auto -n \"fe,be\" -p \"{name}:{pid}\" \"yarn start-app\" \"yarn start-backend\"",
"start-app": "yarn workspace app start",
"start-backend": "yarn workspace backend start",
"tsc": "tsc",
"tsc:full": "tsc --skipLibCheck true --incremental false",
"build:all": "backstage-cli repo build --all",
@ -18,6 +21,7 @@
"lint": "backstage-cli repo lint --since origin/main",
"lint:all": "backstage-cli repo lint",
"prettier:check": "prettier --check .",
"prettier:write": "prettier --write .",
"new": "backstage-cli new --scope @backstage-community",
"postinstall": "cd ../../ && yarn install"
},
@ -37,14 +41,18 @@
"@backstage/e2e-test-utils": "^0.1.1",
"@backstage/repo-tools": "^0.10.0",
"@changesets/cli": "^2.27.1",
"@ianvs/prettier-plugin-sort-imports": "^4.3.1",
"@spotify/prettier-config": "^12.0.0",
"@types/deep-freeze": "^0.1.5",
"concurrently": "^8.2.2",
"knip": "^5.27.4",
"node-gyp": "^9.0.0",
"prettier": "^2.3.2",
"typescript": "~5.3.0"
},
"dependencies": {
"@ianvs/prettier-plugin-sort-imports": "^4.3.1"
"@backstage-community/plugin-kiali": "workspace:^",
"@backstage-community/plugin-kiali-backend": "workspace:^"
},
"resolutions": {
"@types/react": "^18",

View File

@ -0,0 +1 @@
public

View File

@ -0,0 +1 @@
module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);

View File

@ -0,0 +1,27 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { expect, test } from '@playwright/test';
test('App should render the welcome page', async ({ page }) => {
await page.goto('/');
const enterButton = page.getByRole('button', { name: 'Enter' });
await expect(enterButton).toBeVisible();
await enterButton.click();
await expect(page.getByText('My Company Catalog')).toBeVisible();
});

View File

@ -0,0 +1,79 @@
{
"name": "app",
"version": "0.0.0",
"private": true,
"bundled": true,
"repository": {
"type": "git",
"url": "https://github.com/backstage/community-plugins",
"directory": "workspaces/kiali/packages/app"
},
"backstage": {
"role": "frontend"
},
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
"clean": "backstage-cli package clean",
"test": "backstage-cli package test",
"lint": "backstage-cli package lint"
},
"dependencies": {
"@backstage-community/plugin-kiali": "workspace:^",
"@backstage/app-defaults": "^1.5.12",
"@backstage/catalog-model": "^1.7.0",
"@backstage/cli": "^0.28.0",
"@backstage/core-app-api": "^1.15.1",
"@backstage/core-components": "^0.15.1",
"@backstage/core-plugin-api": "^1.10.0",
"@backstage/integration-react": "^1.2.0",
"@backstage/plugin-api-docs": "^0.11.11",
"@backstage/plugin-catalog": "^1.24.0",
"@backstage/plugin-catalog-common": "^1.1.0",
"@backstage/plugin-catalog-graph": "^0.4.11",
"@backstage/plugin-catalog-import": "^0.12.5",
"@backstage/plugin-catalog-react": "^1.14.0",
"@backstage/plugin-kubernetes": "^0.11.16",
"@backstage/plugin-org": "^0.6.31",
"@backstage/plugin-permission-react": "^0.4.27",
"@backstage/plugin-scaffolder": "^1.26.0",
"@backstage/plugin-search": "^1.4.18",
"@backstage/plugin-search-react": "^1.8.1",
"@backstage/plugin-techdocs": "^1.11.0",
"@backstage/plugin-techdocs-module-addons-contrib": "^1.1.16",
"@backstage/plugin-techdocs-react": "^1.2.9",
"@backstage/plugin-user-settings": "^0.8.14",
"@backstage/theme": "^0.6.0",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router": "^6.3.0",
"react-router-dom": "^6.3.0"
},
"devDependencies": {
"@backstage/test-utils": "^1.7.0",
"@playwright/test": "^1.32.3",
"@testing-library/dom": "^9.0.0",
"@testing-library/jest-dom": "^6.0.0",
"@testing-library/react": "^14.0.0",
"@testing-library/user-event": "^14.0.0",
"@types/react-dom": "*",
"cross-env": "^7.0.0"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"files": [
"dist"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Backstage is an open source framework for building developer portals"
/>
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link
rel="manifest"
href="<%= publicPath %>/manifest.json"
crossorigin="use-credentials"
/>
<link rel="icon" href="<%= publicPath %>/favicon.ico" />
<link rel="shortcut icon" href="<%= publicPath %>/favicon.ico" />
<link
rel="apple-touch-icon"
sizes="180x180"
href="<%= publicPath %>/apple-touch-icon.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="<%= publicPath %>/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="<%= publicPath %>/favicon-16x16.png"
/>
<link
rel="mask-icon"
href="<%= publicPath %>/safari-pinned-tab.svg"
color="#5bbad5"
/>
<title><%= config.getOptionalString('app.title') ?? 'Backstage' %></title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `yarn start`.
To create a production bundle, use `yarn build`.
-->
</body>
</html>

View File

@ -0,0 +1,15 @@
{
"short_name": "Backstage",
"name": "Backstage",
"icons": [
{
"src": "favicon.ico",
"sizes": "48x48",
"type": "image/png"
}
],
"start_url": "./index.html",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

View File

@ -0,0 +1,2 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="682.667" height="682.667" preserveAspectRatio="xMidYMid meet" version="1.0" viewBox="0 0 512 512"><metadata>Created by potrace 1.11, written by Peter Selinger 2001-2013</metadata><g fill="#000" stroke="none"><path d="M492 4610 c-4 -3 -8 -882 -7 -1953 l0 -1948 850 2 c898 1 945 3 1118 49 505 134 823 531 829 1037 2 136 -9 212 -44 323 -40 125 -89 218 -163 310 -35 43 -126 128 -169 157 -22 15 -43 30 -46 33 -12 13 -131 70 -188 91 l-64 22 60 28 c171 77 317 224 403 404 64 136 92 266 91 425 -5 424 -245 770 -642 923 -79 30 -105 39 -155 50 -11 3 -38 10 -60 15 -22 6 -60 13 -85 17 -25 3 -58 9 -75 12 -36 8 -1643 11 -1653 3z m1497 -743 c236 -68 352 -254 305 -486 -26 -124 -110 -224 -232 -277 -92 -40 -151 -46 -439 -49 l-283 -3 -1 27 c-1 36 -1 760 0 790 l1 23 298 -5 c226 -4 310 -9 351 -20z m-82 -1538 c98 -3 174 -19 247 -52 169 -78 257 -212 258 -395 0 -116 -36 -221 -100 -293 -64 -72 -192 -135 -314 -155 -23 -3 -181 -7 -350 -8 l-308 -2 -1 26 c-6 210 1 874 9 879 9 5 366 6 559 0z" transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)"/><path d="M4160 1789 c-275 -24 -499 -263 -503 -536 -1 -115 21 -212 66 -292 210 -369 697 -402 950 -65 77 103 110 199 111 329 0 50 -6 113 -13 140 -16 58 -62 155 -91 193 -33 43 -122 132 -132 132 -5 0 -26 11 -46 25 -85 56 -219 85 -342 74z" transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,44 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { render, waitFor } from '@testing-library/react';
import React from 'react';
import App from './App';
describe('App', () => {
it('should render', async () => {
process.env = {
NODE_ENV: 'test',
APP_CONFIG: [
{
data: {
app: { title: 'Test' },
backend: { baseUrl: 'http://localhost:7007' },
techdocs: {
storageUrl: 'http://localhost:7007/api/techdocs/static/docs',
},
},
context: 'test',
},
] as any,
};
const rendered = render(<App />);
await waitFor(() => {
expect(rendered.baseElement).toBeInTheDocument();
});
});
});

View File

@ -0,0 +1,125 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { KialiPage } from '@backstage-community/plugin-kiali';
import { createApp } from '@backstage/app-defaults';
import { AppRouter, FlatRoutes } from '@backstage/core-app-api';
import {
AlertDisplay,
OAuthRequestDialog,
SignInPage,
} from '@backstage/core-components';
import { apiDocsPlugin, ApiExplorerPage } from '@backstage/plugin-api-docs';
import {
CatalogEntityPage,
CatalogIndexPage,
catalogPlugin,
} from '@backstage/plugin-catalog';
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';
import { CatalogGraphPage } from '@backstage/plugin-catalog-graph';
import {
CatalogImportPage,
catalogImportPlugin,
} from '@backstage/plugin-catalog-import';
import { orgPlugin } from '@backstage/plugin-org';
import { RequirePermission } from '@backstage/plugin-permission-react';
import { ScaffolderPage, scaffolderPlugin } from '@backstage/plugin-scaffolder';
import { SearchPage } from '@backstage/plugin-search';
import {
TechDocsIndexPage,
techdocsPlugin,
TechDocsReaderPage,
} from '@backstage/plugin-techdocs';
import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib';
import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
import { UserSettingsPage } from '@backstage/plugin-user-settings';
import React from 'react';
import { Navigate, Route } from 'react-router-dom';
import { apis } from './apis';
import { entityPage } from './components/catalog/EntityPage';
import { Root } from './components/Root';
import { searchPage } from './components/search/SearchPage';
const app = createApp({
apis,
bindRoutes({ bind }) {
bind(catalogPlugin.externalRoutes, {
createComponent: scaffolderPlugin.routes.root,
viewTechDoc: techdocsPlugin.routes.docRoot,
createFromTemplate: scaffolderPlugin.routes.selectedTemplate,
});
bind(apiDocsPlugin.externalRoutes, {
registerApi: catalogImportPlugin.routes.importPage,
});
bind(scaffolderPlugin.externalRoutes, {
registerComponent: catalogImportPlugin.routes.importPage,
viewTechDoc: techdocsPlugin.routes.docRoot,
});
bind(orgPlugin.externalRoutes, {
catalogIndex: catalogPlugin.routes.catalogIndex,
});
},
components: {
SignInPage: props => <SignInPage {...props} auto providers={['guest']} />,
},
});
const routes = (
<FlatRoutes>
<Route path="/" element={<Navigate to="catalog" />} />
<Route path="/catalog" element={<CatalogIndexPage />} />
<Route
path="/catalog/:namespace/:kind/:name"
element={<CatalogEntityPage />}
>
{entityPage}
</Route>
<Route path="/docs" element={<TechDocsIndexPage />} />
<Route
path="/docs/:namespace/:kind/:name/*"
element={<TechDocsReaderPage />}
>
<TechDocsAddons>
<ReportIssue />
</TechDocsAddons>
</Route>
<Route path="/create" element={<ScaffolderPage />} />
<Route path="/api-docs" element={<ApiExplorerPage />} />
<Route
path="/catalog-import"
element={
<RequirePermission permission={catalogEntityCreatePermission}>
<CatalogImportPage />
</RequirePermission>
}
/>
<Route path="/search" element={<SearchPage />}>
{searchPage}
</Route>
<Route path="/settings" element={<UserSettingsPage />} />
<Route path="/catalog-graph" element={<CatalogGraphPage />} />
<Route path="/kiali" element={<KialiPage />} />
</FlatRoutes>
);
export default app.createRoot(
<>
<AlertDisplay />
<OAuthRequestDialog />
<AppRouter>
<Root>{routes}</Root>
</AppRouter>
</>,
);

View File

@ -0,0 +1,34 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
AnyApiFactory,
configApiRef,
createApiFactory,
} from '@backstage/core-plugin-api';
import {
ScmAuth,
ScmIntegrationsApi,
scmIntegrationsApiRef,
} from '@backstage/integration-react';
export const apis: AnyApiFactory[] = [
createApiFactory({
api: scmIntegrationsApiRef,
deps: { configApi: configApiRef },
factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi),
}),
ScmAuth.createDefaultApiFactory(),
];

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,46 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { makeStyles } from '@material-ui/core';
import React from 'react';
const useStyles = makeStyles({
svg: {
width: 'auto',
height: 28,
},
path: {
fill: '#7df3e1',
},
});
const LogoIcon = () => {
const classes = useStyles();
return (
<svg
className={classes.svg}
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 337.46 428.5"
>
<path
className={classes.path}
d="M303,166.05a80.69,80.69,0,0,0,13.45-10.37c.79-.77,1.55-1.53,2.3-2.3a83.12,83.12,0,0,0,7.93-9.38A63.69,63.69,0,0,0,333,133.23a48.58,48.58,0,0,0,4.35-16.4c1.49-19.39-10-38.67-35.62-54.22L198.56,0,78.3,115.23,0,190.25l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.22,49.22,0,0,0-6.8-8.87A89.17,89.17,0,0,0,259,178.29h.15a85.08,85.08,0,0,0,31-5.79A80.88,80.88,0,0,0,303,166.05ZM202.45,225.86c-19.32,18.51-50.4,21.23-75.7,5.9L51.61,186.15l67.45-64.64,76.41,46.38C223,184.58,221.49,207.61,202.45,225.86Zm8.93-82.22-70.65-42.89L205.14,39,274.51,81.1c25.94,15.72,29.31,37,10.55,55A60.69,60.69,0,0,1,211.38,143.64Zm29.86,190c-19.57,18.75-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,282.52v24.67L108.6,373.1a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.27,87.27,0,0,1,241.24,333.68Zm0-39c-19.57,18.75-46.17,29.08-74.88,29.08a123.81,123.81,0,0,1-64.1-18.19L0,243.53v24.68l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.5v-1.78A87.27,87.27,0,0,1,241.24,294.7Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.81,123.81,0,0,1-64.1-18.19L0,204.55v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.82A86.09,86.09,0,0,1,241.24,255.71Zm83.7,25.74a94.15,94.15,0,0,1-60.2,25.86h0V334a81.6,81.6,0,0,0,51.74-22.37c14-13.38,21.14-28.11,21-42.64v-2.19A94.92,94.92,0,0,1,324.94,281.45Zm-83.7,91.21c-19.57,18.76-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,321.5v24.68l108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A86.29,86.29,0,0,1,241.24,372.66ZM327,162.45c-.68.69-1.35,1.38-2.05,2.06a94.37,94.37,0,0,1-10.64,8.65,91.35,91.35,0,0,1-11.6,7,94.53,94.53,0,0,1-26.24,8.71,97.69,97.69,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a53.27,53.27,0,0,1,1.14,12V217h.05a84.41,84.41,0,0,0,25.35-5.55,81,81,0,0,0,26.39-16.82c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,172.17a48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7V150q-1.08,1.54-2.25,3.09A96.73,96.73,0,0,1,327,162.45Zm0,77.92c-.69.7-1.31,1.41-2,2.1a94.2,94.2,0,0,1-60.2,25.86h0l0,26.67h0a81.6,81.6,0,0,0,51.74-22.37A73.51,73.51,0,0,0,333,250.13a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.47.19-3.71v-2.19c-.74,1.07-1.46,2.15-2.27,3.21A95.68,95.68,0,0,1,327,240.37Zm0-39c-.69.7-1.31,1.41-2,2.1a93.18,93.18,0,0,1-10.63,8.65,91.63,91.63,0,0,1-11.63,7,95.47,95.47,0,0,1-37.94,10.18h0V256h0a81.65,81.65,0,0,0,51.74-22.37c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,211.15a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.46,2.16-2.27,3.22A95.68,95.68,0,0,1,327,201.39Z"
/>
</svg>
);
};
export default LogoIcon;

View File

@ -0,0 +1,115 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { KialiIcon } from '@backstage-community/plugin-kiali';
import {
Link,
Sidebar,
sidebarConfig,
SidebarDivider,
SidebarGroup,
SidebarItem,
SidebarPage,
SidebarScrollWrapper,
SidebarSpace,
useSidebarOpenState,
} from '@backstage/core-components';
import { MyGroupsSidebarItem } from '@backstage/plugin-org';
import { SidebarSearchModal } from '@backstage/plugin-search';
import {
Settings as SidebarSettings,
UserSettingsSignInAvatar,
} from '@backstage/plugin-user-settings';
import { makeStyles } from '@material-ui/core';
import CreateComponentIcon from '@material-ui/icons/AddCircleOutline';
import ExtensionIcon from '@material-ui/icons/Extension';
import HomeIcon from '@material-ui/icons/Home';
import LibraryBooks from '@material-ui/icons/LibraryBooks';
import MenuIcon from '@material-ui/icons/Menu';
import GroupIcon from '@material-ui/icons/People';
import SearchIcon from '@material-ui/icons/Search';
import React, { PropsWithChildren } from 'react';
import LogoFull from './LogoFull';
import LogoIcon from './LogoIcon';
const useSidebarLogoStyles = makeStyles({
root: {
width: sidebarConfig.drawerWidthClosed,
height: 3 * sidebarConfig.logoHeight,
display: 'flex',
flexFlow: 'row nowrap',
alignItems: 'center',
marginBottom: -14,
},
link: {
width: sidebarConfig.drawerWidthClosed,
marginLeft: 24,
},
});
const SidebarLogo = () => {
const classes = useSidebarLogoStyles();
const { isOpen } = useSidebarOpenState();
return (
<div className={classes.root}>
<Link to="/" underline="none" className={classes.link} aria-label="Home">
{isOpen ? <LogoFull /> : <LogoIcon />}
</Link>
</div>
);
};
export const Root = ({ children }: PropsWithChildren<{}>) => (
<SidebarPage>
<Sidebar>
<SidebarLogo />
<SidebarGroup label="Search" icon={<SearchIcon />} to="/search">
<SidebarSearchModal />
</SidebarGroup>
<SidebarDivider />
<SidebarGroup label="Menu" icon={<MenuIcon />}>
{/* Kiali Menu */}
<SidebarItem icon={KialiIcon} to="kiali" text="Kiali" />
{/* Global nav, not org-specific */}
<SidebarItem icon={HomeIcon} to="catalog" text="Home" />
<MyGroupsSidebarItem
singularTitle="My Group"
pluralTitle="My Groups"
icon={GroupIcon}
/>
<SidebarItem icon={ExtensionIcon} to="api-docs" text="APIs" />
<SidebarItem icon={LibraryBooks} to="docs" text="Docs" />
<SidebarItem icon={CreateComponentIcon} to="create" text="Create..." />
{/* End global nav */}
<SidebarDivider />
<SidebarScrollWrapper>
{/* Items in this group will be scrollable if they run out of space */}
</SidebarScrollWrapper>
</SidebarGroup>
<SidebarSpace />
<SidebarDivider />
<SidebarGroup
label="Settings"
icon={<UserSettingsSignInAvatar />}
to="/settings"
>
<SidebarSettings />
</SidebarGroup>
</Sidebar>
{children}
</SidebarPage>
);

View File

@ -0,0 +1,16 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export { Root } from './Root';

View File

@ -0,0 +1,434 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
EntityKialiContent,
EntityKialiGraphCard,
} from '@backstage-community/plugin-kiali';
import {
RELATION_API_CONSUMED_BY,
RELATION_API_PROVIDED_BY,
RELATION_CONSUMES_API,
RELATION_DEPENDENCY_OF,
RELATION_DEPENDS_ON,
RELATION_HAS_PART,
RELATION_PART_OF,
RELATION_PROVIDES_API,
} from '@backstage/catalog-model';
import { EmptyState } from '@backstage/core-components';
import {
EntityApiDefinitionCard,
EntityConsumedApisCard,
EntityConsumingComponentsCard,
EntityHasApisCard,
EntityProvidedApisCard,
EntityProvidingComponentsCard,
} from '@backstage/plugin-api-docs';
import {
EntityAboutCard,
EntityDependsOnComponentsCard,
EntityDependsOnResourcesCard,
EntityHasComponentsCard,
EntityHasResourcesCard,
EntityHasSubcomponentsCard,
EntityHasSystemsCard,
EntityLayout,
EntityLinksCard,
EntityOrphanWarning,
EntityProcessingErrorsPanel,
EntityRelationWarning,
EntitySwitch,
hasCatalogProcessingErrors,
hasRelationWarnings,
isComponentType,
isKind,
isOrphan,
} from '@backstage/plugin-catalog';
import {
Direction,
EntityCatalogGraphCard,
} from '@backstage/plugin-catalog-graph';
import {
EntityKubernetesContent,
isKubernetesAvailable,
} from '@backstage/plugin-kubernetes';
import {
EntityGroupProfileCard,
EntityMembersListCard,
EntityOwnershipCard,
EntityUserProfileCard,
} from '@backstage/plugin-org';
import { EntityTechdocsContent } from '@backstage/plugin-techdocs';
import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib';
import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
import { Button, Grid } from '@material-ui/core';
import React from 'react';
const techdocsContent = (
<EntityTechdocsContent>
<TechDocsAddons>
<ReportIssue />
</TechDocsAddons>
</EntityTechdocsContent>
);
const cicdContent = (
// This is an example of how you can implement your company's logic in entity page.
// You can for example enforce that all components of type 'service' should use GitHubActions
<EntitySwitch>
{/*
Here you can add support for different CI/CD services, for example
using @backstage-community/plugin-github-actions as follows:
<EntitySwitch.Case if={isGithubActionsAvailable}>
<EntityGithubActionsContent />
</EntitySwitch.Case>
*/}
<EntitySwitch.Case>
<EmptyState
title="No CI/CD available for this entity"
missing="info"
description="You need to add an annotation to your component if you want to enable CI/CD for it. You can read more about annotations in Backstage by clicking the button below."
action={
<Button
variant="contained"
color="primary"
href="https://backstage.io/docs/features/software-catalog/well-known-annotations"
>
Read more
</Button>
}
/>
</EntitySwitch.Case>
</EntitySwitch>
);
const entityWarningContent = (
<>
<EntitySwitch>
<EntitySwitch.Case if={isOrphan}>
<Grid item xs={12}>
<EntityOrphanWarning />
</Grid>
</EntitySwitch.Case>
</EntitySwitch>
<EntitySwitch>
<EntitySwitch.Case if={hasRelationWarnings}>
<Grid item xs={12}>
<EntityRelationWarning />
</Grid>
</EntitySwitch.Case>
</EntitySwitch>
<EntitySwitch>
<EntitySwitch.Case if={hasCatalogProcessingErrors}>
<Grid item xs={12}>
<EntityProcessingErrorsPanel />
</Grid>
</EntitySwitch.Case>
</EntitySwitch>
</>
);
const overviewContent = (
<Grid container spacing={3} alignItems="stretch">
{entityWarningContent}
<Grid item md={6}>
<EntityKialiGraphCard />
</Grid>
<Grid item md={6}>
<EntityAboutCard variant="gridItem" />
</Grid>
<Grid item md={6} xs={12}>
<EntityCatalogGraphCard variant="gridItem" height={400} />
</Grid>
<Grid item md={4} xs={12}>
<EntityLinksCard />
</Grid>
<Grid item md={8} xs={12}>
<EntityHasSubcomponentsCard variant="gridItem" />
</Grid>
</Grid>
);
const serviceEntityPage = (
<EntityLayout>
<EntityLayout.Route path="/" title="Overview">
{overviewContent}
</EntityLayout.Route>
<EntityLayout.Route path="/kiali" title="kiali">
<EntityKialiContent />
</EntityLayout.Route>
<EntityLayout.Route path="/ci-cd" title="CI/CD">
{cicdContent}
</EntityLayout.Route>
<EntityLayout.Route
path="/kubernetes"
title="Kubernetes"
if={isKubernetesAvailable}
>
<EntityKubernetesContent />
</EntityLayout.Route>
<EntityLayout.Route path="/api" title="API">
<Grid container spacing={3} alignItems="stretch">
<Grid item md={6}>
<EntityProvidedApisCard />
</Grid>
<Grid item md={6}>
<EntityConsumedApisCard />
</Grid>
</Grid>
</EntityLayout.Route>
<EntityLayout.Route path="/dependencies" title="Dependencies">
<Grid container spacing={3} alignItems="stretch">
<Grid item md={6}>
<EntityDependsOnComponentsCard variant="gridItem" />
</Grid>
<Grid item md={6}>
<EntityDependsOnResourcesCard variant="gridItem" />
</Grid>
</Grid>
</EntityLayout.Route>
<EntityLayout.Route path="/docs" title="Docs">
{techdocsContent}
</EntityLayout.Route>
</EntityLayout>
);
const websiteEntityPage = (
<EntityLayout>
<EntityLayout.Route path="/" title="Overview">
{overviewContent}
</EntityLayout.Route>
<EntityLayout.Route path="/ci-cd" title="CI/CD">
{cicdContent}
</EntityLayout.Route>
<EntityLayout.Route
path="/kubernetes"
title="Kubernetes"
if={isKubernetesAvailable}
>
<EntityKubernetesContent />
</EntityLayout.Route>
<EntityLayout.Route path="/dependencies" title="Dependencies">
<Grid container spacing={3} alignItems="stretch">
<Grid item md={6}>
<EntityDependsOnComponentsCard variant="gridItem" />
</Grid>
<Grid item md={6}>
<EntityDependsOnResourcesCard variant="gridItem" />
</Grid>
</Grid>
</EntityLayout.Route>
<EntityLayout.Route path="/docs" title="Docs">
{techdocsContent}
</EntityLayout.Route>
</EntityLayout>
);
/**
* NOTE: This page is designed to work on small screens such as mobile devices.
* This is based on Material UI Grid. If breakpoints are used, each grid item must set the `xs` prop to a column size or to `true`,
* since this does not default. If no breakpoints are used, the items will equitably share the available space.
* https://material-ui.com/components/grid/#basic-grid.
*/
const defaultEntityPage = (
<EntityLayout>
<EntityLayout.Route path="/" title="Overview">
{overviewContent}
</EntityLayout.Route>
<EntityLayout.Route path="/docs" title="Docs">
{techdocsContent}
</EntityLayout.Route>
</EntityLayout>
);
const componentPage = (
<EntitySwitch>
<EntitySwitch.Case if={isComponentType('service')}>
{serviceEntityPage}
</EntitySwitch.Case>
<EntitySwitch.Case if={isComponentType('website')}>
{websiteEntityPage}
</EntitySwitch.Case>
<EntitySwitch.Case>{defaultEntityPage}</EntitySwitch.Case>
</EntitySwitch>
);
const apiPage = (
<EntityLayout>
<EntityLayout.Route path="/" title="Overview">
<Grid container spacing={3}>
{entityWarningContent}
<Grid item md={6}>
<EntityAboutCard />
</Grid>
<Grid item md={6} xs={12}>
<EntityCatalogGraphCard variant="gridItem" height={400} />
</Grid>
<Grid item md={4} xs={12}>
<EntityLinksCard />
</Grid>
<Grid container item md={12}>
<Grid item md={6}>
<EntityProvidingComponentsCard />
</Grid>
<Grid item md={6}>
<EntityConsumingComponentsCard />
</Grid>
</Grid>
</Grid>
</EntityLayout.Route>
<EntityLayout.Route path="/definition" title="Definition">
<Grid container spacing={3}>
<Grid item xs={12}>
<EntityApiDefinitionCard />
</Grid>
</Grid>
</EntityLayout.Route>
</EntityLayout>
);
const userPage = (
<EntityLayout>
<EntityLayout.Route path="/" title="Overview">
<Grid container spacing={3}>
{entityWarningContent}
<Grid item xs={12} md={6}>
<EntityUserProfileCard variant="gridItem" />
</Grid>
<Grid item xs={12} md={6}>
<EntityOwnershipCard variant="gridItem" />
</Grid>
</Grid>
</EntityLayout.Route>
</EntityLayout>
);
const groupPage = (
<EntityLayout>
<EntityLayout.Route path="/" title="Overview">
<Grid container spacing={3}>
{entityWarningContent}
<Grid item xs={12} md={6}>
<EntityGroupProfileCard variant="gridItem" />
</Grid>
<Grid item xs={12} md={6}>
<EntityOwnershipCard variant="gridItem" />
</Grid>
<Grid item xs={12} md={6}>
<EntityMembersListCard />
</Grid>
<Grid item xs={12} md={6}>
<EntityLinksCard />
</Grid>
</Grid>
</EntityLayout.Route>
</EntityLayout>
);
const systemPage = (
<EntityLayout>
<EntityLayout.Route path="/" title="Overview">
<Grid container spacing={3} alignItems="stretch">
{entityWarningContent}
<Grid item md={6}>
<EntityAboutCard variant="gridItem" />
</Grid>
<Grid item md={6} xs={12}>
<EntityCatalogGraphCard variant="gridItem" height={400} />
</Grid>
<Grid item md={4} xs={12}>
<EntityLinksCard />
</Grid>
<Grid item md={8}>
<EntityHasComponentsCard variant="gridItem" />
</Grid>
<Grid item md={6}>
<EntityHasApisCard variant="gridItem" />
</Grid>
<Grid item md={6}>
<EntityHasResourcesCard variant="gridItem" />
</Grid>
</Grid>
</EntityLayout.Route>
<EntityLayout.Route path="/diagram" title="Diagram">
<EntityCatalogGraphCard
variant="gridItem"
direction={Direction.TOP_BOTTOM}
title="System Diagram"
height={700}
relations={[
RELATION_PART_OF,
RELATION_HAS_PART,
RELATION_API_CONSUMED_BY,
RELATION_API_PROVIDED_BY,
RELATION_CONSUMES_API,
RELATION_PROVIDES_API,
RELATION_DEPENDENCY_OF,
RELATION_DEPENDS_ON,
]}
unidirectional={false}
/>
</EntityLayout.Route>
</EntityLayout>
);
const domainPage = (
<EntityLayout>
<EntityLayout.Route path="/" title="Overview">
<Grid container spacing={3} alignItems="stretch">
{entityWarningContent}
<Grid item md={6}>
<EntityAboutCard variant="gridItem" />
</Grid>
<Grid item md={6} xs={12}>
<EntityCatalogGraphCard variant="gridItem" height={400} />
</Grid>
<Grid item md={6}>
<EntityHasSystemsCard variant="gridItem" />
</Grid>
</Grid>
</EntityLayout.Route>
</EntityLayout>
);
export const entityPage = (
<EntitySwitch>
<EntitySwitch.Case if={isKind('component')} children={componentPage} />
<EntitySwitch.Case if={isKind('api')} children={apiPage} />
<EntitySwitch.Case if={isKind('group')} children={groupPage} />
<EntitySwitch.Case if={isKind('user')} children={userPage} />
<EntitySwitch.Case if={isKind('system')} children={systemPage} />
<EntitySwitch.Case if={isKind('domain')} children={domainPage} />
<EntitySwitch.Case>{defaultEntityPage}</EntitySwitch.Case>
</EntitySwitch>
);

View File

@ -0,0 +1,137 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
CatalogIcon,
Content,
DocsIcon,
Header,
Page,
} from '@backstage/core-components';
import { useApi } from '@backstage/core-plugin-api';
import { CatalogSearchResultListItem } from '@backstage/plugin-catalog';
import {
CATALOG_FILTER_EXISTS,
catalogApiRef,
} from '@backstage/plugin-catalog-react';
import { SearchType } from '@backstage/plugin-search';
import {
SearchBar,
SearchFilter,
SearchPagination,
SearchResult,
useSearch,
} from '@backstage/plugin-search-react';
import { TechDocsSearchResultListItem } from '@backstage/plugin-techdocs';
import { Grid, makeStyles, Paper, Theme } from '@material-ui/core';
import React from 'react';
const useStyles = makeStyles((theme: Theme) => ({
bar: {
padding: theme.spacing(1, 0),
},
filters: {
padding: theme.spacing(2),
marginTop: theme.spacing(2),
},
filter: {
'& + &': {
marginTop: theme.spacing(2.5),
},
},
}));
const SearchPage = () => {
const classes = useStyles();
const { types } = useSearch();
const catalogApi = useApi(catalogApiRef);
return (
<Page themeId="home">
<Header title="Search" />
<Content>
<Grid container direction="row">
<Grid item xs={12}>
<Paper className={classes.bar}>
<SearchBar />
</Paper>
</Grid>
<Grid item xs={3}>
<SearchType.Accordion
name="Result Type"
defaultValue="software-catalog"
types={[
{
value: 'software-catalog',
name: 'Software Catalog',
icon: <CatalogIcon />,
},
{
value: 'techdocs',
name: 'Documentation',
icon: <DocsIcon />,
},
]}
/>
<Paper className={classes.filters}>
{types.includes('techdocs') && (
<SearchFilter.Select
className={classes.filter}
label="Entity"
name="name"
values={async () => {
// Return a list of entities which are documented.
const { items } = await catalogApi.getEntities({
fields: ['metadata.name'],
filter: {
'metadata.annotations.backstage.io/techdocs-ref':
CATALOG_FILTER_EXISTS,
},
});
const names = items.map(entity => entity.metadata.name);
names.sort();
return names;
}}
/>
)}
<SearchFilter.Select
className={classes.filter}
label="Kind"
name="kind"
values={['Component', 'Template']}
/>
<SearchFilter.Checkbox
className={classes.filter}
label="Lifecycle"
name="lifecycle"
values={['experimental', 'production']}
/>
</Paper>
</Grid>
<Grid item xs={9}>
<SearchPagination />
<SearchResult>
<CatalogSearchResultListItem icon={<CatalogIcon />} />
<TechDocsSearchResultListItem icon={<DocsIcon />} />
</SearchResult>
</Grid>
</Grid>
</Content>
</Page>
);
};
export const searchPage = <SearchPage />;

View File

@ -0,0 +1,21 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import '@backstage/cli/asset-types';
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
ReactDOM.createRoot(document.getElementById('root')!).render(<App />);

View File

@ -0,0 +1,16 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import '@testing-library/jest-dom';

View File

@ -0,0 +1 @@
module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);

View File

@ -0,0 +1,66 @@
# This dockerfile builds an image for the backend package.
# It should be executed with the root of the repo as docker context.
#
# Before building this image, be sure to have run the following commands in the repo root:
#
# yarn install --immutable
# yarn tsc
# yarn build:backend
#
# Once the commands have been run, you can build the image using `yarn build-image`
FROM node:20-bookworm-slim
# Set Python interpreter for `node-gyp` to use
ENV PYTHON=/usr/bin/python3
# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends python3 g++ build-essential && \
rm -rf /var/lib/apt/lists/*
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends libsqlite3-dev && \
rm -rf /var/lib/apt/lists/*
# From here on we use the least-privileged `node` user to run the backend.
USER node
# This should create the app dir as `node`.
# If it is instead created as `root` then the `tar` command below will fail: `can't create directory 'packages/': Permission denied`.
# If this occurs, then ensure BuildKit is enabled (`DOCKER_BUILDKIT=1`) so the app dir is correctly created as `node`.
WORKDIR /app
# Copy files needed by Yarn
COPY --chown=node:node .yarn ./.yarn
COPY --chown=node:node .yarnrc.yml ./
# This switches many Node.js dependencies to production mode.
ENV NODE_ENV=production
# This disables node snapshot for Node 20 to work with the Scaffolder
ENV NODE_OPTIONS="--no-node-snapshot"
# Copy repo skeleton first, to avoid unnecessary docker cache invalidation.
# The skeleton contains the package.json of each package in the monorepo,
# and along with yarn.lock and the root package.json, that's enough to run yarn install.
COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./
RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz
RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \
yarn workspaces focus --all --production && rm -rf "$(yarn cache clean)"
# This will include the examples, if you don't need these simply remove this line
COPY --chown=node:node examples ./examples
# Then copy the rest of the backend bundle, along with any other files we might want.
COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./
RUN tar xzf bundle.tar.gz && rm bundle.tar.gz
CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"]

View File

@ -0,0 +1,59 @@
# example-backend
This package is an EXAMPLE of a Backstage backend.
The main purpose of this package is to provide a test bed for Backstage plugins
that have a backend part. Feel free to experiment locally or within your fork by
adding dependencies and routes to this backend, to try things out.
Our goal is to eventually amend the create-app flow of the CLI, such that a
production ready version of a backend skeleton is made alongside the frontend
app. Until then, feel free to experiment here!
## Development
To run the example backend, first go to the project root and run
```bash
yarn install
```
You should only need to do this once.
After that, go to the `packages/backend` directory and run
```bash
yarn start
```
If you want to override any configuration locally, for example adding any secrets,
you can do so in `app-config.local.yaml`.
The backend starts up on port 7007 per default.
## Populating The Catalog
If you want to use the catalog functionality, you need to add so called
locations to the backend. These are places where the backend can find some
entity descriptor data to consume and serve. For more information, see
[Software Catalog Overview - Adding Components to the Catalog](https://backstage.io/docs/features/software-catalog/#adding-components-to-the-catalog).
To get started quickly, this template already includes some statically configured example locations
in `app-config.yaml` under `catalog.locations`. You can remove and replace these locations as you
like, and also override them for local development in `app-config.local.yaml`.
## Authentication
We chose [Passport](http://www.passportjs.org/) as authentication platform due
to its comprehensive set of supported authentication
[strategies](http://www.passportjs.org/packages/).
Read more about the
[auth-backend](https://github.com/backstage/backstage/blob/master/plugins/auth-backend/README.md)
and
[how to add a new provider](https://github.com/backstage/backstage/blob/master/docs/auth/add-auth-provider.md)
## Documentation
- [Backstage Readme](https://github.com/backstage/backstage/blob/master/README.md)
- [Backstage Documentation](https://backstage.io/docs)

View File

@ -0,0 +1,59 @@
{
"name": "backend",
"version": "0.0.0",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"private": true,
"repository": {
"type": "git",
"url": "https://github.com/backstage/community-plugins",
"directory": "workspaces/kiali/packages/backend"
},
"backstage": {
"role": "backend"
},
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
"test": "backstage-cli package test",
"clean": "backstage-cli package clean",
"build-image": "docker build ../.. -f Dockerfile --tag backstage"
},
"dependencies": {
"@backstage-community/plugin-kiali-backend": "workspace:^",
"@backstage/backend-defaults": "^0.5.1",
"@backstage/config": "^1.2.0",
"@backstage/plugin-app-backend": "^0.3.76",
"@backstage/plugin-auth-backend": "^0.23.1",
"@backstage/plugin-auth-backend-module-github-provider": "^0.2.1",
"@backstage/plugin-auth-backend-module-guest-provider": "^0.2.1",
"@backstage/plugin-auth-node": "^0.5.3",
"@backstage/plugin-catalog-backend": "^1.27.0",
"@backstage/plugin-catalog-backend-module-logs": "^0.1.2",
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^0.2.1",
"@backstage/plugin-kubernetes-backend": "^0.18.7",
"@backstage/plugin-permission-backend": "^0.5.50",
"@backstage/plugin-permission-backend-module-allow-all-policy": "^0.2.1",
"@backstage/plugin-permission-common": "^0.8.1",
"@backstage/plugin-permission-node": "^0.8.4",
"@backstage/plugin-proxy-backend": "^0.5.7",
"@backstage/plugin-scaffolder-backend": "^1.26.0",
"@backstage/plugin-search-backend": "^1.6.0",
"@backstage/plugin-search-backend-module-catalog": "^0.2.3",
"@backstage/plugin-search-backend-module-pg": "^0.5.36",
"@backstage/plugin-search-backend-module-techdocs": "^0.3.0",
"@backstage/plugin-search-backend-node": "^1.3.3",
"@backstage/plugin-techdocs-backend": "^1.11.0",
"app": "link:../app",
"better-sqlite3": "^9.0.0",
"node-gyp": "^10.0.0",
"pg": "^8.11.3"
},
"devDependencies": {
"@backstage/cli": "^0.28.0"
},
"files": [
"dist"
]
}

View File

@ -0,0 +1,65 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { createBackend } from '@backstage/backend-defaults';
const backend = createBackend();
backend.add(import('@backstage/plugin-app-backend/alpha'));
backend.add(import('@backstage/plugin-proxy-backend/alpha'));
backend.add(import('@backstage/plugin-scaffolder-backend/alpha'));
backend.add(import('@backstage/plugin-techdocs-backend/alpha'));
// auth plugin
backend.add(import('@backstage/plugin-auth-backend'));
// See https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin
backend.add(import('@backstage/plugin-auth-backend-module-guest-provider'));
// See https://backstage.io/docs/auth/guest/provider
// catalog plugin
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
backend.add(
import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'),
);
// See https://backstage.io/docs/features/software-catalog/configuration#subscribing-to-catalog-errors
backend.add(import('@backstage/plugin-catalog-backend-module-logs'));
// permission plugin
backend.add(import('@backstage/plugin-permission-backend/alpha'));
// See https://backstage.io/docs/permissions/getting-started for how to create your own permission policy
backend.add(
import('@backstage/plugin-permission-backend-module-allow-all-policy'),
);
// search plugin
backend.add(import('@backstage/plugin-search-backend/alpha'));
// search engine
// See https://backstage.io/docs/features/search/search-engines
backend.add(import('@backstage/plugin-search-backend-module-pg/alpha'));
// search collators
backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha'));
backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha'));
// kubernetes
backend.add(import('@backstage/plugin-kubernetes-backend/alpha'));
// kiali
backend.add(import('@backstage-community/plugin-kiali-backend'));
backend.start();

View File

@ -12,6 +12,7 @@
"supported-versions": "1.31.3",
"pluginId": "kiali",
"pluginPackages": [
"@backstage-community/plugin-kiali",
"@backstage-community/plugin-kiali-backend"
]
},
@ -37,10 +38,7 @@
"test": "backstage-cli package test --passWithNoTests --coverage",
"clean": "backstage-cli package clean",
"prepack": "backstage-cli package prepack",
"postpack": "backstage-cli package postpack",
"postversion": "yarn run export-dynamic",
"export-dynamic": "janus-cli package export-dynamic-plugin",
"export-dynamic:clean": "janus-cli package export-dynamic-plugin --clean"
"postpack": "backstage-cli package postpack"
},
"configSchema": "config.d.ts",
"dependencies": {
@ -59,7 +57,6 @@
"devDependencies": {
"@backstage/backend-test-utils": "1.0.0",
"@backstage/cli": "0.27.1",
"@janus-idp/cli": "1.19.1",
"@types/express": "4.17.21",
"@types/supertest": "2.0.16",
"msw": "1.3.5",

View File

@ -0,0 +1,2 @@
dist-dynamic
dist-scalprum

View File

@ -0,0 +1 @@
module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);

View File

@ -0,0 +1,12 @@
dist
dist-types
coverage
.vscode
CHANGELOG.md
generated
templates
*.hbs
renovate.json
dist-dynamic
dist-scalprum
playwright-report

View File

@ -0,0 +1,20 @@
// @ts-check
/** @type {import("@ianvs/prettier-plugin-sort-imports").PrettierConfig} */
module.exports = {
...require('@spotify/prettier-config'),
plugins: ['@ianvs/prettier-plugin-sort-imports'],
importOrder: [
'^react(.*)$',
'',
'^@backstage/(.*)$',
'',
'<THIRD_PARTY_MODULES>',
'',
'^@backstage-community/(.*)$',
'',
'<BUILTIN_MODULES>',
'',
'^[.]',
],
};

View File

@ -0,0 +1,655 @@
### Dependencies
## 1.35.0
### Minor Changes
- 9671df5: Bump plugins/kiali to 1.35.0 in main branch, in prep for release of 1.4.0
## 1.34.1
### Patch Changes
- 0e6bfd3: feat: update Backstage to the latest version
Update to Backstage 1.32.5
## 1.34.0
### Minor Changes
- 8244f28: chore(deps): update to backstage 1.32
## 1.33.1
### Patch Changes
- 7342e9b: chore: remove @janus-idp/cli dep and relink local packages
This update removes `@janus-idp/cli` from all plugins, as its no longer necessary. Additionally, packages are now correctly linked with a specified version.
## 1.33.0
### Minor Changes
- d9551ae: feat(deps): update to backstage 1.31
### Patch Changes
- d9551ae: Change local package references to a `*`
- d9551ae: pin the @janus-idp/cli package
- d9551ae: upgrade to yarn v3
* **@janus-idp/cli:** upgraded to 1.15.2
### Dependencies
- **@janus-idp/cli:** upgraded to 1.15.1
### Dependencies
- **@janus-idp/cli:** upgraded to 1.15.0
### Dependencies
- **@janus-idp/cli:** upgraded to 1.14.0
### Dependencies
- **@janus-idp/cli:** upgraded to 1.13.2
### Dependencies
- **@janus-idp/cli:** upgraded to 1.13.1
## @backstage-community/plugin-kiali [1.30.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.29.0...@backstage-community/plugin-kiali@1.30.0) (2024-07-30)
### Features
- **kiali:** traffic graph ([#1606](https://github.com/janus-idp/backstage-plugins/issues/1606)) ([657fef9](https://github.com/janus-idp/backstage-plugins/commit/657fef97d73e8ba2ad6a3e0c5bc95379f802aa69))
## @backstage-community/plugin-kiali [1.29.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.28.0...@backstage-community/plugin-kiali@1.29.0) (2024-07-26)
### Features
- **deps:** update to backstage 1.29 ([#1900](https://github.com/janus-idp/backstage-plugins/issues/1900)) ([f53677f](https://github.com/janus-idp/backstage-plugins/commit/f53677fb02d6df43a9de98c43a9f101a6db76802))
## @backstage-community/plugin-kiali [1.28.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.27.0...@backstage-community/plugin-kiali@1.28.0) (2024-07-24)
### Features
- **deps:** update to backstage 1.28 ([#1891](https://github.com/janus-idp/backstage-plugins/issues/1891)) ([1ba1108](https://github.com/janus-idp/backstage-plugins/commit/1ba11088e0de60e90d138944267b83600dc446e5))
## @backstage-community/plugin-kiali [1.27.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.26.0...@backstage-community/plugin-kiali@1.27.0) (2024-07-17)
### Features
- **kiali:** sticky headers for tables ([#1877](https://github.com/janus-idp/backstage-plugins/issues/1877)) ([64578d9](https://github.com/janus-idp/backstage-plugins/commit/64578d9c409d5e0d5ed58a93d911ecfe29587679))
## @backstage-community/plugin-kiali [1.26.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.25.0...@backstage-community/plugin-kiali@1.26.0) (2024-07-10)
### Features
- **kiali:** revert changes to Kiali 1.86 ([#1839](https://github.com/janus-idp/backstage-plugins/issues/1839)) ([#1876](https://github.com/janus-idp/backstage-plugins/issues/1876)) ([c512b29](https://github.com/janus-idp/backstage-plugins/commit/c512b298e028d371cb8d22260cdd707e1f5b1ff7))
## @backstage-community/plugin-kiali [1.25.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.24.1...@backstage-community/plugin-kiali@1.25.0) (2024-07-09)
### Features
- **kiali:** improve styles ([#1861](https://github.com/janus-idp/backstage-plugins/issues/1861)) ([158800f](https://github.com/janus-idp/backstage-plugins/commit/158800fc3f59a4901ea43c7cc00695a6bfb86ca8))
## @backstage-community/plugin-kiali [1.24.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.24.0...@backstage-community/plugin-kiali@1.24.1) (2024-07-08)
### Bug Fixes
- **kiali:** add bearer token ([#1870](https://github.com/janus-idp/backstage-plugins/issues/1870)) ([8875276](https://github.com/janus-idp/backstage-plugins/commit/8875276d8f836111462161ef4a6e0caae9209409))
## @backstage-community/plugin-kiali [1.24.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.23.0...@backstage-community/plugin-kiali@1.24.0) (2024-06-28)
### Features
- **kiali:** changes to Kiali 1.86 ([#1839](https://github.com/janus-idp/backstage-plugins/issues/1839)) ([ab1f6bc](https://github.com/janus-idp/backstage-plugins/commit/ab1f6bcb0a803406c96ea944701e5efa94c9cbcf))
## @backstage-community/plugin-kiali [1.23.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.22.0...@backstage-community/plugin-kiali@1.23.0) (2024-06-26)
### Features
- **kiali:** add tests for the overview page ([#1790](https://github.com/janus-idp/backstage-plugins/issues/1790)) ([582cf36](https://github.com/janus-idp/backstage-plugins/commit/582cf36da48f21f7aa31075430bf566a818a3cfa))
## @backstage-community/plugin-kiali [1.22.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.21.0...@backstage-community/plugin-kiali@1.22.0) (2024-06-24)
### Features
- **kiali:** include Kiali external URL as a parameter ([#1835](https://github.com/janus-idp/backstage-plugins/issues/1835)) ([6dbe9eb](https://github.com/janus-idp/backstage-plugins/commit/6dbe9eb6cd635f682da6b893aad8bcd8ad2fb170))
## @backstage-community/plugin-kiali [1.21.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.20.0...@backstage-community/plugin-kiali@1.21.0) (2024-06-21)
### Features
- **kiali:** add banner to warn for tech preview windows ([#1829](https://github.com/janus-idp/backstage-plugins/issues/1829)) ([b0cb796](https://github.com/janus-idp/backstage-plugins/commit/b0cb7960b572dd17ec001a1afcb314219a45e656))
## @backstage-community/plugin-kiali [1.20.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.19.2...@backstage-community/plugin-kiali@1.20.0) (2024-06-20)
### Features
- **kiali:** resources card test coverage ([#1821](https://github.com/janus-idp/backstage-plugins/issues/1821)) ([4090fc2](https://github.com/janus-idp/backstage-plugins/commit/4090fc2e0a20db31fb08fc262dd290a67bd7b05e))
## @backstage-community/plugin-kiali [1.19.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.19.1...@backstage-community/plugin-kiali@1.19.2) (2024-06-19)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.11.1
## @backstage-community/plugin-kiali [1.19.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.19.0...@backstage-community/plugin-kiali@1.19.1) (2024-06-14)
## @backstage-community/plugin-kiali [1.19.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.14...@backstage-community/plugin-kiali@1.19.0) (2024-06-13)
### Features
- **deps:** update to backstage 1.27 ([#1683](https://github.com/janus-idp/backstage-plugins/issues/1683)) ([a14869c](https://github.com/janus-idp/backstage-plugins/commit/a14869c3f4177049cb8d6552b36c3ffd17e7997d))
### Dependencies
- **@janus-idp/cli:** upgraded to 1.11.0
## @backstage-community/plugin-kiali [1.18.14](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.13...@backstage-community/plugin-kiali@1.18.14) (2024-06-13)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.10.1
## @backstage-community/plugin-kiali [1.18.13](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.12...@backstage-community/plugin-kiali@1.18.13) (2024-06-10)
### Bug Fixes
- **kiali:** fix dev links ([#1801](https://github.com/janus-idp/backstage-plugins/issues/1801)) ([2a86a5e](https://github.com/janus-idp/backstage-plugins/commit/2a86a5e7ed43c520962f32a11bc1cce6d13523e3))
## @backstage-community/plugin-kiali [1.18.12](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.11...@backstage-community/plugin-kiali@1.18.12) (2024-06-06)
### Bug Fixes
- **kiali:** remove debug window ([#1793](https://github.com/janus-idp/backstage-plugins/issues/1793)) ([b5b5376](https://github.com/janus-idp/backstage-plugins/commit/b5b5376181d49074bd58bb34734561eab6ee8d2a))
## @backstage-community/plugin-kiali [1.18.11](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.10...@backstage-community/plugin-kiali@1.18.11) (2024-06-06)
### Documentation
- **kiali:** update development doc for alpha backend([#1720](https://github.com/janus-idp/backstage-plugins/issues/1720)) ([e06e9be](https://github.com/janus-idp/backstage-plugins/commit/e06e9bee0745e76beccb8d7e3810548fd46207db))
## @backstage-community/plugin-kiali [1.18.10](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.9...@backstage-community/plugin-kiali@1.18.10) (2024-06-06)
### Bug Fixes
- **kiali:** sanitize input for CWE-79 ([#1786](https://github.com/janus-idp/backstage-plugins/issues/1786)) ([9ba95bb](https://github.com/janus-idp/backstage-plugins/commit/9ba95bba7b9d5081829831e797b27f6a286971a4))
## @backstage-community/plugin-kiali [1.18.9](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.8...@backstage-community/plugin-kiali@1.18.9) (2024-06-05)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.10.0
## @backstage-community/plugin-kiali [1.18.8](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.7...@backstage-community/plugin-kiali@1.18.8) (2024-06-04)
## @backstage-community/plugin-kiali [1.18.7](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.6...@backstage-community/plugin-kiali@1.18.7) (2024-06-04)
### Bug Fixes
- **deps:** update kiali dependencies (minor) ([#1779](https://github.com/janus-idp/backstage-plugins/issues/1779)) ([ff2b421](https://github.com/janus-idp/backstage-plugins/commit/ff2b421be9206d395805f497d4e2821ca4d6edc1))
## @backstage-community/plugin-kiali [1.18.6](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.5...@backstage-community/plugin-kiali@1.18.6) (2024-06-03)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.9.0
## @backstage-community/plugin-kiali [1.18.5](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.4...@backstage-community/plugin-kiali@1.18.5) (2024-05-31)
## @backstage-community/plugin-kiali [1.18.4](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.3...@backstage-community/plugin-kiali@1.18.4) (2024-05-31)
## @backstage-community/plugin-kiali [1.18.3](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.2...@backstage-community/plugin-kiali@1.18.3) (2024-05-29)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.8.10
## @backstage-community/plugin-kiali [1.18.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.1...@backstage-community/plugin-kiali@1.18.2) (2024-05-29)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.8.9
## @backstage-community/plugin-kiali [1.18.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.18.0...@backstage-community/plugin-kiali@1.18.1) (2024-05-16)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.8.7
## @backstage-community/plugin-kiali [1.18.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.17.3...@backstage-community/plugin-kiali@1.18.0) (2024-05-14)
### Features
- **deps:** use RHDH themes in the backstage app and dev pages ([#1480](https://github.com/janus-idp/backstage-plugins/issues/1480)) ([8263bf0](https://github.com/janus-idp/backstage-plugins/commit/8263bf099736cbb0d0f2316082d338ba81fa6927))
## @backstage-community/plugin-kiali [1.17.3](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.17.2...@backstage-community/plugin-kiali@1.17.3) (2024-05-13)
### Bug Fixes
- **kiali:** removing unnecessary afterAll hook ([#1642](https://github.com/janus-idp/backstage-plugins/issues/1642)) ([a314607](https://github.com/janus-idp/backstage-plugins/commit/a3146073bebb17b6f990891a277323a19e3731d6))
## @backstage-community/plugin-kiali [1.17.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.17.1...@backstage-community/plugin-kiali@1.17.2) (2024-05-09)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.8.6
## @backstage-community/plugin-kiali [1.17.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.17.0...@backstage-community/plugin-kiali@1.17.1) (2024-05-08)
### Documentation
- **kiali:** update rhdh docs ([#1621](https://github.com/janus-idp/backstage-plugins/issues/1621)) ([7087cba](https://github.com/janus-idp/backstage-plugins/commit/7087cbad8929708f065e0027871a337946f09881))
## @backstage-community/plugin-kiali [1.17.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.10...@backstage-community/plugin-kiali@1.17.0) (2024-05-07)
### Features
- **kiali:** add card for resources ([#1565](https://github.com/janus-idp/backstage-plugins/issues/1565)) ([1e727aa](https://github.com/janus-idp/backstage-plugins/commit/1e727aae0464aa55e4dce754a04e97a5708c07f9))
## @backstage-community/plugin-kiali [1.16.10](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.9...@backstage-community/plugin-kiali@1.16.10) (2024-05-04)
### Bug Fixes
- **kiali:** remove IstioConfig extra, Fix links and add kiali control ([#1452](https://github.com/janus-idp/backstage-plugins/issues/1452)) ([51a35f0](https://github.com/janus-idp/backstage-plugins/commit/51a35f0ccee8a38555079b2fa6027639ee595f9b))
## @backstage-community/plugin-kiali [1.16.9](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.8...@backstage-community/plugin-kiali@1.16.9) (2024-05-02)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.8.5
## @backstage-community/plugin-kiali [1.16.8](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.7...@backstage-community/plugin-kiali@1.16.8) (2024-05-02)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.8.4
## @backstage-community/plugin-kiali [1.16.7](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.6...@backstage-community/plugin-kiali@1.16.7) (2024-04-30)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.8.3
## @backstage-community/plugin-kiali [1.16.6](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.5...@backstage-community/plugin-kiali@1.16.6) (2024-04-30)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.8.2
## @backstage-community/plugin-kiali [1.16.5](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.4...@backstage-community/plugin-kiali@1.16.5) (2024-04-25)
### Bug Fixes
- **kiali:** update load for overview page ([#1491](https://github.com/janus-idp/backstage-plugins/issues/1491)) ([8de16e2](https://github.com/janus-idp/backstage-plugins/commit/8de16e2f08f2f02ad8001a21d7ec0511ba965a86))
### Dependencies
- **@janus-idp/cli:** upgraded to 1.8.1
## @backstage-community/plugin-kiali [1.16.4](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.3...@backstage-community/plugin-kiali@1.16.4) (2024-04-15)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.8.0
## @backstage-community/plugin-kiali [1.16.3](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.2...@backstage-community/plugin-kiali@1.16.3) (2024-04-09)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.10
## @backstage-community/plugin-kiali [1.16.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.1...@backstage-community/plugin-kiali@1.16.2) (2024-04-09)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.9
## @backstage-community/plugin-kiali [1.16.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.16.0...@backstage-community/plugin-kiali@1.16.1) (2024-04-05)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.8
## @backstage-community/plugin-kiali [1.16.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.15.0...@backstage-community/plugin-kiali@1.16.0) (2024-04-04)
### Features
- **kiali:** istio config list and details ([#1326](https://github.com/janus-idp/backstage-plugins/issues/1326)) ([f8fc349](https://github.com/janus-idp/backstage-plugins/commit/f8fc349e1305b10632520c4f25f78c45b54481bb))
## @backstage-community/plugin-kiali [1.15.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.14.2...@backstage-community/plugin-kiali@1.15.0) (2024-04-03)
### Features
- **kiali:** update dark theme ([#1434](https://github.com/janus-idp/backstage-plugins/issues/1434)) ([e0d84e1](https://github.com/janus-idp/backstage-plugins/commit/e0d84e177786187e0d7a8b279d7e72f710207d91))
## @backstage-community/plugin-kiali [1.14.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.14.1...@backstage-community/plugin-kiali@1.14.2) (2024-04-02)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.7
## @backstage-community/plugin-kiali [1.14.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.14.0...@backstage-community/plugin-kiali@1.14.1) (2024-03-29)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.6
## @backstage-community/plugin-kiali [1.14.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.13.0...@backstage-community/plugin-kiali@1.14.0) (2024-03-25)
### Features
- **kiali:** metrics tab ([#1331](https://github.com/janus-idp/backstage-plugins/issues/1331)) ([d80e331](https://github.com/janus-idp/backstage-plugins/commit/d80e33155481730c0e95de40da99ed0280e982c8))
## @backstage-community/plugin-kiali [1.13.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.12.1...@backstage-community/plugin-kiali@1.13.0) (2024-03-14)
### Features
- **kiali:** include a new List entity view ([#1316](https://github.com/janus-idp/backstage-plugins/issues/1316)) ([f4d5e70](https://github.com/janus-idp/backstage-plugins/commit/f4d5e70ed98ceaf6277402f39feb26bd114d0d6b))
## @backstage-community/plugin-kiali [1.12.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.12.0...@backstage-community/plugin-kiali@1.12.1) (2024-03-11)
### Documentation
- **kiali:** minor update in development docs ([#820](https://github.com/janus-idp/backstage-plugins/issues/820)) ([81e79bf](https://github.com/janus-idp/backstage-plugins/commit/81e79bf59ebff745a8775dc9ac784c7889e9532c))
## @backstage-community/plugin-kiali [1.12.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.11.3...@backstage-community/plugin-kiali@1.12.0) (2024-03-06)
### Features
- **kiali:** services and apps list and details overview ([#1276](https://github.com/janus-idp/backstage-plugins/issues/1276)) ([7e4c0a5](https://github.com/janus-idp/backstage-plugins/commit/7e4c0a5fd699b42def7989155bfc377a670575db))
## @backstage-community/plugin-kiali [1.11.3](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.11.2...@backstage-community/plugin-kiali@1.11.3) (2024-03-04)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.5
## @backstage-community/plugin-kiali [1.11.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.11.1...@backstage-community/plugin-kiali@1.11.2) (2024-02-27)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.4
## @backstage-community/plugin-kiali [1.11.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.11.0...@backstage-community/plugin-kiali@1.11.1) (2024-02-26)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.3
## @backstage-community/plugin-kiali [1.11.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.10.2...@backstage-community/plugin-kiali@1.11.0) (2024-02-21)
### Features
- **kiali:** workloads details page overview tab ([#1198](https://github.com/janus-idp/backstage-plugins/issues/1198)) ([34adc57](https://github.com/janus-idp/backstage-plugins/commit/34adc57837406e80b93a1a1657e96ff902bf24bd))
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.2
## @backstage-community/plugin-kiali [1.10.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.10.1...@backstage-community/plugin-kiali@1.10.2) (2024-02-19)
### Bug Fixes
- **kiali:** update styles, remove item details links ([#1207](https://github.com/janus-idp/backstage-plugins/issues/1207)) ([c133ea7](https://github.com/janus-idp/backstage-plugins/commit/c133ea76772b44ec348c5bff3ad4609f1938fdba))
## @backstage-community/plugin-kiali [1.10.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.10.0...@backstage-community/plugin-kiali@1.10.1) (2024-02-14)
### Bug Fixes
- **kiali:** add corner cases, fix some issues and improve dev env ([#1202](https://github.com/janus-idp/backstage-plugins/issues/1202)) ([fd9a8aa](https://github.com/janus-idp/backstage-plugins/commit/fd9a8aaae4aa7f625bbfdac954e2580d0dc0e30f))
## @backstage-community/plugin-kiali [1.10.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.9.1...@backstage-community/plugin-kiali@1.10.0) (2024-02-12)
### Features
- **kiali:** workloads page list ([#1129](https://github.com/janus-idp/backstage-plugins/issues/1129)) ([1e3991b](https://github.com/janus-idp/backstage-plugins/commit/1e3991b9af35ef5da8f9987fc2d17026d438a853))
## @backstage-community/plugin-kiali [1.9.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.9.0...@backstage-community/plugin-kiali@1.9.1) (2024-02-08)
### Bug Fixes
- **kiali:** namespaceSelector is removing options ([#1186](https://github.com/janus-idp/backstage-plugins/issues/1186)) ([0195b06](https://github.com/janus-idp/backstage-plugins/commit/0195b06158327649afb298715ceab9fc0e89a07b))
## @backstage-community/plugin-kiali [1.9.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.8.5...@backstage-community/plugin-kiali@1.9.0) (2024-02-07)
### Features
- **kiali:** add KialiPage Component ([#1180](https://github.com/janus-idp/backstage-plugins/issues/1180)) ([c91bcc3](https://github.com/janus-idp/backstage-plugins/commit/c91bcc3bc13b274312de3d0656d8ea865a3af27b))
## @backstage-community/plugin-kiali [1.8.5](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.8.4...@backstage-community/plugin-kiali@1.8.5) (2024-02-05)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.1
## @backstage-community/plugin-kiali [1.8.4](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.8.3...@backstage-community/plugin-kiali@1.8.4) (2024-01-31)
### Bug Fixes
- **kiali:** show username when auth is anonymous ([#1139](https://github.com/janus-idp/backstage-plugins/issues/1139)) ([0a04992](https://github.com/janus-idp/backstage-plugins/commit/0a04992b0581a3cb47017c0713703ed7e204ac02))
## @backstage-community/plugin-kiali [1.8.3](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.8.2...@backstage-community/plugin-kiali@1.8.3) (2024-01-30)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.7.0
## @backstage-community/plugin-kiali [1.8.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.8.1...@backstage-community/plugin-kiali@1.8.2) (2024-01-25)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.6.0
## @backstage-community/plugin-kiali [1.8.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.8.0...@backstage-community/plugin-kiali@1.8.1) (2024-01-24)
### Bug Fixes
- **kiali:** fix sessionTime configuration and tests ([#1099](https://github.com/janus-idp/backstage-plugins/issues/1099)) ([882381c](https://github.com/janus-idp/backstage-plugins/commit/882381c0b65a2bcfecc2365048f83376938a0fb8)), closes [#1100](https://github.com/janus-idp/backstage-plugins/issues/1100)
## @backstage-community/plugin-kiali [1.8.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.7.0...@backstage-community/plugin-kiali@1.8.0) (2024-01-19)
### Other changes
- **kiali:** add context, remove kiali-common and refactor backend ([#855](https://github.com/janus-idp/backstage-plugins/issues/855)) ([54c7001](https://github.com/janus-idp/backstage-plugins/commit/54c70018d948912d36a4949bbaf1633763fb9ae1))
## @backstage-community/plugin-kiali [1.7.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.13...@backstage-community/plugin-kiali@1.7.0) (2024-01-18)
### Features
- **kiali:** add OWNERS file to kiali\* plugin ([#1082](https://github.com/janus-idp/backstage-plugins/issues/1082)) ([e2dc23b](https://github.com/janus-idp/backstage-plugins/commit/e2dc23b9db3da0384137e809795a57da118e494d))
## @backstage-community/plugin-kiali [1.6.13](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.12...@backstage-community/plugin-kiali@1.6.13) (2024-01-16)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.5.0
## @backstage-community/plugin-kiali [1.6.12](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.11...@backstage-community/plugin-kiali@1.6.12) (2023-12-07)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.4.7
## @backstage-community/plugin-kiali [1.6.11](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.10...@backstage-community/plugin-kiali@1.6.11) (2023-11-30)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.4.6
## @backstage-community/plugin-kiali [1.6.10](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.9...@backstage-community/plugin-kiali@1.6.10) (2023-11-22)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.4.5
## @backstage-community/plugin-kiali [1.6.9](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.8...@backstage-community/plugin-kiali@1.6.9) (2023-11-21)
### Bug Fixes
- sync versions in dynamic assets and publish derived packages as additional packages ([#963](https://github.com/janus-idp/backstage-plugins/issues/963)) ([7d0a386](https://github.com/janus-idp/backstage-plugins/commit/7d0a38609b4a18b54c75378a150e8b5c3ba8ff43))
## @backstage-community/plugin-kiali [1.6.8](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.7...@backstage-community/plugin-kiali@1.6.8) (2023-11-20)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.4.4
## @backstage-community/plugin-kiali [1.6.7](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.6...@backstage-community/plugin-kiali@1.6.7) (2023-11-16)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.4.3
## @backstage-community/plugin-kiali [1.6.6](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.5...@backstage-community/plugin-kiali@1.6.6) (2023-11-13)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.4.2
## @backstage-community/plugin-kiali [1.6.5](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.4...@backstage-community/plugin-kiali@1.6.5) (2023-11-13)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.4.1
## @backstage-community/plugin-kiali [1.6.4](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.3...@backstage-community/plugin-kiali@1.6.4) (2023-11-07)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.4.0
## @backstage-community/plugin-kiali [1.6.3](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.2...@backstage-community/plugin-kiali@1.6.3) (2023-11-06)
### Bug Fixes
- **cli:** add default scalprum config ([#909](https://github.com/janus-idp/backstage-plugins/issues/909)) ([d74fc72](https://github.com/janus-idp/backstage-plugins/commit/d74fc72ab7e0a843da047c7b6570d8a6fbc068e1))
### Dependencies
- **@janus-idp/cli:** upgraded to 1.3.3
## @backstage-community/plugin-kiali [1.6.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.1...@backstage-community/plugin-kiali@1.6.2) (2023-11-06)
### Documentation
- update frontend plugin docs to use EntityLayout instead of EntityPageLayout ([#907](https://github.com/janus-idp/backstage-plugins/issues/907)) ([aa91bba](https://github.com/janus-idp/backstage-plugins/commit/aa91bba4c7a43de416258eb019724e21c7cf4bb8))
## @backstage-community/plugin-kiali [1.6.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.6.0...@backstage-community/plugin-kiali@1.6.1) (2023-11-02)
### Dependencies
- **@janus-idp/cli:** upgraded to 1.3.2
## @backstage-community/plugin-kiali [1.6.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.5.5...@backstage-community/plugin-kiali@1.6.0) (2023-11-01)
### Features
- **dynamic-plugins:** publish dynamic assets for all frontend plugins ([#896](https://github.com/janus-idp/backstage-plugins/issues/896)) ([dcfb0ac](https://github.com/janus-idp/backstage-plugins/commit/dcfb0ac56769c82f6b8b2cef2726251e0b60c375))
## @backstage-community/plugin-kiali [1.5.5](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.5.4...@backstage-community/plugin-kiali@1.5.5) (2023-10-27)
### Dependencies
- **@backstage-community/plugin-kiali-common:** upgraded to 1.0.0
## @backstage-community/plugin-kiali [1.5.4](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.5.3...@backstage-community/plugin-kiali@1.5.4) (2023-10-25)
### Bug Fixes
- **kiali:** use prevState callback ([#874](https://github.com/janus-idp/backstage-plugins/issues/874)) ([13a01f7](https://github.com/janus-idp/backstage-plugins/commit/13a01f79be812fe74f71f474152c7e8fe0f4fe90))
## @backstage-community/plugin-kiali [1.5.3](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.5.2...@backstage-community/plugin-kiali@1.5.3) (2023-10-19)
### Dependencies
- **@backstage-community/plugin-kiali-common:** upgraded to 1.4.1
## @backstage-community/plugin-kiali [1.5.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.5.1...@backstage-community/plugin-kiali@1.5.2) (2023-09-22)
## @backstage-community/plugin-kiali [1.5.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.5.0...@backstage-community/plugin-kiali@1.5.1) (2023-09-11)
## @backstage-community/plugin-kiali [1.5.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.4.0...@backstage-community/plugin-kiali@1.5.0) (2023-08-30)
### Features
- **kiali:** add namespace selector ([#675](https://github.com/janus-idp/backstage-plugins/issues/675)) ([e3cfc26](https://github.com/janus-idp/backstage-plugins/commit/e3cfc26bdf550916da3ee801601196d8614471b5))
### Dependencies
- **@backstage-community/plugin-kiali-common:** upgraded to 1.4.0
## @backstage-community/plugin-kiali [1.4.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.3.1...@backstage-community/plugin-kiali@1.4.0) (2023-08-29)
### Features
- **kiali:** frontend dev environment ([#687](https://github.com/janus-idp/backstage-plugins/issues/687)) ([c4f4ddd](https://github.com/janus-idp/backstage-plugins/commit/c4f4dddd1f2b6ba5b908bbf1a5f88dc9d54b93e5))
## @backstage-community/plugin-kiali [1.3.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.3.0...@backstage-community/plugin-kiali@1.3.1) (2023-08-29)
### Bug Fixes
- **kiali:** upgrade patternfly ([#673](https://github.com/janus-idp/backstage-plugins/issues/673)) ([6e5702f](https://github.com/janus-idp/backstage-plugins/commit/6e5702f196c2fbf8de888ca5083241a58548469e))
## @backstage-community/plugin-kiali [1.3.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.2.1...@backstage-community/plugin-kiali@1.3.0) (2023-08-28)
### Features
- **kiali:** show kiali information in header ([#630](https://github.com/janus-idp/backstage-plugins/issues/630)) ([b9a83b3](https://github.com/janus-idp/backstage-plugins/commit/b9a83b332ec518e60a9780961fdce070eda02d02))
### Dependencies
- **@backstage-community/plugin-kiali-common:** upgraded to 1.3.0
## @backstage-community/plugin-kiali [1.2.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.2.0...@backstage-community/plugin-kiali@1.2.1) (2023-08-22)
### Bug Fixes
- **kiali:** fix code smells ([#607](https://github.com/janus-idp/backstage-plugins/issues/607)) ([ef2eecf](https://github.com/janus-idp/backstage-plugins/commit/ef2eecfa71e2a60b4442ce3105a526b3332eaa1b))
### Dependencies
- **@backstage-community/plugin-kiali-common:** upgraded to 1.2.1
## @backstage-community/plugin-kiali [1.2.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.1.0...@backstage-community/plugin-kiali@1.2.0) (2023-08-14)
### Features
- **ts:** transpile each plugin separately ([#634](https://github.com/janus-idp/backstage-plugins/issues/634)) ([b94c4dc](https://github.com/janus-idp/backstage-plugins/commit/b94c4dc50ada328e5ce1bed5fb7c76f64607e1ee))
### Dependencies
- **@backstage-community/plugin-kiali-common:** upgraded to 1.2.0
## @backstage-community/plugin-kiali [1.1.0](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.0.3...@backstage-community/plugin-kiali@1.1.0) (2023-07-27)
### Features
- **kiali:** move from node-fetch to axios ([#573](https://github.com/janus-idp/backstage-plugins/issues/573)) ([c0ed797](https://github.com/janus-idp/backstage-plugins/commit/c0ed7972ef8fa143d51b590ca5f874900e5d8bef))
### Dependencies
- **@backstage-community/plugin-kiali-common:** upgraded to 1.1.0
## @backstage-community/plugin-kiali [1.0.3](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.0.2...@backstage-community/plugin-kiali@1.0.3) (2023-07-25)
## @backstage-community/plugin-kiali [1.0.2](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.0.1...@backstage-community/plugin-kiali@1.0.2) (2023-07-25)
## @backstage-community/plugin-kiali [1.0.1](https://github.com/janus-idp/backstage-plugins/compare/@backstage-community/plugin-kiali@1.0.0...@backstage-community/plugin-kiali@1.0.1) (2023-07-25)
## @backstage-community/plugin-kiali 1.0.0 (2023-07-25)
### Features
- **kiali:** kiali plugin ([#371](https://github.com/janus-idp/backstage-plugins/issues/371)) ([08d5583](https://github.com/janus-idp/backstage-plugins/commit/08d5583f839a8233d7b08a7ec1eb043bf4978e91))
### Dependencies
- **@backstage-community/plugin-kiali-common:** upgraded to 1.0.0

View File

@ -0,0 +1,4 @@
# Kiali plugin for Backstage
The Kiali Plugin
This plugin exposes information about your entity-specific ServiceMesh objects.

View File

@ -0,0 +1,574 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { Entity } from '@backstage/catalog-model';
import { Content, HeaderTabs, Page } from '@backstage/core-components';
import { EntityProvider } from '@backstage/plugin-catalog-react';
import { TestApiProvider } from '@backstage/test-utils';
import { getEntityRoutes } from '../src/components/Router';
import { AppDetailsPage } from '../src/pages/AppDetails/AppDetailsPage';
import { AppListPage } from '../src/pages/AppList/AppListPage';
import { IstioConfigDetailsPage } from '../src/pages/IstioConfigDetails/IstioConfigDetailsPage';
import { IstioConfigListPage } from '../src/pages/IstioConfigList/IstioConfigListPage';
import { KialiNoPath } from '../src/pages/Kiali';
import { KialiHeader } from '../src/pages/Kiali/Header/KialiHeader';
import { OverviewPage } from '../src/pages/Overview/OverviewPage';
import { ServiceDetailsPage } from '../src/pages/ServiceDetails/ServiceDetailsPage';
import { ServiceListPage } from '../src/pages/ServiceList/ServiceListPage';
import TrafficGraphPage from '../src/pages/TrafficGraph/TrafficGraphPage';
import { WorkloadDetailsPage } from '../src/pages/WorkloadDetails/WorkloadDetailsPage';
import { WorkloadListPage } from '../src/pages/WorkloadList/WorkloadListPage';
import { KialiApi, kialiApiRef } from '../src/services/Api';
import { KialiProvider } from '../src/store/KialiProvider';
import { App, AppQuery } from '../src/types/App';
import { AppList, AppListQuery } from '../src/types/AppList';
import { AuthInfo } from '../src/types/Auth';
import { CertsInfo } from '../src/types/CertsInfo';
import { DurationInSeconds, TimeInSeconds } from '../src/types/Common';
import { DashboardModel } from '../src/types/Dashboards';
import { GrafanaInfo } from '../src/types/GrafanaInfo';
import { GraphDefinition, GraphElementsQuery } from '../src/types/Graph';
import {
AppHealth,
NamespaceAppHealth,
NamespaceServiceHealth,
NamespaceWorkloadHealth,
ServiceHealth,
WorkloadHealth,
} from '../src/types/Health';
import { IstioConfigDetails } from '../src/types/IstioConfigDetails';
import { IstioConfigList, IstioConfigsMap } from '../src/types/IstioConfigList';
import {
CanaryUpgradeStatus,
OutboundTrafficPolicy,
PodLogs,
ValidationStatus,
} from '../src/types/IstioObjects';
import {
ComponentStatus,
IstiodResourceThresholds,
} from '../src/types/IstioStatus';
import { IstioMetricsMap } from '../src/types/Metrics';
import { IstioMetricsOptions } from '../src/types/MetricsOptions';
import { Namespace } from '../src/types/Namespace';
import { KialiCrippledFeatures, ServerConfig } from '../src/types/ServerConfig';
import { ServiceDetailsInfo } from '../src/types/ServiceInfo';
import { ServiceList, ServiceListQuery } from '../src/types/ServiceList';
import { StatusState } from '../src/types/StatusState';
import { TLSStatus } from '../src/types/TLSStatus';
import { Span, TracingQuery } from '../src/types/Tracing';
import {
Workload,
WorkloadListItem,
WorkloadNamespaceResponse,
WorkloadOverview,
WorkloadQuery,
} from '../src/types/Workload';
import { filterNsByAnnotation } from '../src/utils/entityFilter';
import { kialiData } from './__fixtures__';
import { mockEntity } from './mockEntity';
export class MockKialiClient implements KialiApi {
private entity?: Entity;
constructor() {
this.entity = undefined;
}
getGraphElements(_params: GraphElementsQuery): Promise<GraphDefinition> {
return kialiData.graph;
}
setEntity(entity?: Entity): void {
this.entity = entity;
}
async status(): Promise<StatusState> {
return kialiData.status;
}
async getAuthInfo(): Promise<AuthInfo> {
return kialiData.auth;
}
async getStatus(): Promise<StatusState> {
return kialiData.status;
}
async getNamespaces(): Promise<Namespace[]> {
return filterNsByAnnotation(
kialiData.namespaces as Namespace[],
this.entity,
);
}
async getWorkloads(
namespace: string,
duration: number,
): Promise<WorkloadListItem[]> {
const nsl = kialiData.workloads as WorkloadNamespaceResponse[];
// @ts-ignore
return nsl[namespace].workloads.map(
(w: WorkloadOverview): WorkloadListItem => {
return {
name: w.name,
namespace: namespace,
cluster: w.cluster,
type: w.type,
istioSidecar: w.istioSidecar,
istioAmbient: w.istioAmbient,
additionalDetailSample: undefined,
appLabel: w.appLabel,
versionLabel: w.versionLabel,
labels: w.labels,
istioReferences: w.istioReferences,
notCoveredAuthPolicy: w.notCoveredAuthPolicy,
health: WorkloadHealth.fromJson(namespace, w.name, w.health, {
rateInterval: duration,
hasSidecar: w.istioSidecar,
hasAmbient: w.istioAmbient,
}),
};
},
);
}
async getWorkload(
namespace: string,
name: string,
_: WorkloadQuery,
__?: string,
): Promise<Workload> {
const parsedName = name.replace(/-/g, '');
return kialiData.namespacesData[namespace].workloads[parsedName];
}
async getIstioConfig(
namespace: string,
_: string[],
__: boolean,
___: string,
____: string,
_____?: string,
): Promise<IstioConfigList> {
return kialiData.namespacesData[namespace].istioConfigList;
}
async getServerConfig(): Promise<ServerConfig> {
return kialiData.config;
}
async getNamespaceAppHealth(
namespace: string,
duration: DurationInSeconds,
cluster?: string,
queryTime?: TimeInSeconds,
): Promise<NamespaceAppHealth> {
const ret: NamespaceAppHealth = {};
const params: any = {
type: 'app',
rateInterval: `${String(duration)}s`,
queryTime: String(queryTime),
clusterName: cluster,
};
const data = kialiData.namespacesData[namespace].health[params.type];
Object.keys(data).forEach(k => {
ret[k] = AppHealth.fromJson(namespace, k, data[k], {
rateInterval: duration,
hasSidecar: true,
hasAmbient: false,
});
});
return ret;
}
async getNamespaceServiceHealth(
namespace: string,
duration: DurationInSeconds,
cluster?: string,
queryTime?: TimeInSeconds,
): Promise<NamespaceServiceHealth> {
const ret: NamespaceServiceHealth = {};
const params: any = {
type: 'service',
rateInterval: `${String(duration)}s`,
queryTime: String(queryTime),
clusterName: cluster,
};
const data = kialiData.namespacesData[namespace].health[params.type];
Object.keys(data).forEach(k => {
ret[k] = ServiceHealth.fromJson(namespace, k, data[k], {
rateInterval: duration,
hasSidecar: true,
hasAmbient: false,
});
});
return ret;
}
async getNamespaceWorkloadHealth(
namespace: string,
duration: DurationInSeconds,
cluster?: string,
queryTime?: TimeInSeconds,
): Promise<NamespaceWorkloadHealth> {
const ret: NamespaceWorkloadHealth = {};
const params: any = {
type: 'workload',
rateInterval: `${String(duration)}s`,
queryTime: String(queryTime),
clusterName: cluster,
};
const data = kialiData.namespacesData[namespace].health[params.type];
Object.keys(data).forEach(k => {
ret[k] = WorkloadHealth.fromJson(namespace, k, data[k], {
rateInterval: duration,
hasSidecar: true,
hasAmbient: false,
});
});
return ret;
}
async getNamespaceTls(
namespace: string,
cluster?: string,
): Promise<TLSStatus> {
const queryParams: any = {};
if (cluster) {
queryParams.clusterName = cluster;
}
return kialiData.namespacesData[namespace].tls;
}
async getMeshTls(cluster?: string): Promise<TLSStatus> {
const queryParams: any = {};
if (cluster) {
queryParams.clusterName = cluster;
}
return kialiData.meshTls;
}
async getOutboundTrafficPolicyMode(): Promise<OutboundTrafficPolicy> {
return kialiData.outboundTrafficPolicy;
}
async getCanaryUpgradeStatus(): Promise<CanaryUpgradeStatus> {
return kialiData.meshCanaryStatus;
}
async getIstiodResourceThresholds(): Promise<IstiodResourceThresholds> {
return kialiData.meshIstioResourceThresholds;
}
async getConfigValidations(cluster?: string): Promise<ValidationStatus> {
const queryParams: any = {};
if (cluster) {
queryParams.clusterName = cluster;
}
return kialiData.istioValidations;
}
async getAllIstioConfigs(
namespaces: string[],
objects: string[],
validate: boolean,
labelSelector: string,
workloadSelector: string,
cluster?: string,
): Promise<IstioConfigsMap> {
const params: any =
namespaces && namespaces.length > 0
? { namespaces: namespaces.join(',') }
: {};
if (objects && objects.length > 0) {
params.objects = objects.join(',');
}
if (validate) {
params.validate = validate;
}
if (labelSelector) {
params.labelSelector = labelSelector;
}
if (workloadSelector) {
params.workloadSelector = workloadSelector;
}
if (cluster) {
params.clusterName = cluster;
}
return kialiData.istioConfig;
}
async getNamespaceMetrics(
namespace: string,
params: IstioMetricsOptions,
): Promise<Readonly<IstioMetricsMap>> {
return kialiData.namespacesData[namespace].metrics[params.direction][
params.duration as number
];
}
async getIstioStatus(cluster?: string): Promise<ComponentStatus[]> {
const queryParams: any = {};
if (cluster) {
queryParams.clusterName = cluster;
}
return kialiData.istioStatus;
}
async getIstioCertsInfo(): Promise<CertsInfo[]> {
return kialiData.istioCertsInfo;
}
isDevEnv(): boolean {
return true;
}
async getPodLogs(
_: string,
__: string,
container?: string,
___?: number,
____?: number,
_duration?: DurationInSeconds,
_isProxy?: boolean,
_cluster?: string,
): Promise<PodLogs> {
if (container === 'istio-proxy') {
return kialiData.istioLogs;
}
return kialiData.logs;
}
setPodEnvoyProxyLogLevel = async (
_namespace: string,
_name: string,
_level: string,
_cluster?: string,
): Promise<void> => {
return;
};
async getWorkloadSpans(
_: string,
__: string,
___: TracingQuery,
____?: string,
): Promise<Span[]> {
return kialiData.spanLogs;
}
async getServices(
namespace: string,
_?: ServiceListQuery,
): Promise<ServiceList> {
return kialiData.services[namespace];
}
async getIstioConfigDetail(
namespace: string,
objectType: string,
object: string,
_validate: boolean,
_cluster?: string,
): Promise<IstioConfigDetails> {
return kialiData.namespacesData[namespace].istioConfigDetails[objectType][
object
];
}
async getServiceDetail(
namespace: string,
service: string,
_validate: boolean,
_cluster?: string,
rateInterval?: DurationInSeconds,
): Promise<ServiceDetailsInfo> {
const parsedName = service.replace(/-/g, '');
const info: ServiceDetailsInfo =
kialiData.namespacesData[namespace].services[parsedName];
if (info.health) {
// Default rate interval in backend = 600s
info.health = ServiceHealth.fromJson(namespace, service, info.health, {
rateInterval: rateInterval ?? 600,
hasSidecar: info.istioSidecar,
hasAmbient: info.istioAmbient,
});
}
return info;
}
getApps = async (
namespace: string,
_params: AppListQuery,
): Promise<AppList> => {
return kialiData.apps[namespace];
};
getApp = async (
namespace: string,
app: string,
_params: AppQuery,
_cluster?: string,
): Promise<App> => {
const parsedName = app.replace(/-/g, '');
return kialiData.namespacesData[namespace].apps[parsedName];
};
getCrippledFeatures = async (): Promise<KialiCrippledFeatures> => {
return kialiData.crippledFeatures;
};
getWorkloadDashboard = async (
namespace: string,
_workload: string,
_params: IstioMetricsOptions,
_cluster?: string,
): Promise<DashboardModel> => {
return kialiData.namespacesData[namespace].dashboard;
};
getServiceDashboard = async (
namespace: string,
_service: string,
_params: IstioMetricsOptions,
_cluster?: string,
): Promise<DashboardModel> => {
return kialiData.namespacesData[namespace].dashboard;
};
getAppDashboard = async (
namespace: string,
_app: string,
_params: IstioMetricsOptions,
_cluster?: string,
): Promise<DashboardModel> => {
return kialiData.namespacesData[namespace].dashboard;
};
getGrafanaInfo = async (): Promise<GrafanaInfo> => {
return kialiData.grafanaInfo;
};
getAppSpans = async (
namespace: string,
_app: string,
_params: TracingQuery,
_cluster?: string,
): Promise<Span[]> => {
return kialiData.namespacesData[namespace].spans;
};
getServiceSpans = async (
namespace: string,
_service: string,
_params: TracingQuery,
_cluster?: string,
): Promise<Span[]> => {
return kialiData.namespacesData[namespace].spans;
};
}
const getSelected = (route: number) => {
const pathname = window.location.pathname.split('/');
const paths = ['workloads', 'applications', 'services', 'istio', 'graph'];
if (pathname && paths.includes(pathname[2])) {
switch (pathname[2]) {
case 'workloads':
return <WorkloadDetailsPage />;
case 'services':
return <ServiceDetailsPage />;
case 'applications':
return <AppDetailsPage />;
case 'istio':
return <IstioConfigDetailsPage />;
case 'graph':
return <TrafficGraphPage />;
default:
return <OverviewPage />;
}
}
switch (route) {
case 0:
return <OverviewPage />;
case 1:
return <WorkloadListPage />;
case 2:
return <ServiceListPage />;
case 3:
return <AppListPage />;
case 4:
return <IstioConfigListPage />;
case 5:
return <TrafficGraphPage />;
default:
return <KialiNoPath />;
}
};
interface Props {
children?: React.ReactNode;
entity?: Entity;
isEntity?: boolean;
}
export const MockProvider = (props: Props) => {
const [selectedTab, setSelectedTab] = React.useState<number>(0);
const tabs = [
{ label: 'Overview', route: `/kiali#overview` },
{ label: 'Workloads', route: `/kiali#workloads` },
{ label: 'Services', route: `/kiali#services` },
{ label: 'Applications', route: `/kiali#applications` },
{ label: 'Istio Config', route: `/kiali#istio` },
{ label: 'Traffic Graph', route: `/kiali#graph` },
];
const content = (
<KialiProvider entity={props.entity || mockEntity}>
<Page themeId="tool">
{!props.isEntity && (
<>
<KialiHeader />
<HeaderTabs
selectedIndex={selectedTab}
onChange={(index: number) => {
setSelectedTab(index);
}}
tabs={tabs.map(({ label }, index) => ({
id: tabs[index].route,
label,
}))}
/>
{getSelected(selectedTab)}
</>
)}
{props.isEntity && <Content>{getEntityRoutes()}</Content>}
</Page>
</KialiProvider>
);
const viewIfEntity = props.isEntity && (
<EntityProvider entity={mockEntity}>{content}</EntityProvider>
);
return (
<TestApiProvider apis={[[kialiApiRef, new MockKialiClient()]]}>
{viewIfEntity || content}
</TestApiProvider>
);
};

View File

@ -0,0 +1 @@
{ "strategy": "anonymous", "sessionInfo": {} }

View File

@ -0,0 +1,190 @@
{
"accessibleNamespaces": ["**"],
"authStrategy": "anonymous",
"ambientEnabled": true,
"clusters": {
"Kubernetes": {
"apiEndpoint": "https://10.217.4.1:443",
"isKialiHome": true,
"kialiInstances": [
{
"namespace": "istio-system",
"operatorResource": "kiali-operator/kiali",
"serviceName": "kiali",
"url": "https://kiali-istio-system.apps-crc.testing",
"version": "dev"
}
],
"name": "Kubernetes",
"network": "",
"secretName": ""
}
},
"deployment": {},
"gatewayAPIClasses": [
{
"name": "Istio",
"className": "istio"
}
],
"healthConfig": {
"rate": [
{
"tolerance": [
{
"code": "5XX",
"degraded": 0,
"failure": 10,
"protocol": "http",
"direction": ".*"
},
{
"code": "4XX",
"degraded": 10,
"failure": 20,
"protocol": "http",
"direction": ".*"
},
{
"code": "^[1-9]$|^1[0-6]$",
"degraded": 0,
"failure": 10,
"protocol": "grpc",
"direction": ".*"
},
{
"code": "^-$",
"degraded": 0,
"failure": 10,
"protocol": "http|grpc",
"direction": ".*"
}
]
},
{
"tolerance": [
{
"code": "5XX",
"degraded": 0,
"failure": 10,
"protocol": "http",
"direction": ".*"
},
{
"code": "4XX",
"degraded": 10,
"failure": 20,
"protocol": "http",
"direction": ".*"
},
{
"code": "^[1-9]$|^1[0-6]$",
"degraded": 0,
"failure": 10,
"protocol": "grpc",
"direction": ".*"
},
{
"code": "^-$",
"degraded": 0,
"failure": 10,
"protocol": "http|grpc",
"direction": ".*"
}
]
}
]
},
"istioAnnotations": {
"istioInjectionAnnotation": "sidecar.istio.io/inject"
},
"istioCanaryRevision": {},
"istioConfigMap": "istio",
"istioIdentityDomain": "svc.cluster.local",
"istioLabels": {
"appLabelName": "app",
"injectionLabelName": "istio-injection",
"injectionLabelRev": "istio.io/rev",
"versionLabelName": "version"
},
"istioNamespace": "istio-system",
"istioStatusEnabled": true,
"kialiFeatureFlags": {
"certificatesInformationIndicators": {
"enabled": true,
"secrets": ["cacerts", "istio-ca-secret"]
},
"clustering": {
"enable_exec_provider": false
},
"istioAnnotationAction": true,
"istioInjectionAction": true,
"istioUpgradeAction": false,
"uiDefaults": {
"graph": {
"findOptions": [
{
"description": "Find: slow edges (\u003e 1s)",
"expression": "rt \u003e 1000"
},
{
"description": "Find: unhealthy nodes",
"expression": "! healthy"
},
{
"description": "Find: unknown nodes",
"expression": "name = unknown"
},
{
"description": "Find: nodes with the 2 top rankings",
"expression": "rank \u003c= 2"
}
],
"hideOptions": [
{
"description": "Hide: healthy nodes",
"expression": "healthy"
},
{
"description": "Hide: unknown nodes",
"expression": "name = unknown"
},
{
"description": "Hide: nodes ranked lower than the 2 top rankings",
"expression": "rank \u003e 2"
}
],
"impl": "cy",
"settings": {
"fontLabel": 13,
"minFontBadge": 7,
"minFontLabel": 10
},
"traffic": {
"grpc": "requests",
"http": "requests",
"tcp": "sent"
}
},
"list": {
"includeHealth": true,
"includeIstioResources": true,
"includeValidations": true,
"showIncludeToggles": false
},
"metricsPerRefresh": "1m",
"metricsInbound": {},
"metricsOutbound": {},
"refreshInterval": "60s"
},
"validations": {
"ignore": ["KIA1201"],
"SkipWildcardGatewayHosts": false
}
},
"logLevel": "trace",
"prometheus": {
"globalScrapeInterval": 15,
"storageTsdbRetention": 1296000
}
}

View File

@ -0,0 +1,11 @@
{
"requestSize": false,
"requestSizeAverage": false,
"requestSizePercentiles": false,
"responseSize": false,
"responseSizeAverage": false,
"responseSizePercentiles": false,
"responseTime": false,
"responseTimeAverage": false,
"responseTimePercentiles": false
}

View File

@ -0,0 +1 @@
{ "externalLinks": [] }

View File

@ -0,0 +1,693 @@
{
"timestamp": 1714482372,
"duration": 600,
"graphType": "versionedApp",
"elements": {
"nodes": [
{
"data": {
"id": "aff0da95c77e733c6c59a13e37eb7426",
"nodeType": "box",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"app": "details",
"healthData": null,
"isBox": "app"
}
},
{
"data": {
"id": "4ca2e3526d0ccf5c9504a47a8b4d0110",
"nodeType": "box",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"app": "productpage",
"healthData": null,
"isBox": "app"
}
},
{
"data": {
"id": "6378b52ac56dfbf2e3c67dbef33175e9",
"nodeType": "box",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"app": "ratings",
"healthData": null,
"isBox": "app"
}
},
{
"data": {
"id": "3e47740be8ba644276344b56d7fcec99",
"nodeType": "box",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"app": "reviews",
"healthData": null,
"isBox": "app"
}
},
{
"data": {
"id": "f57e738c232d795bebf9a44123805ce7",
"parent": "aff0da95c77e733c6c59a13e37eb7426",
"nodeType": "service",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"app": "details",
"service": "details",
"destServices": [
{
"cluster": "Kubernetes",
"namespace": "bookinfo",
"name": "details"
}
],
"traffic": [
{
"protocol": "http",
"rates": {
"httpIn": "1.00",
"httpOut": "1.00"
}
}
],
"healthData": null
}
},
{
"data": {
"id": "b04c9d1c1cc52bfef05b650959f234be",
"parent": "aff0da95c77e733c6c59a13e37eb7426",
"nodeType": "app",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"workload": "details-v1",
"app": "details",
"version": "v1",
"destServices": [
{
"cluster": "Kubernetes",
"namespace": "bookinfo",
"name": "details"
}
],
"traffic": [
{
"protocol": "http",
"rates": {
"httpIn": "1.00"
}
}
],
"healthData": null
}
},
{
"data": {
"id": "18ff9f7024139d94a8425f5d0c9fe13b",
"nodeType": "app",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"workload": "kiali-traffic-generator",
"app": "kiali-traffic-generator",
"version": "unknown",
"healthData": null,
"isIdle": true
}
},
{
"data": {
"id": "157216a5f2d59f1a81ed4b8c491bdf89",
"parent": "4ca2e3526d0ccf5c9504a47a8b4d0110",
"nodeType": "service",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"app": "productpage",
"service": "productpage",
"destServices": [
{
"cluster": "Kubernetes",
"namespace": "bookinfo",
"name": "productpage"
}
],
"traffic": [
{
"protocol": "http",
"rates": {
"httpIn": "1.00",
"httpOut": "1.00"
}
}
],
"healthData": null,
"hasRequestRouting": true,
"hasVS": {
"hostnames": ["*"]
}
}
},
{
"data": {
"id": "aee5d4295ff485ac2f2b69617d35b75b",
"parent": "4ca2e3526d0ccf5c9504a47a8b4d0110",
"nodeType": "app",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"workload": "productpage-v1",
"app": "productpage",
"version": "v1",
"destServices": [
{
"cluster": "Kubernetes",
"namespace": "bookinfo",
"name": "productpage"
}
],
"traffic": [
{
"protocol": "http",
"rates": {
"httpIn": "1.00",
"httpOut": "2.00"
}
}
],
"healthData": null
}
},
{
"data": {
"id": "0e496a9f26a918c9545cb0b362c90bd4",
"parent": "6378b52ac56dfbf2e3c67dbef33175e9",
"nodeType": "service",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"app": "ratings",
"service": "ratings",
"destServices": [
{
"cluster": "Kubernetes",
"namespace": "bookinfo",
"name": "ratings"
}
],
"traffic": [
{
"protocol": "http",
"rates": {
"httpIn": "0.68",
"httpOut": "0.68"
}
}
],
"healthData": null
}
},
{
"data": {
"id": "39784f543b4215a7e14bd3d7e8ffa5a8",
"parent": "6378b52ac56dfbf2e3c67dbef33175e9",
"nodeType": "app",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"workload": "ratings-v1",
"app": "ratings",
"version": "v1",
"destServices": [
{
"cluster": "Kubernetes",
"namespace": "bookinfo",
"name": "ratings"
}
],
"traffic": [
{
"protocol": "http",
"rates": {
"httpIn": "0.68"
}
}
],
"healthData": null
}
},
{
"data": {
"id": "6d56f1d333f1df5be1332a09c0866dd7",
"parent": "3e47740be8ba644276344b56d7fcec99",
"nodeType": "service",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"app": "reviews",
"service": "reviews",
"destServices": [
{
"cluster": "Kubernetes",
"namespace": "bookinfo",
"name": "reviews"
}
],
"traffic": [
{
"protocol": "http",
"rates": {
"httpIn": "1.00",
"httpOut": "1.00"
}
}
],
"healthData": null
}
},
{
"data": {
"id": "be64cf1064d2d8d853979c25ab5d6dfe",
"parent": "3e47740be8ba644276344b56d7fcec99",
"nodeType": "app",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"workload": "reviews-v1",
"app": "reviews",
"version": "v1",
"destServices": [
{
"cluster": "Kubernetes",
"namespace": "bookinfo",
"name": "reviews"
}
],
"traffic": [
{
"protocol": "http",
"rates": {
"httpIn": "0.32"
}
}
],
"healthData": null
}
},
{
"data": {
"id": "b2f57800ff71b31035a226dca93d7ec0",
"parent": "3e47740be8ba644276344b56d7fcec99",
"nodeType": "app",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"workload": "reviews-v2",
"app": "reviews",
"version": "v2",
"destServices": [
{
"cluster": "Kubernetes",
"namespace": "bookinfo",
"name": "reviews"
}
],
"traffic": [
{
"protocol": "http",
"rates": {
"httpIn": "0.33",
"httpOut": "0.33"
}
}
],
"healthData": null
}
},
{
"data": {
"id": "582a5e548c2511d13bc0e15cdeacf25f",
"parent": "3e47740be8ba644276344b56d7fcec99",
"nodeType": "app",
"cluster": "Kubernetes",
"namespace": "bookinfo",
"workload": "reviews-v3",
"app": "reviews",
"version": "v3",
"destServices": [
{
"cluster": "Kubernetes",
"namespace": "bookinfo",
"name": "reviews"
}
],
"traffic": [
{
"protocol": "http",
"rates": {
"httpIn": "0.35",
"httpOut": "0.34"
}
}
],
"healthData": null
}
},
{
"data": {
"id": "a667b44b1e859fa663a3e5f4255bec01",
"nodeType": "app",
"cluster": "Kubernetes",
"namespace": "istio-system",
"workload": "istio-ingressgateway",
"app": "istio-ingressgateway",
"version": "latest",
"traffic": [
{
"protocol": "http",
"rates": {
"httpOut": "1.00"
}
}
],
"healthData": null,
"isGateway": {
"ingressInfo": {
"hostnames": ["*"]
},
"egressInfo": {},
"gatewayAPIInfo": {}
},
"isOutside": true,
"isRoot": true
}
}
],
"edges": [
{
"data": {
"id": "147839a13d6141a1d94edd3bfa6215ef",
"source": "0e496a9f26a918c9545cb0b362c90bd4",
"target": "39784f543b4215a7e14bd3d7e8ffa5a8",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-ratings",
"isMTLS": "100",
"responseTime": "4",
"sourcePrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-reviews",
"throughput": "707",
"traffic": {
"protocol": "http",
"rates": {
"http": "0.68",
"httpPercentReq": "100.0"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"ratings.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
},
{
"data": {
"id": "5cb834e8d308810ea4eb3649215537b1",
"source": "157216a5f2d59f1a81ed4b8c491bdf89",
"target": "aee5d4295ff485ac2f2b69617d35b75b",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-productpage",
"isMTLS": "100",
"responseTime": "46",
"sourcePrincipal": "spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account",
"throughput": "6025",
"traffic": {
"protocol": "http",
"rates": {
"http": "1.00",
"httpPercentReq": "100.0"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"productpage.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
},
{
"data": {
"id": "93adf5c3ae2f1e4761abf3f426d80c2e",
"source": "582a5e548c2511d13bc0e15cdeacf25f",
"target": "0e496a9f26a918c9545cb0b362c90bd4",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-ratings",
"isMTLS": "100",
"sourcePrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-reviews",
"traffic": {
"protocol": "http",
"rates": {
"http": "0.34",
"httpPercentReq": "100.0"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"ratings.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
},
{
"data": {
"id": "406d2cca8f1dde85710e56914854db0f",
"source": "6d56f1d333f1df5be1332a09c0866dd7",
"target": "582a5e548c2511d13bc0e15cdeacf25f",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-reviews",
"isMTLS": "100",
"responseTime": "10",
"sourcePrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-productpage",
"throughput": "501",
"traffic": {
"protocol": "http",
"rates": {
"http": "0.35",
"httpPercentReq": "35.0"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"reviews.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
},
{
"data": {
"id": "311226f62878ee93e501c39e0f2f7e7a",
"source": "6d56f1d333f1df5be1332a09c0866dd7",
"target": "b2f57800ff71b31035a226dca93d7ec0",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-reviews",
"isMTLS": "100",
"responseTime": "10",
"sourcePrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-productpage",
"throughput": "478",
"traffic": {
"protocol": "http",
"rates": {
"http": "0.33",
"httpPercentReq": "33.0"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"reviews.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
},
{
"data": {
"id": "f26f9372c4ac32141a508f614fd02e65",
"source": "6d56f1d333f1df5be1332a09c0866dd7",
"target": "be64cf1064d2d8d853979c25ab5d6dfe",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-reviews",
"isMTLS": "100",
"responseTime": "5",
"sourcePrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-productpage",
"throughput": "436",
"traffic": {
"protocol": "http",
"rates": {
"http": "0.32",
"httpPercentReq": "32.1"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"reviews.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
},
{
"data": {
"id": "53f670e5e51ffbd71693281c6c9d72df",
"source": "a667b44b1e859fa663a3e5f4255bec01",
"target": "157216a5f2d59f1a81ed4b8c491bdf89",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-productpage",
"isMTLS": "100",
"sourcePrincipal": "spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account",
"traffic": {
"protocol": "http",
"rates": {
"http": "1.00",
"httpPercentReq": "100.0"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"productpage.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
},
{
"data": {
"id": "4097ccbc1355d99fd6694e553fd468c9",
"source": "aee5d4295ff485ac2f2b69617d35b75b",
"target": "6d56f1d333f1df5be1332a09c0866dd7",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-reviews",
"isMTLS": "100",
"sourcePrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-productpage",
"traffic": {
"protocol": "http",
"rates": {
"http": "1.00",
"httpPercentReq": "50.0"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"reviews.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
},
{
"data": {
"id": "b3538d2ad65d3a391b01812c81fd28c2",
"source": "aee5d4295ff485ac2f2b69617d35b75b",
"target": "f57e738c232d795bebf9a44123805ce7",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-details",
"isMTLS": "100",
"sourcePrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-productpage",
"traffic": {
"protocol": "http",
"rates": {
"http": "1.00",
"httpPercentReq": "50.0"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"details.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
},
{
"data": {
"id": "53979a75015d8a0250fe23d7dbf3e9aa",
"source": "b2f57800ff71b31035a226dca93d7ec0",
"target": "0e496a9f26a918c9545cb0b362c90bd4",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-ratings",
"isMTLS": "100",
"sourcePrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-reviews",
"traffic": {
"protocol": "http",
"rates": {
"http": "0.33",
"httpPercentReq": "100.0"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"ratings.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
},
{
"data": {
"id": "09ae6b99f13a2d978f17f5494e366280",
"source": "f57e738c232d795bebf9a44123805ce7",
"target": "b04c9d1c1cc52bfef05b650959f234be",
"destPrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-details",
"isMTLS": "100",
"responseTime": "5",
"sourcePrincipal": "spiffe://cluster.local/ns/bookinfo/sa/bookinfo-productpage",
"throughput": "1150",
"traffic": {
"protocol": "http",
"rates": {
"http": "1.00",
"httpPercentReq": "100.0"
},
"responses": {
"200": {
"flags": {
"-": "100.0"
},
"hosts": {
"details.bookinfo.svc.cluster.local": "100.0"
}
}
}
}
}
}
]
}
}

View File

@ -0,0 +1,12 @@
[
{
"secretName": "istio-ca-secret",
"secretNamespace": "istio-system",
"dnsNames": null,
"issuer": "O=cluster.local",
"notBefore": "2023-10-09T07:01:47Z",
"notAfter": "2033-10-06T07:01:47Z",
"error": "",
"accessible": true
}
]

View File

@ -0,0 +1,533 @@
{
"bookinfo": {
"namespace": {
"name": "bookinfo",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"destinationRules": [],
"envoyFilters": [],
"gateways": [
{
"kind": "Gateway",
"apiVersion": "networking.istio.io/v1beta1",
"metadata": {
"name": "bookinfo-gateway",
"namespace": "bookinfo",
"uid": "6369d379-ce97-4a77-98ef-5702845ddc56",
"resourceVersion": "811259",
"generation": 3,
"creationTimestamp": "2024-03-05T14:38:05Z",
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"networking.istio.io/v1alpha3\",\"kind\":\"Gateway\",\"metadata\":{\"annotations\":{},\"name\":\"bookinfo-gateway\",\"namespace\":\"bookinfo\"},\"spec\":{\"selector\":{\"istio\":\"ingressgateway\"},\"servers\":[{\"hosts\":[\"*\"],\"port\":{\"name\":\"http\",\"number\":8080,\"protocol\":\"HTTP\"}}]}}\n"
},
"managedFields": [
{
"manager": "kubectl-client-side-apply",
"operation": "Update",
"apiVersion": "networking.istio.io/v1alpha3",
"time": "2024-03-05T14:38:05Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:annotations": {
".": {},
"f:kubectl.kubernetes.io/last-applied-configuration": {}
}
},
"f:spec": {
".": {},
"f:selector": {},
"f:servers": {}
}
}
},
{
"manager": "kiali",
"operation": "Update",
"apiVersion": "networking.istio.io/v1beta1",
"time": "2024-03-20T12:42:26Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:spec": {
"f:selector": {
"f:istio": {}
}
}
}
}
]
},
"spec": {
"servers": [
{
"port": {
"number": 8080,
"protocol": "HTTP",
"name": "http"
},
"hosts": ["*"]
}
],
"selector": {
"istio": "ingressgateway"
}
},
"status": {}
}
],
"serviceEntries": [],
"sidecars": [],
"virtualServices": [
{
"kind": "VirtualService",
"apiVersion": "networking.istio.io/v1beta1",
"metadata": {
"name": "bookinfo",
"namespace": "bookinfo",
"uid": "16c9b2e6-4bc2-426c-9464-853a4148435f",
"resourceVersion": "784735",
"generation": 9,
"creationTimestamp": "2024-03-05T14:38:05Z",
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"networking.istio.io/v1alpha3\",\"kind\":\"VirtualService\",\"metadata\":{\"annotations\":{},\"name\":\"bookinfo\",\"namespace\":\"bookinfo\"},\"spec\":{\"gateways\":[\"bookinfo-gateway\"],\"hosts\":[\"*\"],\"http\":[{\"match\":[{\"uri\":{\"exact\":\"/productpage\"}},{\"uri\":{\"prefix\":\"/static\"}},{\"uri\":{\"exact\":\"/login\"}},{\"uri\":{\"exact\":\"/logout\"}},{\"uri\":{\"prefix\":\"/api/v1/products\"}}],\"route\":[{\"destination\":{\"host\":\"productpage\",\"port\":{\"number\":9080}}}]}]}}\n"
},
"managedFields": [
{
"manager": "kubectl-client-side-apply",
"operation": "Update",
"apiVersion": "networking.istio.io/v1alpha3",
"time": "2024-03-05T14:38:05Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:annotations": {
".": {},
"f:kubectl.kubernetes.io/last-applied-configuration": {}
}
},
"f:spec": {
".": {},
"f:hosts": {},
"f:http": {}
}
}
},
{
"manager": "kiali",
"operation": "Update",
"apiVersion": "networking.istio.io/v1beta1",
"time": "2024-03-19T14:43:01Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:spec": {
"f:gateways": {}
}
}
}
]
},
"spec": {
"hosts": ["*"],
"gateways": ["bookinfo-gateway"],
"http": [
{
"match": [
{
"uri": {
"exact": "/productpage"
}
},
{
"uri": {
"prefix": "/static"
}
},
{
"uri": {
"exact": "/login"
}
},
{
"uri": {
"exact": "/logout"
}
},
{
"uri": {
"prefix": "/api/v1/products"
}
}
],
"route": [
{
"destination": {
"host": "productpage",
"port": {
"number": 9080
}
}
}
]
}
]
},
"status": {}
}
],
"workloadEntries": [],
"workloadGroups": [],
"wasmPlugins": [],
"telemetries": [],
"k8sGateways": [],
"k8sGRPCRoutes": [],
"k8sHTTPRoutes": [],
"k8sReferenceGrants": [],
"k8sTCPRoutes": [],
"k8sTLSRoutes": [],
"authorizationPolicies": [],
"peerAuthentications": [],
"requestAuthentications": [],
"validations": {}
},
"default": {
"namespace": {
"name": "default",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"destinationRules": [],
"envoyFilters": [],
"gateways": [],
"serviceEntries": [],
"sidecars": [],
"virtualServices": [],
"workloadEntries": [],
"workloadGroups": [],
"wasmPlugins": [],
"telemetries": [],
"k8sGateways": [],
"k8sGRPCRoutes": [],
"k8sHTTPRoutes": [],
"k8sReferenceGrants": [],
"k8sTCPRoutes": [],
"k8sTLSRoutes": [],
"authorizationPolicies": [],
"peerAuthentications": [],
"requestAuthentications": [],
"validations": {}
},
"ingress-nginx": {
"namespace": {
"name": "ingress-nginx",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"destinationRules": [],
"envoyFilters": [],
"gateways": [],
"serviceEntries": [],
"sidecars": [],
"virtualServices": [],
"workloadEntries": [],
"workloadGroups": [],
"wasmPlugins": [],
"telemetries": [],
"k8sGateways": [],
"k8sGRPCRoutes": [],
"k8sHTTPRoutes": [],
"k8sReferenceGrants": [],
"k8sTCPRoutes": [],
"k8sTLSRoutes": [],
"authorizationPolicies": [],
"peerAuthentications": [],
"requestAuthentications": [],
"validations": {}
},
"istio-system": {
"namespace": {
"name": "istio-system",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"destinationRules": [],
"envoyFilters": [],
"gateways": [],
"serviceEntries": [],
"sidecars": [],
"virtualServices": [],
"workloadEntries": [],
"workloadGroups": [],
"wasmPlugins": [],
"telemetries": [],
"k8sGateways": [],
"k8sGRPCRoutes": [],
"k8sHTTPRoutes": [],
"k8sReferenceGrants": [],
"k8sTCPRoutes": [],
"k8sTLSRoutes": [],
"authorizationPolicies": [],
"peerAuthentications": [],
"requestAuthentications": [],
"validations": {}
},
"travel-agency": {
"namespace": {
"name": "travel-agency",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"destinationRules": [],
"envoyFilters": [],
"gateways": [],
"serviceEntries": [],
"sidecars": [],
"virtualServices": [],
"workloadEntries": [],
"workloadGroups": [],
"wasmPlugins": [],
"telemetries": [],
"k8sGateways": [],
"k8sGRPCRoutes": [],
"k8sHTTPRoutes": [],
"k8sReferenceGrants": [],
"k8sTCPRoutes": [],
"k8sTLSRoutes": [],
"authorizationPolicies": [],
"peerAuthentications": [],
"requestAuthentications": [],
"validations": {}
},
"travel-control": {
"namespace": {
"name": "travel-control",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"destinationRules": [
{
"kind": "DestinationRule",
"apiVersion": "networking.istio.io/v1beta1",
"metadata": {
"name": "control",
"namespace": "travel-control",
"uid": "a89f69da-5778-46be-b200-4085b6b4c356",
"resourceVersion": "811967",
"generation": 1,
"creationTimestamp": "2024-03-20T12:45:22Z",
"labels": {
"kiali_wizard": "request_routing"
},
"managedFields": [
{
"manager": "kiali",
"operation": "Update",
"apiVersion": "networking.istio.io/v1beta1",
"time": "2024-03-20T12:45:22Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:labels": {
".": {},
"f:kiali_wizard": {}
}
},
"f:spec": {
".": {},
"f:host": {},
"f:subsets": {}
}
}
}
]
},
"spec": {
"host": "control.travel-control.svc.cluster.local",
"subsets": [
{
"name": "v1",
"labels": {
"version": "v1"
}
}
]
},
"status": {}
}
],
"envoyFilters": [],
"gateways": [
{
"kind": "Gateway",
"apiVersion": "networking.istio.io/v1beta1",
"metadata": {
"name": "control-gateway",
"namespace": "travel-control",
"uid": "185675fa-6cca-45ab-a194-e64a57569452",
"resourceVersion": "812011",
"generation": 2,
"creationTimestamp": "2024-03-20T12:45:22Z",
"labels": {
"kiali_wizard": "request_routing"
},
"managedFields": [
{
"manager": "kiali",
"operation": "Update",
"apiVersion": "networking.istio.io/v1beta1",
"time": "2024-03-20T12:45:49Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:labels": {
".": {},
"f:kiali_wizard": {}
}
},
"f:spec": {
".": {},
"f:selector": {
".": {},
"f:istio": {}
},
"f:servers": {}
}
}
}
]
},
"spec": {
"servers": [
{
"port": {
"number": 8080,
"protocol": "HTTP",
"name": "http"
},
"hosts": ["*"]
}
],
"selector": {
"istio": "ingressgateway"
}
},
"status": {}
}
],
"serviceEntries": [],
"sidecars": [],
"virtualServices": [
{
"kind": "VirtualService",
"apiVersion": "networking.istio.io/v1beta1",
"metadata": {
"name": "control",
"namespace": "travel-control",
"uid": "05468816-71ed-437d-9fc5-c0120d6ab61a",
"resourceVersion": "811969",
"generation": 1,
"creationTimestamp": "2024-03-20T12:45:22Z",
"labels": {
"kiali_wizard": "request_routing"
},
"managedFields": [
{
"manager": "kiali",
"operation": "Update",
"apiVersion": "networking.istio.io/v1beta1",
"time": "2024-03-20T12:45:22Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:labels": {
".": {},
"f:kiali_wizard": {}
}
},
"f:spec": {
".": {},
"f:gateways": {},
"f:hosts": {},
"f:http": {}
}
}
}
]
},
"spec": {
"hosts": ["*"],
"gateways": ["travel-control/control-gateway"],
"http": [
{
"route": [
{
"destination": {
"host": "control.travel-control.svc.cluster.local",
"subset": "v1"
},
"weight": 100
}
]
}
]
},
"status": {}
}
],
"workloadEntries": [],
"workloadGroups": [],
"wasmPlugins": [],
"telemetries": [],
"k8sGateways": [],
"k8sGRPCRoutes": [],
"k8sHTTPRoutes": [],
"k8sReferenceGrants": [],
"k8sTCPRoutes": [],
"k8sTLSRoutes": [],
"authorizationPolicies": [],
"peerAuthentications": [],
"requestAuthentications": [],
"validations": {}
},
"travel-portal": {
"namespace": {
"name": "travel-portal",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"destinationRules": [],
"envoyFilters": [],
"gateways": [],
"serviceEntries": [],
"sidecars": [],
"virtualServices": [],
"workloadEntries": [],
"workloadGroups": [],
"wasmPlugins": [],
"telemetries": [],
"k8sGateways": [],
"k8sGRPCRoutes": [],
"k8sHTTPRoutes": [],
"k8sReferenceGrants": [],
"k8sTCPRoutes": [],
"k8sTLSRoutes": [],
"authorizationPolicies": [],
"peerAuthentications": [],
"requestAuthentications": [],
"validations": {}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
[
{ "name": "istiod-7548d4ff85-fj8tb", "status": "Healthy", "is_core": true },
{ "name": "istiod-2", "status": "NotFound", "is_core": true },
{ "name": "istiod-3", "status": "Unhealthy", "is_core": true },
{ "name": "istiod-4", "status": "Unreachable", "is_core": true },
{ "name": "istiod-5", "status": "NotReady", "is_core": true }
]

View File

@ -0,0 +1,44 @@
{
"Kubernetes": {
"bookinfo": {
"errors": 1,
"objectCount": 2,
"warnings": 1
},
"default": {
"errors": 0,
"objectCount": 0,
"warnings": 0
},
"hostpath-provisioner": {
"errors": 0,
"objectCount": 0,
"warnings": 0
},
"istio-system": {
"errors": 0,
"objectCount": 0,
"warnings": 0
},
"kiali": {
"errors": 0,
"objectCount": 0,
"warnings": 0
},
"travel-agency": {
"errors": 0,
"objectCount": 2,
"warnings": 0
},
"travel-control": {
"errors": 0,
"objectCount": 1,
"warnings": 1
},
"travel-portal": {
"errors": 0,
"objectCount": 0,
"warnings": 0
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
{
"currentVersion": "1.3",
"upgradeVersion": "1.4",
"migratedNamespaces": ["bookinfo"],
"pendingNamespaces": ["travel-agency"]
}

View File

@ -0,0 +1 @@
{ "memory": 64, "cpu": 8 }

View File

@ -0,0 +1 @@
{ "status": "MTLS_NOT_ENABLED", "autoMTLSEnabled": true, "minTLS": "N/A" }

View File

@ -0,0 +1,146 @@
[
{
"name": "bookinfo",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"istio-injection": "enabled",
"kubernetes.io/metadata.name": "bookinfo",
"pod-security.kubernetes.io/audit": "privileged",
"pod-security.kubernetes.io/audit-version": "v1.24",
"pod-security.kubernetes.io/warn": "privileged",
"pod-security.kubernetes.io/warn-version": "v1.24"
},
"annotations": {
"openshift.io/description": "",
"openshift.io/display-name": "",
"openshift.io/requester": "kubeadmin",
"openshift.io/sa.scc.mcs": "s0:c26,c10",
"openshift.io/sa.scc.supplemental-groups": "1000670000/10000",
"openshift.io/sa.scc.uid-range": "1000670000/10000"
}
},
{
"name": "default",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"kubernetes.io/metadata.name": "default"
},
"annotations": {
"openshift.io/sa.scc.mcs": "s0:c1,c0",
"openshift.io/sa.scc.supplemental-groups": "1000000000/10000",
"openshift.io/sa.scc.uid-range": "1000000000/10000"
}
},
{
"name": "hostpath-provisioner",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"kubernetes.io/metadata.name": "hostpath-provisioner",
"pod-security.kubernetes.io/audit": "privileged",
"pod-security.kubernetes.io/audit-version": "v1.24",
"pod-security.kubernetes.io/warn": "privileged",
"pod-security.kubernetes.io/warn-version": "v1.24"
},
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"hostpath-provisioner\"}}\n",
"openshift.io/sa.scc.mcs": "s0:c25,c20",
"openshift.io/sa.scc.supplemental-groups": "1000640000/10000",
"openshift.io/sa.scc.uid-range": "1000640000/10000"
}
},
{
"name": "istio-system",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"kubernetes.io/metadata.name": "istio-system",
"pod-security.kubernetes.io/audit": "privileged",
"pod-security.kubernetes.io/audit-version": "v1.24",
"pod-security.kubernetes.io/warn": "privileged",
"pod-security.kubernetes.io/warn-version": "v1.24",
"topology.istio.io/network": ""
},
"annotations": {
"openshift.io/description": "",
"openshift.io/display-name": "",
"openshift.io/requester": "kubeadmin",
"openshift.io/sa.scc.mcs": "s0:c26,c0",
"openshift.io/sa.scc.supplemental-groups": "1000650000/10000",
"openshift.io/sa.scc.uid-range": "1000650000/10000"
}
},
{
"name": "kiali",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"kubernetes.io/metadata.name": "kiali",
"pod-security.kubernetes.io/audit": "restricted",
"pod-security.kubernetes.io/audit-version": "v1.24",
"pod-security.kubernetes.io/warn": "restricted",
"pod-security.kubernetes.io/warn-version": "v1.24"
},
"annotations": {
"openshift.io/sa.scc.mcs": "s0:c27,c4",
"openshift.io/sa.scc.supplemental-groups": "1000710000/10000",
"openshift.io/sa.scc.uid-range": "1000710000/10000"
}
},
{
"name": "travel-agency",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"istio-injection": "enabled",
"kubernetes.io/metadata.name": "travel-agency",
"pod-security.kubernetes.io/audit": "privileged",
"pod-security.kubernetes.io/audit-version": "v1.24",
"pod-security.kubernetes.io/warn": "privileged",
"pod-security.kubernetes.io/warn-version": "v1.24"
},
"annotations": {
"openshift.io/sa.scc.mcs": "s0:c27,c14",
"openshift.io/sa.scc.supplemental-groups": "1000730000/10000",
"openshift.io/sa.scc.uid-range": "1000730000/10000"
}
},
{
"name": "travel-control",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"istio-injection": "enabled",
"kubernetes.io/metadata.name": "travel-control",
"pod-security.kubernetes.io/audit": "privileged",
"pod-security.kubernetes.io/audit-version": "v1.24",
"pod-security.kubernetes.io/warn": "privileged",
"pod-security.kubernetes.io/warn-version": "v1.24"
},
"annotations": {
"openshift.io/sa.scc.mcs": "s0:c27,c24",
"openshift.io/sa.scc.supplemental-groups": "1000750000/10000",
"openshift.io/sa.scc.uid-range": "1000750000/10000"
}
},
{
"name": "travel-portal",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"istio-injection": "enabled",
"kubernetes.io/metadata.name": "travel-portal",
"pod-security.kubernetes.io/audit": "privileged",
"pod-security.kubernetes.io/audit-version": "v1.24",
"pod-security.kubernetes.io/warn": "privileged",
"pod-security.kubernetes.io/warn-version": "v1.24"
},
"annotations": {
"openshift.io/sa.scc.mcs": "s0:c27,c19",
"openshift.io/sa.scc.supplemental-groups": "1000740000/10000",
"openshift.io/sa.scc.uid-range": "1000740000/10000"
}
}
]

View File

@ -0,0 +1 @@
{ "mode": "ALLOW_ANY" }

View File

@ -0,0 +1,35 @@
{
"status": {
"Kiali commit hash": "c17d0550cfb033900c392ff5813368c1185954f1",
"Kiali container version": "v1.74.0-SNAPSHOT",
"Kiali state": "running",
"Kiali version": "v1.74.0-SNAPSHOT",
"Mesh name": "Istio",
"Mesh version": "1.18.2"
},
"externalServices": [
{
"name": "Istio",
"version": "1.18.2"
},
{
"name": "Prometheus",
"version": "2.41.0"
},
{
"name": "Kubernetes",
"version": "v1.26.3+b404935"
},
{
"name": "Grafana"
},
{
"name": "Jaeger"
}
],
"warningMessages": [],
"istioEnvironment": {
"isMaistra": false,
"istioAPIEnabled": true
}
}

View File

@ -0,0 +1,7 @@
{
"verify": false,
"missingAttributes": ["serviceAccountToken"],
"message": "Attribute 'serviceAccountToken' is not in the backstage configuration",
"helper": "For more information follow the steps in https://github.com/backstage/community-plugins/blob/main/workspaces/kiali/README.md",
"authData": { "strategy": "token", "sessionInfo": {} }
}

View File

@ -0,0 +1,399 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import anonymousAuth from './general/auth_info_anonymous.json';
import configData from './general/config.json';
/** Metrics **/
import crippledFeatures from './general/crippledFeatures.json';
import grafanaInfo from './general/grafana.json';
import bookinfoGraph from './general/graph.json';
import istioCertsInfo from './general/istioCertsInfo.json';
import istioConfig from './general/istioConfig.json';
import istioContainerLogs from './general/istioLogs.json';
import istioStatus from './general/istioStatus.json';
import istioValidations from './general/istioValidations.json';
import containerLogs from './general/logs.json';
import spanLogs from './general/logSpan.json';
import meshCanaryStatus from './general/meshCanaryStatus.json';
import meshIstioResourceThresholds from './general/meshIstioResurceThresholds.json';
import meshTls from './general/meshTls.json';
import namespacesData from './general/namespaces.json';
import outboundTrafficPolicy from './general/outbound_traffic_policy_mode.json';
import status from './general/status.json';
import bookinfoApps from './namespaces/bookinfo/apps.json';
import detailsApp from './namespaces/bookinfo/apps/details.json';
import kialiTrafficGeneratorApp from './namespaces/bookinfo/apps/kiali_traffic_generator.json';
import productpageApp from './namespaces/bookinfo/apps/productpage.json';
import ratingsApp from './namespaces/bookinfo/apps/ratings.json';
import reviewsApp from './namespaces/bookinfo/apps/reviews.json';
import bookinfoDashboard from './namespaces/bookinfo/dashboard.json';
/** health **/
import bookinfoHealthApp from './namespaces/bookinfo/health/app.json';
import bookinfoHealthService from './namespaces/bookinfo/health/service.json';
import bookinfoHealthWorkload from './namespaces/bookinfo/health/workload.json';
import bookinfoIstioConfig from './namespaces/bookinfo/istio_config.json';
import bookinfoGateway from './namespaces/bookinfo/istio_configs/gateways/bookinfo-gateway.json';
import bookinfoVirtualService from './namespaces/bookinfo/istio_configs/virtualservices/bookinfo.json';
import bookInfoMetrics from './namespaces/bookinfo/metrics';
import bookinfoServices from './namespaces/bookinfo/services.json';
import detailsService from './namespaces/bookinfo/services/details.json';
import productpageService from './namespaces/bookinfo/services/productpage.json';
import ratingsService from './namespaces/bookinfo/services/ratings.json';
import reviewsService from './namespaces/bookinfo/services/reviews.json';
import bookinfoSpans from './namespaces/bookinfo/spans.json';
/* bookinfo */
import bookinfoTls from './namespaces/bookinfo/tls.json';
/** Workloads **/
import bookinfoWorkloads from './namespaces/bookinfo/workloads.json';
import detailsWorkload from './namespaces/bookinfo/workloads/details_v1.json';
import kialitrafficWorkload from './namespaces/bookinfo/workloads/kiali_traffic_generator.json';
import productpagev1Workload from './namespaces/bookinfo/workloads/productpage_v1.json';
import ratingsv1Workload from './namespaces/bookinfo/workloads/ratings_v1.json';
import reviewsv1Workload from './namespaces/bookinfo/workloads/reviews_v1.json';
import reviewsv2Workload from './namespaces/bookinfo/workloads/reviews_v2.json';
import reviewsv3Workload from './namespaces/bookinfo/workloads/reviews_v3.json';
import istioSystemApps from './namespaces/istio-system/apps.json';
import istioegressgatewayApp from './namespaces/istio-system/apps/istio_egressgateway.json';
import istioingressgatewayApp from './namespaces/istio-system/apps/istio_ingressgateway.json';
import istiodApp from './namespaces/istio-system/apps/istiod.json';
import jaegerApp from './namespaces/istio-system/apps/jaeger.json';
import kialiApp from './namespaces/istio-system/apps/kiali.json';
import istioDashboard from './namespaces/istio-system/dashboard.json';
/** health **/
import istioSystemHealthApp from './namespaces/istio-system/health/app.json';
import istioSystemHealthService from './namespaces/istio-system/health/service.json';
import istioSystemHealthWorkload from './namespaces/istio-system/health/workload.json';
import istioSystemIstioConfig from './namespaces/istio-system/istio_config.json';
import istioSystemMetrics from './namespaces/istio-system/metrics';
import istioSystemServices from './namespaces/istio-system/services.json';
import grafanaService from './namespaces/istio-system/services/grafana.json';
import istioegressgatewayService from './namespaces/istio-system/services/istio_egressgateway.json';
import istioingressgatewayService from './namespaces/istio-system/services/istio_ingressgateway.json';
import istiodService from './namespaces/istio-system/services/istiod.json';
import jaegerService from './namespaces/istio-system/services/jaeger_collector.json';
import kialiService from './namespaces/istio-system/services/kiali.json';
import prometheusService from './namespaces/istio-system/services/prometheus.json';
import istioSpans from './namespaces/istio-system/spans.json';
/* istio-system */
import istioSystemTls from './namespaces/istio-system/tls.json';
import istioSystemWorkloads from './namespaces/istio-system/workloads.json';
import grafanaWorkload from './namespaces/istio-system/workloads/grafana.json';
import istioegressgatewayWorkload from './namespaces/istio-system/workloads/istio_egressgateway.json';
import istioingressgatewayWorkload from './namespaces/istio-system/workloads/istio_ingressgateway.json';
import istiodWorkload from './namespaces/istio-system/workloads/istiod.json';
import jaegerWorkload from './namespaces/istio-system/workloads/jaeger.json';
import kialiWorkload from './namespaces/istio-system/workloads/kiali.json';
import prometheusWorkload from './namespaces/istio-system/workloads/prometheus.json';
import travelAgencyApps from './namespaces/travel-agency/apps.json';
import carsApp from './namespaces/travel-agency/apps/cars.json';
import discountsApp from './namespaces/travel-agency/apps/discounts.json';
import flightsApp from './namespaces/travel-agency/apps/flights.json';
import hotelsApp from './namespaces/travel-agency/apps/hotels.json';
import insurancesApp from './namespaces/travel-agency/apps/insurances.json';
import mysqldbApp from './namespaces/travel-agency/apps/mysqldb.json';
import travelApp from './namespaces/travel-agency/apps/travels.json';
import travelAgencyDashboard from './namespaces/travel-agency/dashboard.json';
/** health **/
import travelAgencyHealthApp from './namespaces/travel-agency/health/app.json';
import travelAgencyHealthService from './namespaces/travel-agency/health/service.json';
import travelAgencyHealthWorkload from './namespaces/travel-agency/health/workload.json';
import travelAgencyIstioConfig from './namespaces/travel-agency/istio_config.json';
import travelAgencyMetrics from './namespaces/travel-agency/metrics';
import travelAgencyServices from './namespaces/travel-agency/services.json';
import carsService from './namespaces/travel-agency/services/cars.json';
import discountsService from './namespaces/travel-agency/services/discounts.json';
import flightsService from './namespaces/travel-agency/services/flights.json';
import hotelsService from './namespaces/travel-agency/services/hotels.json';
import insurancesService from './namespaces/travel-agency/services/insurances.json';
import mysqldbService from './namespaces/travel-agency/services/mysqldb.json';
import travelService from './namespaces/travel-agency/services/travels.json';
import travelAgencySpans from './namespaces/travel-agency/spans.json';
/* Travel agency */
import travelAgencyTls from './namespaces/travel-agency/tls.json';
import travelAgencyWorkloads from './namespaces/travel-agency/workloads.json';
import carsv1Workload from './namespaces/travel-agency/workloads/cars_v1.json';
import discountsv1Workload from './namespaces/travel-agency/workloads/discounts_v1.json';
import flightsv1Workload from './namespaces/travel-agency/workloads/flights_v1.json';
import hotelsv1Workload from './namespaces/travel-agency/workloads/hotels_v1.json';
import insurancesv1Workload from './namespaces/travel-agency/workloads/insurances_v1.json';
import mysqldbv1Workload from './namespaces/travel-agency/workloads/mysqldb_v1.json';
import travelsv1Workload from './namespaces/travel-agency/workloads/travels_v1.json';
import travelControlApps from './namespaces/travel-control/apps.json';
import controlApp from './namespaces/travel-control/apps/control.json';
import travelControlDashboard from './namespaces/travel-control/dashboard.json';
/** health **/
import travelControlHealthApp from './namespaces/travel-control/health/app.json';
import travelControlHealthService from './namespaces/travel-control/health/service.json';
import travelControlHealthWorkload from './namespaces/travel-control/health/workload.json';
import travelControlIstioConfig from './namespaces/travel-control/istio_config.json';
import controlDR from './namespaces/travel-control/istio_configs/destinationrules/control.json';
import controlGW from './namespaces/travel-control/istio_configs/gateways/control-gateway.json';
import controlVR from './namespaces/travel-control/istio_configs/virtualservices/control.json';
import travelControlMetrics from './namespaces/travel-control/metrics';
import travelControlServices from './namespaces/travel-control/services.json';
import controlService from './namespaces/travel-control/services/control.json';
import travelControlSpans from './namespaces/travel-control/spans.json';
/* Travel control */
import travelControlTls from './namespaces/travel-control/tls.json';
import travelControlWorkloads from './namespaces/travel-control/workloads.json';
import travelControlWorkload from './namespaces/travel-control/workloads/control.json';
import travelsApp from './namespaces/travel-portal/apps/travels.json';
import viaggiApp from './namespaces/travel-portal/apps/viaggi.json';
import voyagesApp from './namespaces/travel-portal/apps/voyages.json';
import travelPortalDashboard from './namespaces/travel-portal/dashboard.json';
/** health **/
import travelPortalHealthApp from './namespaces/travel-portal/health/app.json';
import travelPortalHealthService from './namespaces/travel-portal/health/service.json';
import travelPortalHealthWorkload from './namespaces/travel-portal/health/workload.json';
import travelPortalIstioConfig from './namespaces/travel-portal/istio_config.json';
import travelPortalMetrics from './namespaces/travel-portal/metrics';
import travelPortalServices from './namespaces/travel-portal/services.json';
import travelsService from './namespaces/travel-portal/services/travels.json';
import viaggiService from './namespaces/travel-portal/services/viaggi.json';
import voyagesService from './namespaces/travel-portal/services/voyages.json';
import travelPortalSpans from './namespaces/travel-portal/spans.json';
/* Travel portal */
import travelPortalTls from './namespaces/travel-portal/tls.json';
import travelPortalWorkloads from './namespaces/travel-portal/workloads.json';
import travelPortalApps from './namespaces/travel-portal/workloads.json';
import travelPortalTravels from './namespaces/travel-portal/workloads/travels.json';
import travelPortalViaggi from './namespaces/travel-portal/workloads/viaggi.json';
import travelPortalVoyages from './namespaces/travel-portal/workloads/voyages.json';
export const kialiData: { [index: string]: any } = {
auth: anonymousAuth,
config: configData,
namespaces: namespacesData,
meshTls: meshTls,
meshCanaryStatus: meshCanaryStatus,
meshIstioResourceThresholds: meshIstioResourceThresholds,
outboundTrafficPolicy: outboundTrafficPolicy,
istioValidations: istioValidations,
istioConfig: istioConfig,
istioStatus: istioStatus,
istioCertsInfo: istioCertsInfo,
graph: bookinfoGraph,
namespacesData: {
'istio-system': {
tls: istioSystemTls,
metrics: istioSystemMetrics,
health: {
app: istioSystemHealthApp,
service: istioSystemHealthService,
workload: istioSystemHealthWorkload,
},
workloads: {
grafana: grafanaWorkload,
istioegressgateway: istioegressgatewayWorkload,
istioingressgateway: istioingressgatewayWorkload,
istiod: istiodWorkload,
jaeger: jaegerWorkload,
kiali: kialiWorkload,
prometheus: prometheusWorkload,
},
services: {
grafana: grafanaService,
istioegressgateway: istioegressgatewayService,
istioingressgateway: istioingressgatewayService,
istiod: istiodService,
jaeger: jaegerService,
kiali: kialiService,
prometheus: prometheusService,
},
apps: {
istioegressgateway: istioegressgatewayApp,
istioingressgateway: istioingressgatewayApp,
istiod: istiodApp,
jaeger: jaegerApp,
kiali: kialiApp,
},
istioConfigList: istioSystemIstioConfig,
dashboard: istioDashboard,
spans: istioSpans,
},
bookinfo: {
tls: bookinfoTls,
metrics: bookInfoMetrics,
health: {
app: bookinfoHealthApp,
service: bookinfoHealthService,
workload: bookinfoHealthWorkload,
},
workloads: {
detailsv1: detailsWorkload,
kialitrafficgenerator: kialitrafficWorkload,
productpagev1: productpagev1Workload,
ratingsv1: ratingsv1Workload,
reviewsv1: reviewsv1Workload,
reviewsv2: reviewsv2Workload,
reviewsv3: reviewsv3Workload,
},
services: {
details: detailsService,
productpage: productpageService,
ratings: ratingsService,
reviews: reviewsService,
},
apps: {
details: detailsApp,
productpage: productpageApp,
ratings: ratingsApp,
reviews: reviewsApp,
kialitrafficgenerator: kialiTrafficGeneratorApp,
},
istioConfigDetails: {
gateways: {
'bookinfo-gateway': bookinfoGateway,
},
virtualservices: {
bookinfo: bookinfoVirtualService,
},
},
istioConfigList: bookinfoIstioConfig,
dashboard: bookinfoDashboard,
spans: bookinfoSpans,
},
'travel-control': {
tls: travelControlTls,
metrics: travelControlMetrics,
health: {
app: travelControlHealthApp,
service: travelControlHealthService,
workload: travelControlHealthWorkload,
},
workloads: {
control: travelControlWorkload,
},
services: {
control: controlService,
},
apps: {
control: controlApp,
},
istioConfigDetails: {
destinationrules: {
control: controlDR,
},
virtualservices: {
control: controlVR,
},
gateways: {
'control-gateway': controlGW,
},
},
istioConfigList: travelControlIstioConfig,
dashboard: travelControlDashboard,
spans: travelControlSpans,
},
'travel-portal': {
tls: travelPortalTls,
metrics: travelPortalMetrics,
health: {
app: travelPortalHealthApp,
service: travelPortalHealthService,
workload: travelPortalHealthWorkload,
},
workloads: {
travels: travelPortalTravels,
viaggi: travelPortalViaggi,
voyages: travelPortalVoyages,
},
services: {
travels: travelsService,
viaggi: viaggiService,
voyages: voyagesService,
},
apps: {
travels: travelsApp,
viaggi: viaggiApp,
voyages: voyagesApp,
},
istioConfigList: travelPortalIstioConfig,
dashboard: travelPortalDashboard,
spans: travelPortalSpans,
},
'travel-agency': {
tls: travelAgencyTls,
metrics: travelAgencyMetrics,
health: {
app: travelAgencyHealthApp,
service: travelAgencyHealthService,
workload: travelAgencyHealthWorkload,
},
workloads: {
carsv1: carsv1Workload,
discountsv1: discountsv1Workload,
flightsv1: flightsv1Workload,
hotelsv1: hotelsv1Workload,
insurancesv1: insurancesv1Workload,
mysqldbv1: mysqldbv1Workload,
travels: travelsv1Workload,
},
services: {
cars: carsService,
discounts: discountsService,
flights: flightsService,
hotels: hotelsService,
insurances: insurancesService,
mysqldb: mysqldbService,
travels: travelService,
},
apps: {
cars: carsApp,
discounts: discountsApp,
flights: flightsApp,
hotels: hotelsApp,
insurances: insurancesApp,
mysqldb: mysqldbApp,
travels: travelApp,
},
istioConfigList: travelAgencyIstioConfig,
dashboard: travelAgencyDashboard,
spans: travelAgencySpans,
},
},
logs: containerLogs,
istioLogs: istioContainerLogs,
spanLogs: spanLogs,
workloads: {
'istio-system': istioSystemWorkloads,
bookinfo: bookinfoWorkloads,
'travel-portal': travelPortalWorkloads,
'travel-agency': travelAgencyWorkloads,
'travel-control': travelControlWorkloads,
},
services: {
'istio-system': istioSystemServices,
bookinfo: bookinfoServices,
'travel-portal': travelPortalServices,
'travel-agency': travelAgencyServices,
'travel-control': travelControlServices,
},
apps: {
'istio-system': istioSystemApps,
bookinfo: bookinfoApps,
'travel-portal': travelPortalApps,
'travel-agency': travelAgencyApps,
'travel-control': travelControlApps,
},
status: status,
crippledFeatures: crippledFeatures,
grafanaInfo: grafanaInfo,
};

View File

@ -0,0 +1,223 @@
{
"namespace": {
"name": "bookinfo",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"cluster": "",
"applications": [
{
"name": "details",
"cluster": "Kubernetes",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "details",
"service": "details",
"version": "v1"
},
"istioReferences": [
{
"objectType": "Gateway",
"name": "bookinfo-gateway",
"namespace": "bookinfo",
"cluster": ""
}
],
"health": {
"workloadStatuses": [
{
"name": "details-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {},
"healthAnnotations": {}
}
}
},
{
"name": "kiali-traffic-generator",
"cluster": "Kubernetes",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "kiali-traffic-generator",
"kiali-test": "traffic-generator"
},
"istioReferences": [],
"health": {
"workloadStatuses": [
{
"name": "kiali-traffic-generator",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {},
"outbound": {},
"healthAnnotations": {}
}
}
},
{
"name": "productpage",
"cluster": "Kubernetes",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "productpage",
"service": "productpage",
"version": "v1"
},
"istioReferences": [
{
"objectType": "VirtualService",
"name": "bookinfo",
"namespace": "bookinfo",
"cluster": ""
},
{
"objectType": "Gateway",
"name": "bookinfo-gateway",
"namespace": "bookinfo",
"cluster": ""
}
],
"health": {
"workloadStatuses": [
{
"name": "productpage-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {
"http": {
"200": 1.9999999999999998
}
},
"healthAnnotations": {}
}
}
},
{
"name": "ratings",
"cluster": "Kubernetes",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "ratings",
"service": "ratings",
"version": "v1"
},
"istioReferences": [
{
"objectType": "Gateway",
"name": "bookinfo-gateway",
"namespace": "bookinfo",
"cluster": ""
}
],
"health": {
"workloadStatuses": [
{
"name": "ratings-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 0.6444444444444444
}
},
"outbound": {},
"healthAnnotations": {}
}
}
},
{
"name": "reviews",
"cluster": "Kubernetes",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "reviews",
"service": "reviews",
"version": "v1,v2,v3"
},
"istioReferences": [
{
"objectType": "Gateway",
"name": "bookinfo-gateway",
"namespace": "bookinfo",
"cluster": ""
}
],
"health": {
"workloadStatuses": [
{
"name": "reviews-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
{
"name": "reviews-v2",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
{
"name": "reviews-v3",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 1.0222222222222221
}
},
"outbound": {
"http": {
"200": 0.5999999999999999
}
},
"healthAnnotations": {}
}
}
}
]
}

View File

@ -0,0 +1,58 @@
{
"namespace": {
"name": "bookinfo",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"istio-injection": "enabled",
"kubernetes.io/metadata.name": "bookinfo"
},
"annotations": null
},
"name": "details",
"cluster": "Kubernetes",
"workloads": [
{
"workloadName": "details-v1",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "details",
"version": "v1"
},
"serviceAccountNames": ["bookinfo-details"]
}
],
"serviceNames": ["details"],
"runtimes": [
{
"name": "",
"dashboardRefs": [
{
"template": "envoy",
"title": "Envoy Metrics"
}
]
}
],
"health": {
"workloadStatuses": [
{
"name": "details-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {},
"healthAnnotations": {}
}
}
}

View File

@ -0,0 +1,54 @@
{
"namespace": {
"name": "bookinfo",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"istio-injection": "enabled",
"kubernetes.io/metadata.name": "bookinfo"
},
"annotations": null
},
"name": "kiali-traffic-generator",
"cluster": "Kubernetes",
"workloads": [
{
"workloadName": "kiali-traffic-generator",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "kiali-traffic-generator",
"kiali-test": "traffic-generator"
},
"serviceAccountNames": ["default"]
}
],
"serviceNames": [],
"runtimes": [
{
"name": "",
"dashboardRefs": [
{
"template": "envoy",
"title": "Envoy Metrics"
}
]
}
],
"health": {
"workloadStatuses": [
{
"name": "kiali-traffic-generator",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {},
"outbound": {},
"healthAnnotations": {}
}
}
}

View File

@ -0,0 +1,62 @@
{
"namespace": {
"name": "bookinfo",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"istio-injection": "enabled",
"kubernetes.io/metadata.name": "bookinfo"
},
"annotations": null
},
"name": "productpage",
"cluster": "Kubernetes",
"workloads": [
{
"workloadName": "productpage-v1",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "productpage",
"version": "v1"
},
"serviceAccountNames": ["bookinfo-productpage"]
}
],
"serviceNames": ["productpage"],
"runtimes": [
{
"name": "",
"dashboardRefs": [
{
"template": "envoy",
"title": "Envoy Metrics"
}
]
}
],
"health": {
"workloadStatuses": [
{
"name": "productpage-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {
"http": {
"200": 1.9999999999999996
}
},
"healthAnnotations": {}
}
}
}

View File

@ -0,0 +1,58 @@
{
"namespace": {
"name": "bookinfo",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"istio-injection": "enabled",
"kubernetes.io/metadata.name": "bookinfo"
},
"annotations": null
},
"name": "ratings",
"cluster": "Kubernetes",
"workloads": [
{
"workloadName": "ratings-v1",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "ratings",
"version": "v1"
},
"serviceAccountNames": ["bookinfo-ratings"]
}
],
"serviceNames": ["ratings"],
"runtimes": [
{
"name": "",
"dashboardRefs": [
{
"template": "envoy",
"title": "Envoy Metrics"
}
]
}
],
"health": {
"workloadStatuses": [
{
"name": "ratings-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 0.6666666666666666
}
},
"outbound": {},
"healthAnnotations": {}
}
}
}

View File

@ -0,0 +1,96 @@
{
"namespace": {
"name": "bookinfo",
"cluster": "Kubernetes",
"isAmbient": false,
"labels": {
"istio-injection": "enabled",
"kubernetes.io/metadata.name": "bookinfo"
},
"annotations": null
},
"name": "reviews",
"cluster": "Kubernetes",
"workloads": [
{
"workloadName": "reviews-v1",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "reviews",
"version": "v1"
},
"serviceAccountNames": ["bookinfo-reviews"]
},
{
"workloadName": "reviews-v2",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "reviews",
"version": "v2"
},
"serviceAccountNames": ["bookinfo-reviews"]
},
{
"workloadName": "reviews-v3",
"istioSidecar": true,
"istioAmbient": false,
"labels": {
"app": "reviews",
"version": "v3"
},
"serviceAccountNames": ["bookinfo-reviews"]
}
],
"serviceNames": ["reviews"],
"runtimes": [
{
"name": "",
"dashboardRefs": [
{
"template": "envoy",
"title": "Envoy Metrics"
}
]
}
],
"health": {
"workloadStatuses": [
{
"name": "reviews-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
{
"name": "reviews-v2",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
{
"name": "reviews-v3",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 1.0222222222222221
}
},
"outbound": {
"http": {
"200": 0.7555555555555555
}
},
"healthAnnotations": {}
}
}
}

View File

@ -0,0 +1,347 @@
{
"name": "",
"title": "Inbound Metrics",
"charts": [
{
"name": "Request volume",
"unit": "ops",
"spans": 3,
"startCollapsed": false,
"metrics": [
{
"labels": {
"source_canonical_service": "productpage",
"source_workload_namespace": "bookinfo"
},
"datapoints": [
[1710326010, "0.9999333377774815"],
[1710326040, "1"],
[1710326070, "1"],
[1710326100, "1.0000666711114075"],
[1710326130, "1.0000666711114075"],
[1710326160, "1"],
[1710326190, "1"],
[1710326220, "1"],
[1710326250, "1.0000666711114075"],
[1710326280, "1"],
[1710326310, "0.9999333377774815"],
[1710326340, "1"],
[1710326370, "0.9999333377774815"],
[1710326400, "1"],
[1710326430, "1.0000666711114075"],
[1710326460, "1"],
[1710326490, "0.9999333377774815"],
[1710326520, "1"],
[1710326550, "0.9999333377774815"],
[1710326580, "0.9999333377774815"],
[1710326610, "1.0000666711114075"]
],
"name": "request_count"
}
],
"xAxis": null,
"error": ""
},
{
"name": "Request duration",
"unit": "seconds",
"spans": 3,
"startCollapsed": false,
"metrics": [
{
"labels": {
"source_canonical_service": "productpage",
"source_workload_namespace": "bookinfo"
},
"datapoints": [
[1710326010, "0"],
[1710326040, "0.00027666666666652115"],
[1710326070, "0.0005533333333332848"],
[1710326100, "0.00021000000000009702"],
[1710326130, "0.0010966666666667154"],
[1710326160, "0.00013999999999990298"],
[1710326190, "0.00006999999999995149"],
[1710326220, "0.0005533333333330423"],
[1710326250, "0.0002766666666667637"],
[1710326280, "0.0003466666666667152"],
[1710326310, "0.0006166666666669092"],
[1710326340, "0.00014000000000014551"],
[1710326370, "0.0007566666666668122"],
[1710326400, "0.00020666666666656968"],
[1710326430, "0.00014000000000014554"],
[1710326460, "0.0002800000000000485"],
[1710326490, "0.00027999999999980596"],
[1710326520, "0.0006933333333331878"],
[1710326550, "0.0002099999999998545"],
[1710326580, "0.0006866666666666181"],
[1710326610, "0.0004166666666666667"]
],
"stat": "avg",
"name": "request_duration_millis"
}
],
"xAxis": null,
"error": ""
},
{
"name": "Request size",
"unit": "bytes",
"spans": 3,
"startCollapsed": false,
"metrics": [
{
"labels": {
"source_canonical_service": "productpage",
"source_workload_namespace": "bookinfo"
},
"datapoints": [
[1710326010, "1249.9999999999998"],
[1710326040, "1250"],
[1710326070, "1250"],
[1710326100, "1250"],
[1710326130, "1250"],
[1710326160, "1250"],
[1710326190, "1250"],
[1710326220, "1250"],
[1710326250, "1250"],
[1710326280, "1250"],
[1710326310, "1249.9999999999998"],
[1710326340, "1250"],
[1710326370, "1249.9999999999998"],
[1710326400, "1250"],
[1710326430, "1250"],
[1710326460, "1250"],
[1710326490, "1249.9999999999998"],
[1710326520, "1250"],
[1710326550, "1249.9999999999998"],
[1710326580, "1249.9999999999998"],
[1710326610, "1250"]
],
"stat": "avg",
"name": "request_size"
}
],
"xAxis": null,
"error": ""
},
{
"name": "Response size",
"unit": "bytes",
"spans": 3,
"startCollapsed": false,
"metrics": [
{
"labels": {
"source_canonical_service": "productpage",
"source_workload_namespace": "bookinfo"
},
"datapoints": [
[1710326010, "1149.9999999999998"],
[1710326040, "1150"],
[1710326070, "1150"],
[1710326100, "1150"],
[1710326130, "1150"],
[1710326160, "1150"],
[1710326190, "1150"],
[1710326220, "1150"],
[1710326250, "1150"],
[1710326280, "1150"],
[1710326310, "1149.9999999999998"],
[1710326340, "1150"],
[1710326370, "1149.9999999999998"],
[1710326400, "1150"],
[1710326430, "1150"],
[1710326460, "1150"],
[1710326490, "1149.9999999999998"],
[1710326520, "1150"],
[1710326550, "1149.9999999999998"],
[1710326580, "1149.9999999999998"],
[1710326610, "1150"]
],
"stat": "avg",
"name": "response_size"
}
],
"xAxis": null,
"error": ""
},
{
"name": "Request throughput",
"unit": "bitrate",
"spans": 3,
"startCollapsed": false,
"metrics": [
{
"labels": {
"source_canonical_service": "productpage",
"source_workload_namespace": "bookinfo"
},
"datapoints": [
[1710326010, "9999.333377774814"],
[1710326040, "10000"],
[1710326070, "10000"],
[1710326100, "10000.666711114074"],
[1710326130, "10000.666711114074"],
[1710326160, "10000"],
[1710326190, "10000"],
[1710326220, "10000"],
[1710326250, "10000.666711114074"],
[1710326280, "10000"],
[1710326310, "9999.333377774814"],
[1710326340, "10000"],
[1710326370, "9999.333377774814"],
[1710326400, "10000"],
[1710326430, "10000.666711114074"],
[1710326460, "10000"],
[1710326490, "9999.333377774814"],
[1710326520, "10000"],
[1710326550, "9999.333377774814"],
[1710326580, "9999.333377774814"],
[1710326610, "10000.666711114074"]
],
"name": "request_throughput"
}
],
"xAxis": null,
"error": ""
},
{
"name": "Response throughput",
"unit": "bitrate",
"spans": 3,
"startCollapsed": false,
"metrics": [
{
"labels": {
"source_canonical_service": "productpage",
"source_workload_namespace": "bookinfo"
},
"datapoints": [
[1710326010, "9199.386707552829"],
[1710326040, "9200"],
[1710326070, "9200"],
[1710326100, "9200.61337422495"],
[1710326130, "9200.61337422495"],
[1710326160, "9200"],
[1710326190, "9200"],
[1710326220, "9200"],
[1710326250, "9200.61337422495"],
[1710326280, "9200"],
[1710326310, "9199.386707552829"],
[1710326340, "9200"],
[1710326370, "9199.386707552829"],
[1710326400, "9200"],
[1710326430, "9200.61337422495"],
[1710326460, "9200"],
[1710326490, "9199.386707552829"],
[1710326520, "9200"],
[1710326550, "9199.386707552829"],
[1710326580, "9199.386707552829"],
[1710326610, "9200.61337422495"]
],
"name": "response_throughput"
}
],
"xAxis": null,
"error": ""
},
{
"name": "gRPC received",
"unit": "msgrate",
"spans": 3,
"startCollapsed": false,
"metrics": [],
"xAxis": null,
"error": ""
},
{
"name": "gRPC sent",
"unit": "msgrate",
"spans": 3,
"startCollapsed": false,
"metrics": [],
"xAxis": null,
"error": ""
},
{
"name": "TCP opened",
"unit": "connrate",
"spans": 3,
"startCollapsed": false,
"metrics": [],
"xAxis": null,
"error": ""
},
{
"name": "TCP closed",
"unit": "connrate",
"spans": 3,
"startCollapsed": false,
"metrics": [],
"xAxis": null,
"error": ""
},
{
"name": "TCP received",
"unit": "bitrate",
"spans": 3,
"startCollapsed": false,
"metrics": [],
"xAxis": null,
"error": ""
},
{
"name": "TCP sent",
"unit": "bitrate",
"spans": 3,
"startCollapsed": false,
"metrics": [],
"xAxis": null,
"error": ""
}
],
"aggregations": [
{
"label": "destination_canonical_revision",
"displayName": "Local version",
"singleSelection": false
},
{
"label": "source_workload_namespace",
"displayName": "Remote namespace",
"singleSelection": false
},
{
"label": "source_canonical_service",
"displayName": "Remote app",
"singleSelection": false
},
{
"label": "source_canonical_revision",
"displayName": "Remote version",
"singleSelection": false
},
{
"label": "response_code",
"displayName": "Response code",
"singleSelection": false
},
{
"label": "grpc_response_status",
"displayName": "GRPC status",
"singleSelection": false
},
{
"label": "response_flags",
"displayName": "Response flags",
"singleSelection": false
},
{
"label": "connection_security_policy",
"displayName": "Connection Security Policy",
"singleSelection": false
}
],
"externalLinks": null,
"rows": 3
}

View File

@ -0,0 +1,120 @@
{
"details": {
"workloadStatuses": [
{
"name": "details-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {},
"healthAnnotations": {}
}
},
"kiali-traffic-generator": {
"workloadStatuses": [
{
"name": "kiali-traffic-generator",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {},
"outbound": {},
"healthAnnotations": {}
}
},
"productpage": {
"workloadStatuses": [
{
"name": "productpage-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {
"http": {
"200": 1.9999999999999998
}
},
"healthAnnotations": {}
}
},
"ratings": {
"workloadStatuses": [
{
"name": "ratings-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 0.711111111111111
}
},
"outbound": {},
"healthAnnotations": {}
}
},
"reviews": {
"workloadStatuses": [
{
"name": "reviews-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
{
"name": "reviews-v2",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
{
"name": "reviews-v3",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
}
],
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {
"http": {
"200": 0.711111111111111
}
},
"healthAnnotations": {}
}
}
}

View File

@ -0,0 +1,46 @@
{
"details": {
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {},
"healthAnnotations": {}
}
},
"productpage": {
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {},
"healthAnnotations": {}
}
},
"ratings": {
"requests": {
"inbound": {
"http": {
"200": 0.7555555555555555
}
},
"outbound": {},
"healthAnnotations": {}
}
},
"reviews": {
"requests": {
"inbound": {
"http": {
"200": 1
}
},
"outbound": {},
"healthAnnotations": {}
}
}
}

View File

@ -0,0 +1,136 @@
{
"details-v1": {
"workloadStatus": {
"name": "details-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {},
"healthAnnotations": {}
}
},
"kiali-traffic-generator": {
"workloadStatus": {
"name": "kiali-traffic-generator",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
"requests": {
"inbound": {},
"outbound": {},
"healthAnnotations": {}
}
},
"productpage-v1": {
"workloadStatus": {
"name": "productpage-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {
"http": {
"200": 2
}
},
"healthAnnotations": {}
}
},
"ratings-v1": {
"workloadStatus": {
"name": "ratings-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
"requests": {
"inbound": {
"http": {
"200": 0.6666666666666665
}
},
"outbound": {},
"healthAnnotations": {}
}
},
"reviews-v1": {
"workloadStatus": {
"name": "reviews-v1",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
"requests": {
"inbound": {
"http": {
"200": 0.3333333333333333
}
},
"outbound": {},
"healthAnnotations": {}
}
},
"reviews-v2": {
"workloadStatus": {
"name": "reviews-v2",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
"requests": {
"inbound": {
"http": {
"200": 0.3777777777777777
}
},
"outbound": {
"http": {
"200": 0.3777777777777777
}
},
"healthAnnotations": {}
}
},
"reviews-v3": {
"workloadStatus": {
"name": "reviews-v3",
"desiredReplicas": 1,
"currentReplicas": 1,
"availableReplicas": 1,
"syncedProxies": 1
},
"requests": {
"inbound": {
"http": {
"200": 0.3555555555555555
}
},
"outbound": {
"http": {
"200": 0.2444444444444444
}
},
"healthAnnotations": {}
}
}
}

View File

@ -0,0 +1,193 @@
{
"namespace": {
"name": "bookinfo",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"destinationRules": [],
"envoyFilters": [],
"gateways": [
{
"kind": "Gateway",
"apiVersion": "networking.istio.io/v1beta1",
"metadata": {
"name": "bookinfo-gateway",
"namespace": "bookinfo",
"uid": "6369d379-ce97-4a77-98ef-5702845ddc56",
"resourceVersion": "811259",
"generation": 3,
"creationTimestamp": "2024-03-05T14:38:05Z",
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"networking.istio.io/v1alpha3\",\"kind\":\"Gateway\",\"metadata\":{\"annotations\":{},\"name\":\"bookinfo-gateway\",\"namespace\":\"bookinfo\"},\"spec\":{\"selector\":{\"istio\":\"ingressgateway\"},\"servers\":[{\"hosts\":[\"*\"],\"port\":{\"name\":\"http\",\"number\":8080,\"protocol\":\"HTTP\"}}]}}\n"
},
"managedFields": [
{
"manager": "kubectl-client-side-apply",
"operation": "Update",
"apiVersion": "networking.istio.io/v1alpha3",
"time": "2024-03-05T14:38:05Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:annotations": {
".": {},
"f:kubectl.kubernetes.io/last-applied-configuration": {}
}
},
"f:spec": {
".": {},
"f:selector": {},
"f:servers": {}
}
}
},
{
"manager": "kiali",
"operation": "Update",
"apiVersion": "networking.istio.io/v1beta1",
"time": "2024-03-20T12:42:26Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:spec": {
"f:selector": {
"f:istio": {}
}
}
}
}
]
},
"spec": {
"servers": [
{
"port": {
"number": 8080,
"protocol": "HTTP",
"name": "http"
},
"hosts": ["*"]
}
],
"selector": {
"istio": "ingressgateway"
}
},
"status": {}
}
],
"serviceEntries": [],
"sidecars": [],
"virtualServices": [
{
"kind": "VirtualService",
"apiVersion": "networking.istio.io/v1beta1",
"metadata": {
"name": "bookinfo",
"namespace": "bookinfo",
"uid": "16c9b2e6-4bc2-426c-9464-853a4148435f",
"resourceVersion": "784735",
"generation": 9,
"creationTimestamp": "2024-03-05T14:38:05Z",
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"networking.istio.io/v1alpha3\",\"kind\":\"VirtualService\",\"metadata\":{\"annotations\":{},\"name\":\"bookinfo\",\"namespace\":\"bookinfo\"},\"spec\":{\"gateways\":[\"bookinfo-gateway\"],\"hosts\":[\"*\"],\"http\":[{\"match\":[{\"uri\":{\"exact\":\"/productpage\"}},{\"uri\":{\"prefix\":\"/static\"}},{\"uri\":{\"exact\":\"/login\"}},{\"uri\":{\"exact\":\"/logout\"}},{\"uri\":{\"prefix\":\"/api/v1/products\"}}],\"route\":[{\"destination\":{\"host\":\"productpage\",\"port\":{\"number\":9080}}}]}]}}\n"
},
"managedFields": [
{
"manager": "kubectl-client-side-apply",
"operation": "Update",
"apiVersion": "networking.istio.io/v1alpha3",
"time": "2024-03-05T14:38:05Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:annotations": {
".": {},
"f:kubectl.kubernetes.io/last-applied-configuration": {}
}
},
"f:spec": {
".": {},
"f:hosts": {},
"f:http": {}
}
}
},
{
"manager": "kiali",
"operation": "Update",
"apiVersion": "networking.istio.io/v1beta1",
"time": "2024-03-19T14:43:01Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:spec": {
"f:gateways": {}
}
}
}
]
},
"spec": {
"hosts": ["*"],
"gateways": ["bookinfo-gateway"],
"http": [
{
"match": [
{
"uri": {
"exact": "/productpage"
}
},
{
"uri": {
"prefix": "/static"
}
},
{
"uri": {
"exact": "/login"
}
},
{
"uri": {
"exact": "/logout"
}
},
{
"uri": {
"prefix": "/api/v1/products"
}
}
],
"route": [
{
"destination": {
"host": "productpage",
"port": {
"number": 9080
}
}
}
]
}
]
},
"status": {}
}
],
"workloadEntries": [],
"workloadGroups": [],
"wasmPlugins": [],
"telemetries": [],
"k8sGateways": [],
"k8sGRPCRoutes": [],
"k8sHTTPRoutes": [],
"k8sReferenceGrants": [],
"k8sTCPRoutes": [],
"k8sTLSRoutes": [],
"authorizationPolicies": [],
"peerAuthentications": [],
"requestAuthentications": [],
"validations": {}
}

View File

@ -0,0 +1,103 @@
{
"namespace": {
"name": "bookinfo",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"objectType": "gateways",
"authorizationPolicy": null,
"destinationRule": null,
"envoyFilter": null,
"gateway": {
"kind": "Gateway",
"apiVersion": "networking.istio.io/v1beta1",
"metadata": {
"name": "bookinfo-gateway",
"namespace": "bookinfo",
"uid": "6369d379-ce97-4a77-98ef-5702845ddc56",
"resourceVersion": "811259",
"generation": 3,
"creationTimestamp": "2024-03-05T14:38:05Z",
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"networking.istio.io/v1alpha3\",\"kind\":\"Gateway\",\"metadata\":{\"annotations\":{},\"name\":\"bookinfo-gateway\",\"namespace\":\"bookinfo\"},\"spec\":{\"selector\":{\"istio\":\"ingressgateway\"},\"servers\":[{\"hosts\":[\"*\"],\"port\":{\"name\":\"http\",\"number\":8080,\"protocol\":\"HTTP\"}}]}}\n"
},
"managedFields": [
{
"manager": "kubectl-client-side-apply",
"operation": "Update",
"apiVersion": "networking.istio.io/v1alpha3",
"time": "2024-03-05T14:38:05Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:annotations": {
".": {},
"f:kubectl.kubernetes.io/last-applied-configuration": {}
}
},
"f:spec": {
".": {},
"f:selector": {},
"f:servers": {}
}
}
},
{
"manager": "kiali",
"operation": "Update",
"apiVersion": "networking.istio.io/v1beta1",
"time": "2024-03-20T12:42:26Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:spec": {
"f:selector": {
"f:istio": {}
}
}
}
}
]
},
"spec": {
"servers": [
{
"port": {
"number": 8080,
"protocol": "HTTP",
"name": "http"
},
"hosts": ["*"]
}
],
"selector": {
"istio": "ingressgateway"
}
},
"status": {}
},
"peerAuthentication": null,
"requestAuthentication": null,
"serviceEntry": null,
"sidecar": null,
"virtualService": null,
"workloadEntry": null,
"workloadGroup": null,
"wasmPlugin": null,
"telemetry": null,
"k8sGateway": null,
"k8sGRPCRoute": null,
"k8sHTTPRoute": null,
"k8sReferenceGrant": null,
"k8sTCPRoute": null,
"k8sTLSRoute": null,
"permissions": {
"create": true,
"update": true,
"delete": true
},
"validation": null,
"references": null,
"help": null
}

View File

@ -0,0 +1,131 @@
{
"namespace": {
"name": "bookinfo",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"objectType": "virtualservices",
"authorizationPolicy": null,
"destinationRule": null,
"envoyFilter": null,
"gateway": null,
"peerAuthentication": null,
"requestAuthentication": null,
"serviceEntry": null,
"sidecar": null,
"virtualService": {
"kind": "VirtualService",
"apiVersion": "networking.istio.io/v1beta1",
"metadata": {
"name": "bookinfo",
"namespace": "bookinfo",
"uid": "16c9b2e6-4bc2-426c-9464-853a4148435f",
"resourceVersion": "784735",
"generation": 9,
"creationTimestamp": "2024-03-05T14:38:05Z",
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"networking.istio.io/v1alpha3\",\"kind\":\"VirtualService\",\"metadata\":{\"annotations\":{},\"name\":\"bookinfo\",\"namespace\":\"bookinfo\"},\"spec\":{\"gateways\":[\"bookinfo-gateway\"],\"hosts\":[\"*\"],\"http\":[{\"match\":[{\"uri\":{\"exact\":\"/productpage\"}},{\"uri\":{\"prefix\":\"/static\"}},{\"uri\":{\"exact\":\"/login\"}},{\"uri\":{\"exact\":\"/logout\"}},{\"uri\":{\"prefix\":\"/api/v1/products\"}}],\"route\":[{\"destination\":{\"host\":\"productpage\",\"port\":{\"number\":9080}}}]}]}}\n"
},
"managedFields": [
{
"manager": "kubectl-client-side-apply",
"operation": "Update",
"apiVersion": "networking.istio.io/v1alpha3",
"time": "2024-03-05T14:38:05Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:metadata": {
"f:annotations": {
".": {},
"f:kubectl.kubernetes.io/last-applied-configuration": {}
}
},
"f:spec": {
".": {},
"f:hosts": {},
"f:http": {}
}
}
},
{
"manager": "kiali",
"operation": "Update",
"apiVersion": "networking.istio.io/v1beta1",
"time": "2024-03-19T14:43:01Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:spec": {
"f:gateways": {}
}
}
}
]
},
"spec": {
"hosts": ["*"],
"gateways": ["bookinfo-gateway"],
"http": [
{
"match": [
{
"uri": {
"exact": "/productpage"
}
},
{
"uri": {
"prefix": "/static"
}
},
{
"uri": {
"exact": "/login"
}
},
{
"uri": {
"exact": "/logout"
}
},
{
"uri": {
"prefix": "/api/v1/products"
}
}
],
"route": [
{
"destination": {
"host": "productpage",
"port": {
"number": 9080
}
}
}
]
}
]
},
"status": {}
},
"workloadEntry": null,
"workloadGroup": null,
"wasmPlugin": null,
"telemetry": null,
"k8sGateway": null,
"k8sGRPCRoute": null,
"k8sHTTPRoute": null,
"k8sReferenceGrant": null,
"k8sTCPRoute": null,
"k8sTLSRoute": null,
"permissions": {
"create": true,
"update": true,
"delete": true
},
"validation": null,
"references": null,
"help": null
}

View File

@ -0,0 +1,28 @@
{
"request_count": [
{
"labels": {},
"datapoints": [
[1697023800, "3.466666666666667"],
[1697023830, "3.399800039992002"],
[1697023860, "3.2664801740597667"],
[1697023890, "3.533333333333333"],
[1697023920, "3.866666666666667"]
],
"name": "request_count"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697023800, "0"],
[1697023830, "0"],
[1697023860, "0"],
[1697023890, "0"],
[1697023920, "0"]
],
"name": "request_error_count"
}
]
}

View File

@ -0,0 +1,40 @@
{
"request_count": [
{
"labels": {},
"datapoints": [
[1697022180, "3.6605924340032585"],
[1697022360, "3.672727272727272"],
[1697022540, "3.6606060606060598"],
[1697022720, "3.6666666666666656"],
[1697022900, "3.6606060606060598"],
[1697023080, "3.7515151515151506"],
[1697023260, "3.642218224270407"],
[1697023440, "3.6424242424242417"],
[1697023620, "3.7272727272727266"],
[1697023800, "3.636363636363636"],
[1697023980, "3.6363636363636362"]
],
"name": "request_count"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697022180, "0"],
[1697022360, "0"],
[1697022540, "0"],
[1697022720, "0"],
[1697022900, "0"],
[1697023080, "0"],
[1697023260, "0"],
[1697023440, "0"],
[1697023620, "0"],
[1697023800, "0"],
[1697023980, "0"]
],
"name": "request_error_count"
}
]
}

View File

@ -0,0 +1,914 @@
{
"grpc_received": null,
"grpc_sent": null,
"request_count": [
{
"labels": {},
"datapoints": [
[1696410795, "3.577777777777777"],
[1696410810, "3.622222222222221"],
[1696410825, "3.599999999999999"],
[1696410840, "3.5999999999999996"],
[1696410855, "3.5111111111111106"],
[1696410870, "3.4666666666666663"],
[1696410885, "3.5333333333333328"],
[1696410900, "3.5111111111111106"],
[1696410915, "3.555555555555555"],
[1696410930, "3.621711372212227"],
[1696410945, "3.7333333333333325"],
[1696410960, "3.6888888888888887"],
[1696410975, "3.622733594701489"],
[1696410990, "3.5554084154912404"],
[1696411005, "3.577777777777777"],
[1696411020, "3.6222222222222222"],
[1696411035, "3.622397558974338"],
[1696411050, "3.666666666666666"],
[1696411065, "3.0355833333333333"],
[1696411080, "1.9189166666666662"],
[1696411095, "0.5111111111111111"],
[1696411110, "0"],
[1696411125, "0"],
[1696411140, "0"],
[1696411155, "0"],
[1696411170, "0"],
[1696411185, "0"],
[1696411200, "0"],
[1696411215, "0"],
[1696411230, "0"],
[1696411245, "0"],
[1696411260, "0"],
[1696411275, "0"],
[1696411290, "0"],
[1696411305, "0"],
[1696411320, "0"],
[1696411335, "0"],
[1696411350, "0"],
[1696411365, "0"],
[1696411380, "0"],
[1696411395, "0.5777777777777777"],
[1696411410, "1.8667499999999997"],
[1696411425, "3.0945277777777775"],
[1696411440, "3.7223055555555553"],
[1696411455, "3.844444444444444"],
[1696411470, "3.7777777777777772"],
[1696411485, "3.7111111111111104"],
[1696411500, "3.733333333333333"],
[1696411515, "3.688888888888888"],
[1696411530, "3.666666666666666"],
[1696411545, "3.6222222222222222"],
[1696411560, "3.6887333575271"],
[1696411575, "3.733333333333333"],
[1696411590, "3.7777777777777777"],
[1696411605, "3.644600024201295"],
[1696411620, "3.64440000197522"],
[1696411635, "3.577777777777777"],
[1696411650, "3.7111111111111112"],
[1696411665, "3.6667111130865067"],
[1696411680, "3.7555555555555555"],
[1696411695, "3.7111111111111104"],
[1696411710, "3.7111111111111112"],
[1696411725, "3.622133337283775"],
[1696411740, "3.6"],
[1696411755, "3.644444444444444"],
[1696411770, "3.6889777817285703"],
[1696411785, "3.7777284005480873"],
[1696411800, "3.8222222222222215"],
[1696411815, "3.7555555555555546"],
[1696411830, "3.6661952130599573"],
[1696411845, "3.622222222222222"],
[1696411860, "3.666666666666666"],
[1696411875, "3.711600148202358"],
[1696411890, "3.644444444444444"],
[1696411905, "3.644444444444444"],
[1696411920, "3.622222222222222"],
[1696411935, "3.7111111111111112"],
[1696411950, "3.533333333333333"],
[1696411965, "3.533333333333333"],
[1696411980, "3.5331555713566205"],
[1696411995, "3.733333333333333"],
[1696412010, "3.622222222222222"],
[1696412025, "3.622400015803874"],
[1696412040, "3.622222222222222"],
[1696412055, "3.7111111111111112"],
[1696412070, "3.666666666666666"],
[1696412085, "3.666666666666666"],
[1696412100, "3.644311119999408"],
[1696412115, "3.6666666666666665"],
[1696412130, "3.5777185290516256"],
[1696412145, "3.577911120000592"],
[1696412160, "3.599999999999999"],
[1696412175, "3.6222814920183337"],
[1696412190, "3.6444128423152504"],
[1696412205, "3.5111111111111106"],
[1696412220, "3.621333728219557"],
[1696412235, "3.64446419928685"],
[1696412250, "3.688888888888888"],
[1696412265, "3.6008892841262776"],
[1696412280, "3.555555555555555"],
[1696412295, "3.555555555555555"],
[1696412310, "3.5555555555555554"],
[1696412325, "3.644444444444444"],
[1696412340, "3.6888888888888887"],
[1696412355, "3.711111111111111"],
[1696412370, "3.7111111111111112"],
[1696412385, "3.666666666666666"],
[1696412400, "3.555555555555555"],
[1696412415, "3.5333333333333328"],
[1696412430, "3.5555111130863324"],
[1696412445, "3.6666666666666665"],
[1696412460, "3.7111111111111112"],
[1696412475, "3.755600001975396"],
[1696412490, "3.8000000000000003"],
[1696412505, "3.7777777777777772"],
[1696412520, "3.7999999999999994"],
[1696412535, "3.8444444444444446"],
[1696412550, "3.688888888888888"],
[1696412565, "3.644444444444444"],
[1696412580, "3.5555555555555554"],
[1696412595, "3.6"]
],
"name": "request_count"
}
],
"request_duration_millis": [
{
"labels": {},
"datapoints": [
[1696410795, "7.5645962732919285"],
[1696410810, "7.019631901840506"],
[1696410825, "6.782716049382715"],
[1696410840, "6.498765432098765"],
[1696410855, "6.617088607594929"],
[1696410870, "6.762025316455705"],
[1696410885, "7.118867924528306"],
[1696410900, "7.021698113207562"],
[1696410915, "7.2767080745341595"],
[1696410930, "8.127719843059305"],
[1696410945, "8.459821428571418"],
[1696410960, "8.162195121951203"],
[1696410975, "7.567245817974092"],
[1696410990, "7.407068616263373"],
[1696411005, "8.43788819875777"],
[1696411020, "8.077914110429436"],
[1696411035, "8.08794526421048"],
[1696411050, "7.014759036144582"],
[1696411065, "6.607978236324356"],
[1696411080, "6.655912886939783"],
[1696411095, "2.7642857142856845"],
[1696411110, "NaN"],
[1696411125, "NaN"],
[1696411140, "NaN"],
[1696411155, "NaN"],
[1696411170, "NaN"],
[1696411185, "NaN"],
[1696411200, "NaN"],
[1696411215, "NaN"],
[1696411230, "NaN"],
[1696411245, "NaN"],
[1696411260, "NaN"],
[1696411275, "NaN"],
[1696411290, "NaN"],
[1696411305, "NaN"],
[1696411320, "NaN"],
[1696411335, "NaN"],
[1696411350, "NaN"],
[1696411365, "NaN"],
[1696411380, "NaN"],
[1696411395, "3.8761904761905015"],
[1696411410, "6.452448459725035"],
[1696411425, "5.9819901137018965"],
[1696411440, "6.213269220663208"],
[1696411455, "6.192774566473981"],
[1696411470, "6.533235294117629"],
[1696411485, "6.437425149700596"],
[1696411500, "6.775449101796406"],
[1696411515, "6.425449101796422"],
[1696411530, "7.216265060240964"],
[1696411545, "7.5265243902439165"],
[1696411560, "7.541374007531274"],
[1696411575, "6.799999999999992"],
[1696411590, "6.236011904761901"],
[1696411605, "6.2989043693660625"],
[1696411620, "6.499256365445137"],
[1696411635, "6.71073619631903"],
[1696411650, "7.01190476190475"],
[1696411665, "6.77995647248545"],
[1696411680, "7.267857142857117"],
[1696411695, "7.066265060240969"],
[1696411710, "7.394910179640704"],
[1696411725, "6.774941057751279"],
[1696411740, "6.828703703703713"],
[1696411755, "6.501552795031084"],
[1696411770, "7.861713569971116"],
[1696411785, "8.253635670380952"],
[1696411800, "9.162865497076009"],
[1696411815, "8.881764705882352"],
[1696411830, "8.529558572626945"],
[1696411845, "8.622256097560962"],
[1696411860, "7.677743902439009"],
[1696411875, "7.6418207924871995"],
[1696411890, "6.469090909090909"],
[1696411905, "6.387575757575752"],
[1696411920, "6.352147239263806"],
[1696411935, "6.634226190476188"],
[1696411950, "7.04748427672957"],
[1696411965, "7.104088050314491"],
[1696411980, "7.197714394440217"],
[1696411995, "6.841964285714277"],
[1696412010, "6.800304878048771"],
[1696412025, "6.63219087137394"],
[1696412040, "7.066564417177924"],
[1696412055, "7.158035714285704"],
[1696412070, "7.208928571428565"],
[1696412085, "6.9175757575757615"],
[1696412100, "6.680204190222556"],
[1696412115, "6.60304878048782"],
[1696412130, "7.147589279961249"],
[1696412145, "7.331397269920375"],
[1696412160, "7.555864197530868"],
[1696412175, "7.3379350122773825"],
[1696412190, "7.111091974580902"],
[1696412205, "7.103124999999996"],
[1696412220, "6.397247694068532"],
[1696412235, "6.805354054492854"],
[1696412250, "6.502727272727262"],
[1696412265, "6.650858726071548"],
[1696412280, "6.441509433962276"],
[1696412295, "6.476562500000013"],
[1696412310, "7.179754601226991"],
[1696412325, "6.864329268292677"],
[1696412340, "6.934848484848462"],
[1696412355, "6.306707317073169"],
[1696412370, "6.648181818181811"],
[1696412385, "6.394879518072293"],
[1696412400, "6.37331288343559"],
[1696412415, "6.716250000000013"],
[1696412430, "7.006688978351573"],
[1696412445, "7.872392638036815"],
[1696412460, "7.588757396449705"],
[1696412475, "7.960641995561795"],
[1696412490, "7.024418604651141"],
[1696412505, "6.798214285714275"],
[1696412520, "6.709826589595367"],
[1696412535, "6.770175438596499"],
[1696412550, "6.709281437125758"],
[1696412565, "6.748765432098778"],
[1696412580, "6.945652173913059"],
[1696412595, "6.937037037037037"]
],
"stat": "avg",
"name": "request_duration_millis"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1696410795, "0"],
[1696410810, "0"],
[1696410825, "0"],
[1696410840, "0"],
[1696410855, "0"],
[1696410870, "0"],
[1696410885, "0"],
[1696410900, "0"],
[1696410915, "0"],
[1696410930, "0"],
[1696410945, "0"],
[1696410960, "0"],
[1696410975, "0"],
[1696410990, "0"],
[1696411005, "0"],
[1696411020, "0"],
[1696411035, "0"],
[1696411050, "0"],
[1696411065, "0"],
[1696411080, "0"],
[1696411095, "0"],
[1696411110, "0"],
[1696411125, "0"],
[1696411140, "0"],
[1696411155, "0"],
[1696411170, "0"],
[1696411185, "0"],
[1696411200, "0"],
[1696411215, "0"],
[1696411230, "0"],
[1696411245, "0"],
[1696411260, "0"],
[1696411275, "0"],
[1696411290, "0"],
[1696411305, "0"],
[1696411320, "0"],
[1696411335, "0"],
[1696411350, "0"],
[1696411365, "0"],
[1696411380, "0"],
[1696411395, "0"],
[1696411410, "0"],
[1696411425, "0"],
[1696411440, "0"],
[1696411455, "0"],
[1696411470, "0"],
[1696411485, "0"],
[1696411500, "0"],
[1696411515, "0"],
[1696411530, "0"],
[1696411545, "0"],
[1696411560, "0"],
[1696411575, "0"],
[1696411590, "0"],
[1696411605, "0"],
[1696411620, "0"],
[1696411635, "0"],
[1696411650, "0"],
[1696411665, "0"],
[1696411680, "0"],
[1696411695, "0"],
[1696411710, "0"],
[1696411725, "0"],
[1696411740, "0"],
[1696411755, "0"],
[1696411770, "0"],
[1696411785, "0"],
[1696411800, "0"],
[1696411815, "0"],
[1696411830, "0"],
[1696411845, "0"],
[1696411860, "0"],
[1696411875, "0"],
[1696411890, "0"],
[1696411905, "0"],
[1696411920, "0"],
[1696411935, "0"],
[1696411950, "0"],
[1696411965, "0"],
[1696411980, "0"],
[1696411995, "0"],
[1696412010, "0"],
[1696412025, "0"],
[1696412040, "0"],
[1696412055, "0"],
[1696412070, "0"],
[1696412085, "0"],
[1696412100, "0"],
[1696412115, "0"],
[1696412130, "0"],
[1696412145, "0"],
[1696412160, "0"],
[1696412175, "0"],
[1696412190, "0"],
[1696412205, "0"],
[1696412220, "0"],
[1696412235, "0"],
[1696412250, "0"],
[1696412265, "0"],
[1696412280, "0"],
[1696412295, "0"],
[1696412310, "0"],
[1696412325, "0"],
[1696412340, "0"],
[1696412355, "0"],
[1696412370, "0"],
[1696412385, "0"],
[1696412400, "0"],
[1696412415, "0"],
[1696412430, "0"],
[1696412445, "0"],
[1696412460, "0"],
[1696412475, "0"],
[1696412490, "0"],
[1696412505, "0"],
[1696412520, "0"],
[1696412535, "0"],
[1696412550, "0"],
[1696412565, "0"],
[1696412580, "0"],
[1696412595, "0"]
],
"name": "request_error_count"
}
],
"request_size": [
{
"labels": {},
"datapoints": [
[1696410795, "279.4099378881988"],
[1696410810, "280.33742331288346"],
[1696410825, "279.99999999999994"],
[1696410840, "280.00000000000006"],
[1696410855, "277.9746835443038"],
[1696410870, "277.9746835443038"],
[1696410885, "278.45911949685535"],
[1696410900, "278.5849056603774"],
[1696410915, "279.53416149068323"],
[1696410930, "280.13979544724987"],
[1696410945, "282.79761904761904"],
[1696410960, "281.0365853658537"],
[1696410975, "281.2262147276294"],
[1696410990, "279.4102849337094"],
[1696411005, "279.9068322981367"],
[1696411020, "280.8282208588957"],
[1696411035, "279.9067354332076"],
[1696411050, "281.6867469879518"],
[1696411065, "285.3403241436331"],
[1696411080, "285.0850015565572"],
[1696411095, "325.71428571428567"],
[1696411110, "NaN"],
[1696411125, "NaN"],
[1696411140, "NaN"],
[1696411155, "NaN"],
[1696411170, "NaN"],
[1696411185, "NaN"],
[1696411200, "NaN"],
[1696411215, "NaN"],
[1696411230, "NaN"],
[1696411245, "NaN"],
[1696411260, "NaN"],
[1696411275, "NaN"],
[1696411290, "NaN"],
[1696411305, "NaN"],
[1696411320, "NaN"],
[1696411335, "NaN"],
[1696411350, "NaN"],
[1696411365, "NaN"],
[1696411380, "NaN"],
[1696411395, "324.52380952380946"],
[1696411410, "287.3358068446118"],
[1696411425, "289.0796102189919"],
[1696411440, "286.4486910955459"],
[1696411455, "284.53757225433526"],
[1696411470, "283.52941176470586"],
[1696411485, "282.00598802395206"],
[1696411500, "281.8862275449102"],
[1696411515, "281.76646706586826"],
[1696411530, "281.4457831325301"],
[1696411545, "280.67073170731703"],
[1696411560, "282.60971940114854"],
[1696411575, "282.7245508982036"],
[1696411590, "282.79761904761904"],
[1696411605, "279.6246759409596"],
[1696411620, "280.30628416048376"],
[1696411635, "280.21472392638043"],
[1696411650, "282.3214285714285"],
[1696411665, "281.68534107798405"],
[1696411680, "282.55952380952374"],
[1696411695, "281.92771084337346"],
[1696411710, "282.2455089820359"],
[1696411725, "280.70465809405835"],
[1696411740, "280.37037037037044"],
[1696411755, "280.27950310559004"],
[1696411770, "281.7281009043954"],
[1696411785, "283.1056240344476"],
[1696411800, "283.4795321637427"],
[1696411815, "283.17647058823525"],
[1696411830, "282.0170789560339"],
[1696411845, "280.6707317073171"],
[1696411860, "280.4268292682927"],
[1696411875, "281.3145869262265"],
[1696411890, "280.8787878787879"],
[1696411905, "281"],
[1696411920, "279.9693251533742"],
[1696411935, "282.32142857142856"],
[1696411950, "278.5849056603774"],
[1696411965, "278.58490566037733"],
[1696411980, "278.9356747237607"],
[1696411995, "282.32142857142856"],
[1696412010, "280.67073170731703"],
[1696412025, "278.58673793706083"],
[1696412040, "280.7055214723926"],
[1696412055, "282.9166666666667"],
[1696412070, "283.0357142857143"],
[1696412085, "281.6060606060606"],
[1696412100, "280.5815225148697"],
[1696412115, "280.9146341463414"],
[1696412130, "278.8113150533358"],
[1696412145, "279.0638643627106"],
[1696412160, "280.00000000000006"],
[1696412175, "280.4613205458113"],
[1696412190, "280.58222431127575"],
[1696412205, "278.93749999999994"],
[1696412220, "281.23413451827906"],
[1696412235, "281.886673285088"],
[1696412250, "281.24242424242425"],
[1696412265, "278.59406845764806"],
[1696412280, "278.45911949685535"],
[1696412295, "278.9375"],
[1696412310, "280.2147239263804"],
[1696412325, "280.5487804878049"],
[1696412340, "280.75757575757575"],
[1696412355, "280.3048780487805"],
[1696412370, "280.8787878787878"],
[1696412385, "281.4457831325301"],
[1696412400, "280.0920245398773"],
[1696412415, "279.06250000000006"],
[1696412430, "279.53558422973896"],
[1696412445, "280.58282208588963"],
[1696412460, "282.7514792899408"],
[1696412475, "281.7650686196597"],
[1696412490, "283.7790697674418"],
[1696412505, "282.2023809523809"],
[1696412520, "284.42196531791905"],
[1696412535, "283.59649122807014"],
[1696412550, "282.4850299401198"],
[1696412565, "280.37037037037044"],
[1696412580, "280.03105590062114"],
[1696412595, "279.99999999999994"]
],
"stat": "avg",
"name": "request_size"
}
],
"request_throughput": [
{
"labels": {},
"datapoints": [
[1696410795, "999.6666666666665"],
[1696410810, "1015.4444444444443"],
[1696410825, "1007.9999999999999"],
[1696410840, "1007.9999999999999"],
[1696410855, "975.9999999999999"],
[1696410870, "975.9999999999999"],
[1696410885, "983.8888888888887"],
[1696410900, "984.3333333333333"],
[1696410915, "1000.111111111111"],
[1696410930, "1008.3601541927952"],
[1696410945, "1055.7777777777776"],
[1696410960, "1024.2222222222222"],
[1696410975, "1031.3065986813012"],
[1696410990, "999.6252784577467"],
[1696411005, "1001.4444444444443"],
[1696411020, "1017.2222222222221"],
[1696411035, "1001.4901341155481"],
[1696411050, "1039.1111111111109"],
[1696411065, "891.5379166666665"],
[1696411080, "585.0656944444444"],
[1696411095, "202.66666666666663"],
[1696411110, "0"],
[1696411125, "0"],
[1696411140, "0"],
[1696411155, "0"],
[1696411170, "0"],
[1696411185, "0"],
[1696411200, "0"],
[1696411215, "0"],
[1696411230, "0"],
[1696411245, "0"],
[1696411260, "0"],
[1696411275, "0"],
[1696411290, "0"],
[1696411305, "0"],
[1696411320, "0"],
[1696411335, "0"],
[1696411350, "0"],
[1696411365, "0"],
[1696411380, "0"],
[1696411395, "151.44444444444443"],
[1696411410, "504.4579166666666"],
[1696411425, "849.5969444444444"],
[1696411440, "1059.8840277777776"],
[1696411455, "1093.8888888888887"],
[1696411470, "1071.1111111111109"],
[1696411485, "1046.5555555555554"],
[1696411500, "1046.111111111111"],
[1696411515, "1045.6666666666665"],
[1696411530, "1038.2222222222222"],
[1696411545, "1022.8888888888888"],
[1696411560, "1048.7521151030826"],
[1696411575, "1049.2222222222222"],
[1696411590, "1055.7777777777776"],
[1696411605, "1006.692337326547"],
[1696411620, "1021.5482225481336"],
[1696411635, "1014.9999999999999"],
[1696411650, "1053.9999999999998"],
[1696411665, "1039.1184447703847"],
[1696411680, "1054.8888888888887"],
[1696411695, "1039.9999999999998"],
[1696411710, "1047.4444444444443"],
[1696411725, "1016.7497000133326"],
[1696411740, "1009.3333333333333"],
[1696411755, "1002.7777777777776"],
[1696411770, "1033.0280802603572"],
[1696411785, "1063.2056191287388"],
[1696411800, "1077.2222222222222"],
[1696411815, "1069.7777777777776"],
[1696411830, "1046.4651500995017"],
[1696411845, "1022.8888888888888"],
[1696411860, "1021.9999999999999"],
[1696411875, "1037.8754104717032"],
[1696411890, "1029.8888888888887"],
[1696411905, "1030.3333333333333"],
[1696411920, "1014.111111111111"],
[1696411935, "1054"],
[1696411950, "984.3333333333333"],
[1696411965, "984.3333333333333"],
[1696411980, "991.7217037497902"],
[1696411995, "1054"],
[1696412010, "1022.8888888888887"],
[1696412025, "984.3893383115535"],
[1696412040, "1016.7777777777776"],
[1696412055, "1056.2222222222222"],
[1696412070, "1056.6666666666665"],
[1696412085, "1032.5555555555554"],
[1696412100, "1016.2912176225288"],
[1696412115, "1023.7777777777776"],
[1696412130, "991.3137022554014"],
[1696412145, "992.264284285619"],
[1696412160, "1007.9999999999999"],
[1696412175, "1015.9098506401136"],
[1696412190, "1016.3228552523725"],
[1696412205, "991.7777777777776"],
[1696412220, "1030.941951725159"],
[1696412235, "1046.1194476546061"],
[1696412250, "1031.2222222222222"],
[1696412265, "984.613457833111"],
[1696412280, "983.8888888888887"],
[1696412295, "991.7777777777776"],
[1696412310, "1014.9999999999999"],
[1696412325, "1022.4444444444443"],
[1696412340, "1029.4444444444443"],
[1696412355, "1021.5555555555554"],
[1696412370, "1029.8888888888887"],
[1696412385, "1038.2222222222222"],
[1696412400, "1014.5555555555554"],
[1696412415, "992.2222222222222"],
[1696412430, "1000.1037781036893"],
[1696412445, "1016.3333333333333"],
[1696412460, "1061.8888888888887"],
[1696412475, "1045.6740003259401"],
[1696412490, "1084.6666666666665"],
[1696412505, "1053.5555555555554"],
[1696412520, "1093.4444444444443"],
[1696412535, "1077.6666666666665"],
[1696412550, "1048.3333333333333"],
[1696412565, "1009.3333333333333"],
[1696412580, "1001.8888888888888"],
[1696412595, "1007.9999999999999"]
],
"name": "request_throughput"
}
],
"response_size": [
{
"labels": {},
"datapoints": [
[1696410795, "1741.1180124223602"],
[1696410810, "1730.1226993865032"],
[1696410825, "1732.3148148148143"],
[1696410840, "1737.9320987654323"],
[1696410855, "1755.7278481012659"],
[1696410870, "1736.6139240506334"],
[1696410885, "1734.4025157232707"],
[1696410900, "1740.1257861635222"],
[1696410915, "1720.8695652173915"],
[1696410930, "1731.7680297986026"],
[1696410945, "1698.6607142857142"],
[1696410960, "1746.25"],
[1696410975, "1730.4287021168816"],
[1696410990, "1733.7618095304606"],
[1696411005, "1734.8447204968948"],
[1696411020, "1717.484662576687"],
[1696411035, "1761.7615043666383"],
[1696411050, "1715.2710843373495"],
[1696411065, "1589.3159733643906"],
[1696411080, "1608.4669942204355"],
[1696411095, "413.21428571428567"],
[1696411110, "NaN"],
[1696411125, "NaN"],
[1696411140, "NaN"],
[1696411155, "NaN"],
[1696411170, "NaN"],
[1696411185, "NaN"],
[1696411200, "NaN"],
[1696411215, "NaN"],
[1696411230, "NaN"],
[1696411245, "NaN"],
[1696411260, "NaN"],
[1696411275, "NaN"],
[1696411290, "NaN"],
[1696411305, "NaN"],
[1696411320, "NaN"],
[1696411335, "NaN"],
[1696411350, "NaN"],
[1696411365, "NaN"],
[1696411380, "NaN"],
[1696411395, "421.1904761904761"],
[1696411410, "1518.7230036548897"],
[1696411425, "1486.5537839191707"],
[1696411440, "1606.3605924791486"],
[1696411455, "1686.7630057803472"],
[1696411470, "1712.8529411764707"],
[1696411485, "1726.3473053892217"],
[1696411500, "1738.6826347305391"],
[1696411515, "1712.6946107784431"],
[1696411530, "1715.5722891566263"],
[1696411545, "1707.9573170731705"],
[1696411560, "1713.6845952569065"],
[1696411575, "1720.3592814371257"],
[1696411590, "1717.7678571428576"],
[1696411605, "1744.7478495869427"],
[1696411620, "1713.7690722169127"],
[1696411635, "1741.9631901840492"],
[1696411650, "1717.1130952380952"],
[1696411665, "1728.747379767859"],
[1696411680, "1704.7321428571427"],
[1696411695, "1716.6566265060244"],
[1696411710, "1725.02994011976"],
[1696411725, "1749.1722864139313"],
[1696411740, "1745.2160493827162"],
[1696411755, "1742.2360248447203"],
[1696411770, "1718.0911398883477"],
[1696411785, "1708.4208953752093"],
[1696411800, "1697.719298245614"],
[1696411815, "1718.6176470588232"],
[1696411830, "1719.549525159515"],
[1696411845, "1732.9573170731708"],
[1696411860, "1714.7865853658536"],
[1696411875, "1715.8324995142395"],
[1696411890, "1724.1818181818182"],
[1696411905, "1723.6363636363637"],
[1696411920, "1741.4723926380368"],
[1696411935, "1705.267857142857"],
[1696411950, "1760.6289308176104"],
[1696411965, "1734.2767295597484"],
[1696411980, "1743.7822556900564"],
[1696411995, "1698.8392857142856"],
[1696412010, "1739.4817073170734"],
[1696412025, "1754.401064247901"],
[1696412040, "1735.644171779141"],
[1696412055, "1692.2321428571427"],
[1696412070, "1710.267857142857"],
[1696412085, "1717.6969696969695"],
[1696412100, "1736.5493995475795"],
[1696412115, "1726.4939024390244"],
[1696412130, "1751.554992190156"],
[1696412145, "1744.1711320746856"],
[1696412160, "1726.018518518519"],
[1696412175, "1728.9937953174717"],
[1696412190, "1729.5215082845393"],
[1696412205, "1744.40625"],
[1696412220, "1705.8735608967884"],
[1696412235, "1713.9425847508378"],
[1696412250, "1730.8484848484852"],
[1696412265, "1753.5145842244906"],
[1696412280, "1752.7044025157236"],
[1696412295, "1731.7187500000005"],
[1696412310, "1729.20245398773"],
[1696412325, "1708.2012195121954"],
[1696412340, "1730.5454545454545"],
[1696412355, "1721.3719512195123"],
[1696412370, "1731.151515151515"],
[1696412385, "1709.5481927710841"],
[1696412400, "1741.963190184049"],
[1696412415, "1749.9062500000002"],
[1696412430, "1733.560322153935"],
[1696412445, "1717.300613496933"],
[1696412460, "1690.059171597633"],
[1696412475, "1727.168339198239"],
[1696412490, "1707.5290697674416"],
[1696412505, "1736.3392857142853"],
[1696412520, "1686.300578034682"],
[1696412535, "1709.7660818713448"],
[1696412550, "1730.8982035928145"],
[1696412565, "1751.2654320987658"],
[1696412580, "1740.6832298136644"],
[1696412595, "1713.9197530864194"]
],
"stat": "avg",
"name": "response_size"
}
],
"response_throughput": [
{
"labels": {},
"datapoints": [
[1696410795, "6229.333333333332"],
[1696410810, "6266.888888888888"],
[1696410825, "6236.333333333332"],
[1696410840, "6256.555555555555"],
[1696410855, "6164.555555555555"],
[1696410870, "6097.444444444445"],
[1696410885, "6128.222222222222"],
[1696410900, "6148.444444444444"],
[1696410915, "6156.888888888889"],
[1696410930, "6233.480233559637"],
[1696410945, "6341.666666666666"],
[1696410960, "6364.11111111111"],
[1696410975, "6345.790134710828"],
[1696410990, "6202.749952609931"],
[1696411005, "6206.888888888889"],
[1696411020, "6221.11111111111"],
[1696411035, "6303.480916802658"],
[1696411050, "6327.444444444443"],
[1696411065, "4965.773611111112"],
[1696411080, "3300.976388888888"],
[1696411095, "257.1111111111111"],
[1696411110, "0"],
[1696411125, "0"],
[1696411140, "0"],
[1696411155, "0"],
[1696411170, "0"],
[1696411185, "0"],
[1696411200, "0"],
[1696411215, "0"],
[1696411230, "0"],
[1696411245, "0"],
[1696411260, "0"],
[1696411275, "0"],
[1696411290, "0"],
[1696411305, "0"],
[1696411320, "0"],
[1696411335, "0"],
[1696411350, "0"],
[1696411365, "0"],
[1696411380, "0"],
[1696411395, "196.55555555555551"],
[1696411410, "2666.3291666666664"],
[1696411425, "4368.940277777778"],
[1696411440, "5943.668055555556"],
[1696411455, "6484.666666666667"],
[1696411470, "6470.777777777777"],
[1696411485, "6406.666666666667"],
[1696411500, "6452.444444444444"],
[1696411515, "6355.999999999999"],
[1696411530, "6328.555555555555"],
[1696411545, "6224.555555555555"],
[1696411560, "6359.4074106990765"],
[1696411575, "6384.444444444444"],
[1696411590, "6413"],
[1696411605, "6281.363705959198"],
[1696411620, "6245.660010172388"],
[1696411635, "6309.7777777777765"],
[1696411650, "6410.555555555556"],
[1696411665, "6377.2338375532745"],
[1696411680, "6364.333333333333"],
[1696411695, "6332.555555555556"],
[1696411710, "6401.7777777777765"],
[1696411725, "6335.735251272784"],
[1696411740, "6282.7777777777765"],
[1696411755, "6233.333333333332"],
[1696411770, "6299.820238924198"],
[1696411785, "6415.989445617153"],
[1696411800, "6451.333333333332"],
[1696411815, "6492.555555555555"],
[1696411830, "6380.637153645969"],
[1696411845, "6315.666666666666"],
[1696411860, "6249.444444444443"],
[1696411875, "6330.352006243607"],
[1696411890, "6321.999999999999"],
[1696411905, "6319.999999999999"],
[1696411920, "6307.999999999999"],
[1696411935, "6366.333333333333"],
[1696411950, "6220.888888888889"],
[1696411965, "6127.777777777777"],
[1696411980, "6199.80470871725"],
[1696411995, "6342.333333333333"],
[1696412010, "6339.444444444444"],
[1696412025, "6199.19568159145"],
[1696412040, "6286.888888888888"],
[1696412055, "6317.666666666665"],
[1696412070, "6384.999999999999"],
[1696412085, "6298.222222222221"],
[1696412100, "6289.936300542926"],
[1696412115, "6292.11111111111"],
[1696412130, "6227.6542244341745"],
[1696412145, "6201.7299301434905"],
[1696412160, "6213.666666666667"],
[1696412175, "6262.902224593014"],
[1696412190, "6264.660000592539"],
[1696412205, "6202.333333333333"],
[1696412220, "6253.354064860062"],
[1696412235, "6360.672000474116"],
[1696412250, "6346.444444444444"],
[1696412265, "6197.310903611481"],
[1696412280, "6192.888888888889"],
[1696412295, "6157.222222222223"],
[1696412310, "6263.555555555555"],
[1696412325, "6225.444444444444"],
[1696412340, "6345.333333333332"],
[1696412355, "6273.444444444444"],
[1696412370, "6347.555555555555"],
[1696412385, "6306.333333333332"],
[1696412400, "6309.7777777777765"],
[1696412415, "6221.888888888889"],
[1696412430, "6202.21655333837"],
[1696412445, "6220.444444444444"],
[1696412460, "6347.11111111111"],
[1696412475, "6409.790380807049"],
[1696412490, "6526.555555555555"],
[1696412505, "6482.333333333332"],
[1696412520, "6482.888888888889"],
[1696412535, "6497.1111111111095"],
[1696412550, "6423.555555555555"],
[1696412565, "6304.555555555555"],
[1696412580, "6227.7777777777765"],
[1696412595, "6170.11111111111"]
],
"name": "response_throughput"
}
],
"tcp_closed": null,
"tcp_opened": null,
"tcp_received": null,
"tcp_sent": null
}

View File

@ -0,0 +1,32 @@
{
"request_count": [
{
"labels": {},
"datapoints": [
[1697021640, "2.6002743899782135"],
[1697022000, "3.634782608695652"],
[1697022360, "3.678260869565217"],
[1697022720, "3.6753623188405795"],
[1697023080, "3.7101449275362324"],
[1697023440, "3.6318840579710145"],
[1697023800, "3.6811594202898554"]
],
"name": "request_count"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697021640, "0"],
[1697022000, "0"],
[1697022360, "0"],
[1697022720, "0"],
[1697023080, "0"],
[1697023440, "0"],
[1697023800, "0"]
],
"name": "request_error_count"
}
]
}

View File

@ -0,0 +1,24 @@
{
"request_count": [
{
"labels": {},
"datapoints": [
[1697023800, "3.466666666666667"],
[1697023830, "3.399800039992002"],
[1697023860, "3.2664801740597667"]
],
"name": "request_count"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697023800, "0"],
[1697023830, "0"],
[1697023860, "0"]
],
"name": "request_error_count"
}
]
}

View File

@ -0,0 +1,40 @@
{
"request_count": [
{
"labels": {},
"datapoints": [
[1697023680, "3.399866684442075"],
[1697023710, "3.7333333333333334"],
[1697023740, "3.9327959496369327"],
[1697023770, "3.6666666666666665"],
[1697023800, "3.466666666666667"],
[1697023830, "3.399800039992002"],
[1697023860, "3.2664801740597667"],
[1697023890, "3.533333333333333"],
[1697023920, "3.866666666666667"],
[1697023950, "3.733333333333334"],
[1697023980, "3.466666666666667"]
],
"name": "request_count"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697023680, "0"],
[1697023710, "0"],
[1697023740, "0"],
[1697023770, "0"],
[1697023800, "0"],
[1697023830, "0"],
[1697023860, "0"],
[1697023890, "0"],
[1697023920, "0"],
[1697023950, "0"],
[1697023980, "0"]
],
"name": "request_error_count"
}
]
}

View File

@ -0,0 +1,51 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import inbound60 from './inbound/metrics_inbound_60.json';
import inbound120 from './inbound/metrics_inbound_120.json';
import inbound300 from './inbound/metrics_inbound_300.json';
import inbound600 from './inbound/metrics_inbound_600.json';
import inbound1800 from './inbound/metrics_inbound_1800.json';
import inbound3600 from './inbound/metrics_inbound_3600.json';
/* Outbound Metrics */
import outbound60 from './outbound/metrics_outbound_60.json';
import outbound120 from './outbound/metrics_outbound_120.json';
import outbound300 from './outbound/metrics_outbound_300.json';
import outbound600 from './outbound/metrics_outbound_600.json';
import outbound1800 from './outbound/metrics_outbound_1800.json';
import outbound3600 from './outbound/metrics_outbound_3600.json';
export const bookInfoMetrics = {
inbound: {
60: inbound60,
120: inbound120,
300: inbound300,
600: inbound600,
1800: inbound1800,
3600: inbound3600,
},
outbound: {
60: outbound60,
120: outbound120,
300: outbound300,
600: outbound600,
1800: outbound1800,
3600: outbound3600,
},
};
export default bookInfoMetrics;

View File

@ -0,0 +1,28 @@
{
"request_count": [
{
"labels": {},
"datapoints": [
[1697023830, "2.4"],
[1697023860, "2.2664801740597667"],
[1697023890, "2.533333333333333"],
[1697023920, "2.8666666666666667"],
[1697023950, "2.733333333333334"]
],
"name": "request_count"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697023830, "0"],
[1697023860, "0"],
[1697023890, "0"],
[1697023920, "0"],
[1697023950, "0"]
],
"name": "request_error_count"
}
]
}

View File

@ -0,0 +1,40 @@
{
"request_count": [
{
"labels": {},
"datapoints": [
[1697022180, "2.660592434003259"],
[1697022360, "2.6727272727272724"],
[1697022540, "2.66060606060606"],
[1697022720, "2.6666666666666665"],
[1697022900, "2.66060606060606"],
[1697023080, "2.751515151515151"],
[1697023260, "2.642218224270407"],
[1697023440, "2.6424242424242417"],
[1697023620, "2.7272727272727266"],
[1697023800, "2.636363636363636"],
[1697023980, "2.6363636363636362"]
],
"name": "request_count"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697022180, "0"],
[1697022360, "0"],
[1697022540, "0"],
[1697022720, "0"],
[1697022900, "0"],
[1697023080, "0"],
[1697023260, "0"],
[1697023440, "0"],
[1697023620, "0"],
[1697023800, "0"],
[1697023980, "0"]
],
"name": "request_error_count"
}
]
}

View File

@ -0,0 +1,40 @@
{
"request_count": [
{
"labels": {},
"datapoints": [
[1697023680, "2.4"],
[1697023710, "2.7333333333333334"],
[1697023740, "2.9327959496369327"],
[1697023770, "2.6666666666666665"],
[1697023800, "2.466666666666667"],
[1697023830, "2.4"],
[1697023860, "2.2664801740597667"],
[1697023890, "2.533333333333333"],
[1697023920, "2.8666666666666667"],
[1697023950, "2.733333333333334"],
[1697023980, "2.466666666666667"]
],
"name": "request_count"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697023680, "0"],
[1697023710, "0"],
[1697023740, "0"],
[1697023770, "0"],
[1697023800, "0"],
[1697023830, "0"],
[1697023860, "0"],
[1697023890, "0"],
[1697023920, "0"],
[1697023950, "0"],
[1697023980, "0"]
],
"name": "request_error_count"
}
]
}

View File

@ -0,0 +1,32 @@
{
"request_count": [
{
"labels": {},
"datapoints": [
[1697021640, "1.8706855010893246"],
[1697022000, "2.634782608695652"],
[1697022360, "2.678260869565217"],
[1697022720, "2.6753623188405795"],
[1697023080, "2.7101449275362324"],
[1697023440, "2.631884057971014"],
[1697023800, "2.6811594202898554"]
],
"name": "request_count"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697021640, "0"],
[1697022000, "0"],
[1697022360, "0"],
[1697022720, "0"],
[1697023080, "0"],
[1697023440, "0"],
[1697023800, "0"]
],
"name": "request_error_count"
}
]
}

View File

@ -0,0 +1,24 @@
{
"request_count": [
{
"labels": {},
"datapoints": [
[1697023830, "2.4"],
[1697023860, "2.2664801740597667"],
[1697023890, "2.533333333333333"]
],
"name": "request_count"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697023830, "0"],
[1697023860, "0"],
[1697023890, "0"]
],
"name": "request_error_count"
}
]
}

View File

@ -0,0 +1,144 @@
{
"grpc_received": null,
"grpc_sent": null,
"request_count": [
{
"labels": {},
"datapoints": [
[1697023260, "2.5770227926554257"],
[1697023320, "2.688875062342908"],
[1697023380, "2.5334024768184116"],
[1697023440, "2.644444444444444"],
[1697023500, "2.888888888888889"],
[1697023560, "2.8222222222222224"],
[1697023620, "2.577792593580313"],
[1697023680, "2.511111111111111"],
[1697023740, "2.799815353777718"],
[1697023800, "2.5777777777777775"],
[1697023860, "2.422111639341834"]
],
"name": "request_count"
}
],
"request_duration_millis": [
{
"labels": {},
"datapoints": [
[1697023260, "0.8984028601338787"],
[1697023320, "0.7599175779653324"],
[1697023380, "1.1891073830431969"],
[1697023440, "0.8486956521739024"],
[1697023500, "1.3678294573643095"],
[1697023560, "1.3087301587301081"],
[1697023620, "1.0917565417025843"],
[1697023680, "1.2628205128205447"],
[1697023740, "1.460967924929601"],
[1697023800, "1.292016806722755"],
[1697023860, "1.284750805346726"]
],
"stat": "avg",
"name": "request_duration_millis"
}
],
"request_error_count": [
{
"labels": {},
"datapoints": [
[1697023260, "0"],
[1697023320, "0"],
[1697023380, "0"],
[1697023440, "0"],
[1697023500, "0"],
[1697023560, "0"],
[1697023620, "0"],
[1697023680, "0"],
[1697023740, "0"],
[1697023800, "0"],
[1697023860, "0"]
],
"name": "request_error_count"
}
],
"request_size": [
{
"labels": {},
"datapoints": [
[1697023260, "1321.2978379025685"],
[1697023320, "1318.96540098226"],
[1697023380, "1321.3024875544975"],
[1697023440, "1319.5652173913045"],
[1697023500, "1320.5426356589146"],
[1697023560, "1319.047619047619"],
[1697023620, "1321.30451418782"],
[1697023680, "1321.7948717948716"],
[1697023740, "1321.778861892338"],
[1697023800, "1321.4285714285716"],
[1697023860, "1327.7766258130607"]
],
"stat": "avg",
"name": "request_size"
}
],
"request_throughput": [
{
"labels": {},
"datapoints": [
[1697023260, "3375.6524699856404"],
[1697023320, "3399.9827661980453"],
[1697023380, "3376.750009260288"],
[1697023440, "3372.222222222222"],
[1697023500, "3785.555555555555"],
[1697023560, "3693.333333333333"],
[1697023620, "3376.686668000089"],
[1697023680, "3436.666666666666"],
[1697023740, "3641.998202908425"],
[1697023800, "3494.4444444444443"],
[1697023860, "3186.4987189170774"]
],
"name": "request_throughput"
}
],
"response_size": [
{
"labels": {},
"datapoints": [
[1697023260, "1238.7218631817639"],
[1697023320, "1226.7230258729253"],
[1697023380, "1238.6907292600722"],
[1697023440, "1224.782608695652"],
[1697023500, "1233.720930232558"],
[1697023560, "1231.7460317460318"],
[1697023620, "1235.218636496714"],
[1697023680, "1249.1452991452988"],
[1697023740, "1234.6894311611843"],
[1697023800, "1239.075630252101"],
[1697023860, "1236.10002345071"]
],
"stat": "avg",
"name": "response_size"
}
],
"response_throughput": [
{
"labels": {},
"datapoints": [
[1697023260, "3164.687322664851"],
[1697023320, "3162.203605765669"],
[1697023380, "3165.625563334197"],
[1697023440, "3129.9999999999995"],
[1697023500, "3536.666666666666"],
[1697023560, "3448.8888888888887"],
[1697023620, "3156.688149580342"],
[1697023680, "3247.777777777777"],
[1697023740, "3402.0340459986323"],
[1697023800, "3276.6666666666665"],
[1697023860, "2966.4862783430335"]
],
"name": "response_throughput"
}
],
"tcp_closed": null,
"tcp_opened": null,
"tcp_received": null,
"tcp_sent": null
}

View File

@ -0,0 +1,188 @@
{
"namespace": {
"name": "bookinfo",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"services": [
{
"name": "details",
"namespace": "bookinfo",
"istioSidecar": true,
"cluster": "Kubernetes",
"istioAmbient": false,
"appLabel": true,
"additionalDetailSample": null,
"annotations": null,
"healthAnnotations": {},
"ports": null,
"labels": {
"app": "details",
"service": "details"
},
"selector": {
"app": "details"
},
"istioReferences": [],
"kialiWizard": "",
"serviceRegistry": "Kubernetes",
"health": {
"requests": {
"inbound": {
"http": {
"200": 1.0000222227160604
}
},
"outbound": {},
"healthAnnotations": {}
}
}
},
{
"name": "productpage",
"namespace": "bookinfo",
"istioSidecar": true,
"cluster": "Kubernetes",
"istioAmbient": false,
"appLabel": true,
"additionalDetailSample": null,
"annotations": null,
"healthAnnotations": {},
"ports": null,
"labels": {
"app": "productpage",
"service": "productpage"
},
"selector": {
"app": "productpage"
},
"istioReferences": [
{
"objectType": "VirtualService",
"name": "bookinfo",
"namespace": "bookinfo",
"cluster": ""
},
{
"objectType": "Gateway",
"name": "bookinfo-gateway",
"namespace": "bookinfo",
"cluster": ""
}
],
"kialiWizard": "",
"serviceRegistry": "Kubernetes",
"health": {
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {},
"healthAnnotations": {}
}
}
},
{
"name": "ratings",
"namespace": "bookinfo",
"istioSidecar": true,
"cluster": "Kubernetes",
"istioAmbient": false,
"appLabel": true,
"additionalDetailSample": null,
"annotations": null,
"healthAnnotations": {},
"ports": null,
"labels": {
"app": "ratings",
"service": "ratings"
},
"selector": {
"app": "ratings"
},
"istioReferences": [],
"kialiWizard": "",
"serviceRegistry": "Kubernetes",
"health": {
"requests": {
"inbound": {
"http": {
"200": 0.711111111111111
}
},
"outbound": {},
"healthAnnotations": {}
}
}
},
{
"name": "reviews",
"namespace": "bookinfo",
"istioSidecar": true,
"cluster": "Kubernetes",
"istioAmbient": false,
"appLabel": true,
"additionalDetailSample": null,
"annotations": null,
"healthAnnotations": {},
"ports": null,
"labels": {
"app": "reviews",
"service": "reviews"
},
"selector": {
"app": "reviews"
},
"istioReferences": [],
"kialiWizard": "",
"serviceRegistry": "Kubernetes",
"health": {
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {},
"healthAnnotations": {}
}
}
}
],
"validations": {
"service": {
"details.bookinfo": {
"name": "details",
"objectType": "service",
"valid": true,
"checks": [],
"references": null
},
"productpage.bookinfo": {
"name": "productpage",
"objectType": "service",
"valid": true,
"checks": [],
"references": null
},
"ratings.bookinfo": {
"name": "ratings",
"objectType": "service",
"valid": true,
"checks": [],
"references": null
},
"reviews.bookinfo": {
"name": "reviews",
"objectType": "service",
"valid": true,
"checks": [],
"references": null
}
}
}
}

View File

@ -0,0 +1,352 @@
{
"cluster": "Kubernetes",
"destinationRules": [],
"endpoints": [
{
"addresses": [
{
"kind": "Pod",
"name": "details-v1-698d88b-djqqc",
"ip": "10.244.0.19",
"port": 0
}
],
"ports": [
{
"name": "http",
"protocol": "TCP",
"port": 9080
}
]
}
],
"istioPermissions": {
"create": true,
"update": true,
"delete": true
},
"istioSidecar": true,
"k8sHTTPRoutes": [],
"k8sReferenceGrants": null,
"service": {
"name": "details",
"createdAt": "2024-02-26T09:51:07Z",
"resourceVersion": "847",
"namespace": {
"name": "bookinfo",
"cluster": "",
"isAmbient": false,
"labels": null,
"annotations": null
},
"labels": {
"app": "details",
"service": "details"
},
"selectors": {
"app": "details"
},
"type": "ClusterIP",
"ip": "10.109.148.19",
"ports": [
{
"name": "http",
"protocol": "TCP",
"port": 9080
}
],
"externalName": "",
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"details\",\"service\":\"details\"},\"name\":\"details\",\"namespace\":\"bookinfo\"},\"spec\":{\"ports\":[{\"name\":\"http\",\"port\":9080}],\"selector\":{\"app\":\"details\"}}}\n"
},
"healthAnnotations": {},
"additionalDetails": []
},
"serviceEntries": null,
"virtualServices": [],
"workloads": [
{
"name": "details-v1",
"cluster": "Kubernetes",
"type": "Deployment",
"createdAt": "2024-02-26T09:51:07Z",
"resourceVersion": "24565",
"istioSidecar": true,
"istioAmbient": false,
"additionalDetailSample": null,
"labels": {
"app": "details",
"version": "v1"
},
"appLabel": true,
"versionLabel": true,
"podCount": 1,
"annotations": {
"deployment.kubernetes.io/revision": "1",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"details\",\"version\":\"v1\"},\"name\":\"details-v1\",\"namespace\":\"bookinfo\"},\"spec\":{\"replicas\":1,\"selector\":{\"matchLabels\":{\"app\":\"details\",\"version\":\"v1\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"details\",\"version\":\"v1\"}},\"spec\":{\"containers\":[{\"image\":\"docker.io/istio/examples-bookinfo-details-v1:1.18.0\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"details\",\"ports\":[{\"containerPort\":9080}]}],\"serviceAccountName\":\"bookinfo-details\"}}}}\n"
},
"healthAnnotations": {},
"istioReferences": [],
"dashboardAnnotations": null,
"serviceAccountNames": ["bookinfo-details"],
"health": {
"workloadStatus": null,
"requests": {
"inbound": null,
"outbound": null,
"healthAnnotations": null
}
}
}
],
"health": {
"requests": {
"inbound": {
"http": {
"200": 0.9999999999999999
}
},
"outbound": {},
"healthAnnotations": {}
}
},
"namespaceMTLS": {
"status": "MTLS_NOT_ENABLED",
"autoMTLSEnabled": true,
"minTLS": ""
},
"subServices": [
{
"name": "details",
"namespace": "",
"istioSidecar": false,
"cluster": "",
"istioAmbient": false,
"appLabel": false,
"additionalDetailSample": null,
"annotations": null,
"healthAnnotations": null,
"ports": {
"http": 9080
},
"labels": null,
"selector": null,
"istioReferences": null,
"kialiWizard": "",
"serviceRegistry": "",
"health": {
"requests": {
"inbound": null,
"outbound": null,
"healthAnnotations": null
}
}
}
],
"validations": {
"gateway": {
"bookinfo-gateway.bookinfo": {
"name": "bookinfo-gateway",
"objectType": "gateway",
"valid": true,
"checks": [],
"references": null
}
},
"service": {
"details.bookinfo": {
"name": "details",
"objectType": "service",
"valid": true,
"checks": [],
"references": null
}
},
"virtualservice": {
"bookinfo.bookinfo": {
"name": "bookinfo",
"objectType": "virtualservice",
"valid": true,
"checks": [],
"references": null
}
},
"workload": {
"cars-v1.travel-agency": {
"name": "cars-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"control.travel-control": {
"name": "control",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"details-v1.bookinfo": {
"name": "details-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"discounts-v1.travel-agency": {
"name": "discounts-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"flights-v1.travel-agency": {
"name": "flights-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"grafana.istio-system": {
"name": "grafana",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"hotels-v1.travel-agency": {
"name": "hotels-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"insurances-v1.travel-agency": {
"name": "insurances-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"istio-egressgateway.istio-system": {
"name": "istio-egressgateway",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"istio-ingressgateway.istio-system": {
"name": "istio-ingressgateway",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"istiod.istio-system": {
"name": "istiod",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"jaeger.istio-system": {
"name": "jaeger",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"kiali-traffic-generator.bookinfo": {
"name": "kiali-traffic-generator",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"kiali.istio-system": {
"name": "kiali",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"mysqldb-v1.travel-agency": {
"name": "mysqldb-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"productpage-v1.bookinfo": {
"name": "productpage-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"prometheus.istio-system": {
"name": "prometheus",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"ratings-v1.bookinfo": {
"name": "ratings-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"reviews-v1.bookinfo": {
"name": "reviews-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"reviews-v2.bookinfo": {
"name": "reviews-v2",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"reviews-v3.bookinfo": {
"name": "reviews-v3",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"travels-v1.travel-agency": {
"name": "travels-v1",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"travels.travel-portal": {
"name": "travels",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"viaggi.travel-portal": {
"name": "viaggi",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
},
"voyages.travel-portal": {
"name": "voyages",
"objectType": "workload",
"valid": true,
"checks": [],
"references": null
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More