diff --git a/charts/chainlink-cluster/dashboard/cmd/deploy.go b/charts/chainlink-cluster/dashboard/cmd/deploy.go index 9eb89ae3bd2..cb0778ca0de 100644 --- a/charts/chainlink-cluster/dashboard/cmd/deploy.go +++ b/charts/chainlink-cluster/dashboard/cmd/deploy.go @@ -4,6 +4,7 @@ import ( "github.com/K-Phoen/grabana/dashboard" lib "github.com/smartcontractkit/chainlink/dashboard-lib/lib" core_don "github.com/smartcontractkit/chainlink/dashboard-lib/lib/core-don" + core_ocrv2_ccip "github.com/smartcontractkit/chainlink/dashboard-lib/lib/core-ocrv2-ccip" k8spods "github.com/smartcontractkit/chainlink/dashboard-lib/lib/k8s-pods" waspdb "github.com/smartcontractkit/wasp/dashboard" ) @@ -28,6 +29,22 @@ func main() { }, ), ) + db.Add( + core_ocrv2_ccip.New( + core_ocrv2_ccip.Props{ + PrometheusDataSource: cfg.DataSources.Prometheus, + PluginName: "CCIPCommit", + }, + ), + ) + db.Add( + core_ocrv2_ccip.New( + core_ocrv2_ccip.Props{ + PrometheusDataSource: cfg.DataSources.Prometheus, + PluginName: "CCIPExecution", + }, + ), + ) if cfg.Platform == "kubernetes" { db.Add( k8spods.New( diff --git a/charts/chainlink-cluster/dashboard/tests/.gitignore b/charts/chainlink-cluster/dashboard/tests/.gitignore deleted file mode 100644 index eecb65f23fd..00000000000 --- a/charts/chainlink-cluster/dashboard/tests/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules/ -/test-results/ -/playwright-report/ -/blob-report/ -/playwright/.cache/ -.github/ diff --git a/charts/chainlink-cluster/dashboard/tests/package.json b/charts/chainlink-cluster/dashboard/tests/package.json deleted file mode 100644 index 3d4ecdd6d69..00000000000 --- a/charts/chainlink-cluster/dashboard/tests/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "tests", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": {}, - "keywords": [], - "author": "", - "license": "ISC", - "devDependencies": { - "@playwright/test": "^1.42.1", - "@types/node": "^20.11.25" - }, - "dependencies": { - "dashboard-tests": "^1.0.0" - } -} diff --git a/charts/chainlink-cluster/dashboard/tests/playwright.config.ts b/charts/chainlink-cluster/dashboard/tests/playwright.config.ts deleted file mode 100644 index 7af47550407..00000000000 --- a/charts/chainlink-cluster/dashboard/tests/playwright.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { defineConfig, devices } from '@playwright/test'; - -/** - * See https://playwright.dev/docs/test-configuration. - */ -export default defineConfig({ - testDir: './specs', - /* Run tests in files in parallel */ - fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 1 : undefined, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: 'html', - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - /* Base URL to use in actions like `await page.goto('/')`. */ - // baseURL: '', - - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: 'on-first-retry', - }, - - projects: [ - { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, - }, - ], -}); diff --git a/charts/chainlink-cluster/dashboard/tests/pnpm-lock.yaml b/charts/chainlink-cluster/dashboard/tests/pnpm-lock.yaml deleted file mode 100644 index 4f7f1d277eb..00000000000 --- a/charts/chainlink-cluster/dashboard/tests/pnpm-lock.yaml +++ /dev/null @@ -1,57 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -devDependencies: - '@playwright/test': - specifier: ^1.42.1 - version: 1.42.1 - '@types/node': - specifier: ^20.11.25 - version: 20.11.25 - -packages: - - /@playwright/test@1.42.1: - resolution: {integrity: sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==} - engines: {node: '>=16'} - hasBin: true - dependencies: - playwright: 1.42.1 - dev: true - - /@types/node@20.11.25: - resolution: {integrity: sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==} - dependencies: - undici-types: 5.26.5 - dev: true - - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /playwright-core@1.42.1: - resolution: {integrity: sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==} - engines: {node: '>=16'} - hasBin: true - dev: true - - /playwright@1.42.1: - resolution: {integrity: sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==} - engines: {node: '>=16'} - hasBin: true - dependencies: - playwright-core: 1.42.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true diff --git a/dashboard/README.md b/dashboard/README.md index 97c25acf00f..b77d68df73d 100644 --- a/dashboard/README.md +++ b/dashboard/README.md @@ -8,10 +8,8 @@ dashboard |- lib |- component_1 |- component.go - |- component.spec.ts |- component_2 |- component.go - |- component.spec.ts |- go.mod |- go.sum ``` @@ -20,8 +18,6 @@ Each component should contain rows, logic and unique variables in `component.go` Components should be imported from this module, see [example](../charts/chainlink-cluster/dashboard/cmd/deploy.go) -`component.spec.ts` is a Playwright test step that can be used when testing project [dashboards](../charts/chainlink-cluster/dashboard/tests/specs/core-don.spec.ts) - ## How to convert from JSON using Grabana codegen utility 1. Download Grabana binary [here](https://github.com/K-Phoen/grabana/releases) 2. ./bin/grabana convert-go -i dashboard.json > lib/my_new_component/rows.go diff --git a/dashboard/index.ts b/dashboard/index.ts deleted file mode 100644 index 60cccebf00e..00000000000 --- a/dashboard/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export {testCoreDonComponentStep} from "./lib/core-don/component.spec" -export {testK8sPodsComponentStep} from "./lib/k8s-pods/component.spec" -export {selectors} from "@grafana/e2e-selectors" diff --git a/dashboard/lib/core-don/component.go b/dashboard/lib/core-don/component.go index 421ee2ff19d..24173fb6cc9 100644 --- a/dashboard/lib/core-don/component.go +++ b/dashboard/lib/core-don/component.go @@ -159,108 +159,185 @@ func logPollerRow(p Props) []dashboard.Option { return []dashboard.Option{ dashboard.Row("LogPoller", row.Collapse(), + row.WithStat( + "Goroutines", + stat.DataSource(p.PrometheusDataSource), + stat.Text(stat.TextValueAndName), + stat.Orientation(stat.OrientationAuto), + stat.Height("200px"), + stat.TitleFontSize(30), + stat.ValueFontSize(30), + stat.Span(6), + stat.Text("Goroutines"), + stat.WithPrometheusTarget( + `count(count by (evmChainID) (log_poller_query_duration_sum{job=~"$instance"}))`, + prometheus.Legend("Goroutines"), + ), + ), row.WithTimeSeries( - "LogPoller RPS", - timeseries.Span(4), + "RPS", + timeseries.Span(6), timeseries.Height("200px"), timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("requests"), + ), timeseries.WithPrometheusTarget( - `avg(sum(rate(log_poller_query_duration_count{`+p.PlatformOpts.LabelQuery+`evmChainID=~"$evmChainID"}[$__rate_interval])) by (query, `+p.PlatformOpts.LabelFilter+`)) by (query)`, - prometheus.Legend("{{query}}"), + `avg by (query) (sum by (query, job) (rate(log_poller_query_duration_count{job=~"$instance", evmChainID=~"$evmChainID"}[$__rate_interval])))`, + prometheus.Legend("{{query}} - {{job}}"), ), timeseries.WithPrometheusTarget( - `avg(sum(rate(log_poller_query_duration_count{`+p.PlatformOpts.LabelFilter+`=~"$instance", evmChainID=~"$evmChainID"}[$__rate_interval]))) by (`+p.PlatformOpts.LabelFilter+`)`, + `avg (sum by(job) (rate(log_poller_query_duration_count{job=~"$instance", evmChainID=~"$evmChainID"}[$__rate_interval])))`, prometheus.Legend("Total"), ), ), row.WithTimeSeries( - "LogPoller Logs Number Returned", - timeseries.Span(4), + "RPS by type", + timeseries.Span(6), timeseries.Height("200px"), timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("requests"), + ), timeseries.WithPrometheusTarget( - `log_poller_query_dataset_size{`+p.PlatformOpts.LabelQuery+`evmChainID=~"$evmChainID"}`, - prometheus.Legend("{{query}} : {{type}}"), + `avg by (type) (sum by (type, job) (rate(log_poller_query_duration_count{job=~"$instance", evmChainID=~"$evmChainID"}[$__rate_interval])))`, ), ), row.WithTimeSeries( - "LogPoller Average Logs Number Returned", - timeseries.Span(4), + "Avg number of logs returned", + timeseries.Span(6), timeseries.Height("200px"), timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("logs"), + ), timeseries.WithPrometheusTarget( - `avg(log_poller_query_dataset_size{`+p.PlatformOpts.LabelQuery+`evmChainID=~"$evmChainID"}) by (query)`, - prometheus.Legend("{{query}}"), + `avg by (query) (log_poller_query_dataset_size{job=~"$instance", evmChainID=~"$evmChainID"})`, + prometheus.Legend("{{query}} - {{job}}"), ), ), row.WithTimeSeries( - "LogPoller Max Logs Number Returned", - timeseries.Span(4), + "Max number of logs returned", + timeseries.Span(6), timeseries.Height("200px"), timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("logs"), + ), timeseries.WithPrometheusTarget( - `max(log_poller_query_dataset_size{`+p.PlatformOpts.LabelQuery+`evmChainID=~"$evmChainID"}) by (query)`, - prometheus.Legend("{{query}}"), + `max by (query) (log_poller_query_dataset_size{job=~"$instance", evmChainID=~"$evmChainID"})`, + prometheus.Legend("{{query}} - {{job}}"), ), ), row.WithTimeSeries( - "LogPoller Logs Number Returned by Chain", - timeseries.Span(4), + "Logs returned by chain", + timeseries.Span(6), timeseries.Height("200px"), timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("logs"), + ), timeseries.WithPrometheusTarget( - `max(log_poller_query_dataset_size{`+p.PlatformOpts.LabelQuery+`}) by (evmChainID)`, + `max by (evmChainID) (log_poller_query_dataset_size{job=~"$instance", evmChainID=~"$evmChainID"})`, prometheus.Legend("{{evmChainID}}"), ), ), row.WithTimeSeries( - "LogPoller Queries Duration Avg", - timeseries.Span(4), + "Queries duration by type (0.5 perc)", + timeseries.Span(6), timeseries.Height("200px"), timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("ms"), + ), timeseries.WithPrometheusTarget( - `(sum(rate(log_poller_query_duration_sum{`+p.PlatformOpts.LabelQuery+`evmChainID=~"$evmChainID"}[$__rate_interval])) by (query) / sum(rate(log_poller_query_duration_count{`+p.PlatformOpts.LabelQuery+`}[$__rate_interval])) by (query)) / 1e6`, + `histogram_quantile(0.5, sum(rate(log_poller_query_duration_bucket{job=~"$instance", evmChainID=~"$evmChainID"}[$__rate_interval])) by (le, query)) / 1e6`, prometheus.Legend("{{query}}"), ), ), row.WithTimeSeries( - "LogPoller Queries Duration p99", - timeseries.Span(4), + "queries duration by type (0.9 perc)", + timeseries.Span(6), timeseries.Height("200px"), timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("ms"), + ), timeseries.WithPrometheusTarget( - `histogram_quantile(0.99, sum(rate(log_poller_query_duration_bucket{`+p.PlatformOpts.LabelQuery+`evmChainID=~"$evmChainID"}[$__rate_interval])) by (le, query)) / 1e6`, + `histogram_quantile(0.9, sum(rate(log_poller_query_duration_bucket{job=~"$instance", evmChainID=~"$evmChainID"}[$__rate_interval])) by (le, query)) / 1e6`, prometheus.Legend("{{query}}"), ), ), row.WithTimeSeries( - "LogPoller Queries Duration p95", - timeseries.Span(4), + "Queries duration by type (0.99 perc)", + timeseries.Span(6), timeseries.Height("200px"), timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("ms"), + ), timeseries.WithPrometheusTarget( - `histogram_quantile(0.95, sum(rate(log_poller_query_duration_bucket{`+p.PlatformOpts.LabelQuery+`evmChainID=~"$evmChainID"}[$__rate_interval])) by (le, query)) / 1e6`, + `histogram_quantile(0.99, sum(rate(log_poller_query_duration_bucket{job=~"$instance", evmChainID=~"$evmChainID"}[$__rate_interval])) by (le, query)) / 1e6`, prometheus.Legend("{{query}}"), ), ), row.WithTimeSeries( - "LogPoller Queries Duration p90", - timeseries.Span(4), + "Queries duration by chain (0.99 perc)", + timeseries.Span(6), timeseries.Height("200px"), timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("ms"), + ), timeseries.WithPrometheusTarget( - `histogram_quantile(0.95, sum(rate(log_poller_query_duration_bucket{`+p.PlatformOpts.LabelQuery+`evmChainID=~"$evmChainID"}[$__rate_interval])) by (le, query)) / 1e6`, + `histogram_quantile(0.99, sum(rate(log_poller_query_duration_bucket{job=~"$instance", evmChainID=~"$evmChainID"}[$__rate_interval])) by (le, evmChainID)) / 1e6`, prometheus.Legend("{{query}}"), ), ), row.WithTimeSeries( - "LogPoller Queries Duration Median", - timeseries.Span(4), + "Number of logs inserted", + timeseries.Span(6), timeseries.Height("200px"), timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("logs"), + ), timeseries.WithPrometheusTarget( - `histogram_quantile(0.5, sum(rate(log_poller_query_duration_bucket{`+p.PlatformOpts.LabelQuery+`evmChainID=~"$evmChainID"}[$__rate_interval])) by (le, query)) / 1e6`, - prometheus.Legend("{{query}}"), + `avg by (evmChainID) (log_poller_logs_inserted{job=~"$instance", evmChainID=~"$evmChainID"})`, + prometheus.Legend("{{evmChainID}}"), + ), + ), + row.WithTimeSeries( + "Logs insertion rate", + timeseries.Span(6), + timeseries.Height("200px"), + timeseries.DataSource(p.PrometheusDataSource), + timeseries.WithPrometheusTarget( + `avg by (evmChainID) (rate(log_poller_logs_inserted{job=~"$instance", evmChainID=~"$evmChainID"}[$__rate_interval]))`, + prometheus.Legend("{{evmChainID}}"), + ), + ), + row.WithTimeSeries( + "Number of blocks inserted", + timeseries.Span(6), + timeseries.Height("200px"), + timeseries.DataSource(p.PrometheusDataSource), + timeseries.Axis( + axis.Unit("blocks"), + ), + timeseries.WithPrometheusTarget( + `avg by (evmChainID) (log_poller_blocks_inserted{job=~"$instance", evmChainID=~"$evmChainID"})`, + prometheus.Legend("{{evmChainID}}"), + ), + ), + row.WithTimeSeries( + "Blocks insertion rate", + timeseries.Span(6), + timeseries.Height("200px"), + timeseries.DataSource(p.PrometheusDataSource), + timeseries.WithPrometheusTarget( + `avg by (evmChainID) (rate(log_poller_blocks_inserted{job=~"$instance", evmChainID=~"$evmChainID"}[$__rate_interval]))`, + prometheus.Legend("{{evmChainID}}"), ), ), ), diff --git a/dashboard/lib/core-don/component.spec.ts b/dashboard/lib/core-don/component.spec.ts deleted file mode 100644 index 3b53070bd1a..00000000000 --- a/dashboard/lib/core-don/component.spec.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {expect} from '@playwright/test'; -import chalk from 'chalk'; - - -export const testCoreDonComponentStep = async ({page}) => { - console.log(chalk.green('Core DON Component Step')); - // TODO: authorize and write tests - await page.goto('/'); - await expect(page).toHaveTitle(/Grafana/); -} \ No newline at end of file diff --git a/dashboard/lib/core-don/platform.go b/dashboard/lib/core-don/platform.go index 3abe16219c7..fbfed548146 100644 --- a/dashboard/lib/core-don/platform.go +++ b/dashboard/lib/core-don/platform.go @@ -22,10 +22,6 @@ func PlatformPanelOpts(platform string) PlatformOpts { switch platform { case "kubernetes": po.LabelFilters = map[string]string{ - // TODO: sometimes I can see my PodMonitor selector, sometimes I don't - // TODO: is it prometheus-operator issue or do we really need "job" selector for k8s? - // TODO: works without it - //"job": `=~"${instance}"`, "namespace": `=~"${namespace}"`, "pod": `=~"${pod}"`, } diff --git a/dashboard/lib/core-ocrv2-ccip/component.go b/dashboard/lib/core-ocrv2-ccip/component.go new file mode 100644 index 00000000000..837f693fcc7 --- /dev/null +++ b/dashboard/lib/core-ocrv2-ccip/component.go @@ -0,0 +1,83 @@ +package core_ocrv2_ccip + +import ( + "fmt" + "github.com/K-Phoen/grabana/dashboard" + "github.com/K-Phoen/grabana/row" + "github.com/K-Phoen/grabana/target/prometheus" + "github.com/K-Phoen/grabana/timeseries" +) + +type Props struct { + PrometheusDataSource string + PluginName string +} + +func quantileRowOpts(ds string, pluginName string, perc string) row.Option { + return row.WithTimeSeries( + fmt.Sprintf("(%s) OCR2 duration (%s)", pluginName, perc), + timeseries.Span(6), + timeseries.Height("200px"), + timeseries.DataSource(ds), + timeseries.WithPrometheusTarget( + fmt.Sprintf(`histogram_quantile(%s, sum(rate(ocr2_reporting_plugin_observation_time_bucket{plugin="%s", job=~"$instance", chainID=~"$evmChainID"}[$__rate_interval])) by (le)) / 1e9`, perc, pluginName), + prometheus.Legend("Observation"), + ), + timeseries.WithPrometheusTarget( + fmt.Sprintf(`histogram_quantile(%s, sum(rate(ocr2_reporting_plugin_report_time_bucket{plugin="%s", job=~"$instance", chainID=~"$evmChainID"}[$__rate_interval])) by (le)) / 1e9`, perc, pluginName), + prometheus.Legend("Report"), + ), + timeseries.WithPrometheusTarget( + fmt.Sprintf(`histogram_quantile(%s, sum(rate(ocr2_reporting_plugin_should_accept_finalized_report_time_bucket{plugin="%s", job=~"$instance", chainID=~"$evmChainID"}[$__rate_interval])) by (le)) / 1e9`, perc, pluginName), + prometheus.Legend("ShouldAcceptFinalizedReport"), + ), + timeseries.WithPrometheusTarget( + fmt.Sprintf(`histogram_quantile(%s, sum(rate(ocr2_reporting_plugin_should_transmit_accepted_report_time_bucket{plugin="%s", job=~"$instance", chainID=~"$evmChainID"}[$__rate_interval])) by (le)) / 1e9`, perc, pluginName), + prometheus.Legend("ShouldTransmitAcceptedReport"), + ), + ) +} + +func ocrv2PluginObservationStageQuantiles(p Props) []dashboard.Option { + opts := make([]row.Option, 0) + opts = append(opts, + row.Collapse(), + row.WithTimeSeries( + fmt.Sprintf("(%s) OCR2 RPS by phase", p.PluginName), + timeseries.Span(6), + timeseries.Height("200px"), + timeseries.DataSource(p.PrometheusDataSource), + timeseries.WithPrometheusTarget( + fmt.Sprintf(`sum(rate(ocr2_reporting_plugin_observation_time_count{plugin="%s", job=~"$instance", chainID=~"$evmChainID"}[$__range]))`, p.PluginName), + prometheus.Legend("Observation"), + ), + timeseries.WithPrometheusTarget( + fmt.Sprintf(`sum(rate(ocr2_reporting_plugin_report_time_count{plugin="%s", job=~"$instance", chainID=~"$evmChainID"}[$__range]))`, p.PluginName), + prometheus.Legend("Report"), + ), + timeseries.WithPrometheusTarget( + fmt.Sprintf(`sum(rate(ocr2_reporting_plugin_should_accept_finalized_report_time_count{plugin="%s", job=~"$instance", chainID=~"$evmChainID"}[$__range]))`, p.PluginName), + prometheus.Legend("ShouldAcceptFinalizedReport"), + ), + timeseries.WithPrometheusTarget( + fmt.Sprintf(`sum(rate(ocr2_reporting_plugin_should_transmit_accepted_report_time_count{plugin="%s", job=~"$instance", chainID=~"$evmChainID"}[$__range]))`, p.PluginName), + prometheus.Legend("ShouldTransmitAcceptedReport"), + ), + ), + quantileRowOpts(p.PrometheusDataSource, p.PluginName, "0.5"), + quantileRowOpts(p.PrometheusDataSource, p.PluginName, "0.9"), + quantileRowOpts(p.PrometheusDataSource, p.PluginName, "0.99"), + ) + return []dashboard.Option{ + dashboard.Row( + fmt.Sprintf("OCRv2 Metrics - Plugin: %s", p.PluginName), + opts..., + ), + } +} + +func New(p Props) []dashboard.Option { + opts := make([]dashboard.Option, 0) + opts = append(opts, ocrv2PluginObservationStageQuantiles(p)...) + return opts +} diff --git a/dashboard/lib/k8s-pods/component.spec.ts b/dashboard/lib/k8s-pods/component.spec.ts deleted file mode 100644 index fa7e7bbe3b8..00000000000 --- a/dashboard/lib/k8s-pods/component.spec.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {expect} from '@playwright/test'; -import chalk from "chalk"; - -export const testK8sPodsComponentStep = async ({page}) => { - console.log(chalk.green('K8s Pods Component Step')); - // TODO: authorize and write tests - await page.goto('/'); - await expect(page).toHaveTitle(/Grafana/); -} diff --git a/dashboard/package.json b/dashboard/package.json deleted file mode 100644 index cebce188b2b..00000000000 --- a/dashboard/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "dashboard-tests", - "version": "1.0.0", - "description": "", - "main": "index.ts", - "scripts": {}, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "@grafana/e2e-selectors": "^10.4.0", - "chalk": "^4.1.2" - } -} diff --git a/dashboard/pnpm-lock.yaml b/dashboard/pnpm-lock.yaml deleted file mode 100644 index 876ea9d13b3..00000000000 --- a/dashboard/pnpm-lock.yaml +++ /dev/null @@ -1,75 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@grafana/e2e-selectors': - specifier: ^10.4.0 - version: 10.4.0 - chalk: - specifier: ^4.1.2 - version: 4.1.2 - -packages: - - /@grafana/e2e-selectors@10.4.0: - resolution: {integrity: sha512-8IWK8Yi0POh/3NMIUHjB9AbxCA+uKFMbYmQ7cJWT+qyjYl+82DQQPob/MTfzVGzWWIPYo4Ur7QSAP1dPgMVs8g==} - dependencies: - '@grafana/tsconfig': 1.2.0-rc1 - tslib: 2.6.2 - typescript: 5.3.3 - dev: false - - /@grafana/tsconfig@1.2.0-rc1: - resolution: {integrity: sha512-+SgQeBQ1pT6D/E3/dEdADqTrlgdIGuexUZ8EU+8KxQFKUeFeU7/3z/ayI2q/wpJ/Kr6WxBBNlrST6aOKia19Ag==} - dev: false - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: false - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: false - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: false - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: false - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: false - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false - - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: false