Parca: Add standalone building configuration (#79896)

* Parca: Decouple frontend

* Parca: decouple backend

* Parca: add standalone build process

* Regenerate cue files

* Fix import

* Trigger CI

* Fix test

* Trigger CI

* Trigger CI
This commit is contained in:
Fabrizio
2024-01-02 16:36:57 +01:00
committed by GitHub
parent fe757f69c5
commit 7746250367
15 changed files with 153 additions and 7 deletions

View File

@@ -97,7 +97,9 @@
{ {
"files": [ "files": [
"public/app/plugins/datasource/grafana-testdata-datasource/*.{ts,tsx}", "public/app/plugins/datasource/grafana-testdata-datasource/*.{ts,tsx}",
"public/app/plugins/datasource/grafana-testdata-datasource/**/*.{ts,tsx}" "public/app/plugins/datasource/grafana-testdata-datasource/**/*.{ts,tsx}",
"public/app/plugins/datasource/parca/*.{ts,tsx}",
"public/app/plugins/datasource/parca/**/*.{ts,tsx}"
], ],
"settings": { "settings": {
"import/resolver": { "import/resolver": {

View File

@@ -56,6 +56,8 @@ deny = [
files = [ files = [
"**/pkg/tsdb/grafana-testdata-datasource/*", "**/pkg/tsdb/grafana-testdata-datasource/*",
"**/pkg/tsdb/grafana-testdata-datasource/**/*", "**/pkg/tsdb/grafana-testdata-datasource/**/*",
"**/pkg/tsdb/parca/*",
"**/pkg/tsdb/parca/**/*",
] ]
[linters-settings.gocritic] [linters-settings.gocritic]

View File

@@ -243,6 +243,7 @@
"@fingerprintjs/fingerprintjs": "^3.4.2", "@fingerprintjs/fingerprintjs": "^3.4.2",
"@glideapps/glide-data-grid": "^5.2.1", "@glideapps/glide-data-grid": "^5.2.1",
"@grafana-plugins/grafana-testdata-datasource": "workspace:*", "@grafana-plugins/grafana-testdata-datasource": "workspace:*",
"@grafana-plugins/parca": "workspace:*",
"@grafana/aws-sdk": "0.3.1", "@grafana/aws-sdk": "0.3.1",
"@grafana/data": "workspace:*", "@grafana/data": "workspace:*",
"@grafana/e2e-selectors": "workspace:*", "@grafana/e2e-selectors": "workspace:*",

View File

@@ -11,7 +11,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "10.3.0-pre"; export const pluginVersion = "%VERSION%";
export type ParcaQueryType = ('metrics' | 'profile' | 'both'); export type ParcaQueryType = ('metrics' | 'profile' | 'both');

View File

@@ -1238,7 +1238,7 @@
"updated": "" "updated": ""
}, },
"dependencies": { "dependencies": {
"grafanaDependency": "", "grafanaDependency": "\u003e=10.3.0-0",
"grafanaVersion": "*", "grafanaVersion": "*",
"plugins": [] "plugins": []
}, },
@@ -1618,7 +1618,7 @@
"updated": "" "updated": ""
}, },
"dependencies": { "dependencies": {
"grafanaDependency": ">=10.3.0-0", "grafanaDependency": "\u003e=10.3.0-0",
"grafanaVersion": "*", "grafanaVersion": "*",
"plugins": [] "plugins": []
}, },

View File

@@ -0,0 +1,38 @@
package main
import (
"context"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/httpclient"
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
"github.com/grafana/grafana/pkg/tsdb/parca"
)
var (
_ backend.QueryDataHandler = (*Datasource)(nil)
_ backend.CheckHealthHandler = (*Datasource)(nil)
_ backend.CallResourceHandler = (*Datasource)(nil)
)
func NewDatasource(context.Context, backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
return &Datasource{
Service: parca.ProvideService(httpclient.NewProvider()),
}, nil
}
type Datasource struct {
Service *parca.Service
}
func (d *Datasource) QueryData(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) {
return d.Service.QueryData(ctx, req)
}
func (d *Datasource) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error {
return d.Service.CallResource(ctx, req, sender)
}
func (d *Datasource) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) {
return d.Service.CheckHealth(ctx, req)
}

View File

@@ -0,0 +1,23 @@
package main
import (
"os"
"github.com/grafana/grafana-plugin-sdk-go/backend/datasource"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
)
func main() {
// Start listening to requests sent from Grafana. This call is blocking so
// it won't finish until Grafana shuts down the process or the plugin choose
// to exit by itself using os.Exit. Manage automatically manages life cycle
// of datasource instances. It accepts datasource instance factory as first
// argument. This factory will be automatically called on incoming request
// from Grafana to create different instances of SampleDatasource (per datasource
// ID). When datasource configuration changed Dispose method will be called and
// new datasource instance created using NewSampleDatasource factory.
if err := datasource.Manage("parca", NewDatasource, datasource.ManageOpts{}); err != nil {
log.DefaultLogger.Error(err.Error())
os.Exit(1)
}
}

View File

@@ -39,8 +39,7 @@ const alertmanagerPlugin = async () =>
await import(/* webpackChunkName: "alertmanagerPlugin" */ 'app/plugins/datasource/alertmanager/module'); await import(/* webpackChunkName: "alertmanagerPlugin" */ 'app/plugins/datasource/alertmanager/module');
const pyroscopePlugin = async () => const pyroscopePlugin = async () =>
await import(/* webpackChunkName: "pyroscopePlugin" */ 'app/plugins/datasource/grafana-pyroscope-datasource/module'); await import(/* webpackChunkName: "pyroscopePlugin" */ 'app/plugins/datasource/grafana-pyroscope-datasource/module');
const parcaPlugin = async () => const parcaPlugin = async () => await import(/* webpackChunkName: "parcaPlugin" */ '@grafana-plugins/parca/module');
await import(/* webpackChunkName: "parcaPlugin" */ 'app/plugins/datasource/parca/module');
import * as alertGroupsPanel from 'app/plugins/panel/alertGroups/module'; import * as alertGroupsPanel from 'app/plugins/panel/alertGroups/module';
import * as alertListPanel from 'app/plugins/panel/alertlist/module'; import * as alertListPanel from 'app/plugins/panel/alertlist/module';

View File

@@ -0,0 +1 @@
# Changelog

View File

@@ -0,0 +1,3 @@
# Grafana Parca data source
Grafana plugin for the Parca data source.

View File

@@ -0,0 +1,37 @@
{
"name": "@grafana-plugins/parca",
"description": "Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability.",
"private": true,
"version": "10.3.0-pre",
"dependencies": {
"@emotion/css": "11.11.2",
"@grafana/data": "10.3.0-pre",
"@grafana/runtime": "10.3.0-pre",
"@grafana/schema": "10.3.0-pre",
"@grafana/ui": "10.3.0-pre",
"lodash": "4.17.21",
"monaco-editor": "0.34.0",
"react": "18.2.0",
"react-use": "17.4.0",
"rxjs": "7.8.1",
"tslib": "2.6.0"
},
"devDependencies": {
"@grafana/plugin-configs": "10.3.0-pre",
"@testing-library/react": "14.0.0",
"@testing-library/user-event": "14.5.1",
"@types/lodash": "4.14.195",
"@types/react": "18.2.15",
"ts-node": "10.9.1",
"webpack": "5.89.0"
},
"peerDependencies": {
"@grafana/runtime": "*"
},
"scripts": {
"build": "webpack -c ./webpack.config.ts --env production",
"build:commit": "webpack -c ./webpack.config.ts --env production --env commit=$(git rev-parse --short HEAD)",
"dev": "webpack -w -c ./webpack.config.ts --env development"
},
"packageManager": "yarn@3.6.0"
}

View File

@@ -2,6 +2,7 @@
"type": "datasource", "type": "datasource",
"name": "Parca", "name": "Parca",
"id": "parca", "id": "parca",
"executable": "gpx_parca",
"category": "profiling", "category": "profiling",
"metrics": true, "metrics": true,
"backend": true, "backend": true,
@@ -21,6 +22,10 @@
"name": "GitHub Project", "name": "GitHub Project",
"url": "https://github.com/parca-dev/parca" "url": "https://github.com/parca-dev/parca"
} }
] ],
"version": "%VERSION%"
},
"dependencies": {
"grafanaDependency": ">=10.3.0-0"
} }
} }

View File

@@ -0,0 +1,4 @@
{
"extends": "@grafana/plugin-configs/tsconfig.json",
"include": ["."]
}

View File

@@ -0,0 +1,3 @@
import config from '@grafana/plugin-configs/webpack.config';
export default config;

View File

@@ -2893,6 +2893,33 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@grafana-plugins/parca@workspace:*, @grafana-plugins/parca@workspace:public/app/plugins/datasource/parca":
version: 0.0.0-use.local
resolution: "@grafana-plugins/parca@workspace:public/app/plugins/datasource/parca"
dependencies:
"@emotion/css": "npm:11.11.2"
"@grafana/data": "npm:10.3.0-pre"
"@grafana/plugin-configs": "npm:10.3.0-pre"
"@grafana/runtime": "npm:10.3.0-pre"
"@grafana/schema": "npm:10.3.0-pre"
"@grafana/ui": "npm:10.3.0-pre"
"@testing-library/react": "npm:14.0.0"
"@testing-library/user-event": "npm:14.5.1"
"@types/lodash": "npm:4.14.195"
"@types/react": "npm:18.2.15"
lodash: "npm:4.17.21"
monaco-editor: "npm:0.34.0"
react: "npm:18.2.0"
react-use: "npm:17.4.0"
rxjs: "npm:7.8.1"
ts-node: "npm:10.9.1"
tslib: "npm:2.6.0"
webpack: "npm:5.89.0"
peerDependencies:
"@grafana/runtime": "*"
languageName: unknown
linkType: soft
"@grafana/async-query-data@npm:0.1.4": "@grafana/async-query-data@npm:0.1.4":
version: 0.1.4 version: 0.1.4
resolution: "@grafana/async-query-data@npm:0.1.4" resolution: "@grafana/async-query-data@npm:0.1.4"
@@ -17303,6 +17330,7 @@ __metadata:
"@fingerprintjs/fingerprintjs": "npm:^3.4.2" "@fingerprintjs/fingerprintjs": "npm:^3.4.2"
"@glideapps/glide-data-grid": "npm:^5.2.1" "@glideapps/glide-data-grid": "npm:^5.2.1"
"@grafana-plugins/grafana-testdata-datasource": "workspace:*" "@grafana-plugins/grafana-testdata-datasource": "workspace:*"
"@grafana-plugins/parca": "workspace:*"
"@grafana/aws-sdk": "npm:0.3.1" "@grafana/aws-sdk": "npm:0.3.1"
"@grafana/data": "workspace:*" "@grafana/data": "workspace:*"
"@grafana/e2e-selectors": "workspace:*" "@grafana/e2e-selectors": "workspace:*"