From 5c9d1ea91b114e9468069d2b6dab2410fcfd277d Mon Sep 17 00:00:00 2001 From: Mark Goodwin Date: Fri, 7 Jun 2019 12:53:58 +1000 Subject: [PATCH] update to upstream release 6.2.2, split out built-in datasources as subpackages --- .gitignore | 2 + 000-go-test-fixes.patch | 141 -- 001-login-oauth-use-oauth2-exchange.patch | 13 + 001-man-pages.patch | 219 --- ...g.patch => 002-remove-jaeger-tracing.patch | 8 +- 002-update-golang-oauth2-vendor-sources.patch | 26 - 003-file-mode-updates.patch | 27 - 003-new-files.patch | 1627 +++++++++++++++++ 004-grafana.ini-for-Linux-distros.patch | 616 ------- ...ve-RPM-spec-and-webpack-build-script.patch | 609 ------ grafana.spec | 238 ++- make_webpack.sh => make_grafana_webpack.sh | 0 sources | 4 +- 13 files changed, 1863 insertions(+), 1667 deletions(-) delete mode 100644 000-go-test-fixes.patch create mode 100644 001-login-oauth-use-oauth2-exchange.patch delete mode 100644 001-man-pages.patch rename 005-remove-jaeger-tracing.patch => 002-remove-jaeger-tracing.patch (96%) delete mode 100644 002-update-golang-oauth2-vendor-sources.patch delete mode 100644 003-file-mode-updates.patch create mode 100644 003-new-files.patch delete mode 100644 004-grafana.ini-for-Linux-distros.patch delete mode 100644 006-native-RPM-spec-and-webpack-build-script.patch rename make_webpack.sh => make_grafana_webpack.sh (100%) diff --git a/.gitignore b/.gitignore index 4932342..a533fb5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ /grafana_webpack-6.1.4.tar.gz /grafana-6.1.6.tar.gz /grafana_webpack-6.1.6.tar.gz +/grafana-6.2.2.tar.gz +/grafana_webpack-6.2.2.tar.gz diff --git a/000-go-test-fixes.patch b/000-go-test-fixes.patch deleted file mode 100644 index b8a9e82..0000000 --- a/000-go-test-fixes.patch +++ /dev/null @@ -1,141 +0,0 @@ -diff --git a/pkg/tsdb/azuremonitor/azuremonitor-datasource_test.go b/pkg/tsdb/azuremonitor/azuremonitor-datasource_test.go -index b8d1d6cc2..39cfe3f76 100644 ---- a/pkg/tsdb/azuremonitor/azuremonitor-datasource_test.go -+++ b/pkg/tsdb/azuremonitor/azuremonitor-datasource_test.go -@@ -107,19 +107,19 @@ func TestAzureMonitorDatasource(t *testing.T) { - So(len(res.Series[0].Points), ShouldEqual, 5) - - So(res.Series[0].Points[0][0].Float64, ShouldEqual, 2.0875) -- So(res.Series[0].Points[0][1].Float64, ShouldEqual, 1549620780000) -+ So(res.Series[0].Points[0][1].Float64, ShouldEqual, int64(1549620780000)) - - So(res.Series[0].Points[1][0].Float64, ShouldEqual, 2.1525) -- So(res.Series[0].Points[1][1].Float64, ShouldEqual, 1549620840000) -+ So(res.Series[0].Points[1][1].Float64, ShouldEqual, int64(1549620840000)) - - So(res.Series[0].Points[2][0].Float64, ShouldEqual, 2.155) -- So(res.Series[0].Points[2][1].Float64, ShouldEqual, 1549620900000) -+ So(res.Series[0].Points[2][1].Float64, ShouldEqual, int64(1549620900000)) - - So(res.Series[0].Points[3][0].Float64, ShouldEqual, 3.6925) -- So(res.Series[0].Points[3][1].Float64, ShouldEqual, 1549620960000) -+ So(res.Series[0].Points[3][1].Float64, ShouldEqual, int64(1549620960000)) - - So(res.Series[0].Points[4][0].Float64, ShouldEqual, 2.44) -- So(res.Series[0].Points[4][1].Float64, ShouldEqual, 1549621020000) -+ So(res.Series[0].Points[4][1].Float64, ShouldEqual, int64(1549621020000)) - }) - - Convey("when data from query aggregated as total to one time series", func() { -@@ -139,7 +139,7 @@ func TestAzureMonitorDatasource(t *testing.T) { - So(err, ShouldBeNil) - - So(res.Series[0].Points[0][0].Float64, ShouldEqual, 8.26) -- So(res.Series[0].Points[0][1].Float64, ShouldEqual, 1549718940000) -+ So(res.Series[0].Points[0][1].Float64, ShouldEqual, int64(1549718940000)) - }) - - Convey("when data from query aggregated as maximum to one time series", func() { -@@ -159,7 +159,7 @@ func TestAzureMonitorDatasource(t *testing.T) { - So(err, ShouldBeNil) - - So(res.Series[0].Points[0][0].Float64, ShouldEqual, 3.07) -- So(res.Series[0].Points[0][1].Float64, ShouldEqual, 1549722360000) -+ So(res.Series[0].Points[0][1].Float64, ShouldEqual, int64(1549722360000)) - }) - - Convey("when data from query aggregated as minimum to one time series", func() { -@@ -179,7 +179,7 @@ func TestAzureMonitorDatasource(t *testing.T) { - So(err, ShouldBeNil) - - So(res.Series[0].Points[0][0].Float64, ShouldEqual, 1.51) -- So(res.Series[0].Points[0][1].Float64, ShouldEqual, 1549723380000) -+ So(res.Series[0].Points[0][1].Float64, ShouldEqual, int64(1549723380000)) - }) - - Convey("when data from query aggregated as Count to one time series", func() { -@@ -199,7 +199,7 @@ func TestAzureMonitorDatasource(t *testing.T) { - So(err, ShouldBeNil) - - So(res.Series[0].Points[0][0].Float64, ShouldEqual, 4) -- So(res.Series[0].Points[0][1].Float64, ShouldEqual, 1549723440000) -+ So(res.Series[0].Points[0][1].Float64, ShouldEqual, int64(1549723440000)) - }) - - Convey("when data from query aggregated as total and has dimension filter", func() { -diff --git a/pkg/tsdb/mssql/mssql_test.go b/pkg/tsdb/mssql/mssql_test.go -index c3d447060..cc27304fc 100644 ---- a/pkg/tsdb/mssql/mssql_test.go -+++ b/pkg/tsdb/mssql/mssql_test.go -@@ -162,7 +162,7 @@ func TestMSSQL(t *testing.T) { - So(column[19].(time.Time), ShouldEqual, dt.Truncate(time.Minute)) - So(column[20].(time.Time), ShouldEqual, dt.Truncate(24*time.Hour)) - So(column[21].(time.Time), ShouldEqual, time.Date(1, 1, 1, dt.Hour(), dt.Minute(), dt.Second(), dt.Nanosecond(), time.UTC)) -- So(column[22].(time.Time), ShouldEqual, dt2.In(time.FixedZone("UTC", int(-7*time.Hour)))) -+ So(column[22].(time.Time), ShouldEqual, dt2.In(time.FixedZone("UTC-7", int(-7*60*60)))) - }) - }) - -diff --git a/pkg/tsdb/stackdriver/stackdriver_test.go b/pkg/tsdb/stackdriver/stackdriver_test.go -index 78c3086a9..1ab1e099f 100644 ---- a/pkg/tsdb/stackdriver/stackdriver_test.go -+++ b/pkg/tsdb/stackdriver/stackdriver_test.go -@@ -236,13 +236,13 @@ func TestStackdriver(t *testing.T) { - - Convey("timestamps should be in ascending order", func() { - So(res.Series[0].Points[0][0].Float64, ShouldEqual, 0.05) -- So(res.Series[0].Points[0][1].Float64, ShouldEqual, 1536670020000) -+ So(res.Series[0].Points[0][1].Float64, ShouldEqual, int64(1536670020000)) - - So(res.Series[0].Points[1][0].Float64, ShouldEqual, 1.05) -- So(res.Series[0].Points[1][1].Float64, ShouldEqual, 1536670080000) -+ So(res.Series[0].Points[1][1].Float64, ShouldEqual, int64(1536670080000)) - - So(res.Series[0].Points[2][0].Float64, ShouldEqual, 1.0666666666667) -- So(res.Series[0].Points[2][1].Float64, ShouldEqual, 1536670260000) -+ So(res.Series[0].Points[2][1].Float64, ShouldEqual, int64(1536670260000)) - }) - }) - -@@ -365,9 +365,9 @@ func TestStackdriver(t *testing.T) { - } - - Convey("timestamps should be in ascending order", func() { -- So(res.Series[0].Points[0][1].Float64, ShouldEqual, 1536668940000) -- So(res.Series[0].Points[1][1].Float64, ShouldEqual, 1536669000000) -- So(res.Series[0].Points[2][1].Float64, ShouldEqual, 1536669060000) -+ So(res.Series[0].Points[0][1].Float64, ShouldEqual, int64(1536668940000)) -+ So(res.Series[0].Points[1][1].Float64, ShouldEqual, int64(1536669000000)) -+ So(res.Series[0].Points[2][1].Float64, ShouldEqual, int64(1536669060000)) - }) - - Convey("bucket bounds should be correct", func() { -@@ -410,8 +410,8 @@ func TestStackdriver(t *testing.T) { - } - - Convey("timestamps should be in ascending order", func() { -- So(res.Series[0].Points[0][1].Float64, ShouldEqual, 1550859086000) -- So(res.Series[0].Points[1][1].Float64, ShouldEqual, 1550859146000) -+ So(res.Series[0].Points[0][1].Float64, ShouldEqual, int64(1550859086000)) -+ So(res.Series[0].Points[1][1].Float64, ShouldEqual, int64(1550859146000)) - }) - - Convey("bucket bounds should be correct", func() { -diff --git a/pkg/tsdb/time_range_test.go b/pkg/tsdb/time_range_test.go -index 37ced412e..38b147689 100644 ---- a/pkg/tsdb/time_range_test.go -+++ b/pkg/tsdb/time_range_test.go -@@ -70,11 +70,11 @@ func TestTimeRange(t *testing.T) { - - res, err := tr.ParseFrom() - So(err, ShouldBeNil) -- So(res.UnixNano()/int64(time.Millisecond), ShouldEqual, 1474973725473) -+ So(res.UnixNano()/int64(time.Millisecond), ShouldEqual, int64(1474973725473)) - - res, err = tr.ParseTo() - So(err, ShouldBeNil) -- So(res.UnixNano()/int64(time.Millisecond), ShouldEqual, 1474975757930) -+ So(res.UnixNano()/int64(time.Millisecond), ShouldEqual, int64(1474975757930)) - }) - - Convey("Cannot parse asdf", func() { diff --git a/001-login-oauth-use-oauth2-exchange.patch b/001-login-oauth-use-oauth2-exchange.patch new file mode 100644 index 0000000..d62067d --- /dev/null +++ b/001-login-oauth-use-oauth2-exchange.patch @@ -0,0 +1,13 @@ +diff --git a/pkg/api/login_oauth.go b/pkg/api/login_oauth.go +index a3599bc7a..0c6579847 100644 +--- a/pkg/api/login_oauth.go ++++ b/pkg/api/login_oauth.go +@@ -125,7 +125,7 @@ func (hs *HTTPServer) OAuthLogin(ctx *m.ReqContext) { + oauthCtx := context.WithValue(context.Background(), oauth2.HTTPClient, oauthClient) + + // get token from provider +- token, err := connect.Exchange(oauthCtx, code) ++ token, err := connect.Exchange(oauthCtx, code, oauth2.AccessTypeOnline) + if err != nil { + ctx.Handle(500, "login.OAuthLogin(NewTransportWithCode)", err) + return diff --git a/001-man-pages.patch b/001-man-pages.patch deleted file mode 100644 index 44ff37d..0000000 --- a/001-man-pages.patch +++ /dev/null @@ -1,219 +0,0 @@ -diff --git a/docs/man/man1/grafana-cli.1 b/docs/man/man1/grafana-cli.1 -new file mode 100644 -index 000000000..171748fcd ---- /dev/null -+++ b/docs/man/man1/grafana-cli.1 -@@ -0,0 +1,51 @@ -+.TH GRAFANA "1" "February 2019" "Grafana cli version 5.4.3" "User Commands" -+.SH NAME -+grafana-cli \- command line administration for the Grafana metrics dashboard and graph editor -+.SH DESCRIPTION -+.SS "NAME:" -+.IP -+grafana-cli -+.SS "USAGE:" -+.IP -+\fBgrafana\-cli\fP [\fIglobal options\fP] \fIcommand\fP [\fIcommand options\fP] [\fIarguments\fP...] -+.SS "COMMANDS:" -+.TP -+plugins -+Manage plugins for grafana -+.TP -+admin -+Grafana admin commands -+.TP -+help, h -+Shows a list of commands or help for one command -+.SS "GLOBAL OPTIONS:" -+.TP -+\fB\-\-pluginsDir\fR value -+path to the grafana plugin directory (default: "/var/lib/grafana/plugins") [$GF_PLUGIN_DIR] -+.TP -+\fB\-\-repo\fR value -+url to the plugin repository (default: "https://grafana.com/api/plugins") [$GF_PLUGIN_REPO] -+.TP -+\fB\-\-pluginUrl\fR value -+Full url to the plugin zip file instead of downloading the plugin from grafana.com/api [$GF_PLUGIN_URL] -+.TP -+\fB\-\-insecure\fR -+Skip TLS verification (insecure) -+.TP -+\fB\-\-debug\fR, \fB\-d\fR -+enable debug logging -+.TP -+\fB\-\-help\fR, \fB\-h\fR -+show help -+.TP -+\fB\-\-version\fR, \fB\-v\fR -+print the version -+.SH "SEE ALSO" -+Additional documentation for -+.B grafana-cli -+is available on-line at -+.BR http://docs.grafana.org/administration/cli/ . -+The full documentation for -+.B Grafana -+is available on-line at -+.BR http://docs.grafana.org/ . -diff --git a/docs/man/man1/grafana-server.1 b/docs/man/man1/grafana-server.1 -new file mode 100644 -index 000000000..30b7c1306 ---- /dev/null -+++ b/docs/man/man1/grafana-server.1 -@@ -0,0 +1,156 @@ -+.TH VERSION "1" "February 2019" "Version 5.4.3" "User Commands" -+.SH NAME -+grafana-server \- back-end server for the Grafana metrics dashboard and graph editor -+.SH DESCRIPTION -+.B grafana-server -+is the back-end server for the Grafana metrics dashboard and graph editor. -+The -+.B grafana-server -+program should not normally be run from the command line, -+except when testing or for development purposes. -+Rather it should be managed by -+.BR systemd . -+After installing Grafana, the systemd service should be enabled and started as follows: -+.P -+.in 1i -+.B systemctl daemon-reload -+.br -+.B systemctl enable grafana-server.service -+.br -+.B systemctl start grafana-server.service -+.in -+.P -+.SH OPTIONS -+The -+.B gafana-server -+configuration is specified in -+.BR /etc/grafana/grafana.ini -+and is well documented with comments. -+The command-line options listed below override options of -+the same (or similar) name in the configuration file and also provide -+additional options for testing Grafana. -+.P -+.HP -+\fB\-config\fR string -+.IP -+path to config file -+.HP -+\fB\-homepath\fR string -+.IP -+path to grafana install/home path, defaults to working directory -+.HP -+\fB\-packaging\fR string -+.IP -+describes the way Grafana was installed (default "unknown") -+.HP -+\fB\-pidfile\fR string -+.IP -+path to pid file -+.HP -+\fB\-profile\fR -+.IP -+Turn on pprof profiling -+.HP -+\fB\-profile\-port\fR int -+.IP -+Define custom port for profiling (default 6060) -+.HP -+\fB\-test\fR.bench regexp -+.IP -+run only benchmarks matching regexp -+.HP -+\fB\-test\fR.benchmem -+.IP -+print memory allocations for benchmarks -+.HP -+\fB\-test\fR.benchtime d -+.IP -+run each benchmark for duration d (default 1s) -+.HP -+\fB\-test\fR.blockprofile file -+.IP -+write a goroutine blocking profile to file -+.HP -+\fB\-test\fR.blockprofilerate rate -+.IP -+set blocking profile rate (see runtime.SetBlockProfileRate) (default 1) -+.HP -+\fB\-test\fR.count n -+.IP -+run tests and benchmarks n times (default 1) -+.HP -+\fB\-test\fR.coverprofile file -+.IP -+write a coverage profile to file -+.HP -+\fB\-test\fR.cpu list -+.IP -+comma\-separated list of cpu counts to run each test with -+.HP -+\fB\-test\fR.cpuprofile file -+.IP -+write a cpu profile to file -+.HP -+\fB\-test\fR.failfast -+.IP -+do not start new tests after the first test failure -+.HP -+\fB\-test\fR.list regexp -+.IP -+list tests, examples, and benchmarks matching regexp then exit -+.HP -+\fB\-test\fR.memprofile file -+.IP -+write a memory profile to file -+.HP -+\fB\-test\fR.memprofilerate rate -+.IP -+set memory profiling rate (see runtime.MemProfileRate) -+.HP -+\fB\-test\fR.mutexprofile string -+.IP -+write a mutex contention profile to the named file after execution -+.HP -+\fB\-test\fR.mutexprofilefraction int -+.IP -+if >= 0, calls runtime.SetMutexProfileFraction() (default 1) -+.HP -+\fB\-test\fR.outputdir dir -+.IP -+write profiles to dir -+.HP -+\fB\-test\fR.parallel n -+.IP -+run at most n tests in parallel (default 8) -+.HP -+\fB\-test\fR.run regexp -+.IP -+run only tests and examples matching regexp -+.HP -+\fB\-test\fR.short -+.IP -+run smaller test suite to save time -+.HP -+\fB\-test\fR.testlogfile file -+.IP -+write test action log to file (for use only by cmd/go) -+.HP -+\fB\-test\fR.timeout d -+.IP -+panic test binary after duration d (default 0, timeout disabled) -+.HP -+\fB\-test\fR.trace file -+.IP -+write an execution trace to file -+.HP -+\fB\-test\fR.v -+.IP -+verbose: print additional output -+.TP -+\fB\-v\fR -+prints current version and exits -+.SH "SEE ALSO" -+The full documentation for -+.B Grafana -+is available on-line at -+.BR http://docs.grafana.org/ . diff --git a/005-remove-jaeger-tracing.patch b/002-remove-jaeger-tracing.patch similarity index 96% rename from 005-remove-jaeger-tracing.patch rename to 002-remove-jaeger-tracing.patch index f2b4778..1f624cc 100644 --- a/005-remove-jaeger-tracing.patch +++ b/002-remove-jaeger-tracing.patch @@ -1,15 +1,15 @@ diff --git a/pkg/cmd/grafana-server/server.go b/pkg/cmd/grafana-server/server.go -index c10212329..a29d14c85 100644 +index 2ac326ed3..20943918c 100644 --- a/pkg/cmd/grafana-server/server.go +++ b/pkg/cmd/grafana-server/server.go -@@ -31,7 +31,6 @@ import ( +@@ -21,7 +21,6 @@ import ( _ "github.com/grafana/grafana/pkg/infra/metrics" _ "github.com/grafana/grafana/pkg/infra/remotecache" _ "github.com/grafana/grafana/pkg/infra/serverlock" - _ "github.com/grafana/grafana/pkg/infra/tracing" _ "github.com/grafana/grafana/pkg/infra/usagestats" - _ "github.com/grafana/grafana/pkg/plugins" - _ "github.com/grafana/grafana/pkg/services/alerting" + "github.com/grafana/grafana/pkg/log" + "github.com/grafana/grafana/pkg/login" diff --git a/pkg/infra/tracing/tracing.go b/pkg/infra/tracing/tracing.go deleted file mode 100644 index fd7258b7a..000000000 diff --git a/002-update-golang-oauth2-vendor-sources.patch b/002-update-golang-oauth2-vendor-sources.patch deleted file mode 100644 index f0c3f34..0000000 --- a/002-update-golang-oauth2-vendor-sources.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/pkg/api/login_oauth.go b/pkg/api/login_oauth.go -index a3599bc7a..0c6579847 100644 ---- a/pkg/api/login_oauth.go -+++ b/pkg/api/login_oauth.go -@@ -125,7 +125,7 @@ func (hs *HTTPServer) OAuthLogin(ctx *m.ReqContext) { - oauthCtx := context.WithValue(context.Background(), oauth2.HTTPClient, oauthClient) - - // get token from provider -- token, err := connect.Exchange(oauthCtx, code) -+ token, err := connect.Exchange(oauthCtx, code, oauth2.AccessTypeOnline) - if err != nil { - ctx.Handle(500, "login.OAuthLogin(NewTransportWithCode)", err) - return -diff --git a/pkg/login/social/social.go b/pkg/login/social/social.go -index 3ec0e2c96..72807d73e 100644 ---- a/pkg/login/social/social.go -+++ b/pkg/login/social/social.go -@@ -29,7 +29,7 @@ type SocialConnector interface { - IsSignupAllowed() bool - - AuthCodeURL(state string, opts ...oauth2.AuthCodeOption) string -- Exchange(ctx context.Context, code string) (*oauth2.Token, error) -+ Exchange(ctx context.Context, code string, opts ...oauth2.AuthCodeOption) (*oauth2.Token, error) - Client(ctx context.Context, t *oauth2.Token) *http.Client - TokenSource(ctx context.Context, t *oauth2.Token) oauth2.TokenSource - } diff --git a/003-file-mode-updates.patch b/003-file-mode-updates.patch deleted file mode 100644 index 3eb1243..0000000 --- a/003-file-mode-updates.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff --git a/public/app/features/dashboard/components/DashboardSettings/SettingsCtrl.ts b/public/app/features/dashboard/components/DashboardSettings/SettingsCtrl.ts -old mode 100755 -new mode 100644 -diff --git a/public/app/features/folders/services/FolderPageLoader.ts b/public/app/features/folders/services/FolderPageLoader.ts -old mode 100755 -new mode 100644 -diff --git a/public/app/plugins/datasource/elasticsearch/img/elasticsearch.svg b/public/app/plugins/datasource/elasticsearch/img/elasticsearch.svg -old mode 100755 -new mode 100644 -diff --git a/public/app/plugins/datasource/graphite/partials/query.editor.html b/public/app/plugins/datasource/graphite/partials/query.editor.html -old mode 100755 -new mode 100644 -diff --git a/public/app/plugins/datasource/stackdriver/partials/query.editor.html b/public/app/plugins/datasource/stackdriver/partials/query.editor.html -old mode 100755 -new mode 100644 -diff --git a/public/app/plugins/panel/graph/graph.ts b/public/app/plugins/panel/graph/graph.ts -old mode 100755 -new mode 100644 -diff --git a/public/fonts/grafana-icons.svg b/public/fonts/grafana-icons.svg -old mode 100755 -new mode 100644 -diff --git a/public/sass/components/_panel_text.scss b/public/sass/components/_panel_text.scss -index e69de29bb..cd0183132 100644 ---- a/public/sass/components/_panel_text.scss -+++ b/public/sass/components/_panel_text.scss -@@ -0,0 +1 @@ -+// nothing here diff --git a/003-new-files.patch b/003-new-files.patch new file mode 100644 index 0000000..0701856 --- /dev/null +++ b/003-new-files.patch @@ -0,0 +1,1627 @@ +diff --git a/conf/distro-defaults.ini b/conf/distro-defaults.ini +new file mode 100644 +index 000000000..eeb974369 +--- /dev/null ++++ b/conf/distro-defaults.ini +@@ -0,0 +1,601 @@ ++##################### Grafana Configuration Defaults for distros ##################### ++# ++# Do not modify this file in grafana installs ++# ++ ++# possible values : production, development ++app_mode = production ++ ++# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty ++instance_name = ${HOSTNAME} ++ ++#################################### Paths ############################### ++[paths] ++# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used) ++data = /var/lib/grafana ++ ++# Temporary files in `data` directory older than given duration will be removed ++temp_data_lifetime = 24h ++ ++# Directory where grafana can store logs ++logs = /var/log/grafana ++ ++# Directory where grafana will automatically scan and look for plugins ++plugins = /var/lib/grafana/plugins ++ ++# folder that contains provisioning config files that grafana will apply on startup and while running. ++provisioning = conf/provisioning ++ ++#################################### Server ############################## ++[server] ++# Protocol (http, https, socket) ++protocol = http ++ ++# The ip address to bind to, empty will bind to all interfaces ++http_addr = ++ ++# The http port to use ++http_port = 3000 ++ ++# The public facing domain name used to access grafana from a browser ++domain = localhost ++ ++# Redirect to correct domain if host header does not match domain ++# Prevents DNS rebinding attacks ++enforce_domain = false ++ ++# The full public facing url ++root_url = %(protocol)s://%(domain)s:%(http_port)s/ ++ ++# Log web requests ++router_logging = false ++ ++# the path relative working path ++static_root_path = public ++ ++# enable gzip ++enable_gzip = false ++ ++# https certs & key file ++cert_file = ++cert_key = ++ ++# Unix socket path ++socket = /tmp/grafana.sock ++ ++#################################### Database ############################ ++[database] ++# You can configure the database connection by specifying type, host, name, user and password ++# as separate properties or as on string using the url property. ++ ++# Either "mysql", "postgres" or "sqlite3", it's your choice ++type = sqlite3 ++host = 127.0.0.1:3306 ++name = grafana ++user = root ++# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" ++password = ++# Use either URL or the previous fields to configure the database ++# Example: mysql://user:secret@host:port/database ++url = ++ ++# Max idle conn setting default is 2 ++max_idle_conn = 2 ++ ++# Max conn setting default is 0 (mean not set) ++max_open_conn = ++ ++# Connection Max Lifetime default is 14400 (means 14400 seconds or 4 hours) ++conn_max_lifetime = 14400 ++ ++# Set to true to log the sql calls and execution times. ++log_queries = ++ ++# For "postgres", use either "disable", "require" or "verify-full" ++# For "mysql", use either "true", "false", or "skip-verify". ++ssl_mode = disable ++ ++ca_cert_path = ++client_key_path = ++client_cert_path = ++server_cert_name = ++ ++# For "sqlite3" only, path relative to data_path setting ++path = grafana.db ++ ++# For "sqlite3" only. cache mode setting used for connecting to the database ++cache_mode = private ++ ++#################################### Cache server ############################# ++[remote_cache] ++# Either "redis", "memcached" or "database" default is "database" ++type = database ++ ++# cache connectionstring options ++# database: will use Grafana primary database. ++# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=grafana` ++# memcache: 127.0.0.1:11211 ++connstr = ++ ++#################################### Data proxy ########################### ++[dataproxy] ++ ++# This enables data proxy logging, default is false ++logging = false ++ ++# How long the data proxy should wait before timing out default is 30 (seconds) ++timeout = 30 ++ ++# If enabled and user is not anonymous, data proxy will add X-Grafana-User header with username into the request, default is false. ++send_user_header = false ++ ++#################################### Analytics ########################### ++[analytics] ++# Server reporting, sends usage counters to stats.grafana.org every 24 hours. ++# No ip addresses are being tracked, only simple counters to track ++# running instances, dashboard and error counts. It is very helpful to us. ++# Change this option to false to disable reporting. ++reporting_enabled = false ++ ++# Set to false to disable all checks to https://grafana.com ++# for new versions (grafana itself and plugins), check is used ++# in some UI views to notify that grafana or plugin update exists ++# This option does not cause any auto updates, nor send any information ++# only a GET request to https://grafana.com to get latest versions ++check_for_updates = false ++ ++# Google Analytics universal tracking code, only enabled if you specify an id here ++google_analytics_ua_id = ++ ++# Google Tag Manager ID, only enabled if you specify an id here ++google_tag_manager_id = ++ ++#################################### Security ############################ ++[security] ++# default admin user, created on startup ++admin_user = admin ++ ++# default admin password, can be changed before first start of grafana, or in profile settings ++admin_password = admin ++ ++# used for signing ++secret_key = SW2YcwTIb9zpOOhoPsMm ++ ++# disable gravatar profile images ++disable_gravatar = false ++ ++# data source proxy whitelist (ip_or_domain:port separated by spaces) ++data_source_proxy_whitelist = ++ ++# disable protection against brute force login attempts ++disable_brute_force_login_protection = false ++ ++# set to true if you host Grafana behind HTTPS. default is false. ++cookie_secure = false ++ ++# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict" and "none" ++cookie_samesite = lax ++ ++# set to true if you want to allow browsers to render Grafana in a ,