Compare commits

...

1128 Commits

Author SHA1 Message Date
Marcus Efraimsson e05033a693 v5.3.0-beta1 release 2018-09-06 14:38:22 +02:00
Marcus Efraimsson bdc3acbd2c changelog: restructure and add 5.3.0-beta1 header
[skip ci]
2018-09-06 14:21:36 +02:00
Marcus Efraimsson 3f4099c4a6 changelog: add notes about closing #13157
[skip ci]
2018-09-06 14:09:27 +02:00
Marcus Efraimsson 26756f86aa Merge pull request #13148 from svenklemm/postgres-min-interval
Add min time interval support for SQL datasources
2018-09-06 14:05:39 +02:00
Marcus Efraimsson db639684bb docs: sql datasources min time interval 2018-09-06 13:52:16 +02:00
bergquist 4ce41c16fc changelog: note about closing #10424 2018-09-06 13:33:38 +02:00
Carl Bergquist 3c0b1ef581 Merge pull request #13170 from bergquist/alerting_default_setting
make default values for alerting configurable
2018-09-06 13:26:42 +02:00
Torkel Ödegaard e364119774 docs: minor fixes 2018-09-06 13:21:11 +02:00
Torkel Ödegaard 320947359c Merge branch '12886-docs-authentication-section' 2018-09-06 13:16:17 +02:00
Torkel Ödegaard d6f9ebab63 docs: Updated auth docs 2018-09-06 13:15:36 +02:00
Torkel Ödegaard a25b594506 docs: updated 2018-09-06 12:13:23 +02:00
bergquist 1e33a3780f spelling errors 2018-09-06 11:51:24 +02:00
bergquist 3ce89cad71 make default values for alerting configurable 2018-09-06 11:26:14 +02:00
Marcus Efraimsson d76dad86c8 changelog: order changes by group (ocd)
[skip ci]
2018-09-05 18:49:08 +02:00
Marcus Efraimsson 42d26400b1 changelog: add notes about closing #13030
[skip ci]
2018-09-05 18:47:26 +02:00
Marcus Efraimsson 81c5112259 Merge pull request #13165 from grafana/docs-docker-paths
docs: default paths in the docker container.
2018-09-05 18:01:01 +02:00
Patrick O'Carroll 2b74b1c4d6 added radix rule and changed files to follow rule (#13153) 2018-09-05 16:51:31 +02:00
Leonard Gram 500a4b5f35 docs: default paths in the docker container. 2018-09-05 16:46:22 +02:00
Leonard Gram 5d87aa2fa4 Merge pull request #13031 from bergquist/golang_1.11
upgrade to golang 1.11
2018-09-05 15:31:43 +02:00
Patrick O'Carroll 25f13bd3ad added only-arrow-functions rule and changed files to follow new rule (#13154) 2018-09-05 15:28:30 +02:00
Leonard Gram eed141fb54 build: uses 1.1.0 of the build container. 2018-09-05 15:10:57 +02:00
Leonard Gram 275f613050 Only authenticate logins when password is set (#13147)
* auth: never authenticate passwords shorter than 4 chars.

* auth: refactoring password length check.

* auth: does not authenticate when password is empty.

* auth: removes unneccesary change.
2018-09-05 12:12:46 +02:00
Torkel Ödegaard c9ae585d2a Merge branch '12918-no-conditional-assignment' 2018-09-05 12:09:32 +02:00
Torkel Ödegaard dc236b5063 refatoring: minor changes to PR #13149 2018-09-05 12:09:16 +02:00
Sven Klemm cb526d4557 Add min time interval to mysql and mssql 2018-09-05 12:02:57 +02:00
Leonard Gram 8ea2f7f858 build: updated build-container with go1.11. 2018-09-05 11:55:28 +02:00
Torkel Ödegaard 00c0b71f3d Merge branch '12918-only-arrow-functions4' 2018-09-05 11:46:54 +02:00
Torkel Ödegaard 99133c4fbb Merge branch '12918-only-arrow-functions' 2018-09-05 11:46:46 +02:00
Torkel Ödegaard 432e203df1 Merge branch '12918-only-arrow-functions3' 2018-09-05 11:26:30 +02:00
Torkel Ödegaard 151e950e2c Merge branch 'master' into 12918-only-arrow-functions 2018-09-05 11:24:52 +02:00
Patrick O'Carroll 777010b20b added no-conditional-assignment rule and changed files to follow new rule 2018-09-05 10:53:58 +02:00
Sven Klemm e2c7b010ac fix test failures for timeInterval 2018-09-05 10:03:16 +02:00
Sven Klemm fd269945c9 document postgres min time interval 2018-09-05 09:57:09 +02:00
Sven Klemm a95453036b Add min time interval to postgres datasource 2018-09-05 09:46:22 +02:00
Patrick O'Carroll 72ab24f300 Changed functions to arrow functions for only-arrow-functions rule. (#13131) 2018-09-05 07:47:30 +02:00
Marcus Efraimsson 7c88436a9b Merge pull request #13133 from grafana/13132_query_variable
Fix error when new variables created but not yet added/saved
2018-09-04 17:25:08 +02:00
Peter Holmberg cab6861d27 Reactify sidebar (#13091)
* created react component and moved markdown

* extracting components

* Broke out parts into components

* tests

* Flattened file structure

* Tests

* made instances typed in test

* typing

* function instead of variable

* updated user model with missing properties

* added full set of properties to user mock

* redone from variable to function

* refactor: minor refactorings of #13091

* removed logging
2018-09-04 17:24:08 +02:00
Patrick O'Carroll dc4f547a40 Changed functions to arrow functions for only-arrow-functions rule. 2018-09-04 17:02:32 +02:00
Patrick O'Carroll 0f326f18dc changed functions to arrowfunctions for only-arrow-functions rule (#13127) 2018-09-04 15:55:41 +02:00
Torkel Ödegaard 826dfceac0 fix: fixed home dashboard redirect issue when behind reverse proxy, fixes #12429 (#13135) 2018-09-04 15:42:10 +02:00
Patrick O'Carroll 19b7ad61dd Changed functions to arrow functions for only-arrow-functions rule. 2018-09-04 14:27:03 +02:00
Anthony Woods 5c0fbbf7c8 improve remote image rendering (#13102)
* improve remote image rendering

- determine "domain" during Init() so we are not re-parsing settings
  on every request
- if using http-mode via a rednererUrl, then use the AppUrl for the
  page that the renderer loads.  When in http-mode the renderer is likely
  running on another server so trying to use the localhost or even the
  specific IP:PORT grafana is listening on wont work.
- apply the request timeout via a context rather then directly on the http client.
- use a global http client so we can take advantage of connection re-use
- log and handle errors better.

* ensure imagesDir exists

* allow users to define callback_url for remote rendering

- allow users to define the url that a remote rendering service
  should use for connecting back to the grafana instance.
  By default the "root_url" is used.

* improve remote image rendering

- determine "domain" during Init() so we are not re-parsing settings
  on every request
- if using http-mode via a rednererUrl, then use the AppUrl for the
  page that the renderer loads.  When in http-mode the renderer is likely
  running on another server so trying to use the localhost or even the
  specific IP:PORT grafana is listening on wont work.
- apply the request timeout via a context rather then directly on the http client.
- use a global http client so we can take advantage of connection re-use
- log and handle errors better.

* ensure imagesDir exists

* allow users to define callback_url for remote rendering

- allow users to define the url that a remote rendering service
  should use for connecting back to the grafana instance.
  By default the "root_url" is used.

* rendering: fixed issue with renderKey where userId and orgId was in mixed up, added test for RenderCallbackUrl reading logic
2018-09-04 13:42:55 +02:00
Marcus Efraimsson 1e74d7f20a handle new variables created not yet added 2018-09-04 13:25:44 +02:00
Marcus Efraimsson ce538007d8 changelog: add notes about closing #10095
[skip ci]
2018-09-04 12:31:11 +02:00
Marcus Efraimsson 7e527de5f1 Merge pull request #11081 from svenklemm/postgres-query-builder
postgres: graphical query builder
2018-09-04 12:24:10 +02:00
Marcus Efraimsson 8fcc9b1891 docs: postgres provisioning 2018-09-04 11:33:43 +02:00
Marcus Efraimsson f15f4425d3 Merge pull request #12854 from grafana/12853-empty-team-list
[wip]added empty list cta to team list
2018-09-04 11:10:32 +02:00
bergquist eb7172c3d4 changelog: adds note about closing #13125 2018-09-04 11:09:16 +02:00
Carl Bergquist 2f6af7b811 Merge pull request #13125 from overcookedpanda/master
added Bitcoin as a currency option
2018-09-04 11:07:49 +02:00
Patrick O'Carroll eca7b76290 fixed title prefix, fixes #13123 (#13128) 2018-09-04 10:33:18 +02:00
Torkel Ödegaard 16fb01ed81 Update CHANGELOG.md 2018-09-04 10:32:57 +02:00
maicon a6aa219895 Reopen log files after receiving a SIGHUP signal (#13112)
* Reopen log files after receiving a SIGHUP signal

Implements a system signals listener in log.FileLogWriter.

After receiving a SIGHUP signal from the system, the listener will close the current log file and then open it again.

The listener will finishes after receiving a SIGINT, SIGKILL or SIGTERM signal.

Closes grafana/grafana#2497

* Move the SIGHUP handling to the main file
2018-09-04 10:31:41 +02:00
Patrick O'Carroll 0e007d573d changed functions to arrowfunctions for only-arrow-functions rule 2018-09-04 09:53:07 +02:00
Overcooked Panda 4ab3826a08 added Bitcoin as a currency option 2018-09-03 22:02:58 -05:00
Sven Klemm 82e601250d Merge branch 'master' into postgres-query-builder 2018-09-03 22:05:53 +02:00
Patrick O'Carroll dac2c62545 added new-parens rule (#13119) 2018-09-03 20:36:01 +02:00
Torkel Ödegaard b0134d30ae Update CHANGELOG.md 2018-09-03 20:35:28 +02:00
Carl Bergquist ee1083d9b4 cli: avoid rely on response.ContentLength (#13120)
response.ContentLength might be invalid if the http response
is chunked.

fixes #13079
2018-09-03 20:33:21 +02:00
Marcus Efraimsson db2264c554 docs: v5.2 upgrade notice, ref #13084 2018-09-03 15:12:17 +02:00
Marcus Efraimsson c1efa13018 changelog: add notes about closing #7330
[skip ci]
2018-09-03 14:56:50 +02:00
Marcus Efraimsson 1ceca5d8ec Merge pull request #12145 from grafana/alerting_reminder
Alerting notification reminder
2018-09-03 14:41:38 +02:00
Sven Klemm de917dfc4d Merge branch 'master' into postgres-query-builder 2018-09-03 13:43:58 +02:00
Patrick O'Carroll f8c2b23c86 added rule use-isnan and and updated file to follow new rule (#13117) 2018-09-03 13:31:37 +02:00
Patrick O'Carroll ebf253d26a added no-namespace and no-reference rules (#13116) 2018-09-03 12:46:25 +02:00
Patrick O'Carroll b8d82df97e added no-angle-bracket-type-assertion rule and updatet files to follow rule (#13115) 2018-09-03 11:30:44 +02:00
Patrick O'Carroll 7837ee4466 Updated rules for variable name (#13106)
* updated rules for variable name and fixed files that didn't follow new rules

* fixed test so it uses new rule

* made exceptions to rule in interval_variable
2018-09-03 11:00:46 +02:00
Jordan Hamel 0d25aa08fa update wording and punctuation (#13113)
* word fix

support >> supports 
says >> ways

* : for emphasis
2018-09-03 07:58:45 +02:00
Sven Klemm 265d5daf57 Merge branch 'master' into postgres-query-builder 2018-08-31 19:02:46 +02:00
Patrick O'Carroll abbb6f933c added jsdoc-format rule and fixed files that didn't follow new rule (#13107) 2018-08-31 16:40:43 +02:00
Patrick O'Carroll 944c1da27b set member-access and no-var-keyword to true, removed public in two files (#13104) 2018-08-31 16:40:23 +02:00
Torkel Ödegaard eef41cbccd Merge branch 'grafana-loading-page' 2018-08-31 07:38:42 -07:00
Torkel Ödegaard 2996c54b72 fix: for text flickering in animation on chrome on windows 2018-08-31 07:37:21 -07:00
Patrick O'Carroll c9995d39d7 fixed so preloader is removed when app is loaded 2018-08-31 09:57:27 +02:00
Patrick O'Carroll 4f84a2d018 removed console.log 2018-08-31 08:50:34 +02:00
Patrick O'Carroll bc30e7b322 separated fade-ins for logo and text, tweaked delays and timing for fade-in animations 2018-08-31 08:41:17 +02:00
Torkel Ödegaard 4f91087d9a docs: minor updates, more work to do 2018-08-31 07:15:07 +02:00
Torkel Ödegaard 77f9b152fa ux: minor fixes to loading screen 2018-08-30 11:59:32 -07:00
Sven Klemm 650e2faf01 Merge branch 'postgres-query-builder' of git+ssh://github.com/svenklemm/grafana into postgres-query-builder 2018-08-30 15:47:10 +02:00
Sven Klemm d5cdeebf23 reset metric column when changing table 2018-08-30 15:46:57 +02:00
Sven Klemm 88cd713d3a reset metric column when changing table 2018-08-30 15:45:05 +02:00
Sven Klemm 1cac061448 fix timeFilter resetting when changing table 2018-08-30 15:39:01 +02:00
Marcus Efraimsson 5ceaa21e3b when changing table, refresh panel once after columns have been changed 2018-08-30 15:11:54 +02:00
Patrick O'Carroll 6832b80735 added pro-tip text, removed pro-tip link 2018-08-30 15:02:20 +02:00
Patrick O'Carroll f916add03b fixed styling for background and text, added intro animation, added fade in to text 2018-08-30 14:44:37 +02:00
Sven Klemm a06a6b6517 fix timecolumn handling when table changes 2018-08-30 14:25:27 +02:00
Sven Klemm 015909dbff set default for timeGroup in query builder to $__interval 2018-08-30 14:16:42 +02:00
Sven Klemm 483f6cc5e1 when changing table reset columns 2018-08-30 14:11:53 +02:00
Sven Klemm be978d1a8f fix metric column suggestions 2018-08-30 14:09:47 +02:00
Sven Klemm e2c3b6c6c5 fix suggestions for metric column 2018-08-30 13:05:16 +02:00
Jasper Lievisse Adriaanse d668a922e6 Return correct path for OpenBSD in cli's returnOsDefault (#13089) 2018-08-30 11:56:52 +02:00
Torkel Ödegaard 9cf26b934d updated changelog 2018-08-30 11:55:54 +02:00
Torkel Ödegaard 154fbe2413 New TV Mode, dashboard toolbar update (layout change & new cycle view mode button) (#13025)
* wip: design update for navbar with kiosk mode button

* feat: progress on new view mode button

* css: view state refactorings

* feat: kiosk modes & playlist support

* feature: cycle tv mode feature, renamed view modes to TV, and Kiosk

* fix: updated the alert notification message

* fix: removed unused parameter

* fix: correct the css class set for tv mode

* some minor improvements to playlist
2018-08-30 11:52:31 +02:00
Torkel Ödegaard 36bc8b77fb Merge branch 'tsconfig-no-implicit-this' 2018-08-30 11:46:13 +02:00
Patrick O'Carroll a8547ae36e added this:any to functions and changed functions to arrowfunctions 2018-08-30 10:49:18 +02:00
Torkel Ödegaard dd8076f2cf feat: loading css async & inline svg 2018-08-30 10:32:45 +02:00
David b8e6817732 Explore: keep query when changing datasources (#13042)
- clear `edited` state for each query when a new datasource is set
2018-08-30 09:05:45 +02:00
Patrick O'Carroll 552a61b6ae changed var to let in 50 files (#13075) 2018-08-30 09:03:11 +02:00
Patrick O'Carroll b494a29e02 changed var to let in last files (#13087) 2018-08-30 08:58:43 +02:00
Torkel Ödegaard 80d6ef535d tsconfig: started on setting noImplicitThis to true 2018-08-30 08:53:13 +02:00
Torkel Ödegaard ceadced6f0 tsconfig: format file 2018-08-30 08:33:29 +02:00
Sven Klemm aa2098fedf document postgres version and TimescaleDB option 2018-08-30 08:18:22 +02:00
Torkel Ödegaard c960af098a tslint: added 1 more rule, #12918 2018-08-30 07:47:46 +02:00
Torkel Ödegaard 0bb249096f tslint: added 2 more rules and removed unused component, #12918 2018-08-30 07:40:13 +02:00
Torkel Ödegaard 272c09513f tslint: added a new tslint rule 2018-08-30 07:34:17 +02:00
Patrick O'Carroll 0dc8949352 added rule prefer const to tslint (#13071) 2018-08-30 07:18:28 +02:00
Šimon Podlipský 2e1db2ca93 dep ensure (#13074) 2018-08-30 07:18:09 +02:00
Sven Klemm aadff18e94 hide Query Builder button for table panels 2018-08-29 18:38:18 +02:00
Sven Klemm a87b27c7d3 check for correct quoting of multiple singlequotes 2018-08-29 16:50:59 +02:00
Sven Klemm 70daa56a31 Merge branch 'master' into postgres-query-builder 2018-08-29 14:44:23 +02:00
Patrick O'Carroll a702603e7b changed var to const 2 (#13068)
* changed var to const

* fixed typo created in last commit

* added or empty object to options in prometheus/datasource
2018-08-29 14:27:29 +02:00
Patrick O'Carroll 5e0d0c5816 changed var to const (#13061) 2018-08-29 14:26:50 +02:00
Torkel Ödegaard 9423e3e124 Merge branch 'master' of github.com:grafana/grafana 2018-08-29 13:34:11 +02:00
Marcus Efraimsson 800ba84f67 update latest.json to latest stable version 2018-08-29 13:29:29 +02:00
Torkel Ödegaard 1e2fde238c docs: corrected docs description for setting 2018-08-29 13:26:23 +02:00
Sven Klemm 1ee91a637f remove min time interval from datasource config 2018-08-29 13:02:25 +02:00
Sven Klemm 0b74ff5cf1 remove unneeded queryOptions 2018-08-29 12:51:58 +02:00
Marcus Efraimsson 10f55f5511 changelog: add notes about 4.6.4 and 5.2.3 releases 2018-08-29 12:34:27 +02:00
Sven Klemm 7a5b5906ed fix quoting 2018-08-29 12:24:28 +02:00
Sven Klemm bfac6303d0 strip quotes when auto adding alias 2018-08-29 12:16:07 +02:00
Sven Klemm ab4fbff454 handle quoting properly for table suggestion 2018-08-29 12:12:11 +02:00
Sven Klemm e9ab4feeb0 link to github instead 2018-08-29 09:58:08 +02:00
Sven Klemm 955e5afa45 recheck timecolumn when changing table 2018-08-29 09:51:01 +02:00
Sven Klemm 84ec1ce624 update filter macro on time column change 2018-08-29 09:04:33 +02:00
bergquist 12c9860882 string formating fixes 2018-08-28 22:33:38 +02:00
bergquist ff7b0d4f63 go fmt fixes 2018-08-28 22:14:15 +02:00
Peter Holmberg b6584f5ad0 Moved tooltip icon from input to label #12945 (#13059) 2018-08-28 15:23:25 +02:00
Marcus Efraimsson 26bb91296d Merge pull request #13056 from LuboVarga/patch-1
Update provisioning.md
2018-08-28 14:44:10 +02:00
Patrick O'Carroll b8597b4d57 added empty cta to playlist page + hid playlist table when empty (#12841)
* added empty cta to playlist page + hid playlist table when empty

* implemented the empty-list-cta component

* removed extra protip, changed messaging
2018-08-28 14:23:03 +02:00
Patrick O'Carroll 8bdabad86e changed from rotating to bouncing, maybe to much squash and stretch 2018-08-28 13:51:12 +02:00
LuboVarga 13f4d09ed8 Update provisioning.md
wrong data type was mentioned in table for esVersion field. I expect to regenerate doc here: http://docs.grafana.org/administration/provisioning/#datasources
This problem was noted by @stefanes a while ago here: https://github.com/grafana/grafana/issues/11126#issuecomment-370799209
2018-08-28 13:37:55 +02:00
Sven Klemm 30fce34d9c make default mode for table panels raw editor 2018-08-28 12:10:55 +02:00
Marcus Efraimsson f55aad0ec9 Merge pull request #12919 from grafana/11580-how-to-start-grafana-docs
docs: How to get started with Grafana for the first time
2018-08-28 11:01:00 +02:00
Sven Klemm 62d82920e6 improve description for timescaledb option 2018-08-27 23:20:17 +02:00
Marcus Efraimsson c7279a4e07 changelog: add notes about closing #12865
[skip ci]
2018-08-27 15:19:22 +02:00
Marcus Efraimsson e204124791 Merge pull request #12939 from grafana/12865-login-loading-animation
animation during slow login
2018-08-27 15:17:19 +02:00
Patrick O'Carroll 1a2ab532d1 fixed so validation of empty fields works again 2018-08-27 14:16:34 +02:00
Patrick O'Carroll 5ff5c5c245 added a loading view with a spining grafana logo 2018-08-27 13:54:26 +02:00
Sven Klemm 7177f19436 Merge branch 'master' into postgres-query-builder 2018-08-27 11:23:55 +02:00
Sven Klemm da8696ed95 fix handling of variable interpolation for IN expresions 2018-08-26 22:43:03 +02:00
Torkel Ödegaard e1beaaa0f7 tslint: tslint to const fixes part3 (#13036) 2018-08-26 21:52:57 +02:00
Torkel Ödegaard 35c00891e7 tslint: more const fixes (#13035) 2018-08-26 20:19:23 +02:00
Torkel Ödegaard 314b645857 tslint: changing vars -> const (#13034) 2018-08-26 18:43:07 +02:00
Torkel Ödegaard 9b978b7203 tslint: autofix of let -> const (#13033) 2018-08-26 17:14:40 +02:00
bergquist fda9790ba5 upgrades to golang 1.11 2018-08-25 21:23:20 +02:00
Sven Klemm 21e7b0b92d add min interval to postgres datasource 2018-08-25 18:14:39 +02:00
Marcus Efraimsson 6995242b8b copy and docs update for alert notification reminders 2018-08-24 19:13:52 +02:00
Marcus Efraimsson eba147c1a3 change/add tests for alerting notification reminders 2018-08-24 19:09:19 +02:00
Tobias Skarhed 8a99fa269d WIP Update tslint (#12922)
* Interface linting rule

* fix: changed model names in store files so that the interface names do not conflict with the model names
2018-08-24 16:48:47 +02:00
Marcus Efraimsson e906d4bdba changelog: add notes about closing #12952 #12965
[skip ci]
2018-08-24 15:55:20 +02:00
Marcus Efraimsson 49f9276df0 Merge pull request #12967 from franciscocpg/custom-all-value-variable-interpolation
Replacing variable interpolation in "All value" value
2018-08-24 15:40:55 +02:00
Leonard Gram 5bb0d26604 build: fixes rpm build when using defaults.
Closes #12980
2018-08-24 15:23:49 +02:00
Marcus Efraimsson 51069c9ccb docs: reminder notifications update 2018-08-23 18:56:37 +02:00
Marcus Efraimsson a9497f0a96 changelog: add notes about closing #12486
[skip ci]
2018-08-23 18:30:28 +02:00
Marcus Efraimsson a04d531d35 Merge pull request #12999 from alexanderzobnin/fix-12486-cherry-pick
Heatmap: fix tooltip and crosshair in firefox
2018-08-23 18:27:59 +02:00
Marcus Efraimsson b218290f3a docs: changes 2018-08-23 17:39:39 +02:00
Patrick O'Carroll 76bd173a36 created a section under administration for authentication, moved ldap guide here, created pages for auth-proxy, oauth, anonymous auth, ldap sync with grafana ee, and overview, moved authentication guides from configuration to, added linksin configuration page to guides 2018-08-23 15:58:37 +02:00
Patrick O'Carroll 050902a1e7 fixed so animation starts as soon as one pushes the button and animation stops if login failed 2018-08-23 15:31:25 +02:00
Patrick O'Carroll d38c159893 added link to getting started to all, changed wording 2018-08-23 14:39:50 +02:00
Sven Klemm ea110b5931 Merge branch 'master' into postgres-query-builder 2018-08-23 14:33:55 +02:00
Marcus Efraimsson 4db480ad7e Merge pull request #13012 from alexanderzobnin/fix-missing-jests
tests: fix missing tests (with .jest suffix)
2018-08-23 12:46:38 +02:00
Alexander Zobnin 060fb1af05 tests: fix missing tests (with .jest suffix) 2018-08-23 13:00:15 +03:00
Marcus Efraimsson 34e448c6d4 Merge remote-tracking branch 'origin/master' into alerting_reminder 2018-08-22 18:08:50 +02:00
Marcus Efraimsson 2e1c4b3d76 docs: alerting notification reminders 2018-08-22 18:06:51 +02:00
Marcus Efraimsson 15d950ce35 update copy/ux for configuring alerting notification reminders 2018-08-22 18:06:05 +02:00
Alexander Zobnin 8dc1675574 heatmap: fix tooltip bug in firefox 2018-08-22 15:36:17 +03:00
Sven Klemm 1b5486ae7f Merge branch 'master' into postgres-query-builder 2018-08-21 21:58:04 +02:00
Sven Klemm 02c5d36c0b fix tableSegment and timeColumnSegment after table suggestion 2018-08-21 20:12:45 +02:00
Marcus Efraimsson 97fbf5c033 Merge pull request #12994 from stefanes/patch-2
Update notifications.md
2018-08-21 18:23:03 +02:00
Stefan 2b1f84cd43 Update notifications.md 2018-08-21 15:53:57 +02:00
Torkel Ödegaard 5f81c879fa Merge branch 'code-migrations' 2018-08-21 13:53:46 +02:00
Torkel Ödegaard 92ed1f04af sql: added code migration type 2018-08-21 13:53:04 +02:00
Marcus Efraimsson eef0d28082 changelog: add notes about closing #11890
[skip ci]
2018-08-21 10:51:38 +02:00
Marcus Efraimsson 775e95bde4 Merge pull request #12959 from grafana/11890_variables
Fix: Template variables are executing excessive queries
2018-08-21 10:40:47 +02:00
Marcus Efraimsson 6ace01fbed Merge pull request #12893 from grafana/davkal/12889-explore-fix-rate-filter
Explore: Fix label filtering for rate queries
2018-08-21 10:37:38 +02:00
Marcus Efraimsson dc60848319 Merge pull request #12876 from grafana/davkal/explore-rate-hinting
Explore: still show rate hint if query is complex
2018-08-21 10:37:12 +02:00
Marcus Efraimsson c970e1e4b8 Merge pull request #12874 from grafana/davkal/explore-facetting-filtered
Explore: Filter out existing labels in label suggestions
2018-08-21 09:59:53 +02:00
Marcus Efraimsson dd796bfbe3 Merge remote-tracking branch 'origin/master' into davkal/12889-explore-fix-rate-filter 2018-08-21 09:51:17 +02:00
Marcus Efraimsson 75db4d8eee Merge remote-tracking branch 'origin/master' into davkal/explore-rate-hinting 2018-08-21 09:48:07 +02:00
Marcus Efraimsson 8f875951cb Merge remote-tracking branch 'origin/master' into davkal/explore-facetting-filtered 2018-08-21 09:40:39 +02:00
Marcus Efraimsson 352a26780c Merge pull request #12873 from grafana/davkal/explore-fix-split
Explore: Fix initial state in split view
2018-08-21 09:38:06 +02:00
David 6316d637f1 Explore: Apply tab completion suggestion on Enter (#12904)
- if the suggestions menu is open, apply the selected item on Enter
- if not open, run the queries
2018-08-20 19:22:55 +02:00
Pierre GIRAUD 72efd73c3b Show min-width option only for horizontal repeat (#12981) 2018-08-20 19:22:30 +02:00
Pierre GIRAUD cf632c0f11 Fix bulk-dashboards path (#12978) 2018-08-20 19:21:31 +02:00
Marcus Efraimsson 470e7cc6db add suggestions for reminder frequency and change copy 2018-08-20 18:23:48 +02:00
Marcus Efraimsson dfa5d17670 don't write to notification journal when testing notifier/rule 2018-08-20 16:27:13 +02:00
Marcus Efraimsson 86bc462bc1 remove unnecessary conversion (metalinter) 2018-08-20 13:35:36 +02:00
Marcus Efraimsson 3350a3477d fix after merge with master 2018-08-20 13:31:06 +02:00
Marcus Efraimsson 6d2136b853 Merge remote-tracking branch 'origin/master' into alerting_reminder 2018-08-20 13:29:30 +02:00
Marcus Efraimsson 887387cda8 Merge pull request #12974 from grafana/ds-proxy-json-data
dsproxy: interpolate route url
2018-08-20 13:22:57 +02:00
Francisco Guimarães 0223a75de0 Refresh query variable when another variable is used in regex field (#12961) 2018-08-20 11:56:12 +02:00
Pierre GIRAUD a92d51731d Webpack tapable plugin deprecation (#12960)
* Remove unrequired extract-text-webpack-plugin

* Update ngAnnotate to avoid deprecation warning

* Avoid deprecation warning (Tapable.plugin -> hooks)
2018-08-20 11:55:29 +02:00
Sven Klemm e04127e430 unify quoting 2018-08-18 16:09:12 +02:00
Daniel Lee c75e071213 dsproxy: interpolate route url
Allows for dynamic urls for plugin routes. There are a few plugins
where the route url should be configurable and this change allows
using jsonData fields in the url field for a route in the
plugin.json file for a plugin.
2018-08-18 16:02:49 +02:00
Sven Klemm 49319fbdea prefill editor with first metric table 2018-08-18 13:21:08 +02:00
Sven Klemm ff2564900f only allow 1 filter macro in where clause 2018-08-18 12:34:19 +02:00
Sven Klemm c1890dbb6d fix timeColumnType assignment 2018-08-18 12:28:05 +02:00
Sven Klemm 9699d7a166 make suggested filter macro depend on type 2018-08-18 12:11:10 +02:00
Sven Klemm 18ce6fc280 use unixEpochGroup macro for unix timestamp 2018-08-18 12:04:32 +02:00
Sven Klemm 998bb6ebe3 Merge branch 'master' into postgres-query-builder 2018-08-18 11:54:39 +02:00
Leonard Gram da2822c88d alerting: inline docs for the slack channel.
Related to #12944
2018-08-17 16:49:27 +02:00
Francisco Guimarães d58986872c Replacing variable interpolation in "All value" value 2018-08-17 11:04:32 -03:00
Marcus Efraimsson bcd876f88e changelog: add notes about closing #12229
[skip ci]
2018-08-17 15:40:44 +02:00
Marcus Efraimsson 88b96fbd15 Merge pull request #12921 from grafana/12229_provisioning
Provisioning: Should allow one default datasource per organisation
2018-08-17 15:37:32 +02:00
Marcus Efraimsson 2bb87446be Merge pull request #12955 from grafana/12951-login-buttons
Login button issue in light theme
2018-08-17 15:31:31 +02:00
Marcus Efraimsson 0a7be2618e cleaning up test data 2018-08-17 15:00:37 +02:00
Marcus Efraimsson e3b585d862 changelog: add notes about closing #12892
[skip ci]
2018-08-17 14:44:29 +02:00
Marcus Efraimsson 313a8bd033 Merge pull request #12891 from svenklemm/unixepochgroup
add $__unixEpochGroup and $__unixEpochGroupAlias to sql datasources
2018-08-17 14:41:33 +02:00
Marcus Efraimsson eaa169cc47 docs: es versions supported 2018-08-17 14:40:50 +02:00
Marcus Efraimsson 492f5cac92 devenv: update sql dashboards 2018-08-17 14:26:28 +02:00
Marcus Efraimsson d6ad1ced6d when value in variable changes, identify which variable(s) to update
Given you have variables a, b, c, d where b depends on a, c depends on b, c, d depends on a.
When updating a only an update of b and d should be triggered since c depends on b
and c will be updated eventually when the update of b are finished.
2018-08-17 12:20:21 +02:00
Marcus Efraimsson c76513119b Merge pull request #12947 from pgiraud/patch-1
Doc - fix broken link
2018-08-17 11:21:04 +02:00
Sven Klemm 4acf4f9d36 Merge branch 'master' into postgres-query-builder 2018-08-17 10:54:44 +02:00
Patrick O'Carroll 190432296d removed inverse btn styling and added bgColor to generic oauth and grafana.com login buttons, added styling so log in button uses dark theme inverse btn styling both for dark and light theme 2018-08-17 10:40:57 +02:00
Sven Klemm 8e4db8cc3a suggest operators depending on datatype 2018-08-17 10:38:23 +02:00
Pierre GIRAUD d06c8c0e68 Doc - fix title level 2018-08-17 10:29:45 +02:00
Pierre GIRAUD ea704fcf9b Update doc about repeating panels
There's no per-row contextual menu anymore
Instead there's a  option
2018-08-17 10:29:45 +02:00
Pierre GIRAUD 04d50fb405 Doc - fix broken link 2018-08-17 10:00:17 +02:00
Leonard Gram cc50cfd9d3 build: beta versions no longer tagged as latest.
Closes #12862
2018-08-16 14:03:49 +02:00
Leonard Gram 0ce8a6a69d docs: cleanup. 2018-08-16 13:48:19 +02:00
Leonard Gram d244b59cc1 docs: docker and restarts.
Closes #10784
2018-08-16 13:48:19 +02:00
Sven Klemm 28f97a2450 update persisted parts on param change 2018-08-16 13:23:38 +02:00
Sven Klemm e84a1cbcc5 persist datatype information 2018-08-16 12:50:32 +02:00
Sven Klemm 8ced29a0e7 Don't do value suggestions for numeric and timestamp 2018-08-16 11:48:36 +02:00
Patrick O'Carroll 8877200ef4 created a class for loading buttons, added a button for when login slow on login page 2018-08-16 10:58:47 +02:00
Marcus Efraimsson 8af80b323a Merge pull request #12909 from grafana/ds-user-agent
Set User-Agent header in datasource proxied requests
2018-08-15 16:59:29 +02:00
Sven Klemm 735c4abe6c rename postgres_query.jest.ts to .test.ts 2018-08-15 12:06:32 +02:00
Sven Klemm 907e8fd77c fix variable escaping 2018-08-15 11:37:30 +02:00
Sven Klemm a2f4441f9d autodetect timescaledb when version >= 9.6 2018-08-15 10:42:15 +02:00
Leonard Gram 713fac8e78 build: duplicate docker run-script removed. 2018-08-15 10:32:39 +02:00
Sven Klemm 2d12801186 detect postgres version for saved datasources 2018-08-15 09:48:06 +02:00
Marcus Efraimsson 13921902b5 Set User-Agent header in all proxied datasource requests
Header value will be Grafana/%version%, i.e. Grafana/5.3.0
2018-08-15 09:46:59 +02:00
Sven Klemm 2606f6e715 use pointer cursor for buttons in query editor 2018-08-15 09:21:17 +02:00
Marcus Efraimsson b8671b201e Merge pull request #12879 from anwar6953/patch-1
Fix typo
2018-08-14 22:56:00 +02:00
Leonard Gram 6a8b1e14cc docs: cloudwatch dimensions reference link. 2018-08-14 16:42:20 +02:00
Sven Klemm 6d8ad3b076 require postgres 9.4+ for ordered set aggregate functions 2018-08-14 15:49:37 +02:00
Sven Klemm 9d022766ee add postgres version to datasource config 2018-08-14 15:45:55 +02:00
Sven Klemm c90eb45cef only show first/last aggregate when timescaledb is enabled 2018-08-14 15:29:29 +02:00
Sven Klemm e12d07dd68 keep jsonData in PostgresDatasource 2018-08-14 15:27:58 +02:00
Marcus Efraimsson c5c518fd17 docs: remove message property in response from get alerts http api
Fixes #12524
2018-08-14 15:17:29 +02:00
Sven Klemm 5b3b0295e8 Merge branch 'master' into postgres-query-builder 2018-08-14 15:10:16 +02:00
Marcus Efraimsson ad1cf6c2b8 changelog: add notes about closing #5623
[skip ci]
2018-08-14 14:55:07 +02:00
Marcus Efraimsson d0d6f44dee Merge pull request #11314 from BenoitKnecht/gitlab-integration
GitLab authentication backend
2018-08-14 14:50:49 +02:00
Leonard Gram 570d2fede3 build: cleanup 2018-08-14 14:48:26 +02:00
Marcus Efraimsson aed89b49c0 should allow one default datasource per organisation using provisioning 2018-08-14 14:48:14 +02:00
Leonard Gram e521e7b76d build: fixes rpm verification. 2018-08-14 14:24:04 +02:00
Marcus Efraimsson 189de87619 docs: add grafana version note for gitlab oauth 2018-08-14 14:24:02 +02:00
Benoît Knecht 5a91e670d8 docs: gitlab: add note about more restrictive API scope
If `allowed_groups` is not used with GitLab authentication, the
*read_user* scope can be used instead of *api*.
2018-08-14 14:11:48 +02:00
Benoît Knecht ce804e9981 social: gitlab_oauth: set user ID in case email changes
Set `BasicUserInfo.Id` in the value returned by
`SocialGitlab.UserInfo()`, in case the email address of the user changes
in GitLab. That way, the user association won't be lost in Grafana.
2018-08-14 14:11:48 +02:00
Benoît Knecht 47cb0c47fd docs: document GitLab authentication backend 2018-08-14 14:11:48 +02:00
Benoît Knecht 7ec146df99 social: add GitLab authentication backend
GitLab could already be used as an authentication backend by properly
configuring `auth.generic_oauth`, but then there was no way to authorize
users based on their GitLab group membership.

This commit adds a `auth.gitlab` backend, similar to `auth.github`, with
an `allowed_groups` option that can be set to a list of groups whose
members should be allowed access to Grafana.
2018-08-14 14:11:48 +02:00
Leonard Gram aefcb06ff8 build: verifies the rpm packages signatures.
Closes #12370
2018-08-14 13:45:20 +02:00
Marcus Efraimsson 332e59d314 changelog: add notes about closing #12224
[skip ci]
2018-08-14 13:42:18 +02:00
Patrick O'Carroll e6ea8f7e0b added guide for logging in to grafana for the first and how to add a datasource 2018-08-14 13:21:52 +02:00
Marcus Efraimsson 660530a3a6 Merge pull request #12914 from dehrax/12224-final
Karma to Jest: rename and cleanup
2018-08-14 12:55:23 +02:00
Sven Klemm 15c8ef6c95 Merge branch 'master' into postgres-query-builder 2018-08-14 12:51:03 +02:00
Marcus Efraimsson de25a4fe4e docs: update 2018-08-14 12:40:07 +02:00
Torkel Ödegaard a1ed3ae094 feat: add auto fit panels to shortcut modal, closes #12768 2018-08-14 12:26:08 +02:00
Marcus Efraimsson 3769df7119 changelog: add notes about closing #12680
[skip ci]
2018-08-14 12:16:46 +02:00
Marcus Efraimsson 74077be19e Merge pull request #12680 from svenklemm/timebucket
[postgres] add timescaledb option to postgres datasource
2018-08-14 12:12:43 +02:00
Marcus Efraimsson 6225efa50c docs: update postgres provisioning 2018-08-14 11:24:08 +02:00
Tobias Skarhed 86a2789541 Remove dependencies 2018-08-14 11:23:55 +02:00
Marcus Efraimsson ddc83c2a72 Merge pull request #12897 from dehrax/12224-renderer
WIP Karma to Jest: heatmap renderer (refactor)
2018-08-14 11:16:48 +02:00
Marcus Efraimsson 77ee032e41 Merge pull request #12809 from dehrax/12224-share-modal-ctrl
Karma to Jest: share_modal_ctrl
2018-08-14 10:57:15 +02:00
Tobias Skarhed a65589a5fb Rename test files 2018-08-14 10:52:41 +02:00
Marcus Efraimsson b70d594c10 changelog: add notes about closing #12598
[skip ci]
2018-08-14 10:35:34 +02:00
Sven Klemm a96d97e347 add version disclaimer for TimescaleDB 2018-08-14 10:26:08 +02:00
Marcus Efraimsson 03aed21d4b Merge pull request #12598 from kichristensen/TimeRangeVariables
Support timeFilter in query templating for InfluxDB
2018-08-14 10:24:21 +02:00
Sven Klemm d33019ca67 document TimescaleDB datasource option 2018-08-14 10:22:57 +02:00
Sven Klemm 837388d13e Use variable in newPostgresMacroEngine 2018-08-14 09:44:58 +02:00
Tobias Skarhed e696dc4d5f Remove Karma scripts and docs 2018-08-14 09:28:08 +02:00
Marcus Efraimsson 766d0bef17 changelog: add notes about closing #10705
[skip ci]
2018-08-14 09:19:37 +02:00
Torkel Ödegaard 4f704cec53 fix: ds_proxy test not initiating header 2018-08-14 09:18:23 +02:00
Marcus Efraimsson 8dbc75ceea Merge pull request #12844 from grafana/10705_dash_links
Use uid when linking to dashboards internally in a dashboard
2018-08-14 09:16:43 +02:00
Sven Klemm 3955133f7e Don't pass datasource to newPostgresMacroEngine 2018-08-14 09:15:24 +02:00
Tobias Skarhed 53bab1a84b Remove tests and logs 2018-08-14 09:15:14 +02:00
Torkel Ödegaard 0fa47c5ef4 Update CHANGELOG.md 2018-08-14 08:55:27 +02:00
Torkel Ödegaard 7e0482e78d Fix for Graphite function parameter quoting (#12907)
* fix: graphite function parameters should never be quoted for boolean, node, int and float types, fixes #11927

* Update gfunc.ts
2018-08-14 08:52:51 +02:00
Torkel Ödegaard e37931b79d Update CHANGELOG.md 2018-08-14 08:52:30 +02:00
Marcus Efraimsson 36e808834d don't render hidden columns in table panel (#12911) 2018-08-14 08:50:22 +02:00
Torkel Ödegaard 277a696fa5 fix: added missing ini default keys, fixes #12800 (#12912) 2018-08-14 08:49:56 +02:00
Sven Klemm 3552a4cb86 refactor timescaledb handling in MacroEngine 2018-08-14 08:47:33 +02:00
Torkel Ödegaard 2459b177f9 change: Set User-Agent to Grafana/%Version% Proxied-DS-Request %DS-Type% in all proxied ds requests 2018-08-13 18:09:01 +02:00
Tobias Skarhed fa6d25af72 Remove comment 2018-08-13 16:36:22 +02:00
Tobias Skarhed be7b663369 Cleanup 2018-08-13 16:36:22 +02:00
Tobias Skarhed 38422ce8a4 All tests passing 2018-08-13 16:36:22 +02:00
Tobias Skarhed 35694a76ef Class to function. Half tests passing 2018-08-13 16:36:22 +02:00
Tobias Skarhed 739bee0207 Karma to Jest: graph (refactor) (#12860)
* Begin conversion

* Test setup started

* Begin rewrite of graph

* Rewrite as class

* Some tests passing

* Fix binding errors

* Half tests passing

* Call buildFlotPairs. More tests passing

* All tests passing

* Remove test test

* Remove Karma test

* Make methods out of event functions

* Rename GraphElement
2018-08-13 16:08:01 +02:00
Torkel Ödegaard c521f51780 tech: removed js related stuff now that 99% is typescript (#12905) 2018-08-13 15:56:11 +02:00
Tobias Skarhed 472b880939 Add React container 2018-08-13 15:51:58 +02:00
Marcus Efraimsson 9031866caa changelog: add notes about closing #12805
[skip ci]
2018-08-13 15:51:19 +02:00
Marcus Efraimsson 4cebf38ff2 Merge pull request #12807 from nyxi/master
Support client certificates for LDAP servers
2018-08-13 15:48:39 +02:00
Marcus Efraimsson 39669e5002 fix redirect to panel when using an outdated dashboard slug (#12901) 2018-08-13 15:41:15 +02:00
David 1c185ef8d8 Add commit to external stylesheet url (#12902)
- currently only the release is used as a fingerprint which produces
  caching issues for all lastest master builds
- also add build commit to url fingerprint
- make bra also watch go html template files
2018-08-13 15:40:52 +02:00
Torkel Ödegaard b0f3ca16d9 Update CHANGELOG.md 2018-08-13 15:40:37 +02:00
Marcus Efraimsson b8a1385c77 build: increase frontend tests timeout without no output 2018-08-13 15:40:07 +02:00
Torkel Ödegaard f2b1fabd5c fix: Alerting rendering timeout was 30 seconds, same as alert rule eval timeout, this should be much lower so the rendering timeout does not timeout the rule context, fixes #12151 (#12903) 2018-08-13 15:38:28 +02:00
Marcus Efraimsson fd032c1111 changelog: add notes about closing #12476
[skip ci]
2018-08-13 15:18:33 +02:00
Marcus Efraimsson d110343e53 Merge pull request #12838 from grafana/12476-show-teams-on-profile
show teams on profile
2018-08-13 15:16:04 +02:00
Patrick O'Carroll 535bab1baa now hides team header when no teams + fix for list hidden when only one team 2018-08-13 15:07:29 +02:00
Tobias Skarhed e6057e08de Rename to HeatmapRenderer 2018-08-13 14:24:15 +02:00
Tobias Skarhed 2e2de38b31 Mock things 2018-08-13 13:55:47 +02:00
David Kaltschmidt 978e89657e Explore: Fix label filtering for rate queries
- exclude `]` from match expression for selector injection to ignore
  range vectors like `[10m]`
2018-08-13 12:53:12 +02:00
Sven Klemm 3f5d325e5b Merge branch 'master' into postgres-query-builder 2018-08-13 12:40:00 +02:00
Sven Klemm 8c4d59363e add $__unixEpochGroup to mssql datasource 2018-08-13 12:23:42 +02:00
Sven Klemm fbc67a1c64 add $__unixEpochGroup to mysql datasource 2018-08-13 12:17:05 +02:00
Sven Klemm bfe28ee061 Add $__unixEpochGroup macro to postgres datasource 2018-08-13 12:08:14 +02:00
Patrick O'Carroll bdd9af0864 changed const members to filteredMembers to trigger get filtered members, changed input value to team.search (#12885) 2018-08-13 11:34:16 +02:00
Sven Klemm c9bbdf244c get timecolumn datatype on timecolumn change 2018-08-13 11:29:35 +02:00
Marcus Efraimsson edb34a36a0 changelog: add notes about closing #12882
[skip ci]
2018-08-13 11:16:49 +02:00
Leonard Gram d7a0f5ee07 Removes link to deprecated docker image build 2018-08-13 11:14:24 +02:00
Tobias Skarhed a79c43420a Add mocks 2018-08-13 10:57:32 +02:00
Marcus Efraimsson c4a189ee52 Merge pull request #12880 from svenklemm/setupfillmode
Refactor setting fillmode
2018-08-13 10:47:35 +02:00
Sven Klemm 1dd8192d51 fix datatype query 2018-08-13 09:57:46 +02:00
Leonard Gram aeba01237d Changelog update 2018-08-13 09:20:17 +02:00
Leonard Gram 48713b76f3 docker: makes it possible to set a specific plugin url.
Originally from the grafana/grafana-docker repo, authored
by @ClementGautier.
2018-08-13 09:17:44 +02:00
Torkel Ödegaard 974359534f Update CHANGELOG.md 2018-08-13 07:54:49 +02:00
Julien Pivotto 48364f0111 Add support for $__range_s (#12883)
Fixes #12882

Signed-off-by: Julien Pivotto <roidelapluie@inuits.eu>
2018-08-13 07:53:41 +02:00
Sven Klemm d81a23becf Refactor setting fillmode
This adds SetupFillmode to the tsdb package to be used by the sql
datasources.
2018-08-12 10:51:58 +02:00
Sven Klemm d8606ddfb0 Merge branch 'master' into postgres-query-builder 2018-08-12 10:02:18 +02:00
Ali Anwar 5fd8849d65 Update dashboard.md 2018-08-11 23:44:15 -07:00
Ali Anwar 8d2aac0936 Fix typo 2018-08-11 23:42:31 -07:00
Tobias Skarhed 520aad819d Replace element 2018-08-10 16:30:51 +02:00
Tobias Skarhed 076bfea362 Rewrite heatmap to class 2018-08-10 15:35:47 +02:00
David Kaltschmidt 0f5945c557 Explore: still show rate hint if query is complex
- action hint currently only works for very simple queries
- show a hint w/o action otherwise
2018-08-10 15:29:21 +02:00
David Kaltschmidt a0fbe3c296 Explore: Filter out existing labels in label suggestions
- a valid selector returns all possible labels from the series API
- we only want to suggest the label keys that are not part of the
  selector yet
2018-08-10 14:45:09 +02:00
Daniel Lee 1f88bfd2bc Add note for #12843 2018-08-10 14:02:51 +02:00
Daniel Lee 2770a7bc0c Merge pull request #12843 from pgiraud/plugin_readme_links
Convert URL-like text to links in plugins readme
2018-08-10 14:01:05 +02:00
Daniel Lee c2b4bbcfc0 Merge pull request #12848 from waderobson/patch-1
Add example OR search_filter to docs
2018-08-10 13:47:31 +02:00
Daniel Lee 71630e4a7b Merge pull request #12856 from grafana/12855-team-members-delete-button
Delete button for team members page
2018-08-10 13:46:13 +02:00
David Kaltschmidt e832f91fb6 Fix initial state in split explore
- remove `edited` from query state to reset queries
- clear more properties in state
2018-08-10 13:37:15 +02:00
Patrick O'Carroll 277c735814 replaced with EmptyListCta 2018-08-10 11:31:35 +02:00
Tobias Skarhed 9188f7423c Begin conversion 2018-08-10 09:35:19 +02:00
Patrick O'Carroll 1d1370d11d changed messaging 2018-08-10 08:27:22 +02:00
Sven Klemm a4a33d80db mention time_bucket in timescaledb tooltip 2018-08-09 17:30:46 +02:00
Marcus Efraimsson 1bb3cf1c31 keep legend scroll position when series are toggled (#12845) 2018-08-09 16:04:56 +03:00
David b9f4666821 Merge pull request #12846 from grafana/davkal/explore-rules-expansion
Explore: expand recording rules for queries
2018-08-09 14:34:08 +02:00
Patrick O'Carroll f339b3502a replaced confirm delete modal with deleteButton component in teams members list 2018-08-09 12:56:55 +02:00
Patrick O'Carroll 584a9cd942 [wip]added empty list cta to team list, if statement toggles view for when the list is empty or not 2018-08-09 11:05:20 +02:00
David 1c63f7a61f Update NOTICE.md 2018-08-09 10:51:04 +02:00
David Kaltschmidt 9d66eeb10c Fix padding for metrics chooser in explore 2018-08-09 10:21:54 +02:00
Sven Klemm d2984f3b0f fix rebase error 2018-08-09 10:14:14 +02:00
Sven Klemm acd1acba2d revert passing ctrl to testDatasource 2018-08-09 10:05:35 +02:00
Sven Klemm c3aad10047 change timescaledb to checkbox instead of select 2018-08-09 10:05:35 +02:00
Sven Klemm b987aee7cf add timescaledb option to postgres datasource
This adds an option to the postgres datasource config for
timescaledb support. When set to auto it will check for
timescaledb when testing the datasource.

When this option is enabled the $__timeGroup macro will
use the time_bucket function from timescaledb to group
times by an interval.

This also passes the datasource edit control to testDatasource
to allow for setting additional settings, this might be useful
for other datasources aswell which have optional or version
dependant features which can be queried.
2018-08-09 10:05:35 +02:00
Leonard Gram d48f1f57f0 build: fixes png rendering in the docker based docker-image build. 2018-08-09 09:10:53 +02:00
Dan Cech 8d0a100b94 remove duplicated /tmp entry in .dockerignore 2018-08-09 09:10:53 +02:00
Dan Cech c025490518 move run script, update README 2018-08-09 09:10:53 +02:00
Dan Cech 96d6657b00 produce an image compatible with grafana-docker 2018-08-09 09:10:53 +02:00
Lorenz Brun c89f21ba29 More efficient builds and some fixes to the Go binaries 2018-08-09 09:10:53 +02:00
Lorenz Brun a5d1fb7e56 Simple Docker-based build option
This Dockerfile allows anyone with a recent version of Docker to quickly build a fully working Grafana container without any local build tooling. Pulling the sources from Git and calling `docker build .` is enough.
2018-08-09 09:10:53 +02:00
Wade Robson 62a25a4f28 Add example OR search_filter to docs 2018-08-08 09:13:28 -07:00
David Kaltschmidt 128a5d98e1 Explore: expand recording rules for queries
- load recording rules from prometheus
- map rule name to rule query
- query hint to detect recording rules in query
- click on hint fix expands rule name to query
2018-08-08 16:56:21 +02:00
David c1b9bbc2cf Explore: Query hints for prometheus (#12833)
* Explore: Query hints for prometheus

- time series are analyzed on response
- hints are shown per query
- some hints have fixes
- fix rendered as link after hint
- click on fix executes the fix action

* Added tests for determineQueryHints()

* Fix index for rate hints in explore
2018-08-08 17:50:30 +03:00
Pierre GIRAUD d7fb704e27 Convert URL-like text to links in plugins readme 2018-08-08 16:07:33 +02:00
Marcus Efraimsson e97251fe28 skip target _self to remove full page reload 2018-08-08 16:01:35 +02:00
Marcus Efraimsson 8dfe4a97ef use uid when linking to dashboards internally in a dashboard 2018-08-08 16:01:01 +02:00
Sven Klemm 13d0fa4b9a add previous fill mode to query builder 2018-08-08 12:23:41 +02:00
Sven Klemm 3b6454ab88 Merge branch 'master' into postgres-query-builder 2018-08-08 12:09:17 +02:00
Patrick O'Carroll a94406ac53 added more info about the teams 2018-08-08 11:22:47 +02:00
Patrick O'Carroll ca06893e69 removed mock-teams, now gets teams from backend 2018-08-08 10:50:27 +02:00
Marcus Efraimsson 817179c097 changelog: add notes about closing #12756
[skip ci]
2018-08-08 10:33:30 +02:00
Marcus Efraimsson 8952137ea2 Merge pull request #12753 from svenklemm/sql-fillmode-last
Add fill mode to fill in previously seen value when point is missing to SQL datasources
2018-08-08 10:29:56 +02:00
Marcus Efraimsson beddfdd86b add api route for retrieving teams of signed in user 2018-08-08 10:26:05 +02:00
Marcus Efraimsson 9938835dde devenv: update sql dashboards 2018-08-08 09:47:45 +02:00
Patrick O'Carroll b0ddc15e1a team list for profile page + mock teams 2018-08-08 09:23:36 +02:00
Marcus Efraimsson 89298d0cf5 Merge pull request #12815 from tariq1890/url_query_fix
Fixing bug in url query reader and added test cases
2018-08-08 09:18:32 +02:00
Marcus Efraimsson a6a29f0b20 changelog: add notes about closing #11270
[skip ci]
2018-08-08 09:13:44 +02:00
Marcus Efraimsson c67bec5487 Merge pull request #12834 from grafana/11270_secret_fields
Fix issue with secret fields after updating datasource
2018-08-08 09:11:07 +02:00
Marcus Efraimsson 77b561cf14 Merge pull request #12835 from bdeluca/patch-1
fix missing *
2018-08-08 09:02:58 +02:00
tariq1890 e8dfbe94b1 Fixing bug in url query reader and added test cases 2018-08-07 18:43:59 -07:00
Ben de Luca a156b6ee06 fix missing *
The missing * causes the text to be in the box to be displayed incorrectly.
2018-08-07 22:32:02 +02:00
Sven Klemm 52c7edf2f4 rename last fillmode to previous 2018-08-07 21:11:51 +02:00
Sven Klemm ee7602ec1f change fillmode from last to previous 2018-08-07 21:01:41 +02:00
David 91d04b87ad Merge pull request #12821 from grafana/davkal/explore-query-ux
Explore: prometheus query helpers
2018-08-07 17:56:08 +02:00
Marcus Efraimsson eb1b9405b2 return proper payload from api when updating datasource 2018-08-07 17:56:02 +02:00
David Kaltschmidt 2961c3b3b9 Review feedback
- use color variables for cascader styles
- fix Table value type
2018-08-07 17:42:00 +02:00
Marcus Efraimsson e9746db5ab changelog: update #12768
[skip ci]
2018-08-07 17:02:46 +02:00
Marcus Efraimsson cfe81510f9 Merge pull request #12796 from dehrax/12768-panel-heights
WIP: Fit panels to screen height
2018-08-07 15:57:40 +02:00
Tobias Skarhed 2ad358215a Remove window 2018-08-07 14:49:11 +02:00
Tobias Skarhed a0da66610e Fix url param errors 2018-08-07 14:48:22 +02:00
David Kaltschmidt 642374de25 Explore: Metrics chooser for prometheus
- load all histogrammable metrics on start, based on `{le!=''}` series
  query
- select dropdown shows all those metrics as well as histograms in a
  special group
- select a metric will write fill the metric in the query box
- if a histogram is chosen, it will write a complete
  `histogram_quantile` query
- added new dependency: rc-cascader
2018-08-07 13:43:32 +02:00
David Kaltschmidt 307248f713 Add clear row button
- clears the content of a query row
2018-08-07 13:43:32 +02:00
David Kaltschmidt 00f04f4ea0 Add clear button to Explore
- Clear All button to clear all queries and results
- moved result viewer buttons below query rows to make it more clear
  that they govern result options
2018-08-07 13:42:32 +02:00
David f43735ac25 Merge pull request #12813 from grafana/davkal/explore-empty-results
Explore: show message if queries did not return data
2018-08-07 13:40:32 +02:00
David Kaltschmidt f1c1633d15 Explore: show message if queries did not return data
- every result viewer displays a message that it received an empty data
  set
2018-08-07 13:03:33 +02:00
David 0f94d2f5f1 Fix closing parens completion for prometheus queries in Explore (#12810)
- position was determined by SPACE, but Prometheus selectors can
  contain spaces
- added negative lookahead to check if space is outside a selector
- moved braces plugin into PromQueryField since braces are prom specific
2018-08-07 13:34:12 +03:00
Torkel Ödegaard 4a387a9655 Update ROADMAP.md 2018-08-07 11:43:04 +02:00
Torkel Ödegaard 433b0abf6d Update ROADMAP.md 2018-08-07 11:36:17 +02:00
Torkel Ödegaard e115e600db Update ROADMAP.md 2018-08-07 11:35:05 +02:00
David 34761205fd Merge pull request #12799 from grafana/davkal/explore-history
Explore: Add history to query fields
2018-08-06 17:46:15 +02:00
Leonard Gram a73fc4a688 Smaller docker image (#12824)
* build: makes the grafana docker image smaller.

* build: branches and PR:s builds the docker image.
2018-08-06 17:34:25 +02:00
Marcus Efraimsson b3c25076d0 Merge pull request #12746 from grafana/11305_mssql_logo
Mssql: add logo
2018-08-06 17:19:53 +02:00
Marcus Efraimsson 8a1b620551 Merge pull request #12823 from dadosch/master
unix socket docs
2018-08-06 17:12:40 +02:00
Leonard Gram 0d9870d9f1 build: failing to push to docker hub fails the build. 2018-08-06 16:26:59 +02:00
David Kaltschmidt cda3b01781 Reversed history direction for explore
- _.reverse() was modifying state.history
2018-08-06 14:45:03 +02:00
David Kaltschmidt eaff7b0f68 Explore: Add history to query fields
- queries are saved to localstorage history array
- one history per datasource type (plugin ID)
- 100 items kept with timestamps
- history suggestions can be pulled up with Ctrl-SPACE
2018-08-06 14:45:03 +02:00
dadosch 4e33314c14 unix socket docs 2018-08-06 14:40:30 +02:00
Leonard Gram dc60828407 Merge pull request #12798 from grafana/grafana-docker
Merges the Grafana docker build into the main repository.
2018-08-06 14:39:51 +02:00
David 5da3584dd4 Explore: facetting for label completion (#12786)
* Explore: facetting for label completion

- unified metric and non-metric label completion
- label keys and values are now fetched fresh for each valid selector
- complete selector means only values are suggested that are supported
  by the selector
- properly implemented metric lookup for selectors (until the first
  metric was used which breaks when multiple metrics are present)
- typeahead tests now need a valid selection to demark the cursor

* Fix facetting queries for empty selector
2018-08-06 15:36:02 +03:00
Leonard Gram 3096905d39 docs: how to build a docker image. 2018-08-06 14:16:35 +02:00
Marcus Efraimsson e60d0c12f5 Merge pull request #12787 from dehrax/12224-variable-srv
Karma to Jest: variable_srv
2018-08-06 11:34:43 +02:00
Tobias Skarhed 9f87f6081a Remove Karma test 2018-08-06 11:23:50 +02:00
Tobias Skarhed 46dd4eba9e All tests passing 2018-08-06 11:23:50 +02:00
Tobias Skarhed 034ca69610 Add mock constructor 2018-08-06 11:23:50 +02:00
Tobias Skarhed 7f4723a9a7 Begin conversion 2018-08-06 11:23:50 +02:00
Marcus Efraimsson ca0339fb48 Merge pull request #12819 from dehrax/12224-opentsdb-ds
Karma to Jest: OpenTSDB datasource
2018-08-06 11:22:01 +02:00
Tobias Skarhed ccd964e1df Convert query control 2018-08-06 10:57:58 +02:00
Tobias Skarhed 45eadae692 Convert datasource 2018-08-06 10:42:35 +02:00
Torkel Ödegaard 624f3a0173 refactor: take submenu into account PR #12796 2018-08-05 11:39:46 +02:00
Torkel Ödegaard b1b8a38061 refactor: renaming variables, refactoring PR #12796 2018-08-05 11:39:46 +02:00
Torkel Ödegaard 013f8cd8ea refactor: moving code around a bit, refactoring PR #12796 2018-08-05 11:39:46 +02:00
Tobias Skarhed f00b5eee83 Remove weird import 2018-08-05 11:39:46 +02:00
Tobias Skarhed 4b84a58575 Disable submenu when autopanels is enabled 2018-08-05 11:39:46 +02:00
Tobias Skarhed 36c406eefb Extract to own method 2018-08-05 11:39:46 +02:00
Tobias Skarhed 1618b095c7 Use and add keybard shortcut 2018-08-05 11:39:46 +02:00
Tobias Skarhed 63fa9fdc6d Add temporary url parameter 2018-08-05 11:39:46 +02:00
Tobias Skarhed 338a37abc8 Replace floor with round 2018-08-05 11:39:46 +02:00
Tobias Skarhed 9e4748e2aa Go with just single margin compensation 2018-08-05 11:39:46 +02:00
Tobias Skarhed 78b3dc40f1 Add margin and padding compensation 2018-08-05 11:39:46 +02:00
Tobias Skarhed a9f24bb36d Remove weird import 2018-08-05 11:39:45 +02:00
Tobias Skarhed 818fe09a7f Fit panels to screen height 2018-08-05 11:39:45 +02:00
Sven Klemm 6d07d825e9 dont break default parameters for functions 2018-08-03 18:38:40 +02:00
Sven Klemm e4ae8be9fa fix suggestion query 2018-08-03 14:09:41 +02:00
Marcus Efraimsson 6f1b125c48 Merge pull request #12808 from dehrax/12224-simple
Karma to Jest: remove tests
2018-08-03 13:38:57 +02:00
David Kaltschmidt c900a30106 renamed slate unit tests to .jest.ts 2018-08-03 13:09:05 +02:00
Tobias Skarhed 61eb96ed79 Remove simple tests 2018-08-03 12:34:13 +02:00
Emil Flink 5bea54eaaa Support client certificates for LDAP servers 2018-08-03 12:00:20 +02:00
Tobias Skarhed 61e3a0cceb Begin conversion 2018-08-03 11:57:03 +02:00
David bda49fcaa2 Add click on explore table cell to add filter to query (#12729)
* Add click on explore table cell to add filter to query

- move query state from query row to explore container to be able to set
  modified queries
- added TS interface for columns in table model
- plumbing from table cell click to datasource
- add modifyQuery to prometheus datasource
- implement addFilter as addLabelToQuery with tests

* Review feedback

- using airbnb style for Cell declaration
- fixed addLabelToQuery for complex label values
2018-08-03 11:20:13 +03:00
Sven Klemm aa830211fe dont order for aggregate 2018-08-03 10:15:28 +02:00
Leonard Gram 0ff54d257a build: makes it easier to build a local docker container. 2018-08-03 09:40:02 +02:00
Sven Klemm dabfd88cd9 add moving average to query builder 2018-08-03 07:44:36 +02:00
Sven Klemm 0b57e88f9e adjust frontend test 2018-08-03 06:19:53 +02:00
Sven Klemm 2cae966e6c use $__timeGroupAlias macro 2018-08-02 21:40:15 +02:00
Sven Klemm 5c25844cd9 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-08-02 21:11:16 +02:00
Sven Klemm 83d7ec1da2 specify grafana version for last fill mode 2018-08-02 20:37:41 +02:00
Sven Klemm bfc66a7ed0 add fillmode "last" to sql datasource
This adds a new fill mode last (last observation carried forward) for grafana
to the sql datasources. This fill mode will fill in the last seen value in a
series when a timepoint is missing or NULL if no value for that series has
been seen yet.
2018-08-02 20:35:09 +02:00
Leonard Gram b61ac546f1 build: disables external docker build for master and release. 2018-08-02 19:24:05 +02:00
Leonard Gram 99a9dbb04f build: complete docker build for master and releases. 2018-08-02 19:24:05 +02:00
Leonard Gram 424aa6e564 build: removes unused args to docker build. 2018-08-02 19:24:05 +02:00
Leonard Gram 580e2c36d1 build: imported latest changes from grafana-docker. 2018-08-02 19:24:05 +02:00
Leonard Gram e848930476 build: attach built resources. 2018-08-02 19:24:05 +02:00
Leonard Gram e3a907214d build: builds docker image from local grafna tgz. 2018-08-02 19:24:05 +02:00
Leonard Gram bfe41d3cf1 build: new workflow for PR:s and branches. 2018-08-02 19:24:05 +02:00
Leonard Gram 62d3655da4 docker: inital copy of the grafana-docker files. 2018-08-02 19:24:05 +02:00
Marcus Efraimsson 72af8a7044 changelog: add notes about closing #1823 #12801
[skip ci]
2018-08-02 18:57:13 +02:00
Marcus Efraimsson 116c4f2bff Merge pull request #12802 from gzzo/patch-1
Add auto_assign_org_id to defaults.ini
2018-08-02 18:49:43 +02:00
gzzo cb76fc7f2d Add auto_assign_org_id to defaults.ini
For #12801
2018-08-02 12:29:47 -04:00
Marcus Efraimsson 7f85dd055e changelog: add notes about closing #12749
[skip ci]
2018-08-02 16:44:29 +02:00
Sven Klemm 67edb9e9fe Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-08-02 16:39:27 +02:00
Marcus Efraimsson e5178b7d1d changelog: add notes about closing #12766
[skip ci]
2018-08-02 16:37:52 +02:00
Marcus Efraimsson 5cca478656 Merge pull request #12760 from svenklemm/postgres-timegroup
remove alias from postgres $__timeGroup macro

add $__timeGroupAlias macro to all sql datasources
2018-08-02 16:36:01 +02:00
Marcus Efraimsson 4d3e435298 Merge pull request #12774 from grafana/12766-table-colored-cell-link
table link color fix
2018-08-02 16:32:09 +02:00
Marcus Efraimsson 7f4f130a80 adjust test dashboards 2018-08-02 16:21:49 +02:00
Marcus Efraimsson 4962bf9d44 remove info logging 2018-08-02 15:49:50 +02:00
Patrick O'Carroll ff0ca6b7e2 added two new classes for color, fixed so link has value color 2018-08-02 15:25:48 +02:00
Marcus Efraimsson 76f131aa80 changelog: add notes about closing #12063
[skip ci]
2018-08-02 15:09:23 +02:00
Marcus Efraimsson c074c842e6 Merge pull request #12063 from A21z/patch-1
Add new Redshift metrics and dimensions for Cloudwatch datasource
2018-08-02 15:05:24 +02:00
Alban Perillat-Merceroz f3d400f1a7 Add new Redshift metrics and dimensions for Cloudwatch datasource
AWS/Redshift has new dimensions (`latency`, `service class`, `wmlid`) and metrics (`QueriesCompletedPerSecond`, `QueryRuntimeBreakdown`, `QueryDuration`,  `WLMQueriesCompletedPerSecond`, `WLMQueryDuration`, `WLMQueueLength`) in Cloudwatch: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/rs-metricscollected.html
2018-08-02 14:45:24 +02:00
Marcus Efraimsson ae0d7a3a5d changelog: add notes about closing #12752
[skip ci]
2018-08-02 12:54:33 +02:00
Marcus Efraimsson de1a0e4789 changelog: update
[skip ci]
2018-08-02 12:51:23 +02:00
andig 57910549b6 Improve iOS and Windows 10 experience (#12769)
* Improve iOS homescreen icon

* Improve Windows10 tile experience

* Remove unused favicon
2018-08-02 03:37:50 -07:00
Torkel Ödegaard 169fcba520 Update CHANGELOG.md 2018-08-02 11:51:41 +02:00
Mitsuhiro Tanda 04fcd2a054 add series override option to hide tooltip (#12378)
* add series override option to hide tooltip

* fix test

* invert option

* fix test

* remove initialization
2018-08-02 02:49:40 -07:00
Marcus Efraimsson a8976f6c36 changelog: add notes about closing #12785
[skip ci]
2018-08-02 11:43:48 +02:00
Marcus Efraimsson 9fa779315e Merge pull request #12791 from eMerzh/fix_quote
fix custom variable quoting in sql* query interpolations
2018-08-02 11:37:46 +02:00
Patrick O'Carroll b03e3242e3 removed table-panel-link class 2018-08-02 11:21:17 +02:00
Patrick O'Carroll 36d981597e removed table-panel-link class and add a class white to modify table-panel-cell-link class 2018-08-02 11:18:21 +02:00
Sven Klemm 7e9c9199c1 add warning when switching from raw sql mode 2018-08-02 10:15:53 +02:00
Sven Klemm a221d9ec84 add more prominent button for switching edit mode 2018-08-02 09:50:21 +02:00
Sven Klemm 5c3b80b492 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-08-02 09:17:21 +02:00
Sven Klemm 82c473e3af document $__timeGroupAlias 2018-08-01 21:23:00 +02:00
Sven Klemm b71d10a7a4 add $__timeGroupAlias to mysql and mssql 2018-08-01 20:58:51 +02:00
Brice Maron bb7e583863 fix custom variable quoting in sql* query interpolations 2018-08-01 20:32:50 +02:00
Marcus Efraimsson 9d3743774d Merge pull request #12771 from dehrax/12224-prometheus-ds
Karma to Jest: prometheus datasource
2018-08-01 15:06:36 +02:00
Sven Klemm dc22e24642 add compatibility code to handle pre 5.3 usage 2018-08-01 15:06:18 +02:00
Tobias Skarhed 951b623bd2 Change to arrow functions 2018-08-01 14:27:45 +02:00
Tobias Skarhed af32bfebef Add all tests to one file 2018-08-01 14:26:29 +02:00
Marcus Efraimsson 8d0c4cdc09 changelog: add notes about closing #12561
[skip ci]
2018-08-01 12:30:50 +02:00
Marcus Efraimsson 951679d50b Merge pull request #12561 from activeshadow/aws-rds-burst-balance
Added BurstBalance metric to list of AWS RDS metrics.
2018-08-01 12:28:15 +02:00
Tobias Skarhed 790aadf8ef Remove angularMocks 2018-08-01 10:09:05 +02:00
Tobias Skarhed d6158bc293 All tests passing 2018-08-01 09:30:26 +02:00
Patrick O'Carroll d4d896ade8 replaced style with class for links 2018-08-01 09:08:17 +02:00
Sven Klemm 42f1892826 Add $__timeGroupAlias to postgres macros 2018-08-01 09:03:34 +02:00
Sven Klemm bd77541e09 adjust test dashboards 2018-08-01 08:52:11 +02:00
Sven Klemm 43295f9c18 remove alias from postgres $__timeGroup macro 2018-08-01 08:50:19 +02:00
Marcus Efraimsson 6df3722a35 changelog: add notes about closing #12762
[skip ci]
2018-07-31 18:01:36 +02:00
Marcus Efraimsson dfda51a9be Merge pull request #12762 from sohonet/add_cloudwatch_aws_dx
add AWS/DX metrics and dimension to cloudwatch
2018-07-31 17:58:32 +02:00
Torkel Ödegaard 89eae1566d fix: team email tooltip was not showing 2018-07-31 17:31:45 +02:00
Torkel Ödegaard 276a5e6eb5 fix: test data api route used old name for test data datasource, fixes #12773 2018-07-31 17:29:02 +02:00
Patrick O'Carroll 4b8ec4e323 removed a blank space in div 2018-07-31 13:07:43 +02:00
Sven Klemm b8af68e05a Merge branch 'master' into postgres-query-builder 2018-07-31 13:04:27 +02:00
Patrick O'Carroll 7b5b94607b fixed color for links in colored cells by adding a new variable that sets color: white when cell or row has background-color 2018-07-31 12:51:07 +02:00
Marcus Efraimsson f1f0400769 changelog: add notes about closing #12300
[skip ci]
2018-07-31 11:41:58 +02:00
Marcus Efraimsson 3cecc0b54e Merge pull request #12301 from franciscocpg/cloudwatch-app-sync
Adding Cloudwatch AWS/AppSync metrics and dimensions
2018-07-31 11:38:31 +02:00
Tobias Skarhed e4c2476f3c Weird execution order for the tests... 2018-07-31 09:35:08 +02:00
Marcus Efraimsson ad84a145f5 changelog: add notes about closing #12744
[skip ci]
2018-07-30 17:03:24 +02:00
Marcus Efraimsson 162d3e8036 changelog: add notes about closing #12727
[skip ci]
2018-07-30 17:03:01 +02:00
Marcus Efraimsson 49430f7557 Merge pull request #12744 from Worty/master
change units to include characters for power of 2 and 3
2018-07-30 16:59:12 +02:00
Jason Pereira 88d8072be3 add aws_dx to cloudwatch datasource 2018-07-30 15:51:15 +01:00
Worty 4fa979649c also fixed "Watt per square metre" 2018-07-30 16:28:19 +02:00
Worty 9c0fbe5a0b fixed that missing one 2018-07-30 16:19:31 +02:00
Sven Klemm 6613f11499 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-07-30 15:23:56 +02:00
Marcus Efraimsson e648ed197f Merge pull request #12679 from svenklemm/postgres-metric-prefix
Use metric column as prefix when returning multiple value columns
2018-07-30 14:50:11 +02:00
Sven Klemm 8a22129177 add version note to metric prefix and fix typo 2018-07-30 14:37:23 +02:00
Marcus Efraimsson 917b6b11b0 devenv: update sql dashboards 2018-07-30 13:54:57 +02:00
Marcus Efraimsson 38a52c2489 mssql: update tests 2018-07-30 13:50:52 +02:00
Marcus Efraimsson e32cf75c2d fix usage of metric column types so that you don't need to specify metric alias 2018-07-30 13:50:18 +02:00
Tobias Skarhed 3d4a346c66 Begin conversion 2018-07-30 13:02:08 +02:00
Marcus Efraimsson e4983cba2f changelog: update
[skip ci]
2018-07-30 10:21:22 +02:00
Marcus Efraimsson 13a7b638bc changelog: add notes about closing #12747
[skip ci]
2018-07-30 10:19:51 +02:00
Jan Garaj e37e8cb38c Add missing tls_skip_verify_insecure (#12748) 2018-07-30 00:02:16 -07:00
Sven Klemm ace999b13f rename special to windows 2018-07-29 15:56:22 +02:00
Sven Klemm 26ea88252b add first and last support 2018-07-29 15:00:13 +02:00
Sven Klemm d7ddab958e Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-07-29 13:41:41 +02:00
Sven Klemm 412bb6acab refactor function handling in query builder 2018-07-29 13:31:50 +02:00
Sven Klemm 5327580939 refactor column function handling 2018-07-28 21:41:23 +02:00
Sven Klemm 6ca7a03975 consistent nameing fro group and select 2018-07-28 12:53:36 +02:00
Marcus Efraimsson 20b2b344f6 mssql: add logo 2018-07-28 11:31:30 +02:00
Sven Klemm 3aa4790979 add tests for metric column prefix to mssql 2018-07-27 18:13:19 +02:00
Sven Klemm e487fabcd5 add metric column prefix test for mysql 2018-07-27 17:59:59 +02:00
Sven Klemm 036647ae35 document metric column prefix in query editor 2018-07-27 17:18:45 +02:00
Marcus Efraimsson 8188679951 Merge pull request #12745 from dehrax/12224-heatmap-ctrl
Karma to Jest: heatmap_ctrl
2018-07-27 17:18:15 +02:00
Marcus Efraimsson 710566e146 Merge pull request #12742 from dehrax/12224-backend-srv
Karma to Jest: backend_srv
2018-07-27 17:17:54 +02:00
Marcus Efraimsson 86d75a64c1 Merge pull request #12737 from dehrax/12224-singlestat
Karma to Jest: singlestat
2018-07-27 17:17:09 +02:00
Sven Klemm bc9b6ddefe document metric column prefix for mysql and mssql 2018-07-27 17:14:27 +02:00
Tobias Skarhed 805dc3542f Remove extra mock 2018-07-27 16:46:41 +02:00
Tobias Skarhed 26f709e87e Karm to Jest 2018-07-27 16:45:03 +02:00
Worty 895b4b40ee correct volume unit 2018-07-27 16:26:04 +02:00
Tobias Skarhed c11d0f5cc6 Remove lo 2018-07-27 15:52:22 +02:00
Tobias Skarhed 2f6b302375 Test passing. Remove Karma 2018-07-27 15:51:56 +02:00
Sven Klemm 7905c29875 adjust metric prefix code to sql engine refactor 2018-07-27 15:34:04 +02:00
Sven Klemm f9d6c88a55 add testcase for metric column as prefix 2018-07-27 15:32:54 +02:00
Sven Klemm b28a362635 Use metric column as prefix
If multiple value columns are returned and a metric column is
returned aswell the metric column will be used as prefix for
the series name
2018-07-27 15:32:53 +02:00
Tobias Skarhed 766c23a1eb Fix emit errors 2018-07-27 15:16:19 +02:00
Tobias Skarhed 2db4a54f75 Fix test 2018-07-27 14:40:56 +02:00
Tobias Skarhed 4e6168f3a3 Add async/await 2018-07-27 14:22:48 +02:00
Marcus Efraimsson 715c82b67b Merge pull request #12740 from grafana/unused-class-from-deletebutton
removed unused class from the deletebutton pr
2018-07-27 14:13:41 +02:00
Marcus Efraimsson 02ba467bf1 Merge pull request #12730 from marefr/sql_refactor
SQL datasources - backend refactor
2018-07-27 14:13:19 +02:00
Sven Klemm ad26a319c5 refactor schema query generation 2018-07-27 14:02:12 +02:00
Patrick O'Carroll 971e52ecc9 removed unused class from the deletebutton pr 2018-07-27 13:48:14 +02:00
Patrick O'Carroll 1bb5a57036 frontend part with mock-team-list 2018-07-27 13:45:16 +02:00
Tobias Skarhed 55111c801f Update test for local time 2018-07-27 13:41:07 +02:00
Marcus Efraimsson b4ac3f2379 update devenv datasources and dashboards for sql datasources 2018-07-27 13:33:50 +02:00
Tobias Skarhed 67c613a45a Begin conversion 2018-07-27 13:29:57 +02:00
Marcus Efraimsson e43feb7bfa use const for rowlimit in sql engine 2018-07-27 13:21:40 +02:00
Marcus Efraimsson 0550ec6de1 Merge pull request #12665 from grafana/9863-animated-delete-button
built a component for delete button in tables
2018-07-27 12:37:53 +02:00
Sven Klemm 734118de86 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-07-27 11:52:38 +02:00
Tobias Skarhed bff7a29356 Cleanup 2018-07-27 11:34:14 +02:00
Tobias Skarhed 3d21e42aac Remove Karma file 2018-07-27 11:30:37 +02:00
Tobias Skarhed 47da3e3ae8 All tests passing 2018-07-27 11:28:16 +02:00
Tobias Skarhed 675a031b6c All except one passing 2018-07-27 11:04:01 +02:00
Sven Klemm 97f24733f5 remove tableschema from query builder ui 2018-07-27 10:58:08 +02:00
Marcus Efraimsson 48e5e65c73 changelog: add notes about closing #12731
[skip ci]
2018-07-27 10:33:06 +02:00
Marcus Efraimsson 13fa3a8378 Merge pull request #12734 from grafana/12731_fix_index_pattern
elasticsearch: fix index patterns
2018-07-27 10:22:02 +02:00
Marcus Efraimsson ab8fa0de74 elasticsearch: support reversed index patterns
Now both [index-]pattern and pattern[-index] are supported
2018-07-26 21:39:02 +02:00
Marcus Efraimsson 318b8c5a23 update devenv datasources and dashboards for sql datasources
Removed dashboards from docker blocks
2018-07-26 18:12:00 +02:00
Marcus Efraimsson 4f7882cda2 mssql: use new sql engine 2018-07-26 18:11:10 +02:00
Marcus Efraimsson 27db454012 mysql: use new sql engine 2018-07-26 18:10:45 +02:00
Marcus Efraimsson 2f3851b915 postgres: use new sql engine 2018-07-26 18:10:17 +02:00
Marcus Efraimsson d42cea5d42 refactor sql engine to make it hold all common code for sql datasources 2018-07-26 18:09:42 +02:00
Tobias Skarhed fc06f8bfe7 Pass more tests 2018-07-26 17:22:15 +02:00
David 7699451d94 Refactor Explore query field (#12643)
* Refactor Explore query field

- extract typeahead field that only contains logic for the typeahead
  mechanics
- renamed QueryField to PromQueryField, a wrapper around TypeaheadField
  that deals with Prometheus-specific concepts
- PromQueryField creates a promql typeahead by providing the handlers
  for producing suggestions, and for applying suggestions
- The `refresher` promise is needed to trigger a render once an async
  action in the wrapper returns.

This is prep work for a composable query field to be used by Explore, as
well as editors in datasource plugins.

* Added typeahead handling tests

- extracted context-to-suggestion logic to make it testable
- kept DOM-dependent parts in main onTypeahead funtion

* simplified error handling in explore query field

* Refactor query suggestions

- use monaco's suggestion types (roughly), see
  https://github.com/Microsoft/monaco-editor/blob/f6fb545/monaco.d.ts#L4208
- suggest functions and metrics in empty field (ctrl+space)
- copy and expand prometheus function docs from prometheus datasource
  (will be migrated back to the datasource in the future)

* Added prop and state types, removed unused cwrp

* Split up suggestion processing for code readability
2018-07-26 15:04:12 +03:00
Tobias Skarhed 88e91b3f51 Begin conversion 2018-07-26 10:44:40 +02:00
David 1db2e869c5 Merge pull request #12718 from grafana/davkal/ts-options
Add tslib to TS compiler
2018-07-26 10:41:14 +02:00
Marcus Efraimsson 751f68ab47 Merge pull request #12723 from dehrax/12224-variable-srv
Karma to Jest: variable_srv_init
2018-07-26 10:32:14 +02:00
Tobias Skarhed 35cc85bfcc All tests passing. Remove Karma test. 2018-07-26 09:36:46 +02:00
Tobias Skarhed 931b944cdd Almost all tests passing 2018-07-25 17:38:45 +02:00
David Kaltschmidt 84e431d377 Add tslib to TS compiler
- using tslib reduces bundle sizes
- add compiler option for easier default imports of CJS modules
- remove double entry of fork-ts-checker-plugin
- speed up hot reload by using exprimental ts-loader API
2018-07-25 17:06:44 +02:00
Marcus Efraimsson 48d9b37559 Merge pull request #12693 from dehrax/docs-prom-queryvars
Docs: Prometheus template query variables
2018-07-25 16:32:08 +02:00
Marcus Efraimsson 0f99e624b6 docs: using interval and range variables in prometheus
Included example usages
2018-07-25 16:20:00 +02:00
Tobias Skarhed 7d51c15240 Two passing tests 2018-07-25 16:15:03 +02:00
Tobias Skarhed f350461206 Start conversion 2018-07-25 14:52:03 +02:00
Marcus Efraimsson 7e773e2d5e changelog: add notes about closing #12533
[skip ci]
2018-07-25 14:14:25 +02:00
Marcus Efraimsson 9c40028d58 changelog: add notes about closing #12668
[skip ci]
2018-07-25 13:22:55 +02:00
Marcus Efraimsson 45762d04e3 changelog: update
[skip ci]
2018-07-25 11:55:34 +02:00
Marcus Efraimsson 5fbd8ada3c changelog: add notes about closing #12668
[skip ci]
2018-07-25 11:54:51 +02:00
Marcus Efraimsson 81a041b50c Merge pull request #12672 from grafana/12668-blue-in-light-theme
adjust table header contrast for the light theme
2018-07-25 11:49:45 +02:00
Patrick O'Carroll df62282c11 fix for typeahead background, increased lighten 2018-07-25 11:27:43 +02:00
Patrick O'Carroll f4ab432542 added position absolute and some flexbox so I could remov changes in display and setTimeout, added tests and types, did some renaming 2018-07-25 10:29:55 +02:00
Marcus Efraimsson 35920838aa Merge pull request #12709 from mtanda/cw_404_err_fix
fix invalid reference
2018-07-25 09:13:52 +02:00
Mitsuhiro Tanda 055d208a32 fix invalid reference 2018-07-25 11:27:43 +09:00
Marcus Efraimsson 582652145f minor fixes 2018-07-24 19:21:23 +02:00
Marcus Efraimsson 01ba973c86 Merge pull request #12707 from grafana/fix_failing_test
fix failing test due to time diff issues
2018-07-24 19:18:06 +02:00
Marcus Efraimsson 1dd9646a50 fix failing test due to time diff issues 2018-07-24 19:05:09 +02:00
Marcus Efraimsson 27b386c91d Merge pull request #12706 from dehrax/12224-graphite-query-ctrl
Karma to Jest: graphite query_ctrl
2018-07-24 19:02:50 +02:00
Tobias Skarhed ce9b25a5ac Remove comments 2018-07-24 18:30:29 +02:00
Marcus Efraimsson d8d748d2aa remove unneeded comment 2018-07-24 17:40:00 +02:00
Marcus Efraimsson 74b4d2efd5 Merge pull request #12704 from dehrax/12224-completer
Karma to Jest: completer
2018-07-24 17:37:43 +02:00
Tobias Skarhed 27c081349f Remove old influx stuff 2018-07-24 17:03:58 +02:00
Marcus Efraimsson 1c4dd6f2f7 Merge pull request #12702 from dehrax/12224-influx-query-ctrl
Karma to Jest: influx query_ctrl
2018-07-24 16:58:01 +02:00
Marcus Efraimsson 04c91601a4 Merge pull request #12699 from grafana/docs-reloading-configs
docs: mentation that config changes requires restart.
2018-07-24 16:47:18 +02:00
Marcus Efraimsson 5de8b6c2f0 changelog: add notes about closing #12489
[skip ci]
2018-07-24 16:45:36 +02:00
Marcus Efraimsson e921f3b673 Merge pull request #12698 from mtanda/cw_400_err
CloudWatch backend return 400 if user input error
2018-07-24 16:43:22 +02:00
Marcus Efraimsson a63fca03b8 changelog: add notes about closing #12551
[skip ci]
2018-07-24 15:57:07 +02:00
Marcus Efraimsson 1c691ac855 changelog: add notes about closing #12533
[skip ci]
2018-07-24 15:51:34 +02:00
Tobias Skarhed b58a7642dc Karma to Jest 2018-07-24 15:41:58 +02:00
Tobias Skarhed 25c8233523 Begin conversion 2018-07-24 15:41:58 +02:00
Marcus Efraimsson 3dab4e1b52 changelog: add notes about closing #12589
[skip ci]
2018-07-24 15:27:13 +02:00
Marcus Efraimsson b81621b6f5 changelog: add notes about closing #12636 #9827
[skip ci]
2018-07-24 15:24:44 +02:00
Tobias Skarhed 51caf470f5 Remove influx qeury_ctrl jest, as it is already completed 2018-07-24 14:56:14 +02:00
Tobias Skarhed d6381bed7c Test fail depending on test order 2018-07-24 14:56:13 +02:00
Tobias Skarhed d2f81d52d4 Karma to Jest: begin influx query_ctrl 2018-07-24 14:56:13 +02:00
Tobias Skarhed 49a8c2e0c1 Make beautiful 2018-07-24 14:56:13 +02:00
Tobias Skarhed c0f9c06f21 Karma to Jest: completer 2018-07-24 14:56:13 +02:00
Tobias Skarhed 48ae9ec77e Remove comments and Karm test 2018-07-24 14:35:37 +02:00
Tobias Skarhed 987a16086b Karma to Jest 2018-07-24 14:34:37 +02:00
Tobias Skarhed 81c32780b9 Pass more tests 2018-07-24 11:27:53 +02:00
Marcus Efraimsson 35efb7c225 changelog: add notes about closing #12644
[skip ci]
2018-07-24 11:26:09 +02:00
Marcus Efraimsson 05da21c6d7 Merge pull request #12678 from yogyrahmawan/escape_postgres_parameters
postgres; escape ssl mode parameter
2018-07-24 11:15:21 +02:00
Marcus Efraimsson 93e73919e8 fix code style 2018-07-24 11:03:46 +02:00
Leonard Gram 59c1705399 docs: mentation that config changes requires restart. 2018-07-24 10:34:11 +02:00
Mitsuhiro Tanda d9bf894383 return 400 if user input error 2018-07-24 17:06:55 +09:00
David 4d722b2177 Merge pull request #12675 from grafana/davkal/logging-datasource
Datasource for Grafana logging platform
2018-07-23 18:11:11 +02:00
srid12 6b071054a3 changing callback fn into arrow functions for correct usage of this (#12673) 2018-07-23 07:23:26 -07:00
Marcus Efraimsson a17a9218da Merge pull request #12692 from dehrax/12224-graph-ctrl
Karma to Jest: graph_ctrl
2018-07-23 15:53:41 +02:00
Tobias Skarhed 47bec0fd91 Fix requested changes 2018-07-23 15:42:47 +02:00
Tobias Skarhed 70575c8f78 Add templating docs for 2018-07-23 15:34:03 +02:00
Tobias Skarhed 816ee82d26 Add docs about global variables in query template variables 2018-07-23 15:25:59 +02:00
David 76bc02b3fa Update CHANGELOG.md
Added #12597
2018-07-23 14:58:11 +02:00
Tobias Skarhed bb0af52d34 Figuring out why it doesn't initialize 2018-07-23 14:54:58 +02:00
David b09a7c5dd6 Merge pull request #12597 from dehrax/7664-query-var
Interval and range in query template variable
2018-07-23 14:48:49 +02:00
Tobias Skarhed 6b6a23ff6a Add support for interval in query variable
Add range to scopedVars

Add basic tests and extract function for range vars

Add support for range query variable in createQuery

Template vars squash
2018-07-23 14:33:21 +02:00
Tobias Skarhed 46e31621b0 Add jest file 2018-07-23 14:28:17 +02:00
Tobias Skarhed 529883b61d Change to arrow functions 2018-07-23 13:39:32 +02:00
Tobias Skarhed ed8568f0df Add graph_ctrl jest 2018-07-23 13:38:16 +02:00
Marcus Efraimsson 0fa98a812b changelog: add notes about closing #12691
[skip ci]
2018-07-23 13:13:18 +02:00
Marcus Efraimsson c26b9a49ad Merge pull request #12691 from mwegrzynek/add-pln-format
Add Polish złoty to currency formatters
2018-07-23 13:10:12 +02:00
Michał Węgrzynek ee2eda615e Update kbn.ts 2018-07-23 12:07:54 +02:00
Marcus Efraimsson d7401a9f8a Merge pull request #12690 from mtanda/cw_get_metricdata_input_validation
Id validation of CloudWatch GetMetricData
2018-07-23 11:48:01 +02:00
Tobias Skarhed ae935bf08b Add jest test file 2018-07-23 11:31:04 +02:00
Marcus Efraimsson dde484be60 Merge pull request #11469 from grafana/jquery-flot-events-to-ts
migrated jquery.flot.events to ts
2018-07-23 11:20:50 +02:00
Marcus Efraimsson 608303f4ce Merge branch 'master' into jquery-flot-events-to-ts 2018-07-23 10:59:25 +02:00
Mitsuhiro Tanda fb4546b811 Id validation of CloudWatch GetMetricData 2018-07-23 17:58:54 +09:00
Kim Christensen 8c52e2cd57 Fix timezone issues in test 2018-07-23 10:05:46 +02:00
Sven Klemm b3ebc86093 fix window function query without group by 2018-07-23 07:52:42 +02:00
Daniel Lee 34a8864601 changelog: adds note for #11487 2018-07-22 21:52:26 +02:00
Daniel Lee 5129ea8f87 Merge pull request #11624 from mtanda/cw_get_metric_data
CloudWatch GetMetricData support
2018-07-22 21:34:07 +02:00
Sven Klemm e1a37cf275 add order by to metadata queries 2018-07-22 17:12:30 +02:00
Sven Klemm 7af9cd7dfc set explicit order for rate and increase 2018-07-22 15:20:40 +02:00
yogyrahmawan 26aa575cb4 escaping ssl mode on postgres param 2018-07-22 08:04:57 +07:00
Sven Klemm 84d7743939 fix pre gui queries shortcircuit 2018-07-21 10:38:34 +02:00
Kim Christensen dd81f4381d Add unit test for InfluxDB datasource 2018-07-21 02:13:41 +02:00
Kim Christensen a2574ac068 Support timeFilter in templating for InfluxDB
After support for queries in template variables was added to InfluxDB,
it can be necessary to added dymanic time constraints. This can now be
done changing the variable refresh to "On Time Range Changed" for
InfluxDB
2018-07-21 00:45:02 +02:00
David Kaltschmidt 3297ae462d Datasource for Grafana logging platform
- new builtin datasource plugin "Logging" (likely going to be renamed)
- plugin implements no panel ctrls yet, only ships datasource
- new models for logging data as first class citizen (aside from table
  and time_series model)
- Logs as new view for Explore
- JSON view for development

Testable only against existing logish deployment.
Then test with queries like `{job="..."} regexp`.
2018-07-20 17:07:17 +02:00
Patrick O'Carroll b6909eb3b0 removed blue-dark variable with blue-light in light-theme, blue variable now has same value as blue-dark had before, should fix issue with any low contrast issues with blue in light-theme, this made query-blue variable unnecessery removed it, added variable for variable dropdown highlight background 2018-07-20 16:02:41 +02:00
Patrick O'Carroll b8a4b7771a removed import appEvents 2018-07-20 11:09:24 +02:00
Patrick O'Carroll 0b421004ea built a component for delete button in tables, instead of using a modal to confirm it now does it in the row of the table, created a sass file for the component, the component uses css transitions for animation 2018-07-20 09:59:04 +02:00
David bfd05ba6ec Merge pull request #12617 from grafana/davkal/prometheus-value-formatting
Make prometheus value formatting more robust
2018-07-18 17:11:16 +02:00
Torkel Ödegaard e413f026b9 fix: postgres/mysql engine cache was not being used, fixes #12636 (#12642) 2018-07-18 07:21:32 -07:00
Torkel Ödegaard ce64a3ccbc added: replaces added to grafana 2018-07-18 15:40:30 +02:00
Torkel Ödegaard a4587cdeee fix: datasource search was not working properly 2018-07-18 14:28:38 +02:00
Sven Klemm 9f0b4e0aa7 add groupby when adding first aggregate 2018-07-18 13:29:47 +02:00
Torkel Ödegaard 29291f88b1 Merge branch 'master' of github.com:grafana/grafana 2018-07-18 13:20:56 +02:00
Torkel Ödegaard 913b8576f8 docs: minor docs fix 2018-07-18 13:20:28 +02:00
David Kaltschmidt 3ab5ab3674 Fix label suggestions in Explore query field
- In 0425b477 the labels suggestions were refactored and a typo broke
  the look up for available lables of a metric
2018-07-18 13:20:18 +02:00
Torkel Ödegaard 3fa2ec0762 Merge branch 'ldap-grafana-admin' 2018-07-18 13:02:49 +02:00
Torkel Ödegaard c63f142578 Merge branch 'master' of github.com:grafana/grafana 2018-07-18 13:02:27 +02:00
Torkel Ödegaard 660dc09fa9 Merge branch 'master' of github.com:grafana/grafana 2018-07-18 12:46:42 +02:00
Daniel Lee 3cb95fb40a pluginloader: expose flot gauge plugin 2018-07-18 12:05:45 +02:00
Daniel Lee f5cc7618c5 alert: add missing test after refactor 2018-07-17 22:17:43 +02:00
Jakob van Santen 92d417f6b4 Handle query string in storage public_url (#9351) (#12555) 2018-07-17 11:10:12 -07:00
David 21e5d61de6 Merge pull request #12631 from grafana/davkal/explore-url-encoding
Use url params for explore state
2018-07-17 16:49:13 +02:00
David 5c6adbbada Merge pull request #12630 from grafana/davkal/explore-empty-error
Dont parse empty explore state from url
2018-07-17 16:48:23 +02:00
Augustin 05e060dee0 HTTP API documentation +fix when updating a playlist (#12612)
* get id from path param when updating a playlist

* add playlist http api documentation

* remove required condition for the id in update cmd
2018-07-17 07:45:38 -07:00
David b526150578 Merge pull request #12634 from grafana/davkal/explore-step
Explore: calculate query interval based on available width
2018-07-17 16:36:51 +02:00
David Kaltschmidt 02427ef88d Explore: calculate query interval based on available width
- classic dashboard panels inject a dynamic query interval as part of
  the query options. Explore did not have that.
- this PR adds the interval calculation to Explore
- interval based on Explore container's width
- ensure min interval if set in datasource
2018-07-17 15:13:44 +02:00
David Kaltschmidt c6e9ffb168 Use url params for explore state
- putting state in the path components led to 400 on reload
- use `/explore?state=JSON` instead
2018-07-17 12:56:05 +02:00
David Kaltschmidt f67b27e009 Dont parse empty explore state from url
- only parse url state if there is any
- prevents parse exception in the console on empty explore state
2018-07-17 12:24:04 +02:00
Torkel Ödegaard e318489bd4 Fix default browser th font-weight 2018-07-17 11:56:33 +02:00
Daniel Lee 8ff055b1d5 Merge pull request #12624 from calebtote/patch-1
Adding eval_data to alerts query results
2018-07-17 10:23:08 +02:00
Caleb Tote 10aaf7b506 Adding eval_data to alerts query results 2018-07-16 12:38:42 -04:00
Torkel Ödegaard c189262bac ldap: Make it possible to define Grafana admins via ldap setup, closes #2469 2018-07-16 16:56:42 +02:00
Daniel Lee a1f0dffe01 nginx: update to docker block
Adds commented out settings in nginx conf
for testing basic auth and auth proxy
2018-07-16 15:09:42 +02:00
Torkel Ödegaard f0508aa526 Merge branch 'master' of github.com:grafana/grafana 2018-07-16 13:52:34 +02:00
David Kaltschmidt 1f74b298c4 Remove string casting for template variables in prometheus 2018-07-16 13:02:36 +02:00
Daniel Lee 0b210a6f5d ldap: docker block readme update 2018-07-16 12:47:22 +02:00
David Kaltschmidt 1efe34e6cf Make prometheus value formatting more robust
- prometheus datasources passes its own interpolator function to the
  template server
- that function relies on incoming values being strings
- some template variables may be non-strings, e.g., `__interval_ms`,
  which throws an error

This PR makes this more robust.
2018-07-16 12:40:55 +02:00
Torkel Ödegaard 09c3569caa Update README.md 2018-07-16 12:36:35 +02:00
Torkel Ödegaard c6bcf13d78 Devenv testdata dashboards (#12615)
* devenv: working on dev env setup & dashboards

* devenv: refactored testdata app to a built in datasource instead, and moved dashboards to a devenv provisioned dashboards
2018-07-16 03:12:13 -07:00
David a13b4f2b3f Merge pull request #12596 from grafana/davkal/explore-datasource-selector
Explore Datasource selector
2018-07-16 11:13:29 +02:00
Torkel Ödegaard 2dd60f78d9 devenv: working on dev env setup & dashboards 2018-07-16 10:53:41 +02:00
Sven Klemm 0e608a08c2 fix test for query generation 2018-07-15 22:58:25 +02:00
Sven Klemm 7f348f3836 dont run queries if target has no table set 2018-07-15 22:27:33 +02:00
Sven Klemm 43686616a0 add query to find metric table 2018-07-15 22:26:32 +02:00
Sven Klemm b49d10104e add popover for metric column 2018-07-15 19:13:19 +02:00
Sven Klemm b28bf1a4f9 rename PostgresQueryBuilder to PostgresMetaQuery 2018-07-15 17:12:03 +02:00
Sven Klemm 070b556fd3 dont expand variables in rawSql 2018-07-15 17:02:26 +02:00
Sven Klemm 2fcb09b23d filter datatype for groupby suggestions 2018-07-15 16:23:47 +02:00
Sven Klemm 6e824e81bf fix rate special function when using group by 2018-07-15 15:14:12 +02:00
Sven Klemm c3c20ef2e2 remove unused import 2018-07-15 12:52:00 +02:00
Sven Klemm f85c9c012e refactor adding sqlPart 2018-07-15 12:26:22 +02:00
Sven Klemm f48060a1bb remove render code from sql_part 2018-07-15 09:53:22 +02:00
Sven Klemm d9648f1fe7 fix bug in query generation with metricColumn 2018-07-15 09:43:38 +02:00
Sven Klemm fa66645b0f refactor PostgresQuery 2018-07-15 09:36:49 +02:00
Sven Klemm 844beb660d refactor PostgresQueryCtrl 2018-07-14 21:00:06 +02:00
Sven Klemm d7ed706e12 refactor PostgresQueryCtrl and PostgresQuery 2018-07-14 20:28:34 +02:00
Sven Klemm 2dc9d4e960 refactor addGroupBy and removeGroupByPart 2018-07-14 16:46:53 +02:00
Sven Klemm 569a8567f9 use let for variable declaration 2018-07-14 11:32:00 +02:00
Sven Klemm d0c2b19c51 Add templateSrv to PostgresQuery tests 2018-07-14 11:05:35 +02:00
Sven Klemm b745fab190 add tests for query generation 2018-07-13 22:29:10 +02:00
David Kaltschmidt eb2abe800b Reverted $q to Promise migration in datasource_srv 2018-07-13 22:28:14 +02:00
Mark Meyer 0f6e5e2953 Allow settting of default org id to auto-assign to (#12401)
Author:    Mark Meyer <mark@ofosos.org>
2018-07-13 12:14:40 -07:00
Tobias Skarhed 7ae844518c Remove unused SASS variables (#12603)
* Comment out unused vars

* Remove unused sass vars
2018-07-13 12:10:09 -07:00
Torkel Ödegaard 964620c38c fix: panel embedd scrolbar fix, fixes #12589 (#12595) 2018-07-13 05:07:04 -07:00
Sven Klemm 17591ca29f fix tests for postgres datasource 2018-07-13 10:15:55 +02:00
David Kaltschmidt 390090da05 Set datasource in deep links to Explore 2018-07-13 09:45:56 +02:00
Sven Klemm 693efda4d5 send timerange with metricFindQuery 2018-07-13 09:31:39 +02:00
David Kaltschmidt d06b26de26 Explore Datasource selector
Adds a datasource selector to the Explore UI. Only datasource plugins
that have `explore: true` in their `plugin.json` can be selected.

- adds datasource selector (based on react-select) to explore UI
- adds getExploreSources to datasource service
- new `explore` flag in datasource plugins model
- Prometheus plugin enabled explore
2018-07-13 09:09:36 +02:00
Shane 756c08e713 changed you to your (#12590) 2018-07-12 23:56:37 -07:00
Sven Klemm bf21f1bf76 indent generated SQL 2018-07-12 22:36:41 +02:00
David 64c77febef Merge pull request #12586 from dehrax/12075-iframe-scroll
Prevent scroll on focus for iframe
2018-07-12 16:10:06 +02:00
Tobias Skarhed 7361d352bf Add comments 2018-07-12 15:38:41 +02:00
David 030d06331f Merge pull request #12585 from grafana/davkal/fix-plugin-css-loader-2
Fix freezing browser when loading plugin
2018-07-12 14:51:45 +02:00
David Kaltschmidt 81e62e1051 Fix freezing browser when loading plugin
- broken since 4d2dd2209
- `*` was previously working as a path matcher, but freezes browser when
  used with new cache-busting plugin loader
- changed matcher to be `/*`
2018-07-12 13:16:41 +02:00
Sven Klemm a24a6624e3 handle counter overflow and resets in rate 2018-07-12 13:15:19 +02:00
Sven Klemm 0935526d23 partition by metricColumn when using increase 2018-07-12 10:13:21 +02:00
Sven Klemm bbe7b9b908 add rate and increase special functions 2018-07-12 09:57:04 +02:00
Mitsuhiro Tanda 9b50c9038b skip backend request if extended statistics is invalid. (#12495)
* check extended statistics pattern

* check extended statistics pattern

* Revert "check extended statistics pattern"

This reverts commit 52c7b1a972636d5f5729e64ae5e00e6fae329257.

* add test

* fix test
2018-07-11 11:23:38 -07:00
Torkel Ödegaard c03764ff8a Refactor team pages to react & design change (#12574)
* Rewriting team pages in react

* teams to react progress

* teams: getting team by id returns same DTO as search, needed for AvatarUrl

* teams: progress on new team pages

* fix: team test

* listing team members and removing team members now works

* teams: team member page now works

* ux: fixed adding team member issue

* refactoring TeamPicker to conform to react coding styles better

* teams: very close to being done with team page rewrite

* minor style tweak

* ux: polish to team pages

* feature: team pages in react & everything working

* fix: removed flickering when changing tabs by always rendering PageHeader
2018-07-11 11:23:07 -07:00
Mitsuhiro Tanda 18a8290c65 (prometheus) prevent error to use $__interval_ms in query (#12533)
* prevent error to use $__interval_ms in query

* add test

* prevent error to use $__interval_ms in query
2018-07-11 11:13:47 -07:00
Torkel Ödegaard b4e0ace7a2 fix: folder picker did not notify parent that the initial folder had been changed, fixes #12543 (#12554) 2018-07-11 10:58:06 -07:00
Łukasz Gryglicki 24f395f986 Add support for skipping variable value in URL, fixes #12174 (#12541)
* New rebase

Signed-off-by: Lukasz Gryglicki <lukaszgryglicki@o2.pl>

* Lint

Signed-off-by: Lukasz Gryglicki <lukaszgryglicki@o2.pl>
2018-07-11 10:06:36 -07:00
Torkel Ödegaard 2c22a7b4ba Don't build-all for PRs 2018-07-11 13:31:34 +02:00
Sven Klemm 2784a2df6b Refactor value column SQL generation 2018-07-11 13:03:06 +02:00
Sven Klemm 9ba42f63f1 Refactor metric column sql generation 2018-07-11 12:33:37 +02:00
Rollulus Rouloul 2fbf2bba4e fix: requests/sec instead of requets (#12557) 2018-07-11 03:33:19 -07:00
Tobias Skarhed cfa555b569 Add folder name to dashboard title (#12545)
* Add folder name to dashboard title. No display on medium displays and below

* Compare folderId instead

* folderId bigger than 0
2018-07-11 03:31:07 -07:00
David 4d2dd22095 Fix css loading in plugins (#12573)
- allow css loader to be imported again (wasnt prefixed by plugin)
2018-07-11 03:29:19 -07:00
Sven Klemm a86e77fc68 Refactor group by query generation 2018-07-11 12:20:24 +02:00
Sven Klemm b9edc3c611 Refactor where clause generation 2018-07-11 11:50:02 +02:00
Sven Klemm 5dd236bf05 refactor SQL generation for value columns 2018-07-11 11:09:28 +02:00
Sven Klemm 772825ed09 Refactor time column sql generation 2018-07-11 11:00:12 +02:00
Sven Klemm c5bde0ef45 Refactor render function on PostgresQuery 2018-07-11 10:50:49 +02:00
Sven Klemm 1d711924bc Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-07-11 10:21:13 +02:00
Sven Klemm c8a11d597f prepare sql part for special functions 2018-07-10 21:43:57 +02:00
Sven Klemm 0e610cad1b set query gui as default handle old panels gracefully 2018-07-10 21:40:59 +02:00
Bryan T. Richardson daf0c374b3 Added BurstBalance metric to list of AWS RDS metrics. 2018-07-10 10:11:39 -06:00
Sven Klemm 9d5b4cb91d dont throw exception for unknown types 2018-07-10 14:45:36 +02:00
Tobias Skarhed 4ee4ca99be Prevent scroll on focus for iframe 2018-07-10 12:54:45 +02:00
Sven Klemm e8e24f6139 add alias when adding group by 2018-07-10 11:32:23 +02:00
Dominic Smith 5578097210 Add new sequential color scales
* Add new sequential color scales

* Simplify inversion logic
2018-07-10 12:17:55 +03:00
Sven Klemm 6e7161f238 add aggregates when adding group by 2018-07-10 11:14:00 +02:00
David 9595f992b9 Merge pull request #12496 from dehrax/12224-prostgres-ds
Karma to Jest: 3 data sources
2018-07-10 11:13:44 +02:00
Sven Klemm 483e7c0163 remove superfluous braces 2018-07-10 10:21:02 +02:00
Sven Klemm dc93055a10 add column alias when add aggregate function 2018-07-10 10:19:30 +02:00
yogy rahmawan 8b32dc5847 move go vet out of scripts and fixing warning (#12552) 2018-07-09 23:25:32 -07:00
Sven Klemm 5a307e80aa fix enter in sql_part_editor 2018-07-09 22:43:50 +02:00
Sven Klemm bfc751542c fix editing expression parts 2018-07-09 22:38:29 +02:00
Sven Klemm f140967423 rename inputBlur to switchToLink 2018-07-09 22:00:50 +02:00
Tobias Skarhed e51f208a49 Cleanup and remove some jest.fn() 2018-07-09 15:42:34 +02:00
Sven Klemm 02abda7d92 fix spelling 2018-07-09 14:47:59 +02:00
Sven Klemm 2d951ba611 add current value to dropdown if its not in resultset 2018-07-09 14:27:10 +02:00
Sven Klemm 6a981d39d8 Revert "show current value in dropdown when its not part of list"
This reverts commit 76275cae37.
2018-07-09 13:04:55 +02:00
Tobias Skarhed 6670acd082 Remove irrelevant tests and templateSrv stub 2018-07-09 12:52:56 +02:00
David 25bcdbcab1 Merge pull request #12284 from grafana/davkal/queryfield-refactor
Query field refactorings to support external plugins
2018-07-09 11:29:59 +02:00
Sven Klemm 76275cae37 show current value in dropdown when its not part of list 2018-07-09 11:22:03 +02:00
Torkel Ödegaard 5a925461f1 Update CHANGELOG.md 2018-07-09 07:00:11 +02:00
Jesse Tane 677117fb03 fix diff and percent_diff (#12515)
* make diff and percent_diff tests more realistic

* fix diff and percent_diff

* include @marefr's additional tests
2018-07-08 21:58:34 -07:00
Mitsuhiro Tanda 77220456b6 improve error message 2018-07-09 13:11:50 +09:00
Mitsuhiro Tanda 4c59be4f5b generate unique id when variable is multi 2018-07-09 13:11:50 +09:00
Mitsuhiro Tanda 40ed235b3b support GetMetricData 2018-07-09 13:11:50 +09:00
Mitsuhiro Tanda 077cf9a343 dep ensure 2018-07-09 13:11:50 +09:00
Mitsuhiro Tanda 664944980a update aws-sdk-go 2018-07-09 13:11:49 +09:00
Ryan McKinley f53e166114 Update lodash/moment version (#12532)
* tabs to spaces

testing commit permisions :)

* revert

* Update lodash and moment
2018-07-08 13:06:08 -07:00
Ryan McKinley dca22fd151 Tabs to spaces in tslint (#12529)
* tabs to spaces

testing commit permisions :)

* revert

* tabs to spaces
2018-07-08 07:48:05 -07:00
Sven Klemm 09c06ced14 formatting 2018-07-07 21:22:12 +02:00
Sven Klemm 5b5dcabd22 add None to metric column suggestions 2018-07-07 21:21:11 +02:00
Sven Klemm 3f4c808cc5 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-07-07 20:54:33 +02:00
Sven Klemm 8490ae41b6 handle pre query gui queries gracefully 2018-07-07 20:41:24 +02:00
Sven Klemm eb170e741b dont break on panels that dont have rawQuery set 2018-07-07 19:59:25 +02:00
Sven Klemm b2b4860bdb refactor transformToSegments 2018-07-07 19:43:21 +02:00
Torkel Ödegaard b464a28cca devenv: updated devenv provision scripts 2018-07-07 14:40:17 +02:00
Torkel Ödegaard 645974ec8d ux: minor fix/tweak to inactive view mode, think logo should be visible & fixes dashboard title alignment 2018-07-07 10:25:41 +02:00
Marcus Efraimsson 922371ba76 changelog: add notes about closing #12379
[skip ci]
2018-07-06 17:48:39 +02:00
Marcus Efraimsson 319488676f Merge pull request #12521 from grafana/davkal/fix-datasource-sort
Fix datasource sorting with template variables
2018-07-06 16:18:02 +02:00
David Kaltschmidt 7ddcaf22d5 Fix datasource sorting with template variables
- fixes sorting when template variables are present
- simplified existing test cases
- added test to cover variable usage in datasource service
2018-07-06 15:32:08 +02:00
Marcus Efraimsson f2980bb978 changelog: add notes about closing #12484
[skip ci]
2018-07-06 12:55:12 +02:00
Marcus Efraimsson cbdf6ef355 changelog: add notes about closing #12506
[skip ci]
2018-07-06 12:53:10 +02:00
Marcus Efraimsson 1db067f2ad Merge pull request #12511 from alexanderzobnin/fix-12484
Prometheus heatmap: fix unhandled error when some points are missing
2018-07-06 12:50:04 +02:00
Sven Klemm e4b4b3a772 rename quoteLiteral to quoteIdentAsLiteral 2018-07-06 12:38:43 +02:00
Marcus Efraimsson af434df5a3 changelog: add notes about closing #12506
[skip ci]
2018-07-06 12:35:19 +02:00
Marcus Efraimsson 926892749f Merge pull request #12518 from grafana/12506_dash_links
Fix links not updating after changing variables
2018-07-06 12:33:19 +02:00
Marcus Efraimsson 5e4d6958d6 fix links not updating after changing variables 2018-07-06 11:54:37 +02:00
Sven Klemm a63298bca2 remove unused function removeSelect 2018-07-06 11:25:20 +02:00
Sven Klemm d9db3d1402 put updateParam back in 2018-07-06 11:24:49 +02:00
Sven Klemm 6143924ec6 fix where clause generation 2018-07-06 10:56:47 +02:00
Sven Klemm 7600c6efcb remove hardcoded $__timeFilter, make macros functional in where clause 2018-07-06 10:38:52 +02:00
Sven Klemm 8ed210c8d5 remove dead code, make label more flexible 2018-07-06 10:38:18 +02:00
Sven Klemm 85ab1cfa8f fix constraint removal 2018-07-06 09:28:34 +02:00
Sven Klemm d8c7756489 dont autoquote, suggest quoted values if requried 2018-07-05 21:36:39 +02:00
Alexander Zobnin 36f08994cc prometheus heatmap: fix unhandled error when some points are missing 2018-07-05 16:33:52 +03:00
Marcus Efraimsson 50a522d418 fix caret for help button is ds http settings 2018-07-05 13:01:10 +02:00
Sven Klemm 3f614e635b do not autoquote identifiers 2018-07-05 11:27:19 +02:00
Sven Klemm c604651092 fix group by ui 2018-07-05 10:19:22 +02:00
Marcus Efraimsson 240cf63ba6 changelog: add notes about closing #11618 #11619 2018-07-04 20:07:43 +02:00
Marcus Efraimsson d90d4ce55d Merge pull request #12402 from AustinWinstanley/macros/sql
mysql,mssql: improve $__timeFilter, $__timeFrom, $__timeTo macros

The $__timeFilter macro now uses a BETWEEN with timestamps instead of 
comparing epochs
The $__timeFrom and $__timeTo macros now return strings of format 
YYYY-MM-DDThh:mm:ssZ instead of epoch
2018-07-04 20:01:43 +02:00
Sven Klemm aacf555985 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-07-04 18:59:23 +02:00
Sven Klemm 3595436614 fix where constraint handling 2018-07-04 18:57:55 +02:00
Sven Klemm 7d30ca04de remove dead code from sql_part
fix where clause query generation
2018-07-04 15:37:06 +02:00
Sven Klemm 3b632510fb code formatting 2018-07-04 15:20:52 +02:00
Tobias Skarhed 74bf80962d Add mock to test files 2018-07-04 14:32:22 +02:00
Tobias Skarhed 962340bcd1 Create new instance in beforeEach 2018-07-04 14:32:22 +02:00
Tobias Skarhed a37a0c7be3 Remove comments 2018-07-04 14:32:22 +02:00
Tobias Skarhed 42ba0dc73f Karma to Jest: Cloudwatch datasource 2018-07-04 14:32:22 +02:00
Tobias Skarhed d4bd52139a Karma to Jest: MySQL datasource 2018-07-04 14:30:36 +02:00
Tobias Skarhed 3bbe39c5ad Karma to Jest: postgres datasource 2018-07-04 14:30:36 +02:00
Marcus Efraimsson ea9964cfa1 Merge pull request #12493 from dehrax/12224-datasource-elastic
Karma to Jest: elasticsearch datasource
2018-07-04 14:03:25 +02:00
Marcus Efraimsson e8ee1be5e4 Merge pull request #12502 from Nexucis/feature/api-doc-improve
Fix HTTP-API admin doc
2018-07-04 13:52:13 +02:00
Tobias Skarhed d3c213973c Basic cleanup 2018-07-04 13:13:06 +02:00
Tobias Skarhed 12d158f391 Add mocks in test file 2018-07-04 13:13:06 +02:00
Tobias Skarhed 8f1bcd9117 Remove q and stub 2018-07-04 13:13:06 +02:00
Tobias Skarhed 80b2f5c756 Add Jest stubs 2018-07-04 13:13:06 +02:00
Tobias Skarhed 69c85e0d7e Remove async 2018-07-04 13:13:06 +02:00
Tobias Skarhed 12e76ad197 Remove logs and comments 2018-07-04 13:13:06 +02:00
Tobias Skarhed bd417bedb2 Start elastic ds test conversion 2018-07-04 13:13:06 +02:00
Marcus Efraimsson a8970a4de9 run enterprise build only on master for now 2018-07-04 13:09:42 +02:00
Augustin Husson 86a574cc50 refix the settings indentation 2018-07-04 12:30:23 +02:00
Augustin Husson 991a4b1663 update stats admin doc 2018-07-04 12:26:30 +02:00
Augustin Husson 01fc6c5d95 fix json indentation 2018-07-04 12:23:10 +02:00
Sven Klemm fee36b2b35 include where constraints in query generation 2018-07-04 12:22:45 +02:00
Marcus Efraimsson d2f31a716f remove unnecessary conversions 2018-07-04 12:16:39 +02:00
Sven Klemm ced0a5828f rearrange elements of query builder 2018-07-04 11:56:26 +02:00
Sven Klemm 9847c2186f mv query_part to sql_part 2018-07-04 11:39:58 +02:00
Sven Klemm 19dcc1f41a Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-07-04 10:12:27 +02:00
Marcus Efraimsson 723a894fc5 changelog: update
[skip ci]
2018-07-03 19:59:34 +02:00
Marcus Efraimsson 634c77469d changelog: add notes about closing #11818
[skip ci]
2018-07-03 19:58:19 +02:00
Marcus Efraimsson faf2ab4249 changelog: add notes about closing #12460
[skip ci]
2018-07-03 19:54:09 +02:00
Marcus Efraimsson 512e7f8567 changelog: add notes about closing #8186
[skip ci]
2018-07-03 19:50:21 +02:00
Marcus Efraimsson 60792d57dd changelog: add notes about closing #12379
[skip ci]
2018-07-03 19:44:21 +02:00
Marcus Efraimsson 27aa1cd568 changelog: add notes about closing #12362
[skip ci]
2018-07-03 19:41:34 +02:00
Torkel Ödegaard 1f97df46c1 devenv: open ldap docker block now prepopulating data with correct member groups 2018-07-03 12:58:17 +02:00
Leonard Gram 1586a42a71 ci: Only publish grafana enterprise packages tagged with enterprise. 2018-07-03 09:25:51 +02:00
Martin Packman 6046c8b4ca Make table sorting stable when null values exist (#12362)
Currently if a null appears in a table column, for instance in data
returned by postgres, sorting on that gives an arbitrary order. This
is due to null being neither greater or less than any string, which
makes the sort unstable.

Change the table sort function to compare on nullness first. Note
this is a slight behaviour change for numbers, which would otherwise
treat null and 0 as equivalent.

Signed-off-by: Martin Packman <gzlist@googlemail.com>
2018-07-02 11:14:41 -07:00
David 0d1f7c8782 Fix bar width issue in aligned prometheus queries (#12483)
* Fix bar width issue in aligned prometheus queries

This was broken because null values were filled in with unaligned times.

* use aligned times for result transformation
* add tests

An earlier version of this fix aligned the times again in the transformer, but
I think it's safe to only deal with aligned times in the response.

* Fixed prometheus heatmap tranformer test

The interval needs to be 1 to prevent step alignment.
2018-07-02 11:04:36 -07:00
zicklam a89351e8e0 correct example (#12481)
foo.bar.com in description, but foo.bar in configuration.
Updated description, makes more sense then changing the configuration :)
2018-07-02 09:01:42 -07:00
Torkel Ödegaard 37efa934f1 ldap: improved ldap test env with more structured users and groups 2018-07-02 17:27:16 +02:00
Leonard Gram 5e08bf5130 test: fixed usage of wrap in tests. 2018-07-02 17:13:59 +02:00
Leonard Gram 4245f0ce11 ci: typo 2018-07-02 16:10:20 +02:00
Leonard Gram 8d6797c367 ci: publishes grafana enterprise to s3. 2018-07-02 16:05:23 +02:00
Torkel Ödegaard 6286c31d4b refactoring: making api wrap public 2018-07-02 14:13:18 +02:00
Torkel Ödegaard b8724ae0c4 refactoring: enterprise build/hooks refactorings (#12478) 2018-07-02 04:33:39 -07:00
Tobias Skarhed 2941dff428 Karma to Jest: datasource_srv (#12456)
* Karma to Jest: datasource_srv

* Sort function differs between Karma and Jest

* Fix error based on .sort() implementation

* Remove Karma test

* alerting: only log when screenshot been uploaded

* Remove comments

* Karma to Jest: datasource_srv

* Sort function differs between Karma and Jest

* Fix error based on .sort() implementation

* Remove Karma test

* Remove comments

* Remove console.log

* Remove console.log

* Change sorting and add test for default data source
2018-07-02 04:18:23 -07:00
Torkel Ödegaard 10e86eda69 fix: #12461 introduced issues with route registration ordering, adding plugin static routes before plugins package had been initiated (#12474) 2018-07-01 23:35:50 -07:00
Mitsuhiro Tanda aa1b5959da omit extra template refresh (#12454) 2018-07-01 22:56:24 -07:00
Carl Bergquist 861af4cb97 Improve extensions build. (#12461)
* enable ee build on pr/master

* step1: of including group sync

* disable commit pinning for now

* fixes broken build

* enable team to ldap group sync

* avoid returning error for missing external handler

* services: allow routes to be added before http server start

* services: allows services to add their own migrations

* moves db migrations to ee code base

* build using master branch in ee

* disable enterprise build in .bra.toml

[skip ci]

* removes team sync extensions

* removes commented line
2018-07-01 07:01:43 -07:00
Sven Klemm 1601f6d17c [mysql] fix $__timeGroup rounding (#12469)
* fix $__timeGroup rounding for mysql

* revert accidentally commented out line
2018-07-01 06:59:05 -07:00
Sven Klemm f017c04a65 [mssql] fix $__timeGroup rounding (#12470)
* fix $__timeGroup rounding for mssql

* revert enabling of mssql integration tests
2018-07-01 06:57:02 -07:00
Sven Klemm c2c22c142b [postgres] fix timeGroup macro rounding (#12468)
* fix timeGroup tests to check for correct grouping

* do explicit floor rounding in $__timeGroup macro

* fix typo in comments
2018-07-01 06:55:46 -07:00
Will Weber c03d527d25 pkg/social/github: Allow changing of userinfo data (#12471)
Experienced a problem where a user whose email changed was no longer
able to login. By using the ID as a primary identifier, we can avoid
conflicts of this variety within the github OAuth provider.
2018-07-01 05:56:16 -07:00
bergquist 66c56e7bbe notifications: dont return error if one notifer failed 2018-06-30 23:14:18 +02:00
Sven Klemm 410449b5e7 use sqlPart for ui parts 2018-06-30 11:11:34 +02:00
Sven Klemm d26cacccd9 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-06-30 10:49:17 +02:00
Carl Bergquist 88783d6e0a avoid calling os.Exit outside main.go (#12459)
I don't think we should call os.Exit outside main.go. Calling
os.Exit breaks the application control flow.
2018-06-29 22:48:26 -07:00
Marcus Efraimsson 845724e8b9 update mysql/mssql query/annotation help sections 2018-06-29 20:39:06 +02:00
Marcus Efraimsson 7a4858dd11 docs: update folders api 2018-06-29 20:24:02 +02:00
Austin Winstanley 59675dc564 Changed documentation for MSSQL and MySQL to reflect macro changes 2018-06-29 13:07:48 -05:00
Marcus Efraimsson 2835acf48c docs: update scripted dashboard for v5 2018-06-29 19:36:15 +02:00
Marcus Efraimsson 4530925b9f docs: update scripted dashboard for v5 2018-06-29 19:30:29 +02:00
Marcus Efraimsson cdaeb1578d docs: update organisation http api
make the distinction clearer between /api/org and /api/orgs and that
basic auth must be used for the /api/orgs resource
2018-06-29 19:10:42 +02:00
Marcus Efraimsson aae3b568f3 docs: upd windows installation 2018-06-29 18:21:56 +02:00
bergquist e91e3ea771 notifications: send notifications synchronous 2018-06-29 16:16:09 +02:00
bergquist d31c7bc6a4 Merge branch 'master' into alerting_reminder
* master: (95 commits)
  registry: adds more comments
  registry: adds comments to interfaces
  changelog: update
  changelog: update
  changelog: add notes about closing #12438
  alerting: only log when screenshot been uploaded
  fixes typos
  changelog: add notes about closing #12444
  Revert "auth proxy: use real ip when validating white listed ip's"
  changelog: adds note for #11892
  changelog: add notes about closing #12430
  fix footer css issue
  Karma to Jest: 3 test files (#12414)
  fix: log close/flush was done too early, before server shutdown log message was called, fixes #12438
  Karma to Jest: value_select_dropdown (#12435)
  support passing api token in Basic auth password (#12416)
  Add disabled styles for checked checkbox (#12422)
  changelog: add notes about closing #11920
  changelog: add notes about closing #11920
  changelog: update
  ...
2018-06-29 15:44:20 +02:00
bergquist 396f8e6464 notifications: read without tran, write with tran 2018-06-29 15:15:31 +02:00
bergquist d440b9a8d1 registry: adds more comments 2018-06-29 11:58:54 +02:00
bergquist f0f6d0e915 registry: adds comments to interfaces 2018-06-29 11:45:32 +02:00
Marcus Efraimsson cb706bd059 changelog: update
[skip ci]
2018-06-29 10:52:42 +02:00
Marcus Efraimsson 32793350b8 changelog: update
[skip ci]
2018-06-29 10:49:36 +02:00
Marcus Efraimsson 0dd0b65900 changelog: add notes about closing #12438
[skip ci]
2018-06-29 10:48:50 +02:00
Marcus Efraimsson 59756863df Merge pull request #12439 from grafana/fix-log-close-too-early
Fix: Log close (ie flush) was done too early, before final shutdown log
2018-06-29 10:45:14 +02:00
bergquist c4292b43f5 alerting: only log when screenshot been uploaded 2018-06-29 09:58:58 +02:00
bergquist ce88e4b927 fixes typos
closes #12453
2018-06-29 09:35:31 +02:00
Austin Winstanley 9823da1cc5 Reverted yarn.lock to master 2018-06-29 03:54:43 +00:00
Austin Winstanley afee29be68 Merge branch 'master' into macros/sql 2018-06-29 03:51:05 +00:00
Austin Winstanley a0e8437f8f Used PostgreSQL TSDB as a model the set up the __timeFilter, __timeFrom, and __timeTo macros for Microsoft SQL and MySQL 2018-06-29 03:48:14 +00:00
Austin Winstanley 84af033281 Merge branch 'master' of https://github.com/grafana/grafana 2018-06-29 03:32:18 +00:00
Austin Winstanley d663122244 Merge branch 'master' of https://github.com/grafana/grafana into macros/sql 2018-06-29 03:31:23 +00:00
Marcus Efraimsson fb2b2c9f65 changelog: add notes about closing #12444
[skip ci]
2018-06-28 16:39:38 +02:00
Marcus Efraimsson d226383c4e Merge pull request #12444 from grafana/revert-12299-10707_whitelist
Revert "auth proxy: use real ip when validating white listed ip's"
2018-06-28 16:31:26 +02:00
Marcus Efraimsson 8af5da7383 Revert "auth proxy: use real ip when validating white listed ip's" 2018-06-28 15:43:33 +02:00
Daniel Lee 7a2be69abc changelog: adds note for #11892 2018-06-28 14:46:40 +02:00
Daniel Lee 8537f10285 Merge pull request #11892 from ApsOps/colorize-singlestat-prefix-postfix-option
Make colorization of prefix and postfix optional in singlestat
2018-06-28 14:42:48 +02:00
Marcus Efraimsson 4c4bd2ebba changelog: add notes about closing #12430
[skip ci]
2018-06-28 14:27:41 +02:00
Marcus Efraimsson ab458061e6 Merge pull request #12441 from grafana/12430_fix
Fix footer CSS issue
2018-06-28 14:25:08 +02:00
Marcus Efraimsson 54420363d3 fix footer css issue 2018-06-28 14:02:42 +02:00
Tobias Skarhed af0a4a6039 Karma to Jest: 3 test files (#12414)
* Karma to Jest: viewstate_srv

* Karma to Jest: annotations_srv

* Remove comments

* Karma to Jest: series_override_ctrl

* Remove unnecessary code

* Class to function and fix lint error

* Fix ngInject
2018-06-28 04:43:23 -07:00
Torkel Ödegaard 7a7c6f8fab fix: log close/flush was done too early, before server shutdown log message was called, fixes #12438 2018-06-28 04:38:23 -07:00
Tobias Skarhed 443ff5deb4 Karma to Jest: value_select_dropdown (#12435)
* Begin Karma 2 Jest: value_select_dropdown

* Add return for Promise

* Remove Karma test
2018-06-28 03:10:36 -07:00
Dan Cech 3056d9a80e support passing api token in Basic auth password (#12416) 2018-06-28 03:08:32 -07:00
Tobias Skarhed c2381f088f Add disabled styles for checked checkbox (#12422) 2018-06-28 03:02:49 -07:00
Marcus Efraimsson 3cf6a1a94b changelog: add notes about closing #11920
[skip ci]
2018-06-27 15:17:15 +02:00
Marcus Efraimsson 18032b374b changelog: add notes about closing #11920
[skip ci]
2018-06-27 15:11:44 +02:00
Marcus Efraimsson f1ab1a26e9 changelog: update
[skip ci]
2018-06-27 14:48:55 +02:00
Marcus Efraimsson 6fa87e6278 docs: upd what's new in v5.2 2018-06-27 14:20:36 +02:00
Marcus Efraimsson b011444246 release 5.2.0 2018-06-27 11:39:04 +02:00
Marcus Efraimsson e378f6db88 docs: update index with link to what's new in 5.2 instead of 5.0 2018-06-27 11:35:53 +02:00
Marcus Efraimsson ec3a4e105f changelog: add notes about closing #12385
[skip ci]
2018-06-26 18:11:56 +02:00
Marcus Efraimsson 06daae2179 Merge pull request #12412 from grafana/12393_login
login: fix layout issues
2018-06-26 18:01:54 +02:00
Marcus Efraimsson 8d535dd90d docs: upd what's new in v5.2
[skip ci]
2018-06-26 15:42:34 +02:00
Marcus Efraimsson e256c61b54 docs: upd what's new in v5.2 2018-06-26 15:37:22 +02:00
Marcus Efraimsson 9f02927761 login: fix layout issues 2018-06-26 15:19:57 +02:00
Marcus Efraimsson bd805544c5 build: yarn should be included out of the box on circle ci 2018-06-26 15:19:04 +02:00
bergquist 8ff538be07 notifier: handle known error first 2018-06-26 14:13:45 +02:00
Augustin ef0bf9f701 ensure that if the dasboardID is negative, it will not bypass the checking of the right (#12398) 2018-06-26 05:12:20 -07:00
Marcus Efraimsson 5a2cf5863d Merge pull request #12399 from grafana/12140_docs
docs: update installation instructions
2018-06-26 10:37:22 +02:00
Marcus Efraimsson db12e8d52d changelog: add notes about closing #11968
[skip ci]
2018-06-26 10:32:32 +02:00
Marcus Efraimsson ceba0490f8 Merge pull request #12395 from grafana/11968_variable_key_value
Set correct text in drop down when variable is present in url
2018-06-26 10:29:21 +02:00
Torkel Ödegaard 713a87fb5b Webpack 4 (WIP) (#12098)
* Webpack 4

* webpack: force angular version 1.6 as 1.7 has removed a legacy feature toggle Grafana needs, switched from awesome-typescript-loader to ts-loader & forked ts checker

* Webpack 4

* webpack: force angular version 1.6 as 1.7 has removed a legacy feature toggle Grafana needs, switched from awesome-typescript-loader to ts-loader & forked ts checker

* upgrade ts loader

* simplified splitChunks

* upgrade circle node image to v8

* webpack: minor changes, using the new mode option, removed unused awesome-typescript loader, investigating karma issue but no solution yet

* fix: change angular mocks version restriction to be more strict

* add babel-loader for HMR support, fix karma debug runner

* babel-loader to yarn.lock

* webpack: changed from ExtractTextPlugin  to MiniCssExtractPlugin, and updated the minification step to use new webpack4 optimization config section

* webpack: remove css minifcation from general css processing as it's done in the webpack optimization step

* limit vendors chunk to .ts and .js files

* fix: removed typescript compile error, wanted to see if we still got test failure for that

* tech: upgrade uglify-js, should be faster now
2018-06-26 01:28:37 -07:00
Aman e11f6f5cdf Make pre/postfix coloring checkboxes inactive when gauge is active 2018-06-26 13:06:26 +05:30
Sven Klemm 682c684df3 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-06-26 09:26:35 +02:00
bergquist f83306bb5b removes unused return object 2018-06-26 09:22:31 +02:00
Dan Cech 583df47c2f handle "dn" ldap attribute more gracefully (#12385)
* handle "dn" ldap attribute more gracefully

* use strings.ToLower
2018-06-26 00:14:55 -07:00
Torkel Ödegaard dd7a653db9 Update ROADMAP.md 2018-06-26 08:59:37 +02:00
Carl Bergquist 1165d098b0 Merge pull request #12407 from pengwk/patch-1
Fix typo
2018-06-26 08:30:05 +02:00
peng weikang e4669681c4 Fix typo 2018-06-26 14:04:54 +08:00
Austin Winstanley 7f166668f6 Merge branch 'master' into macros/sql 2018-06-25 20:14:25 +00:00
Austin Winstanley 52b475f965 Merge branch 'master' of https://github.com/grafana/grafana 2018-06-25 20:13:50 +00:00
Austin Winstanley c35c1d7270 Merge branch 'master' of https://github.com/grafana/grafana into macros/sql 2018-06-25 20:13:34 +00:00
Austin Winstanley 105b3d6804 Switched MySQL and MSSQL macros for timeFilter and related to use BETWEEN and calculate UNIX time server side instead of database side. Fixes #11618 #11619 2018-06-25 20:11:58 +00:00
Marcus Efraimsson 31239f33ed docs: update installation instructions 2018-06-25 17:22:31 +02:00
Carl Bergquist 175e95abb0 Merge pull request #12396 from bergquist/routing
routing: allows routes to be added to existing groups
2018-06-25 17:17:14 +02:00
bergquist 4a46dd886b routing: raise panic if duplicate routes are added 2018-06-25 16:58:49 +02:00
bergquist dbfafa1cb5 routing: allows routes to be added to existing groups
this enables services to add routing to ex /api
without causing conflicts.
2018-06-25 16:50:27 +02:00
Marcus Efraimsson c23f9a1f37 changelog: add notes about closing #11868
[skip ci]
2018-06-25 16:32:32 +02:00
Marcus Efraimsson 2b3bfd2f65 Merge pull request #12198 from grafana/11868_missing_phantom
enhance error message if phantomjs executable is not found
2018-06-25 16:27:12 +02:00
Marcus Efraimsson f106de0efd enhance error message if phantomjs executable is not found
if arm build, explain that phantomjs is not included by default in arm
builds. If not explain that phantom js isn't installed correctly
2018-06-25 16:06:52 +02:00
Torkel Ödegaard 132df4553c fix: annnotation api & sql issue 2018-06-25 16:03:38 +02:00
Marcus Efraimsson ed1fec8e0f changelog: add notes about closing #12248
[skip ci]
2018-06-25 15:24:12 +02:00
Marcus Efraimsson 98a7f258af Merge pull request #12392 from dehrax/12248-fix
Fix selecting current dashboard from search does not reload dashboard
2018-06-25 15:21:24 +02:00
Marcus Efraimsson 5280084480 set correct text in drop down when variable is present in url using key/values 2018-06-25 14:59:28 +02:00
Augustin eb4d860fcb Light improve of massive delete annotation api (#12390)
* fix delete annotations

* fix self assignment

* add right unit test using admin role
2018-06-25 04:58:49 -07:00
Tobias Skarhed 762ee203fa Fix 12248 2018-06-25 13:46:33 +02:00
PedroD 3bf12e4ff5 Fixing wrong /public path, relative to the webpack.dev script, that would avoid webpack from cleaning previous builds. (#12351) 2018-06-25 04:45:47 -07:00
Marcus Efraimsson 7797a66b58 changelog: add notes about closing #12383
[skip ci]
2018-06-25 13:17:33 +02:00
Marcus Efraimsson 1726f6358f Merge pull request #12383 from CorpGlory/master
Set $rootScope in DatasourceSrv
2018-06-25 11:14:55 +02:00
bergquist e0ac31a28a changelog: adds note about closing #12313 2018-06-25 08:02:51 +02:00
Carl Bergquist 15bbe81fed Merge pull request #12387 from AustinWinstanley/master
Return a 404 when deleting a datasource through the API if it doesn't…
2018-06-25 07:49:18 +02:00
Austin Winstanley defb0396b7 Return a 404 when deleting a datasource through the API if it doesn't exist and add a test for it to confirm #12313 2018-06-22 21:15:36 -05:00
rozetko 97db9ece98 Set $rootScope in DatasourceSrv 2018-06-22 16:17:02 +03:00
Aman 1dd65f7a39 Add options to colorize prefix and postfix in singlestat 2018-06-22 14:50:04 +05:30
Daniel Lee b2187b70a7 Merge pull request #11990 from mtanda/issue_11925
fix "Cloudwatch panel does not allow arbitrary variable values in query"
2018-06-21 18:00:49 +02:00
bergquist eaf5b1c1cf devenv: adds dashboard with multiple rows 2018-06-21 16:31:10 +02:00
Daniel Lee 75e378b689 Merge pull request #12367 from dehrax/12224-history-ctrl
Karma to Jest: history_ctrl
2018-06-21 14:52:01 +02:00
bergquist 4b8b4e171a changelog: adds note about closing #10971 2018-06-21 14:31:55 +02:00
Carl Bergquist 828fb39ee2 Merge pull request #11643 from mrsiano/generic_oauth
Pass configured/auth headers to a Datasource.
2018-06-21 14:21:59 +02:00
mrsiano cc1e3a0e3c Pass configured/auth headers to a Datasource.
In some setups (ex openshift), the Datasource will require Grafana
to pass oauth token as header when sending queries.
Also, this PR allow to send any header which is something
Grafana currently does not support.
2018-06-21 14:58:05 +03:00
Daniel Lee 6871f4c14e Merge pull request #12018 from forzafootball/am/fix-query-variable-influxdb
Conditionally select a field to return in ResponseParser for InfluxDB
2018-06-21 12:25:15 +02:00
Tobias Skarhed 4c31173853 Karma to Jest: history_ctrl. .gitingore: .vs/ 2018-06-21 11:54:47 +02:00
Carl Bergquist e17944db15 Merge pull request #12325 from albundy83/patch-1
Fix error in InfluxDB query
2018-06-21 10:57:26 +02:00
Marcus Efraimsson 8ba869ac72 changelog: add notes about closing #12359
[skip ci]
2018-06-21 10:50:28 +02:00
Marcus Efraimsson 45610ecd89 Merge pull request #12363 from grafana/12359_sign_rpm_packages
build: fix signing of multiple rpm packages
2018-06-21 10:45:09 +02:00
Marcus Efraimsson e617e23927 build: fix signing of multiple rpm packages 2018-06-21 10:27:59 +02:00
Marcus Efraimsson 8b5d78a63e docs: what's new in v5.2 and docker installation updates
[skip ci]
2018-06-20 18:53:17 +02:00
bergquist 503c8cd8ef tech: adds comments about route register code 2018-06-20 16:55:42 +02:00
Marcus Efraimsson cce9632837 changelog: add notes about closing issue
https://github.com/grafana/grafana-docker/issues/170
[skip ci]
2018-06-20 15:38:13 +02:00
Tobias Skarhed d00e2c20cf Karma to Jest: history_ctrl. Update version: ts-jest 2018-06-20 15:25:57 +02:00
Marcus Efraimsson 5a5601a8d2 changelog: add notes about 5.2.0-beta2
[skip ci]
2018-06-20 13:56:24 +02:00
Marcus Efraimsson 76df428ea2 changelog: add notes about closing #12240
[skip ci]
2018-06-20 13:54:57 +02:00
Marcus Efraimsson 3199287ce0 changelog: add notes about closing #12256
[skip ci]
2018-06-20 13:20:03 +02:00
Marcus Efraimsson 051ddb245d Merge pull request #12346 from grafana/12256_export
Make sure to process panels in collapsed rows when exporting dashboard
2018-06-20 13:17:32 +02:00
Marcus Efraimsson 9532cfee5f changelog: add notes about closing #11792
[skip ci]
2018-06-20 13:16:23 +02:00
Marcus Efraimsson 296a841685 Merge pull request #12123 from alexanderzobnin/fix-11792
graph: fix legend decimals precision calculation
2018-06-20 13:08:17 +02:00
Marcus Efraimsson ae07fc29e2 changelog: add notes about closing #12315
[skip ci]
2018-06-20 13:04:39 +02:00
Marcus Efraimsson 2cbec532ee Merge pull request #12345 from grafana/12315_dash_links
Fix dashboard drop down links
2018-06-20 13:00:17 +02:00
Marcus Efraimsson 4ef4a4d3a7 dashboard: fix drop down links 2018-06-20 12:41:11 +02:00
Daniel Lee a795715d2f Merge pull request #12350 from grafana/12240_save_modal_regression
Fix regressions after save modal changes
2018-06-20 10:40:49 +02:00
Carl Bergquist 578a8e8f55 Merge pull request #12322 from bergquist/sqlstore_refactoring
expose session and transaction helpers to other services
2018-06-20 10:22:06 +02:00
Marcus Efraimsson 41ac8d4cd5 fix regressions after save modal changes of not storing time and variables per default
Fix problem with adhoc variable filters not handled.
Fix problem with saving variables and time per default when saving a
dashboard as/first time.
Fix updating dashboard model after save with saving time/variables
enabled so that next time you save you won't get checkboxes for save
time/variables unless any values changed.
Tests validating correctness if time/variable values has changed.
2018-06-20 09:52:29 +02:00
Tobias Skarhed 3a9a36d6cf Karma to Jest: history_srv (#12341)
* Karma to Jest: history_srv

* Fix TS errors

* Remove q, as it is not needed
2018-06-19 08:05:49 -07:00
Marcus Efraimsson a2e08dc4e8 make sure to process panels in collapsed rows when exporting dashboard 2018-06-19 16:56:14 +02:00
Marcus Efraimsson d450ec94eb changelog: add notes about closing #3132
[skip ci]
2018-06-19 15:04:49 +02:00
Marcus Efraimsson f73c04086c docs: update installation instructions 2018-06-19 15:00:45 +02:00
Daniel Lee e6c5a5a905 ldap: add note about config in Grafana 2018-06-19 14:41:17 +02:00
Marcus Efraimsson b1cf1acb71 Merge pull request #10970 from mmolnar/master
ldap: allow use of DN in group_search_filter_user_attribute and member_of
2018-06-19 14:40:05 +02:00
Daniel Lee 40d760622e ldap: add note to dockerfile 2018-06-19 14:30:50 +02:00
Marcus Efraimsson a60332d459 changelog: add notes about closing #12343
[skip ci]
2018-06-19 13:54:37 +02:00
Daniel Lee 94f39cb734 docs: Plugin review guidelines and datasource auth pages 2018-06-19 13:16:41 +02:00
Marcus Efraimsson 5377ad4e96 remove unused argument in default scenario of guardian test 2018-06-19 12:34:34 +02:00
Torkel Ödegaard 24d0b43e62 fix: fixed permission issue with api key with viewer role in dashboards with default permissions 2018-06-19 11:10:17 +02:00
Tobias Skarhed 8666c77cc9 Karma to Jest: time_srv (#12303)
* Begin Karma to Jest: time_srv

* Remove experimental fix

* location search stubs for each test

* Fix issue where time service was not available for other tests
2018-06-18 09:47:23 -07:00
Tobias Skarhed 5bf72fc9f4 Karma to Jest: team_details_ctrl (#12321) 2018-06-18 07:54:56 -07:00
Grégoire Bellon-Gervais 7b3652af67 Fix error in InfluxDB query
Minor error in sql query to retrieve annotations
2018-06-18 16:10:40 +02:00
bergquist 3479cf4b39 expose functions to use sessions 2018-06-18 14:50:36 +02:00
bergquist 2b849086a1 changelog: adds note about closing #11607
[skip ci]
2018-06-18 13:51:20 +02:00
Carl Bergquist 764a4247f5 Merge pull request #12274 from xapon/11607-cleanup
#11607 Cleanup time of temporary files is now configurable
2018-06-18 13:50:05 +02:00
bergquist dd7a185a91 test commit for checking github permissions
[skip ci]
2018-06-18 11:41:28 +02:00
Marcus Efraimsson 9a4ccdf388 changelog: add notes about closing #12278
[skip ci]
2018-06-18 11:28:33 +02:00
bergquist ffda5efc66 Merge branch 'master' into alerting_reminder
* master:
  changelog: add notes about closing #11076
  snapshot: copy correct props when creating a snapshot
  set current org when adding/removing user to org
  changelog: add notes about closing #10707
  Include the vendor directory when copying source in to Docker (#12305)
  changelog: adds note about closing #12199
  adds inTransactionCtx that calls inTransactionWithRetryCtx
  merge create user handlers
  transactions: start sessions and transactions at the same place
  cloudwatch: handle invalid time range
  make sure to use real ip when validating white listed ip's
  changelog: adds note about closing #12286
2018-06-18 11:26:31 +02:00
Marcus Efraimsson 9271e48513 Merge pull request #12317 from grafana/12278_snapshot_annotations
Copy correct annotation props when creating a snapshot
2018-06-18 11:24:04 +02:00
Marcus Efraimsson b72c45f735 changelog: add notes about closing #11076
[skip ci]
2018-06-18 11:22:55 +02:00
Marcus Efraimsson 004142a1e4 Merge pull request #12263 from grafana/11076_current_org
Set current org when adding/removing user to org
2018-06-18 11:19:42 +02:00
Marcus Efraimsson a738347957 snapshot: copy correct props when creating a snapshot 2018-06-18 11:04:16 +02:00
Carl Bergquist d6f4313c2f Merge pull request #12203 from bergquist/bus_multi_dispatch
bus: support multiple dispatch in one transaction
2018-06-18 10:54:05 +02:00
Marcus Efraimsson 6d48d0a80c set current org when adding/removing user to org
To not get into a situation where a user has a current organization assign which he is
not a member of we try to always make sure that a user has a valid current organization
assigned.
2018-06-18 09:30:01 +02:00
bergquist 83a12afc07 adds tests for journaling sql operations 2018-06-16 11:27:04 +02:00
Sven Klemm 6c7984a840 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-06-16 10:36:50 +02:00
bergquist c21938d4c4 use epoch to compare timestamp 2018-06-16 00:03:13 +02:00
bergquist 4c5fe68e7e adds inTransactionCtx that calls inTransactionWithRetryCtx 2018-06-15 21:57:13 +02:00
bergquist 1181e96799 merge create user handlers 2018-06-15 21:23:57 +02:00
bergquist da91b91b4b transactions: start sessions and transactions at the same place
this make it possible for handler to use `withSession` when
transactions is not nedded and `inTransactionCtx` if its needed
without knowing who owns the session/transaction
2018-06-15 20:52:57 +02:00
bergquist 72224dbe37 adds info about eval/reminder interval 2018-06-15 16:53:35 +02:00
bergquist 12bf5c225a tests for defaultShouldNotify 2018-06-15 16:27:20 +02:00
bergquist f4b089d551 notifications: make journaling ctx aware 2018-06-15 15:30:17 +02:00
Francisco Guimarães acdc2bf100 Adding Cloudwatch AWS/AppSync metrics and dimensions 2018-06-15 10:11:32 -03:00
bergquist 7632983c62 notifications: gather actions in one transaction 2018-06-15 14:27:16 +02:00
bergquist 0cfdebf0a2 Merge remote-tracking branch 'fork/bus_multi_dispatch' into alerting_reminder
* fork/bus_multi_dispatch:
  sql: adds tests for InTransaction
  bus: noop should still execute fn
  removes unused code
  bus: Dispatch now passes empty ctx if handler require it
  bus: dont start transaction when creating session
  bus: dont mix ctx/classic handlers
  bus: DispatchCtx can now invoke any handler
  refactoring: renamed AddCtxHandler to AddHandlerCtx PR #12203
  refactoring: transaction manager PR #12203
  fixes typo in code
  check if admin exists or create one in one transaction
  replace begin/end with wrapper function
  bus: support multiple dispatch in one transaction
2018-06-15 13:17:24 +02:00
bergquist 09e71e00a3 sql: adds tests for InTransaction 2018-06-15 12:46:20 +02:00
bergquist 03dae10e79 bus: noop should still execute fn 2018-06-15 12:46:20 +02:00
bergquist a3ee778ddb removes unused code 2018-06-15 12:46:20 +02:00
bergquist 9c1758b593 bus: Dispatch now passes empty ctx if handler require it 2018-06-15 12:46:20 +02:00
bergquist 9ca9a7c302 bus: dont start transaction when creating session 2018-06-15 12:46:20 +02:00
bergquist 629eab0b1e bus: dont mix ctx/classic handlers 2018-06-15 12:46:20 +02:00
bergquist e2275701d8 bus: DispatchCtx can now invoke any handler 2018-06-15 12:46:20 +02:00
Torkel Ödegaard 5af0b924ff refactoring: renamed AddCtxHandler to AddHandlerCtx PR #12203 2018-06-15 12:46:20 +02:00
Torkel Ödegaard 442e0e437b refactoring: transaction manager PR #12203 2018-06-15 12:46:20 +02:00
bergquist 6775a82c82 fixes typo in code 2018-06-15 12:46:20 +02:00
bergquist 1bd31aa313 check if admin exists or create one in one transaction 2018-06-15 12:46:20 +02:00
bergquist 263572813a replace begin/end with wrapper function 2018-06-15 12:46:20 +02:00
bergquist 8143610024 bus: support multiple dispatch in one transaction
this makes it possible to run multiple DispatchCtx
in one transaction. The TransactionManager will
start/end the transaction and pass the dbsession
in the context.Context variable
2018-06-15 12:46:20 +02:00
bergquist 6cd83e182a Merge branch 'master' into alerting_reminder
* master: (84 commits)
  docs: adds info about grafana-dev container
  changelog: add notes about closing #12282
  Added Litre/min and milliLitre/min in Flow (#12282)
  remove papaparse dependency
  list name is deleteDatasources, not delete_datasources
  remove internal influx ifql datasource
  Document the endpoint for deleting an org
  tests: rewrite into table tests
  influxdb: adds mode func to backend
  changelog: add notes about closing #11484
  changelog: add notes about closing #11233
  Remove import
  Fix PR feedback
  Removed papaparse from external plugin exports
  Karma to Jest: query_builder
  dsproxy: move http client variable back
  Karma to Jest: threshold_mapper
  Expose react and slate to external plugins
  Karma to Jest: threshold_manager
  Karma to Jest: query_def, index_pattern
  ...
2018-06-15 12:45:35 +02:00
David Kaltschmidt a9e1e5f346 Fix queryfield wrapper css 2018-06-14 16:20:48 +01:00
David Kaltschmidt bbe6ab5096 Fix Queryfield metrics field missing 2018-06-14 16:20:33 +01:00
David Kaltschmidt b2f497b100 batch DOM reads from query field typeahead 2018-06-14 16:20:21 +01:00
David Kaltschmidt 73ddf2c3ed hint support for typeahead 2018-06-14 16:20:09 +01:00
David Kaltschmidt 2ebda4bf4d Make suggestions an object 2018-06-14 16:19:55 +01:00
David Kaltschmidt 4113f7db47 Trigger typeahead on Ctrl-Space 2018-06-14 16:19:43 +01:00
David Kaltschmidt 0425b47791 refactor Explore query field 2018-06-14 16:19:29 +01:00
Anton Sergeyev 2565a8087c #11607 corrected file cleanup test 2018-06-14 13:00:07 +05:00
Anton Sergeyev 7818578d6a #11607 removed unnecessary conversion (from gometalinter) 2018-06-14 12:50:18 +05:00
Anton Sergeyev 2024cf4b56 #11607 fixed formatting 2018-06-14 12:46:29 +05:00
Anton Sergeyev 516839d7b2 #11607 Cleanup time of temporary files is now configurable 2018-06-14 12:35:22 +05:00
Alexander Zobnin 24f6d34abd graph: fix legend decimals precision calculation 2018-06-07 16:02:44 +03:00
bergquist 4a8e9cf93f removes more unused code 2018-06-07 07:15:50 +02:00
bergquist 850aa21d45 removes unused code 2018-06-07 07:06:13 +02:00
Sven Klemm a05d694d31 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-06-05 23:21:46 +02:00
bergquist 171a38df99 alerting: fixes broken table rename 2018-06-05 14:29:48 +02:00
bergquist ab70ead5e4 alerting: renames journal table to alert_notification_journal 2018-06-05 13:10:38 +02:00
bergquist bcbae7aa62 alerting: move queries from evalcontext to notifier base 2018-06-05 12:07:02 +02:00
Carl Bergquist 05245e9b3d Merge pull request #12161 from bergquist/alerting_reminder_invert
alerting: invert sendOnce to sendReminder
2018-06-05 11:03:37 +02:00
bergquist 7333d7b8d4 alerting: invert sendOnce to sendReminder 2018-06-05 10:44:17 +02:00
bergquist 0c6d8398a1 alerting: remove zero units from duration 2018-06-05 08:42:39 +02:00
bergquist 93124f38fa alerting: only check frequency when not send once 2018-06-04 22:19:27 +02:00
bergquist 0e647db485 Merge branch 'master' into alerting_reminder
* master: (30 commits)
  changelog: add notes about closing #11882
  renamed variable in tests
  added comment, variableChange -> variableValueChange
  added a test
  added if to check if new variable has been added
  Gravatar fallback does not respect 'AppSubUrl'-setting (#12149)
  change admin password after first login
  changelog: adds note about closing #11958
  revert: reverted singlestat panel position change PR #12004
  Revert "provisioning: turn relative symlinked path into absolut paths"
  provisioning: turn relative symlinked path into absolut paths
  changelog: adds note about closing #11670
  elasticsearch: sort bucket keys to fix issue wth response parser tests
  docs: what's new in v5.2
  changelog: add notes about closing #11167
  docs: docker secrets support. (#12141)
  alerting: show alerts for user with Viewer role
  datasource: added option no-direct-access to ds-http-settings diretive, closes #12138
  provisioning: adds fallback if evalsymlink/abs fails
  tests: uses different paths depending on os
  ...
2018-06-04 17:44:18 +02:00
bergquist 86e65f84f9 alerting: fixes invalid error handling 2018-06-04 17:30:57 +02:00
John Baublitz bdf433594a Implement code review changes 2018-06-04 13:19:14 +02:00
John Baublitz 5c5951bc42 Bug fix for repeated alerting even on OK state and add notification_journal cleanup when alert resolves 2018-06-04 13:19:14 +02:00
John Baublitz c0a9e5cf1d Fix tests 2018-06-04 13:19:14 +02:00
John Baublitz fca97535d1 Fix multiple bugs 2018-06-04 13:19:14 +02:00
John Baublitz 3cb0e27e1c Revert changes post code review and move them to notification page 2018-06-04 13:19:14 +02:00
John Baublitz e068be4c26 Feature for repeated alerting in grafana 2018-06-04 13:19:13 +02:00
Sven Klemm 6220dec076 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-06-02 12:57:14 +02:00
Mitsuhiro Tanda e65cf5cbb5 fix directly specified variable rendering 2018-05-28 11:28:08 +09:00
Sven Klemm 17b46804e8 remove unused function renderAdhocFilters 2018-05-27 19:39:43 +02:00
Sven Klemm d77f9b2e74 send param in callback for get-param-options 2018-05-27 17:25:20 +02:00
Sven Klemm 039e38d510 make separator configurable 2018-05-26 23:03:59 +02:00
Sven Klemm 291d732b36 fix error message 2018-05-26 20:53:01 +02:00
Sven Klemm 928353c628 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-05-26 13:37:00 +02:00
Aleksei Magusev b7482ae8b7 Fix ResponseParser for InfluxDB to return only string values 2018-05-21 16:38:58 +02:00
Aleksei Magusev e104e9b2c2 Conditionally select a field to return in ResponseParser for InfluxDB
This patch also fixes "value[1] || value[0]" to not ignore zeros.
2018-05-21 16:38:53 +02:00
Sven Klemm cd49f2d425 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-05-21 15:58:31 +02:00
Sven Klemm 8b47d7c520 set style for registered query components 2018-05-21 12:53:06 +02:00
Sven Klemm 067bfa3f72 make param wrapper configurable 2018-05-21 12:52:14 +02:00
Sven Klemm a5bcd8eac0 fix metric column when using group by 2018-05-21 12:10:18 +02:00
Sven Klemm 3af4e4e0d6 separate label in template from type 2018-05-21 11:44:37 +02:00
Sven Klemm e93276b1f8 use sql part component 2018-05-21 11:10:00 +02:00
Sven Klemm de9a117dc6 use sql part component 2018-05-21 11:04:52 +02:00
Sven Klemm 181dfdba04 add sql_part component 2018-05-21 09:37:04 +02:00
Sven Klemm b12d049f6f quote column name in buildValueQuery 2018-05-19 17:21:53 +02:00
Sven Klemm 731c7520b3 return values quotes for suggestions in where expression 2018-05-19 15:34:48 +02:00
Sven Klemm 9e05477558 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-05-19 12:27:23 +02:00
Patrick O'Carroll b2027af4cb wrote classes 2018-05-16 13:37:26 +02:00
Patrick O'Carroll d83f886519 migrated jquery.flot.events to ts 2018-05-16 13:37:26 +02:00
Sven Klemm 1dd2bce054 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-05-05 13:33:54 +02:00
Sven Klemm 1c0a188272 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-04-13 22:18:32 +02:00
Sven Klemm 24eafa4537 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-04-10 14:37:11 +02:00
Sven Klemm 107c0d81d2 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-04-06 17:01:45 +02:00
Sven Klemm fa170b3cc6 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-03-28 20:43:15 +02:00
Sven Klemm 8b3c308168 remove categories from queryPart 2018-03-26 20:15:16 +02:00
Sven Klemm d6ac7aee89 remove unused import 2018-03-26 18:50:03 +02:00
Sven Klemm 6c2ef7dca6 handle aggregate functions more generic 2018-03-26 18:34:40 +02:00
Sven Klemm 12600a0e95 support non-nested menu entries 2018-03-26 13:19:14 +02:00
Sven Klemm 95a5a61337 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-03-19 20:23:36 +01:00
Sven Klemm 8392fe5cd2 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-03-17 16:24:06 +01:00
Sven Klemm f4006911e0 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-03-14 23:13:53 +01:00
Sven Klemm 46c229188e read aggregate functions from database 2018-03-14 23:03:32 +01:00
Sven Klemm 0c3afd0e9c add buildAggregateQuery 2018-03-14 22:59:48 +01:00
Sven Klemm 64fa1ce8a0 properly handle IN queries 2018-03-14 18:09:47 +01:00
Sven Klemm 6793fa5e54 join multivalue variables with , 2018-03-13 23:33:40 +01:00
Sven Klemm e6501f0f0e revert special handling for IN 2018-03-13 23:24:26 +01:00
Sven Klemm 5e9a66de5f put values for IN in parens 2018-03-13 23:19:56 +01:00
Sven Klemm 958646d976 dont quote where constraints 2018-03-13 23:15:25 +01:00
Sven Klemm b7c7030a46 add regex operators 2018-03-13 23:06:39 +01:00
Sven Klemm 046ee8efd8 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-03-13 21:31:43 +01:00
Sven Klemm cdb4e2ba0b remove unused setting 2018-03-13 21:31:07 +01:00
Sven Klemm e780b1bce5 cleanup where segment handling 2018-03-11 12:06:54 +01:00
Sven Klemm 0b358ff5f3 remove limit 2018-03-10 22:39:42 +01:00
Sven Klemm cb5278d413 handle variables in where constraints 2018-03-10 20:18:03 +01:00
Sven Klemm 1d8540ac69 properly quote where constraint parts 2018-03-09 18:18:12 +01:00
Sven Klemm 340f679d0f quote schema and table 2018-03-09 18:09:59 +01:00
Sven Klemm 1849e938bd Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-03-09 17:30:01 +01:00
Sven Klemm e590068082 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-03-07 18:38:28 +01:00
Sven Klemm 6b656094fc Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-03-06 10:43:01 +01:00
Sven Klemm 83200c289a use metricColumn in query builder 2018-03-04 23:32:23 +01:00
Sven Klemm 6766028d7a Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-03-04 21:40:20 +01:00
Sven Klemm bf4a30d30f set rawSQL when rendering query builder query 2018-03-04 19:46:11 +01:00
Sven Klemm 26e09b598c fix group by column 2018-03-04 19:35:43 +01:00
Sven Klemm e8c6341fed clean up aggregation functions 2018-03-04 10:18:11 +01:00
Sven Klemm 7104e6f9f8 fix variable interpolation 2018-03-03 22:11:51 +01:00
Sven Klemm fd518846b1 rename field to column 2018-03-03 20:57:00 +01:00
Sven Klemm 1a051ce320 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-03-01 14:40:43 +01:00
Sven Klemm 6c6be9cfc0 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-02-26 07:50:49 +01:00
Sven Klemm c5de5ed5be Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-02-21 08:24:04 +01:00
Martin Molnar be2fa54459 feat(ldap): Allow use of DN in user attribute filter (#3132) 2018-02-20 11:15:31 +01:00
Sven Klemm dd2b6c70a2 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-02-08 16:48:12 +01:00
Sven Klemm ef18eb7fcb add where constraint handling 2018-02-08 10:25:32 +01:00
Sven Klemm 3bce45d8a6 add query_builder 2018-02-08 10:19:43 +01:00
Sven Klemm bb68cb6e3c Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-02-07 20:12:51 +01:00
Sven Klemm 09efcbc205 Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-02-07 15:01:00 +01:00
Sven Klemm 382a525477 make metricColumn functional 2018-02-03 18:26:57 +01:00
Sven Klemm 01a1737ddb Merge remote-tracking branch 'upstream/master' into postgres-query-builder 2018-02-03 18:06:01 +01:00
Sven Klemm c65a964cdd add metric column selector 2018-02-03 18:03:00 +01:00
Sven Klemm 4dbd83fac1 add groupby to querybuilder
remove unused aggregations
2018-01-31 15:32:32 +01:00
Sven Klemm 571ecdc740 enhance render function 2018-01-30 22:57:38 +01:00
Sven Klemm 443504517a add postgres_query.ts 2018-01-30 22:13:55 +01:00
Sven Klemm 438b10bcd6 query builder changes 2018-01-30 14:10:38 +01:00
Sven Klemm a59e052a0f more query builder components 2018-01-30 14:08:10 +01:00
Sven Klemm 17be31e216 call render in query 2018-01-28 22:16:51 +01:00
Sven Klemm 33ac22bfdb start query builder ui 2018-01-21 22:08:18 +01:00
943 changed files with 40318 additions and 24283 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ watch_dirs = [
"$WORKDIR/public/views",
"$WORKDIR/conf",
]
watch_exts = [".go", ".ini", ".toml"]
watch_exts = [".go", ".ini", ".toml", ".template.html"]
build_delay = 1500
cmds = [
["go", "run", "build.go", "-dev", "build-server"],
+172 -30
View File
@@ -5,16 +5,21 @@ aliases:
ignore: /.*/
tags:
only: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/
- &filter-not-release
- &filter-not-release-or-master
tags:
ignore: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/
branches:
ignore: master
- &filter-only-master
branches:
only: master
version: 2
jobs:
mysql-integration-test:
docker:
- image: circleci/golang:1.10
- image: circleci/golang:1.11
- image: circleci/mysql:5.6-ram
environment:
MYSQL_ROOT_PASSWORD: rootpass
@@ -34,7 +39,7 @@ jobs:
postgres-integration-test:
docker:
- image: circleci/golang:1.10
- image: circleci/golang:1.11
- image: circleci/postgres:9.3-ram
environment:
POSTGRES_USER: grafanatest
@@ -69,7 +74,7 @@ jobs:
gometalinter:
docker:
- image: circleci/golang:1.10
- image: circleci/golang:1.11
environment:
# we need CGO because of go-sqlite3
CGO_ENABLED: 1
@@ -85,20 +90,21 @@ jobs:
- run:
name: run linters
command: 'gometalinter.v2 --enable-gc --vendor --deadline 10m --disable-all --enable=deadcode --enable=ineffassign --enable=structcheck --enable=unconvert --enable=varcheck ./...'
- run:
name: run go vet
command: 'go vet ./pkg/...'
test-frontend:
docker:
- image: circleci/node:6.11.4
- image: circleci/node:8
steps:
- checkout
- run:
name: install yarn
command: 'sudo npm install -g yarn --quiet'
- restore_cache:
key: dependency-cache-{{ checksum "yarn.lock" }}
- run:
name: yarn install
command: 'yarn install --pure-lockfile --no-progress'
no_output_timeout: 15m
- save_cache:
key: dependency-cache-{{ checksum "yarn.lock" }}
paths:
@@ -109,7 +115,7 @@ jobs:
test-backend:
docker:
- image: circleci/golang:1.10
- image: circleci/golang:1.11
working_directory: /go/src/github.com/grafana/grafana
steps:
- checkout
@@ -119,7 +125,7 @@ jobs:
build-all:
docker:
- image: grafana/build-container:1.0.0
- image: grafana/build-container:1.1.0
working_directory: /go/src/github.com/grafana/grafana
steps:
- checkout
@@ -141,6 +147,12 @@ jobs:
- run:
name: sign packages
command: './scripts/build/sign_packages.sh'
- run:
name: verify signed packages
command: |
mkdir -p ~/.rpmdb/pubkeys
curl -s https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana > ~/.rpmdb/pubkeys/grafana.key
./scripts/build/verify_signed_packages.sh dist/*.rpm
- run:
name: sha-sum packages
command: 'go run build.go sha-dist'
@@ -153,8 +165,65 @@ jobs:
- dist/grafana*
- scripts/*.sh
- scripts/publish
- store_artifacts:
path: dist
build:
docker:
- image: grafana/build-container:1.1.0
working_directory: /go/src/github.com/grafana/grafana
steps:
- checkout
- run:
name: prepare build tools
command: '/tmp/bootstrap.sh'
- run:
name: build and package grafana
command: './scripts/build/build.sh'
- run:
name: sign packages
command: './scripts/build/sign_packages.sh'
- run:
name: sha-sum packages
command: 'go run build.go sha-dist'
- persist_to_workspace:
root: .
paths:
- dist/grafana*
grafana-docker-master:
docker:
- image: docker:stable-git
steps:
- checkout
- attach_workspace:
at: .
- setup_remote_docker
- run: docker info
- run: cp dist/grafana-latest.linux-x64.tar.gz packaging/docker
- run: cd packaging/docker && ./build-deploy.sh "master-${CIRCLE_SHA1}"
grafana-docker-pr:
docker:
- image: docker:stable-git
steps:
- checkout
- attach_workspace:
at: .
- setup_remote_docker
- run: docker info
- run: cp dist/grafana-latest.linux-x64.tar.gz packaging/docker
- run: cd packaging/docker && ./build.sh "${CIRCLE_SHA1}"
grafana-docker-release:
docker:
- image: docker:stable-git
steps:
- checkout
- attach_workspace:
at: .
- setup_remote_docker
- run: docker info
- run: cp dist/grafana-latest.linux-x64.tar.gz packaging/docker
- run: cd packaging/docker && ./build-deploy.sh "${CIRCLE_TAG}"
build-enterprise:
docker:
@@ -163,7 +232,7 @@ jobs:
steps:
- checkout
- run:
name: build and package grafana
name: build, test and package grafana enterprise
command: './scripts/build/build_enterprise.sh'
- run:
name: sign packages
@@ -171,6 +240,26 @@ jobs:
- run:
name: sha-sum packages
command: 'go run build.go sha-dist'
- run:
name: move enterprise packages into their own folder
command: 'mv dist enterprise-dist'
- persist_to_workspace:
root: .
paths:
- enterprise-dist/grafana-enterprise*
deploy-enterprise-master:
docker:
- image: circleci/python:2.7-stretch
steps:
- attach_workspace:
at: .
- run:
name: install awscli
command: 'sudo pip install awscli'
- run:
name: deploy to s3
command: 'aws s3 sync ./enterprise-dist s3://$ENTERPRISE_BUCKET_NAME/master'
deploy-master:
docker:
@@ -190,9 +279,6 @@ jobs:
- run:
name: Trigger Windows build
command: './scripts/trigger_windows_build.sh ${APPVEYOR_TOKEN} ${CIRCLE_SHA1} master'
- run:
name: Trigger Docker build
command: './scripts/trigger_docker_build.sh ${TRIGGER_GRAFANA_PACKER_CIRCLECI_TOKEN} master-$(echo "${CIRCLE_SHA1}" | cut -b1-7)'
- run:
name: Publish to Grafana.com
command: |
@@ -214,28 +300,27 @@ jobs:
- run:
name: Trigger Windows build
command: './scripts/trigger_windows_build.sh ${APPVEYOR_TOKEN} ${CIRCLE_SHA1} release'
- run:
name: Trigger Docker build
command: './scripts/trigger_docker_build.sh ${TRIGGER_GRAFANA_PACKER_CIRCLECI_TOKEN} ${CIRCLE_TAG}'
workflows:
version: 2
test-and-build:
build-master:
jobs:
- build-all:
filters: *filter-not-release
filters: *filter-only-master
- build-enterprise:
filters: *filter-only-master
- codespell:
filters: *filter-not-release
filters: *filter-only-master
- gometalinter:
filters: *filter-not-release
filters: *filter-only-master
- test-frontend:
filters: *filter-not-release
filters: *filter-only-master
- test-backend:
filters: *filter-not-release
filters: *filter-only-master
- mysql-integration-test:
filters: *filter-not-release
filters: *filter-only-master
- postgres-integration-test:
filters: *filter-not-release
filters: *filter-only-master
- deploy-master:
requires:
- build-all
@@ -245,9 +330,29 @@ workflows:
- gometalinter
- mysql-integration-test
- postgres-integration-test
filters:
branches:
only: master
filters: *filter-only-master
- grafana-docker-master:
requires:
- build-all
- test-backend
- test-frontend
- codespell
- gometalinter
- mysql-integration-test
- postgres-integration-test
filters: *filter-only-master
- deploy-enterprise-master:
requires:
- build-all
- test-backend
- test-frontend
- codespell
- gometalinter
- mysql-integration-test
- postgres-integration-test
- build-enterprise
filters: *filter-only-master
release:
jobs:
- build-all:
@@ -274,3 +379,40 @@ workflows:
- mysql-integration-test
- postgres-integration-test
filters: *filter-only-release
- grafana-docker-release:
requires:
- build-all
- test-backend
- test-frontend
- codespell
- gometalinter
- mysql-integration-test
- postgres-integration-test
filters: *filter-only-release
build-branches-and-prs:
jobs:
- build:
filters: *filter-not-release-or-master
- codespell:
filters: *filter-not-release-or-master
- gometalinter:
filters: *filter-not-release-or-master
- test-frontend:
filters: *filter-not-release-or-master
- test-backend:
filters: *filter-not-release-or-master
- mysql-integration-test:
filters: *filter-not-release-or-master
- postgres-integration-test:
filters: *filter-not-release-or-master
- grafana-docker-pr:
requires:
- build
- test-backend
- test-frontend
- codespell
- gometalinter
- mysql-integration-test
- postgres-integration-test
filters: *filter-not-release-or-master
+3
View File
@@ -3,9 +3,12 @@
.git
.gitignore
.github
.vscode
bin
data*
dist
docker
Dockerfile
docs
dump.rdb
node_modules
+3 -3
View File
@@ -2,12 +2,12 @@ Follow the setup guide in README.md
### Rebuild frontend assets on source change
```
grunt && grunt watch
yarn watch
```
### Rerun tests on source change
```
grunt karma:dev
yarn jest
```
### Run tests for backend assets before commit
@@ -17,6 +17,6 @@ test -z "$(gofmt -s -l . | grep -v -E 'vendor/(github.com|golang.org|gopkg.in)'
### Run tests for frontend assets before commit
```
npm test
yarn test
go test -v ./pkg/...
```
+5 -1
View File
@@ -33,6 +33,7 @@ public/css/*.min.css
*.tmp
.DS_Store
.vscode/
.vs/
/data/*
/bin/*
@@ -42,6 +43,8 @@ fig.yml
docker-compose.yml
docker-compose.yaml
/conf/provisioning/**/custom.yaml
/conf/provisioning/**/dev.yaml
/conf/ldap_dev.toml
profile.cov
/grafana
/local
@@ -55,6 +58,7 @@ debug.test
/examples/*/dist
/packaging/**/*.rpm
/packaging/**/*.deb
/packaging/**/*.tar.gz
# Ignore OSX indexing
.DS_Store
@@ -67,4 +71,4 @@ debug.test
/vendor/**/appengine*
*.orig
/devenv/dashboards/bulk-testing/*.json
/devenv/bulk-dashboards/*.json
-13
View File
@@ -1,13 +0,0 @@
{
"disallowImplicitTypeConversion": ["string"],
"disallowKeywords": ["with"],
"disallowMultipleLineBreaks": true,
"disallowMixedSpacesAndTabs": true,
"disallowTrailingWhitespace": true,
"requireSpacesInFunctionExpression": {
"beforeOpeningCurlyBrace": true
},
"disallowSpacesInsideArrayBrackets": true,
"disallowSpacesInsideParentheses": true,
"validateIndentation": 2
}
-37
View File
@@ -1,37 +0,0 @@
{
"browser": true,
"esversion": 6,
"bitwise":false,
"curly": true,
"eqnull": true,
"strict": false,
"devel": true,
"eqeqeq": true,
"forin": false,
"immed": true,
"supernew": true,
"expr": true,
"indent": 2,
"latedef": false,
"newcap": true,
"noarg": true,
"noempty": true,
"undef": true,
"boss": true,
"trailing": true,
"laxbreak": true,
"laxcomma": true,
"sub": true,
"unused": true,
"maxdepth": 6,
"maxlen": 140,
"globals": {
"System": true,
"Promise": true,
"define": true,
"require": true,
"Chromath": false,
"setImmediate": true
}
}
+165 -2
View File
@@ -1,4 +1,139 @@
# 5.2.0 (unreleased)
# 5.3.0 (unreleased)
# 5.3.0-beta1 (2018-09-06)
### New Major Features
* **Alerting**: Notification reminders [#7330](https://github.com/grafana/grafana/issues/7330), thx [@jbaublitz](https://github.com/jbaublitz)
* **Dashboard**: TV & Kiosk mode changes, new cycle view mode button in dashboard toolbar [#13025](https://github.com/grafana/grafana/pull/13025)
* **OAuth**: Gitlab OAuth with support for filter by groups [#5623](https://github.com/grafana/grafana/issues/5623), thx [@BenoitKnecht](https://github.com/BenoitKnecht)
* **Postgres**: Graphical query builder [#10095](https://github.com/grafana/grafana/issues/10095), thx [svenklemm](https://github.com/svenklemm)
### New Features
* **LDAP**: Define Grafana Admin permission in ldap group mappings [#2469](https://github.com/grafana/grafana/issues/2496), PR [#12622](https://github.com/grafana/grafana/issues/12622)
* **LDAP**: Client certificates support [#12805](https://github.com/grafana/grafana/issues/12805), thx [@nyxi](https://github.com/nyxi)
* **Profile**: List teams that the user is member of in current/active organization [#12476](https://github.com/grafana/grafana/issues/12476)
* **Configuration**: Allow auto-assigning users to specific organization (other than Main. Org) [#1823](https://github.com/grafana/grafana/issues/1823) [#12801](https://github.com/grafana/grafana/issues/12801), thx [@gzzo](https://github.com/gzzo) and [@ofosos](https://github.com/ofosos)
* **Dataproxy**: Pass configured/auth headers to a Datasource [#10971](https://github.com/grafana/grafana/issues/10971), thx [@mrsiano](https://github.com/mrsiano)
* **Cloudwatch**: CloudWatch GetMetricData support [#11487](https://github.com/grafana/grafana/issues/11487), thx [@mtanda](https://github.com/mtanda)
* **Postgres**: TimescaleDB support, e.g. use `time_bucket` for grouping by time when option enabled [#12680](https://github.com/grafana/grafana/pull/12680), thx [svenklemm](https://github.com/svenklemm)
* **Cleanup**: Make temp file time to live configurable [#11607](https://github.com/grafana/grafana/issues/11607), thx [@xapon](https://github.com/xapon)
### Minor
* **Alerting**: Its now possible to configure the default value for how to handle errors and no data in alerting. [#10424](https://github.com/grafana/grafana/issues/10424)
* **Alerting**: Fix diff and percent_diff reducers [#11563](https://github.com/grafana/grafana/issues/11563), thx [@jessetane](https://github.com/jessetane)
* **Alerting**: Fix rendering timeout which could cause notifications to not be sent due to rendering timing out [#12151](https://github.com/grafana/grafana/issues/12151)
* **Docker**: Make it possible to set a specific plugin url [#12861](https://github.com/grafana/grafana/pull/12861), thx [ClementGautier](https://github.com/ClementGautier)
* **GrafanaCli**: Fixed issue with grafana-cli install plugin resulting in corrupt http response from source error. Fixes [#13079](https://github.com/grafana/grafana/issues/13079)
* **Provisioning**: Should allow one default datasource per organisation [#12229](https://github.com/grafana/grafana/issues/12229)
* **Github OAuth**: Allow changes of user info at Github to be synched to Grafana when signing in [#11818](https://github.com/grafana/grafana/issues/11818), thx [@rwaweber](https://github.com/rwaweber)
* **OAuth**: Fix overriding tls_skip_verify_insecure using environment variable [#12747](https://github.com/grafana/grafana/issues/12747), thx [@jangaraj](https://github.com/jangaraj)
* **Prometheus**: Fix graph panel bar width issue in aligned prometheus queries [#12379](https://github.com/grafana/grafana/issues/12379)
* **Prometheus**: Heatmap - fix unhandled error when some points are missing [#12484](https://github.com/grafana/grafana/issues/12484)
* **Prometheus**: Add $__interval, $__interval_ms, $__range, $__range_s & $__range_ms support for dashboard and template queries [#12597](https://github.com/grafana/grafana/issues/12597) [#12882](https://github.com/grafana/grafana/issues/12882), thx [@roidelapluie](https://github.com/roidelapluie)
* **Elasticsearch**: For alerting/backend, support having index name to the right of pattern in index pattern [#12731](https://github.com/grafana/grafana/issues/12731)
* **Graphite**: Fix for quoting of int function parameters (when using variables) [#11927](https://github.com/grafana/grafana/pull/11927)
* **InfluxDB**: Support timeFilter in query templating for InfluxDB [#12598](https://github.com/grafana/grafana/pull/12598), thx [kichristensen](https://github.com/kichristensen)
* **Postgres/MySQL/MSSQL**: New $__unixEpochGroup and $__unixEpochGroupAlias macros [#12892](https://github.com/grafana/grafana/issues/12892), thx [@svenklemm](https://github.com/svenklemm)
* **Postgres/MySQL/MSSQL**: Add previous fill mode to $__timeGroup macro which will fill in previously seen value when point is missing [#12756](https://github.com/grafana/grafana/issues/12756), thx [@svenklemm](https://github.com/svenklemm)
* **Postgres/MySQL/MSSQL**: Use floor rounding in $__timeGroup macro function [#12460](https://github.com/grafana/grafana/issues/12460), thx [@svenklemm](https://github.com/svenklemm)
* **Postgres/MySQL/MSSQL**: Use metric column as prefix when returning multiple value columns [#12727](https://github.com/grafana/grafana/issues/12727), thx [@svenklemm](https://github.com/svenklemm)
* **Postgres/MySQL/MSSQL**: New $__timeGroupAlias macro. Postgres $__timeGroup no longer automatically adds time column alias [#12749](https://github.com/grafana/grafana/issues/12749), thx [@svenklemm](https://github.com/svenklemm)
* **Postgres/MySQL/MSSQL**: Escape single quotes in variables [#12785](https://github.com/grafana/grafana/issues/12785), thx [@eMerzh](https://github.com/eMerzh)
* **Postgres/MySQL/MSSQL**: Min time interval support [#13157](https://github.com/grafana/grafana/issues/13157), thx [@svenklemm](https://github.com/svenklemm)
* **MySQL/MSSQL**: Use datetime format instead of epoch for $__timeFilter, $__timeFrom and $__timeTo macros [#11618](https://github.com/grafana/grafana/issues/11618) [#11619](https://github.com/grafana/grafana/issues/11619), thx [@AustinWinstanley](https://github.com/AustinWinstanley)
* **Postgres**: Escape ssl mode parameter in connectionstring [#12644](https://github.com/grafana/grafana/issues/12644), thx [@yogyrahmawan](https://github.com/yogyrahmawan)
* **Cloudwatch**: Improved error handling [#12489](https://github.com/grafana/grafana/issues/12489), thx [@mtanda](https://github.com/mtanda)
* **Cloudwatch**: AppSync metrics and dimensions [#12300](https://github.com/grafana/grafana/issues/12300), thx [@franciscocpg](https://github.com/franciscocpg)
* **Cloudwatch**: Direct Connect metrics and dimensions [#12762](https://github.com/grafana/grafana/pulls/12762), thx [@mindriot88](https://github.com/mindriot88)
* **Cloudwatch**: Added BurstBalance metric to list of AWS RDS metrics [#12561](https://github.com/grafana/grafana/pulls/12561), thx [@activeshadow](https://github.com/activeshadow)
* **Cloudwatch**: Add new Redshift metrics and dimensions [#12063](https://github.com/grafana/grafana/pulls/12063), thx [@A21z](https://github.com/A21z)
* **Dashboard**: Fix selecting current dashboard from search should not reload dashboard [#12248](https://github.com/grafana/grafana/issues/12248)
* **Dashboard**: Use uid when linking to dashboards internally in a dashboard [#10705](https://github.com/grafana/grafana/issues/10705)
* **Graph**: Option to hide series from tooltip [#3341](https://github.com/grafana/grafana/issues/3341), thx [@mtanda](https://github.com/mtanda)
* **Singlestat**: Make colorization of prefix and postfix optional in singlestat [#11892](https://github.com/grafana/grafana/pull/11892), thx [@ApsOps](https://github.com/ApsOps)
* **Table**: Adjust header contrast for the light theme [#12668](https://github.com/grafana/grafana/issues/12668)
* **Table**: Fix link color when using light theme and thresholds in use [#12766](https://github.com/grafana/grafana/issues/12766)
* **Table**: Fix for useless horizontal scrollbar for table panel [#9964](https://github.com/grafana/grafana/issues/9964)
* **Table**: Make table sorting stable when null values exist [#12362](https://github.com/grafana/grafana/pull/12362), thx [@bz2](https://github.com/bz2)
* **Heatmap**: Fix broken tooltip and crosshair on Firefox [#12486](https://github.com/grafana/grafana/issues/12486)
* **Datasource**: Fix UI issue with secret fields after updating datasource [#11270](https://github.com/grafana/grafana/issues/11270)
* **Variables**: Skip unneeded extra query request when de-selecting variable values used for repeated panels [#8186](https://github.com/grafana/grafana/issues/8186), thx [@mtanda](https://github.com/mtanda)
* **Variables**: Limit amount of queries executed when updating variable that other variable(s) are dependent on [#11890](https://github.com/grafana/grafana/issues/11890)
* **Variables**: Support query variable refresh when another variable referenced in `Regex` field change its value [#12952](https://github.com/grafana/grafana/issues/12952), thx [@franciscocpg](https://github.com/franciscocpg)
* **Variables**: Support variables in query variable `Custom all value` field [#12965](https://github.com/grafana/grafana/issues/12965), thx [@franciscocpg](https://github.com/franciscocpg)
* **Units**: Change units to include characters for power of 2 and 3 [#12744](https://github.com/grafana/grafana/pull/12744), thx [@Worty](https://github.com/Worty)
* **Units**: Polish złoty currency [#12691](https://github.com/grafana/grafana/pull/12691), thx [@mwegrzynek](https://github.com/mwegrzynek)
* **Units**: Adds bitcoin axes unit. [#13125](https://github.com/grafana/grafana/pull/13125)
* **Api**: Delete nonexistent datasource should return 404 [#12313](https://github.com/grafana/grafana/issues/12313), thx [@AustinWinstanley](https://github.com/AustinWinstanley)
* **Logging**: Reopen log files after receiving a SIGHUP signal [#13112](https://github.com/grafana/grafana/pull/13112), thx [@filewalkwithme](https://github.com/filewalkwithme)
* **Login**: Show loading animation while waiting for authentication response on login [#12865](https://github.com/grafana/grafana/issues/12865)
* **UI**: Fix iOS home screen "app" icon and Windows 10 app experience [#12752](https://github.com/grafana/grafana/issues/12752), thx [@andig](https://github.com/andig)
* **Plugins**: Convert URL-like text to links in plugins readme [#12843](https://github.com/grafana/grafana/pull/12843), thx [pgiraud](https://github.com/pgiraud)
### Breaking changes
* Postgres datasource no longer automatically adds time column alias when using the $__timeGroup alias. However, there's code in place which should make this change backward compatible and shouldn't create any issues.
* Kiosk mode now also hides submenu (variables)
* ?inactive url parameter no longer supported, replaced with kiosk=tv url parameter
### New experimental features
These are new features that's still being worked on and are in an experimental phase. We incourage users to try these out and provide any feedback in related issue.
* **Dashboard**: Auto fit dashboard panels to optimize space used for current TV / Monitor [#12768](https://github.com/grafana/grafana/issues/12768)
### Tech
* **Frontend**: Convert all Frontend Karma tests to Jest tests [#12224](https://github.com/grafana/grafana/issues/12224)
* **Backend**: Upgrade to golang 1.11 [#13030](https://github.com/grafana/grafana/issues/13030)
# 5.2.3 (2018-08-29)
### Important fix for LDAP & OAuth login vulnerability
See [security announcement](https://community.grafana.com/t/grafana-5-2-3-and-4-6-4-security-update/10050) for details.
# 5.2.2 (2018-07-25)
### Minor
* **Prometheus**: Fix graph panel bar width issue in aligned prometheus queries [#12379](https://github.com/grafana/grafana/issues/12379)
* **Dashboard**: Dashboard links not updated when changing variables [#12506](https://github.com/grafana/grafana/issues/12506)
* **Postgres/MySQL/MSSQL**: Fix connection leak [#12636](https://github.com/grafana/grafana/issues/12636) [#9827](https://github.com/grafana/grafana/issues/9827)
* **Plugins**: Fix loading of external plugins [#12551](https://github.com/grafana/grafana/issues/12551)
* **Dashboard**: Remove unwanted scrollbars in embedded panels [#12589](https://github.com/grafana/grafana/issues/12589)
* **Prometheus**: Prevent error using $__interval_ms in query [#12533](https://github.com/grafana/grafana/pull/12533), thx [@mtanda](https://github.com/mtanda)
# 5.2.1 (2018-06-29)
### Minor
* **Auth Proxy**: Important security fix for whitelist of IP address feature [#12444](https://github.com/grafana/grafana/pull/12444)
* **UI**: Fix - Grafana footer overlapping page [#12430](https://github.com/grafana/grafana/issues/12430)
* **Logging**: Errors should be reported before crashing [#12438](https://github.com/grafana/grafana/issues/12438)
# 5.2.0-stable (2018-06-27)
### Minor
* **Plugins**: Handle errors correctly when loading datasource plugin [#12383](https://github.com/grafana/grafana/pull/12383) thx [@rozetko](https://github.com/rozetko)
* **Render**: Enhance error message if phantomjs executable is not found [#11868](https://github.com/grafana/grafana/issues/11868)
* **Dashboard**: Set correct text in drop down when variable is present in url [#11968](https://github.com/grafana/grafana/issues/11968)
### 5.2.0-beta3 fixes
* **LDAP**: Handle "dn" ldap attribute more gracefully [#12385](https://github.com/grafana/grafana/pull/12385), reverts [#10970](https://github.com/grafana/grafana/pull/10970)
# 5.2.0-beta3 (2018-06-21)
### Minor
* **Build**: All rpm packages should be signed [#12359](https://github.com/grafana/grafana/issues/12359)
# 5.2.0-beta2 (2018-06-20)
### New Features
@@ -6,6 +141,7 @@
### Minor
* **Permissions**: Important security fix for API keys with viewer role [#12343](https://github.com/grafana/grafana/issues/12343)
* **Dashboard**: Fix so panel titles doesn't wrap [#11074](https://github.com/grafana/grafana/issues/11074)
* **Dashboard**: Prevent double-click when saving dashboard [#11963](https://github.com/grafana/grafana/issues/11963)
* **Dashboard**: AutoFocus the add-panel search filter [#12189](https://github.com/grafana/grafana/pull/12189) thx [@ryantxu](https://github.com/ryantxu)
@@ -15,12 +151,24 @@
* **Influxdb**: Add support for mode function [#12286](https://github.com/grafana/grafana/issues/12286)
* **Cloudwatch**: Fixes panic caused by bad timerange settings [#12199](https://github.com/grafana/grafana/issues/12199)
* **Auth Proxy**: Whitelist proxy IP address instead of client IP address [#10707](https://github.com/grafana/grafana/issues/10707)
* **User Management**: Make sure that a user always has a current org assigned [#11076](https://github.com/grafana/grafana/issues/11076)
* **Snapshots**: Fix: annotations not properly extracted leading to incorrect rendering of annotations [#12278](https://github.com/grafana/grafana/issues/12278)
* **LDAP**: Allow use of DN in group_search_filter_user_attribute and member_of [#3132](https://github.com/grafana/grafana/issues/3132), thx [@mmolnar](https://github.com/mmolnar)
* **Graph**: Fix legend decimals precision calculation [#11792](https://github.com/grafana/grafana/issues/11792)
* **Dashboard**: Make sure to process panels in collapsed rows when exporting dashboard [#12256](https://github.com/grafana/grafana/issues/12256)
### 5.2.0-beta1 fixes
* **Dashboard**: Dashboard link doesn't work when "As dropdown" option is checked [#12315](https://github.com/grafana/grafana/issues/12315)
* **Dashboard**: Fix regressions after save modal changes, including adhoc template issues [#12240](https://github.com/grafana/grafana/issues/12240)
* **Docker**: Config keys ending with _FILE are not respected [#170](https://github.com/grafana/grafana-docker/issues/170)
# 5.2.0-beta1 (2018-06-05)
### New Features
* **Elasticsearch**: Alerting support [#5893](https://github.com/grafana/grafana/issues/5893), thx [@WPH95](https://github.com/WPH95)
* **Build**: Crosscompile and packages Grafana on arm, windows, linux and darwin [#11920](https://github.com/grafana/grafana/pull/11920), thx [@fg2it](https://github.com/fg2it)
* **Login**: Change admin password after first login [#11882](https://github.com/grafana/grafana/issues/11882)
* **Alert list panel**: Updated to support filtering alerts by name, dashboard title, folder, tags [#11500](https://github.com/grafana/grafana/issues/11500), [#8168](https://github.com/grafana/grafana/issues/8168), [#6541](https://github.com/grafana/grafana/issues/6541)
@@ -56,6 +204,14 @@
* **Dashboard list panel**: Search dashboards by folder [#11525](https://github.com/grafana/grafana/issues/11525)
* **Sidenav**: Always show server admin link in sidenav if grafana admin [#11657](https://github.com/grafana/grafana/issues/11657)
# 5.1.5 (2018-06-27)
* **Docker**: Config keys ending with _FILE are not respected [#170](https://github.com/grafana/grafana-docker/issues/170)
# 5.1.4 (2018-06-19)
* **Permissions**: Important security fix for API keys with viewer role [#12343](https://github.com/grafana/grafana/issues/12343)
# 5.1.3 (2018-05-16)
* **Scroll**: Graph panel / legend texts shifts on the left each time we move scrollbar on firefox [#11830](https://github.com/grafana/grafana/issues/11830)
@@ -308,6 +464,12 @@ The following properties have been deprecated and will be removed in a future re
- `uri` property in `GET /api/search` -> Use new `url` or `uid` property instead
- `meta.slug` property in `GET /api/dashboards/uid/:uid` and `GET /api/dashboards/db/:slug` -> Use new `meta.url` or `dashboard.uid` property instead
# 4.6.4 (2018-08-29)
### Important fix for LDAP & OAuth login vulnerability
See [security announcement](https://community.grafana.com/t/grafana-5-2-3-and-4-6-4-security-update/10050) for details.
# 4.6.3 (2017-12-14)
## Fixes
@@ -1279,7 +1441,7 @@ Grafana 2.x is fundamentally different from 1.x; it now ships with an integrated
**New features**
- [Issue #1623](https://github.com/grafana/grafana/issues/1623). Share Dashboard: Dashboard snapshot sharing (dash and data snapshot), save to local or save to public snapshot dashboard snapshots.raintank.io site
- [Issue #1622](https://github.com/grafana/grafana/issues/1622). Share Panel: The share modal now has an embed option, gives you an iframe that you can use to embedd a single graph on another web site
- [Issue #718](https://github.com/grafana/grafana/issues/718). Dashboard: When saving a dashboard and another user has made changes in between the user is promted with a warning if he really wants to overwrite the other's changes
- [Issue #718](https://github.com/grafana/grafana/issues/718). Dashboard: When saving a dashboard and another user has made changes in between the user is prompted with a warning if he really wants to overwrite the other's changes
- [Issue #1331](https://github.com/grafana/grafana/issues/1331). Graph & Singlestat: New axis/unit format selector and more units (kbytes, Joule, Watt, eV), and new design for graph axis & grid tab and single stat options tab views
- [Issue #1241](https://github.com/grafana/grafana/issues/1242). Timepicker: New option in timepicker (under dashboard settings), to change ``now`` to be for example ``now-1m``, useful when you want to ignore last minute because it contains incomplete data
- [Issue #171](https://github.com/grafana/grafana/issues/171). Panel: Different time periods, panels can override dashboard relative time and/or add a time shift
@@ -1737,3 +1899,4 @@ Thanks to everyone who contributed fixes and provided feedback :+1:
# 1.0.0 (2014-01-19)
First public release
+82
View File
@@ -0,0 +1,82 @@
# Golang build container
FROM golang:1.11
WORKDIR $GOPATH/src/github.com/grafana/grafana
COPY Gopkg.toml Gopkg.lock ./
COPY vendor vendor
ARG DEP_ENSURE=""
RUN if [ ! -z "${DEP_ENSURE}" ]; then \
go get -u github.com/golang/dep/cmd/dep && \
dep ensure --vendor-only; \
fi
COPY pkg pkg
COPY build.go build.go
COPY package.json package.json
RUN go run build.go build
# Node build container
FROM node:8
WORKDIR /usr/src/app/
COPY package.json yarn.lock ./
RUN yarn install --pure-lockfile --no-progress
COPY Gruntfile.js tsconfig.json tslint.json ./
COPY public public
COPY scripts scripts
COPY emails emails
ENV NODE_ENV production
RUN ./node_modules/.bin/grunt build
# Final container
FROM debian:stretch-slim
ARG GF_UID="472"
ARG GF_GID="472"
ENV PATH=/usr/share/grafana/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
GF_PATHS_CONFIG="/etc/grafana/grafana.ini" \
GF_PATHS_DATA="/var/lib/grafana" \
GF_PATHS_HOME="/usr/share/grafana" \
GF_PATHS_LOGS="/var/log/grafana" \
GF_PATHS_PLUGINS="/var/lib/grafana/plugins" \
GF_PATHS_PROVISIONING="/etc/grafana/provisioning"
WORKDIR $GF_PATHS_HOME
RUN apt-get update && apt-get install -qq -y libfontconfig ca-certificates && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/*
COPY conf ./conf
RUN mkdir -p "$GF_PATHS_HOME/.aws" && \
groupadd -r -g $GF_GID grafana && \
useradd -r -u $GF_UID -g grafana grafana && \
mkdir -p "$GF_PATHS_PROVISIONING/datasources" \
"$GF_PATHS_PROVISIONING/dashboards" \
"$GF_PATHS_LOGS" \
"$GF_PATHS_PLUGINS" \
"$GF_PATHS_DATA" && \
cp "$GF_PATHS_HOME/conf/sample.ini" "$GF_PATHS_CONFIG" && \
cp "$GF_PATHS_HOME/conf/ldap.toml" /etc/grafana/ldap.toml && \
chown -R grafana:grafana "$GF_PATHS_DATA" "$GF_PATHS_HOME/.aws" "$GF_PATHS_LOGS" "$GF_PATHS_PLUGINS" && \
chmod 777 "$GF_PATHS_DATA" "$GF_PATHS_HOME/.aws" "$GF_PATHS_LOGS" "$GF_PATHS_PLUGINS"
COPY --from=0 /go/src/github.com/grafana/grafana/bin/linux-amd64/grafana-server /go/src/github.com/grafana/grafana/bin/linux-amd64/grafana-cli ./bin/
COPY --from=1 /usr/src/app/public ./public
COPY --from=1 /usr/src/app/tools ./tools
COPY tools/phantomjs/render.js ./tools/phantomjs/render.js
EXPOSE 3000
COPY ./packaging/docker/run.sh /run.sh
USER grafana
ENTRYPOINT [ "/run.sh" ]
Generated
+6 -3
View File
@@ -32,6 +32,7 @@
"aws/credentials/ec2rolecreds",
"aws/credentials/endpointcreds",
"aws/credentials/stscreds",
"aws/csm",
"aws/defaults",
"aws/ec2metadata",
"aws/endpoints",
@@ -43,6 +44,8 @@
"internal/shareddefaults",
"private/protocol",
"private/protocol/ec2query",
"private/protocol/eventstream",
"private/protocol/eventstream/eventstreamapi",
"private/protocol/query",
"private/protocol/query/queryutil",
"private/protocol/rest",
@@ -54,8 +57,8 @@
"service/s3",
"service/sts"
]
revision = "c7cd1ebe87257cde9b65112fc876b0339ea0ac30"
version = "v1.13.49"
revision = "fde4ded7becdeae4d26bf1212916aabba79349b4"
version = "v1.14.12"
[[projects]]
branch = "master"
@@ -670,6 +673,6 @@
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
inputs-digest = "85cc057e0cc074ab5b43bd620772d63d51e07b04e8782fcfe55e6929d2fc40f7"
inputs-digest = "81a37e747b875cf870c1b9486fa3147e704dea7db8ba86f7cb942d3ddc01d3e3"
solver-name = "gps-cdcl"
solver-version = 1
+1 -1
View File
@@ -36,7 +36,7 @@ ignored = [
[[constraint]]
name = "github.com/aws/aws-sdk-go"
version = "1.12.65"
version = "1.13.56"
[[constraint]]
branch = "master"
-1
View File
@@ -1,4 +1,3 @@
/* jshint node:true */
'use strict';
module.exports = function (grunt) {
var os = require('os');
+10 -1
View File
@@ -24,6 +24,15 @@ build-js:
build: build-go build-js
build-docker-dev:
@echo "\033[92mInfo:\033[0m the frontend code is expected to be built already."
go run build.go -goos linux -pkg-arch amd64 ${OPT} build package-only latest
cp dist/grafana-latest.linux-x64.tar.gz packaging/docker
cd packaging/docker && docker build --tag grafana/grafana:dev .
build-docker-full:
docker build --tag grafana/grafana:dev .
test-go:
go test -v ./pkg/...
@@ -36,4 +45,4 @@ run:
./bin/grafana-server
protoc:
protoc -I pkg/tsdb/models pkg/tsdb/models/*.proto --go_out=plugins=grpc:pkg/tsdb/models/.
protoc -I pkg/tsdb/models pkg/tsdb/models/*.proto --go_out=plugins=grpc:pkg/tsdb/models/.
+1 -1
View File
@@ -1,5 +1,5 @@
Copyright 2014-2017 Grafana Labs
Copyright 2014-2018 Grafana Labs
This software is based on Kibana:
Copyright 2012-2013 Elasticsearch BV
+32 -20
View File
@@ -24,7 +24,7 @@ the latest master builds [here](https://grafana.com/grafana/download)
### Dependencies
- Go 1.10
- Go 1.11
- NodeJS LTS
### Building the backend
@@ -43,7 +43,7 @@ To build the assets, rebuild on file change, and serve them by Grafana's webserv
```bash
npm install -g yarn
yarn install --pure-lockfile
npm run watch
yarn watch
```
Build the assets, rebuild on file change with Hot Module Replacement (HMR), and serve them by webpack-dev-server (http://localhost:3333):
@@ -54,14 +54,9 @@ env GRAFANA_THEME=light yarn start
```
Note: HMR for Angular is not supported. If you edit files in the Angular part of the app, the whole page will reload.
Run tests
Run tests
```bash
npm run jest
```
Run karma tests
```bash
npm run karma
yarn jest
```
### Recompile backend on source change
@@ -74,6 +69,15 @@ bra run
Open grafana in your browser (default: `http://localhost:3000`) and login with admin user (default: `user/pass = admin/admin`).
### Building a docker image (on linux/amd64)
This builds a docker image from your local sources:
1. Build the frontend `go run build.go build-frontend`
2. Build the docker image `make build-docker-dev`
The resulting image will be tagged as `grafana/grafana:dev`
### Dev config
Create a custom.ini in the conf directory to override default configuration options.
@@ -89,30 +93,38 @@ In your custom.ini uncomment (remove the leading `;`) sign. And set `app_mode =
#### Frontend
Execute all frontend tests
```bash
npm run test
yarn test
```
Writing & watching frontend tests (we have two test runners)
Writing & watching frontend tests
- jest for all new tests that do not require browser context (React+more)
- Start watcher: `npm run jest`
- Jest will run all test files that end with the name ".jest.ts"
- karma + mocha is used for testing angularjs components. We do want to migrate these test to jest over time (if possible).
- Start watcher: `npm run karma`
- Karma+Mocha runs all files that end with the name "_specs.ts".
- Start watcher: `yarn jest`
- Jest will run all test files that end with the name ".test.ts"
#### Backend
```bash
# Run Golang tests using sqlite3 as database (default)
go test ./pkg/...
go test ./pkg/...
# Run Golang tests using mysql as database - convenient to use /docker/blocks/mysql_tests
GRAFANA_TEST_DB=mysql go test ./pkg/...
GRAFANA_TEST_DB=mysql go test ./pkg/...
# Run Golang tests using postgres as database - convenient to use /docker/blocks/postgres_tests
GRAFANA_TEST_DB=postgres go test ./pkg/...
GRAFANA_TEST_DB=postgres go test ./pkg/...
```
## Building custom docker image
You can build a custom image using Docker, which doesn't require installing any dependencies besides docker itself.
```bash
git clone https://github.com/grafana/grafana
cd grafana
docker build -t grafana:dev .
docker run -d --name=grafana -p 3000:3000 grafana:dev
```
Open grafana in your browser (default: `http://localhost:3000`) and login with admin user (default: `user/pass = admin/admin`).
## Contribute
If you have any idea for an improvement or found a bug, do not hesitate to open an issue.
+12 -19
View File
@@ -1,34 +1,27 @@
# Roadmap (2018-05-06)
# Roadmap (2018-08-07)
This roadmap is a tentative plan for the core development team. Things change constantly as PRs come in and priorities change.
But it will give you an idea of our current vision and plan.
### Short term (1-2 months)
- Elasticsearch alerting
- Crossplatform builds
- Backend service refactorings
- Explore UI
- First login registration view
### Mid term (2-4 months)
- PRs & Bugs
- Multi-Stat panel
- Metrics & Log Explore UI
### Mid term (2-4 months)
- React Panels
- Change visualization (panel type) on the fly.
- Templating Query Editor UI Plugin hook
- Backend plugins
### Long term (4 - 8 months)
- Alerting improvements (silence, per series tracking, etc)
- Progress on React migration
- Change visualization (panel type) on the fly.
- Multi stat panel (vertical version of singlestat with bars/graph mode with big number etc)
- Repeat panel by query results
- Alerting improvements (silence, per series tracking, etc)
- Progress on React migration
### In a distant future far far away
- Meta queries
- Integrated light weight TSDB
- Web socket & live data sources
- Meta queries
- Integrated light weight TSDB
- Web socket & live data sources
### Outside contributions
We know this is being worked on right now by contributors (and we hope to merge it when it's ready).
+1 -1
View File
@@ -7,7 +7,7 @@ clone_folder: c:\gopath\src\github.com\grafana\grafana
environment:
nodejs_version: "6"
GOPATH: C:\gopath
GOVERSION: 1.10
GOVERSION: 1.11
install:
- rmdir c:\go /s /q
+16 -19
View File
@@ -64,6 +64,10 @@ func main() {
readVersionFromPackageJson()
if pkgArch == "" {
pkgArch = goarch
}
log.Printf("Version: %s, Linux Version: %s, Package Iteration: %s\n", version, linuxPackageVersion, linuxPackageIteration)
if flag.NArg() == 0 {
@@ -105,10 +109,17 @@ func main() {
case "package":
grunt(gruntBuildArg("build")...)
packageGrafana()
grunt(gruntBuildArg("package")...)
if goos == "linux" {
createLinuxPackages()
}
case "package-only":
packageGrafana()
grunt(gruntBuildArg("package")...)
if goos == "linux" {
createLinuxPackages()
}
case "pkg-rpm":
grunt(gruntBuildArg("release")...)
@@ -133,22 +144,6 @@ func main() {
}
}
func packageGrafana() {
platformArg := fmt.Sprintf("--platform=%v", goos)
previousPkgArch := pkgArch
if pkgArch == "" {
pkgArch = goarch
}
postProcessArgs := gruntBuildArg("package")
postProcessArgs = append(postProcessArgs, platformArg)
grunt(postProcessArgs...)
pkgArch = previousPkgArch
if goos == "linux" {
createLinuxPackages()
}
}
func makeLatestDistCopies() {
files, err := ioutil.ReadDir("dist")
if err != nil {
@@ -330,6 +325,7 @@ func createPackage(options linuxPackageOptions) {
name := "grafana"
if enterprise {
name += "-enterprise"
args = append(args, "--replaces", "grafana")
}
args = append(args, "--name", name)
@@ -403,6 +399,8 @@ func gruntBuildArg(task string) []string {
if phjsToRelease != "" {
args = append(args, fmt.Sprintf("--phjsToRelease=%v", phjsToRelease))
}
args = append(args, fmt.Sprintf("--platform=%v", goos))
return args
}
@@ -465,7 +463,6 @@ func ldflags() string {
b.WriteString(fmt.Sprintf(" -X main.version=%s", version))
b.WriteString(fmt.Sprintf(" -X main.commit=%s", getGitSha()))
b.WriteString(fmt.Sprintf(" -X main.buildstamp=%d", buildStamp()))
b.WriteString(fmt.Sprintf(" -X main.enterprise=%t", enterprise))
return b.String()
}
+33
View File
@@ -14,6 +14,9 @@ instance_name = ${HOSTNAME}
# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
data = data
# Temporary files in `data` directory older than given duration will be removed
temp_data_lifetime = 24h
# Directory where grafana can store logs
logs = data/log
@@ -210,6 +213,9 @@ allow_org_create = false
# Set to true to automatically assign new users to the default organization (id 1)
auto_assign_org = true
# Set this value to automatically add new users to the provided organization (if auto_assign_org above is set to true)
auto_assign_org_id = 1
# Default role new users will be automatically assigned (if auto_assign_org above is set to true)
auto_assign_org_role = Viewer
@@ -264,6 +270,18 @@ api_url = https://api.github.com/user
team_ids =
allowed_organizations =
#################################### GitLab Auth #########################
[auth.gitlab]
enabled = false
allow_sign_up = true
client_id = some_id
client_secret = some_secret
scopes = api
auth_url = https://gitlab.com/oauth/authorize
token_url = https://gitlab.com/oauth/token
api_url = https://gitlab.com/api/v4
allowed_groups =
#################################### Google Auth #########################
[auth.google]
enabled = false
@@ -308,6 +326,10 @@ token_url =
api_url =
team_ids =
allowed_organizations =
tls_skip_verify_insecure = false
tls_client_cert =
tls_client_key =
tls_client_ca =
#################################### Basic Auth ##########################
[auth.basic]
@@ -445,6 +467,12 @@ enabled = true
# Makes it possible to turn off alert rule execution but alerting UI is visible
execute_alerts = true
# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state)
error_or_timeout = alerting
# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
nodata_or_nullvalues = no_data
#################################### Explore #############################
[explore]
# Enable the Explore section
@@ -516,3 +544,8 @@ container_name =
[external_image_storage.local]
# does not require any configuration
[rendering]
# Options to configure external image rendering server like https://github.com/grafana/grafana-image-renderer
server_url =
callback_url =
+5
View File
@@ -15,6 +15,9 @@ start_tls = false
ssl_skip_verify = false
# set to the path to your root CA certificate or leave unset to use system defaults
# root_ca_cert = "/path/to/certificate.crt"
# Authentication against LDAP servers requiring client certificates
# client_cert = "/path/to/client.crt"
# client_key = "/path/to/client.key"
# Search user bind dn
bind_dn = "cn=admin,dc=grafana,dc=org"
@@ -72,6 +75,8 @@ email = "email"
[[servers.group_mappings]]
group_dn = "cn=admins,dc=grafana,dc=org"
org_role = "Admin"
# To make user an instance admin (Grafana Admin) uncomment line below
# grafana_admin = true
# The Grafana organization database id, optional, if left out the default org (id 1) will be used
# org_id = 1
@@ -40,11 +40,14 @@ apiVersion: 1
# graphiteVersion: "1.1"
# tlsAuth: true
# tlsAuthWithCACert: true
# httpHeaderName1: "Authorization"
# # <string> json object of data that will be encrypted.
# secureJsonData:
# tlsCACert: "..."
# tlsClientCert: "..."
# tlsClientKey: "..."
# # <openshift\kubernetes token example>
# httpHeaderValue1: "Bearer xf5yhfkpsnmgo"
# version: 1
# # <bool> allow users to edit datasources from the UI.
# editable: false
+18
View File
@@ -14,6 +14,9 @@
# 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
@@ -269,6 +272,10 @@ log_queries =
;api_url = https://foo.bar/user
;team_ids =
;allowed_organizations =
;tls_skip_verify_insecure = false
;tls_client_cert =
;tls_client_key =
;tls_client_ca =
#################################### Grafana.com Auth ####################
[auth.grafana_com]
@@ -380,6 +387,12 @@ log_queries =
# Makes it possible to turn off alert rule execution but alerting UI is visible
;execute_alerts = true
# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state)
;error_or_timeout = alerting
# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
;nodata_or_nullvalues = no_data
#################################### Explore #############################
[explore]
# Enable the Explore section
@@ -453,3 +466,8 @@ log_queries =
[external_image_storage.local]
# does not require any configuration
[rendering]
# Options to configure external image rendering server like https://github.com/grafana/grafana-image-renderer
;server_url =
;callback_url =
+10 -5
View File
@@ -1,11 +1,16 @@
This folder contains useful scripts and configuration for...
* Configuring datasources in Grafana
* Provision example dashboards in Grafana
* Run preconfiured datasources as docker containers
want to know more? run setup!
* Configuring dev datasources in Grafana
* Configuring dev & test scenarios dashboards.
```bash
./setup.sh
```
After restarting grafana server there should now be a number of datasources named `gdev-<type>` provisioned as well as a dashboard folder named `gdev dashboards`. This folder contains dashboard & panel features tests dashboards.
# Dev dashboards
Please update these dashboards or make new ones as new panels & dashboards features are developed or new bugs are found. The dashboards are located in the `devenv/dev-dashboards` folder.
@@ -5,5 +5,5 @@ providers:
folder: 'Bulk dashboards'
type: file
options:
path: devenv/dashboards/bulk-testing
path: devenv/bulk-dashboards
+9
View File
@@ -0,0 +1,9 @@
apiVersion: 1
providers:
- name: 'gdev dashboards'
folder: 'gdev dashboards'
type: file
options:
path: devenv/dev-dashboards
@@ -1,38 +1,41 @@
apiVersion: 1
datasources:
- name: Graphite
- name: gdev-graphite
type: graphite
access: proxy
url: http://localhost:8080
jsonData:
graphiteVersion: "1.1"
- name: Prometheus
- name: gdev-prometheus
type: prometheus
access: proxy
isDefault: true
url: http://localhost:9090
- name: InfluxDB
- name: gdev-testdata
type: testdata
- name: gdev-influxdb
type: influxdb
access: proxy
database: site
user: grafana
password: grafana
url: http://localhost:8086
jsonData:
jsonData:
timeInterval: "15s"
- name: OpenTsdb
- name: gdev-opentsdb
type: opentsdb
access: proxy
url: http://localhost:4242
jsonData:
jsonData:
tsdbResolution: 1
tsdbVersion: 1
- name: Elastic
- name: gdev-elasticsearch-metrics
type: elasticsearch
access: proxy
database: "[metrics-]YYYY.MM.DD"
@@ -40,34 +43,62 @@ datasources:
jsonData:
interval: Daily
timeField: "@timestamp"
- name: MySQL
- name: gdev-mysql
type: mysql
url: localhost:3306
database: grafana
user: grafana
password: password
- name: MSSQL
- name: gdev-mysql-ds-tests
type: mysql
url: localhost:3306
database: grafana_ds_tests
user: grafana
password: password
- name: gdev-mssql
type: mssql
url: localhost:1433
database: grafana
user: grafana
password: "Password!"
secureJsonData:
password: Password!
- name: Postgres
- name: gdev-mssql-ds-tests
type: mssql
url: localhost:1433
database: grafanatest
user: grafana
secureJsonData:
password: Password!
- name: gdev-postgres
type: postgres
url: localhost:5432
database: grafana
user: grafana
password: password
secureJsonData:
password: password
jsonData:
sslmode: "disable"
- name: Cloudwatch
- name: gdev-postgres-ds-tests
type: postgres
url: localhost:5432
database: grafanadstest
user: grafanatest
secureJsonData:
password: grafanatest
jsonData:
sslmode: "disable"
- name: gdev-cloudwatch
type: cloudwatch
editable: true
jsonData:
authType: credentials
defaultRegion: eu-west-2
@@ -1,40 +1,4 @@
{
"__inputs": [
{
"name": "DS_MSSQL",
"label": "MSSQL",
"description": "",
"type": "datasource",
"pluginId": "mssql",
"pluginName": "MSSQL"
}
],
"__requires": [
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "5.0.0"
},
{
"type": "panel",
"id": "graph",
"name": "Graph",
"version": "5.0.0"
},
{
"type": "datasource",
"id": "mssql",
"name": "MSSQL",
"version": "1.0.0"
},
{
"type": "panel",
"id": "table",
"name": "Table",
"version": "5.0.0"
}
],
"annotations": {
"list": [
{
@@ -52,8 +16,7 @@
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": null,
"iteration": 1520976748896,
"iteration": 1532618661457,
"links": [],
"panels": [
{
@@ -63,7 +26,7 @@
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_MSSQL}",
"datasource": "gdev-mssql",
"fill": 2,
"gridPos": {
"h": 9,
@@ -149,14 +112,18 @@
"min": null,
"show": true
}
]
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_MSSQL}",
"datasource": "gdev-mssql",
"fill": 2,
"gridPos": {
"h": 18,
@@ -234,14 +201,18 @@
"min": null,
"show": true
}
]
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_MSSQL}",
"datasource": "gdev-mssql",
"fill": 2,
"gridPos": {
"h": 9,
@@ -313,11 +284,15 @@
"min": null,
"show": true
}
]
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"columns": [],
"datasource": "${DS_MSSQL}",
"datasource": "gdev-mssql",
"fontSize": "100%",
"gridPos": {
"h": 10,
@@ -371,13 +346,13 @@
],
"schemaVersion": 16,
"style": "dark",
"tags": [],
"tags": ["gdev", "mssql", "fake-data-gen"],
"templating": {
"list": [
{
"allValue": null,
"current": {},
"datasource": "${DS_MSSQL}",
"datasource": "gdev-mssql",
"hide": 0,
"includeAll": false,
"label": "Datacenter",
@@ -387,6 +362,7 @@
"query": "SELECT DISTINCT datacenter FROM grafana_metric",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 1,
"tagValuesQuery": "",
"tags": [],
@@ -397,7 +373,7 @@
{
"allValue": null,
"current": {},
"datasource": "${DS_MSSQL}",
"datasource": "gdev-mssql",
"hide": 0,
"includeAll": true,
"label": "Hostname",
@@ -407,6 +383,7 @@
"query": "SELECT DISTINCT hostname FROM grafana_metric WHERE datacenter='$datacenter'",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 1,
"tagValuesQuery": "",
"tags": [],
@@ -499,6 +476,7 @@
],
"query": "1s,10s,30s,1m,5m,10m,30m,1h,6h,12h,1d,7d,14d,30d",
"refresh": 2,
"skipUrlSync": false,
"type": "interval"
}
]
@@ -533,7 +511,7 @@
]
},
"timezone": "",
"title": "Grafana Fake Data Gen - MSSQL",
"title": "Datasource tests - MSSQL",
"uid": "86Js1xRmk",
"version": 11
"version": 1
}
@@ -1,40 +1,4 @@
{
"__inputs": [
{
"name": "DS_MYSQL",
"label": "MySQL",
"description": "",
"type": "datasource",
"pluginId": "mysql",
"pluginName": "MySQL"
}
],
"__requires": [
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "5.0.0"
},
{
"type": "panel",
"id": "graph",
"name": "Graph",
"version": "5.0.0"
},
{
"type": "datasource",
"id": "mysql",
"name": "MySQL",
"version": "5.0.0"
},
{
"type": "panel",
"id": "table",
"name": "Table",
"version": "5.0.0"
}
],
"annotations": {
"list": [
{
@@ -52,8 +16,7 @@
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": null,
"iteration": 1523372133566,
"iteration": 1532620738041,
"links": [],
"panels": [
{
@@ -63,7 +26,7 @@
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_MYSQL}",
"datasource": "gdev-mysql",
"fill": 2,
"gridPos": {
"h": 9,
@@ -161,7 +124,7 @@
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_MYSQL}",
"datasource": "gdev-mysql",
"fill": 2,
"gridPos": {
"h": 18,
@@ -251,7 +214,7 @@
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_MYSQL}",
"datasource": "gdev-mysql",
"fill": 2,
"gridPos": {
"h": 9,
@@ -332,7 +295,7 @@
},
{
"columns": [],
"datasource": "${DS_MYSQL}",
"datasource": "gdev-mysql",
"fontSize": "100%",
"gridPos": {
"h": 9,
@@ -390,6 +353,7 @@
"schemaVersion": 16,
"style": "dark",
"tags": [
"gdev",
"fake-data-gen",
"mysql"
],
@@ -397,8 +361,11 @@
"list": [
{
"allValue": null,
"current": {},
"datasource": "${DS_MYSQL}",
"current": {
"text": "America",
"value": "America"
},
"datasource": "gdev-mysql",
"hide": 0,
"includeAll": false,
"label": "Datacenter",
@@ -408,6 +375,7 @@
"query": "SELECT DISTINCT datacenter FROM grafana_metric",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 1,
"tagValuesQuery": "",
"tags": [],
@@ -417,8 +385,11 @@
},
{
"allValue": null,
"current": {},
"datasource": "${DS_MYSQL}",
"current": {
"text": "All",
"value": "$__all"
},
"datasource": "gdev-mysql",
"hide": 0,
"includeAll": true,
"label": "Hostname",
@@ -428,6 +399,7 @@
"query": "SELECT DISTINCT hostname FROM grafana_metric WHERE datacenter='$datacenter'",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 1,
"tagValuesQuery": "",
"tags": [],
@@ -520,6 +492,7 @@
],
"query": "1s,10s,30s,1m,5m,10m,30m,1h,6h,12h,1d,7d,14d,30d",
"refresh": 2,
"skipUrlSync": false,
"type": "interval"
}
]
@@ -554,7 +527,7 @@
]
},
"timezone": "",
"title": "Grafana Fake Data Gen - MySQL",
"title": "Datasource tests - MySQL",
"uid": "DGsCac3kz",
"version": 8
}
@@ -1,40 +1,4 @@
{
"__inputs": [
{
"name": "DS_POSTGRESQL",
"label": "PostgreSQL",
"description": "",
"type": "datasource",
"pluginId": "postgres",
"pluginName": "PostgreSQL"
}
],
"__requires": [
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "5.0.0"
},
{
"type": "panel",
"id": "graph",
"name": "Graph",
"version": ""
},
{
"type": "datasource",
"id": "postgres",
"name": "PostgreSQL",
"version": "1.0.0"
},
{
"type": "panel",
"id": "table",
"name": "Table",
"version": ""
}
],
"annotations": {
"list": [
{
@@ -52,8 +16,7 @@
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": null,
"iteration": 1518601837383,
"iteration": 1532620601931,
"links": [],
"panels": [
{
@@ -63,7 +26,7 @@
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_POSTGRESQL}",
"datasource": "gdev-postgres",
"fill": 2,
"gridPos": {
"h": 9,
@@ -150,14 +113,18 @@
"min": null,
"show": true
}
]
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_POSTGRESQL}",
"datasource": "gdev-postgres",
"fill": 2,
"gridPos": {
"h": 18,
@@ -236,14 +203,18 @@
"min": null,
"show": true
}
]
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_POSTGRESQL}",
"datasource": "gdev-postgres",
"fill": 2,
"gridPos": {
"h": 9,
@@ -316,11 +287,15 @@
"min": null,
"show": true
}
]
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"columns": [],
"datasource": "${DS_POSTGRESQL}",
"datasource": "gdev-postgres",
"fontSize": "100%",
"gridPos": {
"h": 9,
@@ -377,6 +352,7 @@
"schemaVersion": 16,
"style": "dark",
"tags": [
"gdev",
"fake-data-gen",
"postgres"
],
@@ -384,8 +360,11 @@
"list": [
{
"allValue": null,
"current": {},
"datasource": "${DS_POSTGRESQL}",
"current": {
"text": "America",
"value": "America"
},
"datasource": "gdev-postgres",
"hide": 0,
"includeAll": false,
"label": "Datacenter",
@@ -395,6 +374,7 @@
"query": "SELECT DISTINCT datacenter FROM grafana_metric",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 1,
"tagValuesQuery": "",
"tags": [],
@@ -404,8 +384,11 @@
},
{
"allValue": null,
"current": {},
"datasource": "${DS_POSTGRESQL}",
"current": {
"text": "All",
"value": "$__all"
},
"datasource": "gdev-postgres",
"hide": 0,
"includeAll": true,
"label": "Hostname",
@@ -415,6 +398,7 @@
"query": "SELECT DISTINCT hostname FROM grafana_metric WHERE datacenter='$datacenter'",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 1,
"tagValuesQuery": "",
"tags": [],
@@ -507,6 +491,7 @@
],
"query": "1s,10s,30s,1m,5m,10m,30m,1h,6h,12h,1d,7d,14d,30d",
"refresh": 2,
"skipUrlSync": false,
"type": "interval"
}
]
@@ -541,7 +526,7 @@
]
},
"timezone": "",
"title": "Grafana Fake Data Gen - PostgreSQL",
"title": "Datasource tests - Postgres",
"uid": "JYola5qzz",
"version": 1
"version": 4
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,574 @@
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"links": [],
"panels": [
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": true,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "gdev-testdata",
"decimals": null,
"description": "",
"format": "ms",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
"h": 7,
"w": 8,
"x": 0,
"y": 0
},
"id": 2,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "postfix",
"postfixFontSize": "50%",
"prefix": "prefix",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": true
},
"tableColumn": "",
"targets": [
{
"expr": "",
"format": "time_series",
"intervalFactor": 1,
"refId": "A",
"scenarioId": "csv_metric_values",
"stringInput": "1,2,3,4,5"
}
],
"thresholds": "5,10",
"title": "prefix 3 ms (green) postfixt + sparkline",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "avg"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorPrefix": false,
"colorValue": true,
"colors": [
"#d44a3a",
"rgba(237, 129, 40, 0.89)",
"#299c46"
],
"datasource": "gdev-testdata",
"decimals": null,
"description": "",
"format": "ms",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
"h": 7,
"w": 8,
"x": 8,
"y": 0
},
"id": 3,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": true,
"lineColor": "rgb(31, 120, 193)",
"show": true
},
"tableColumn": "",
"targets": [
{
"expr": "",
"format": "time_series",
"intervalFactor": 1,
"refId": "A",
"scenarioId": "csv_metric_values",
"stringInput": "1,2,3,4,5"
}
],
"thresholds": "5,10",
"title": "3 ms (red) + full height sparkline",
"type": "singlestat",
"valueFontSize": "200%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "avg"
},
{
"cacheTimeout": null,
"colorBackground": true,
"colorPrefix": false,
"colorValue": false,
"colors": [
"#d44a3a",
"rgba(237, 129, 40, 0.89)",
"#299c46"
],
"datasource": "gdev-testdata",
"decimals": null,
"description": "",
"format": "ms",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
"h": 7,
"w": 8,
"x": 16,
"y": 0
},
"id": 4,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": true,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "",
"format": "time_series",
"intervalFactor": 1,
"refId": "A",
"scenarioId": "csv_metric_values",
"stringInput": "1,2,3,4,5"
}
],
"thresholds": "5,10",
"title": "3 ms + red background",
"type": "singlestat",
"valueFontSize": "200%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "avg"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorPrefix": false,
"colorValue": true,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "gdev-testdata",
"decimals": null,
"description": "",
"format": "ms",
"gauge": {
"maxValue": 150,
"minValue": 0,
"show": true,
"thresholdLabels": true,
"thresholdMarkers": true
},
"gridPos": {
"h": 7,
"w": 8,
"x": 0,
"y": 7
},
"id": 5,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": true,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "",
"format": "time_series",
"intervalFactor": 1,
"refId": "A",
"scenarioId": "csv_metric_values",
"stringInput": "10,20,80"
}
],
"thresholds": "81,90",
"title": "80 ms green gauge, thresholds 81, 90",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorPrefix": false,
"colorValue": true,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "gdev-testdata",
"decimals": null,
"description": "",
"format": "ms",
"gauge": {
"maxValue": 150,
"minValue": 0,
"show": true,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
"h": 7,
"w": 8,
"x": 8,
"y": 7
},
"id": 6,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": true,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "",
"format": "time_series",
"intervalFactor": 1,
"refId": "A",
"scenarioId": "csv_metric_values",
"stringInput": "10,20,80"
}
],
"thresholds": "81,90",
"title": "80 ms green gauge, thresholds 81, 90, no labels",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorPrefix": false,
"colorValue": true,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "gdev-testdata",
"decimals": null,
"description": "",
"format": "ms",
"gauge": {
"maxValue": 150,
"minValue": 0,
"show": true,
"thresholdLabels": false,
"thresholdMarkers": false
},
"gridPos": {
"h": 7,
"w": 8,
"x": 16,
"y": 7
},
"id": 7,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": true,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "",
"format": "time_series",
"intervalFactor": 1,
"refId": "A",
"scenarioId": "csv_metric_values",
"stringInput": "10,20,80"
}
],
"thresholds": "81,90",
"title": "80 ms green gauge, thresholds 81, 90, no markers or labels",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
}
],
"refresh": false,
"revision": 8,
"schemaVersion": 16,
"style": "dark",
"tags": [
"gdev",
"panel-tests"
],
"templating": {
"list": []
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "browser",
"title": "Panel Tests - Singlestat",
"uid": "singlestat",
"version": 14
}
@@ -0,0 +1,453 @@
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"links": [],
"panels": [
{
"columns": [],
"datasource": "gdev-testdata",
"fontSize": "100%",
"gridPos": {
"h": 11,
"w": 12,
"x": 0,
"y": 0
},
"id": 3,
"links": [],
"pageSize": 10,
"scroll": true,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"colorMode": "cell",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"mappingType": 1,
"pattern": "ColorCell",
"thresholds": [
"5",
"10"
],
"type": "number",
"unit": "currencyUSD"
},
{
"alias": "",
"colorMode": "value",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"mappingType": 1,
"pattern": "ColorValue",
"thresholds": [
"5",
"10"
],
"type": "number",
"unit": "Bps"
},
{
"alias": "",
"colorMode": null,
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"targets": [
{
"alias": "server1",
"expr": "",
"format": "table",
"intervalFactor": 1,
"refId": "A",
"scenarioId": "csv_metric_values",
"stringInput": "1,20,90,30,5,0,20,10"
},
{
"alias": "server2",
"refId": "B",
"scenarioId": "csv_metric_values",
"stringInput": "1,20,90,30,5,0"
}
],
"title": "Time series to rows (2 pages)",
"transform": "timeseries_to_rows",
"type": "table"
},
{
"columns": [
{
"text": "Avg",
"value": "avg"
},
{
"text": "Max",
"value": "max"
},
{
"text": "Current",
"value": "current"
}
],
"datasource": "gdev-testdata",
"fontSize": "100%",
"gridPos": {
"h": 11,
"w": 12,
"x": 12,
"y": 0
},
"id": 4,
"links": [],
"pageSize": 10,
"scroll": true,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"colorMode": "cell",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"mappingType": 1,
"pattern": "ColorCell",
"thresholds": [
"5",
"10"
],
"type": "number",
"unit": "currencyUSD"
},
{
"alias": "",
"colorMode": "value",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"mappingType": 1,
"pattern": "ColorValue",
"thresholds": [
"5",
"10"
],
"type": "number",
"unit": "Bps"
},
{
"alias": "",
"colorMode": null,
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"targets": [
{
"alias": "server1",
"expr": "",
"format": "table",
"intervalFactor": 1,
"refId": "A",
"scenarioId": "csv_metric_values",
"stringInput": "1,20,90,30,5,0,20,10"
},
{
"alias": "server2",
"refId": "B",
"scenarioId": "csv_metric_values",
"stringInput": "1,20,90,30,5,0"
}
],
"title": "Time series aggregations",
"transform": "timeseries_aggregations",
"type": "table"
},
{
"columns": [],
"datasource": "gdev-testdata",
"fontSize": "100%",
"gridPos": {
"h": 7,
"w": 24,
"x": 0,
"y": 11
},
"id": 5,
"links": [],
"pageSize": null,
"scroll": true,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"colorMode": "row",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"mappingType": 1,
"pattern": "/Color/",
"thresholds": [
"5",
"10"
],
"type": "number",
"unit": "currencyUSD"
},
{
"alias": "",
"colorMode": null,
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"targets": [
{
"alias": "ColorValue",
"expr": "",
"format": "table",
"intervalFactor": 1,
"refId": "A",
"scenarioId": "csv_metric_values",
"stringInput": "1,20,90,30,5,0,20,10"
}
],
"title": "color row by threshold",
"transform": "timeseries_to_columns",
"type": "table"
},
{
"columns": [],
"datasource": "gdev-testdata",
"fontSize": "100%",
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 18
},
"id": 2,
"links": [],
"pageSize": null,
"scroll": true,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"colorMode": "cell",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"mappingType": 1,
"pattern": "ColorCell",
"thresholds": [
"5",
"10"
],
"type": "number",
"unit": "currencyUSD"
},
{
"alias": "",
"colorMode": "value",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"mappingType": 1,
"pattern": "ColorValue",
"thresholds": [
"5",
"10"
],
"type": "number",
"unit": "Bps"
},
{
"alias": "",
"colorMode": null,
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"targets": [
{
"alias": "ColorValue",
"expr": "",
"format": "table",
"intervalFactor": 1,
"refId": "A",
"scenarioId": "csv_metric_values",
"stringInput": "1,20,90,30,5,0,20,10"
},
{
"alias": "ColorCell",
"refId": "B",
"scenarioId": "csv_metric_values",
"stringInput": "5,1,2,3,4,5,10,20"
}
],
"title": "Column style thresholds & units",
"transform": "timeseries_to_columns",
"type": "table"
}
],
"refresh": false,
"revision": 8,
"schemaVersion": 16,
"style": "dark",
"tags": [
"gdev",
"panel-tests"
],
"templating": {
"list": []
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "browser",
"title": "Panel Tests - Table",
"uid": "pttable",
"version": 1
}
@@ -1,6 +1,6 @@
{
"revision": 2,
"title": "TestData - Alerts",
"title": "Alerting with TestData",
"tags": [
"grafana-test"
],
@@ -48,7 +48,7 @@
},
"aliasColors": {},
"bars": false,
"datasource": "Grafana TestData",
"datasource": "gdev-testdata",
"editable": true,
"error": false,
"fill": 1,
@@ -161,7 +161,7 @@
},
"aliasColors": {},
"bars": false,
"datasource": "Grafana TestData",
"datasource": "gdev-testdata",
"editable": true,
"error": false,
"fill": 1,
+33 -30
View File
@@ -1,61 +1,64 @@
#/bin/bash
#!/bin/bash
bulkDashboard() {
requiresJsonnet
requiresJsonnet
COUNTER=0
MAX=400
while [ $COUNTER -lt $MAX ]; do
jsonnet -o "dashboards/bulk-testing/dashboard${COUNTER}.json" -e "local bulkDash = import 'dashboards/bulk-testing/bulkdash.jsonnet'; bulkDash + { uid: 'uid-${COUNTER}', title: 'title-${COUNTER}' }"
let COUNTER=COUNTER+1
done
COUNTER=0
MAX=400
while [ $COUNTER -lt $MAX ]; do
jsonnet -o "bulk-dashboards/dashboard${COUNTER}.json" -e "local bulkDash = import 'bulk-dashboards/bulkdash.jsonnet'; bulkDash + { uid: 'uid-${COUNTER}', title: 'title-${COUNTER}' }"
let COUNTER=COUNTER+1
done
ln -s -f -r ./dashboards/bulk-testing/bulk-dashboards.yaml ../conf/provisioning/dashboards/custom.yaml
ln -s -f -r ./bulk-dashboards/bulk-dashboards.yaml ../conf/provisioning/dashboards/custom.yaml
}
requiresJsonnet() {
if ! type "jsonnet" > /dev/null; then
echo "you need you install jsonnet to run this script"
echo "follow the instructions on https://github.com/google/jsonnet"
exit 1
fi
if ! type "jsonnet" > /dev/null; then
echo "you need you install jsonnet to run this script"
echo "follow the instructions on https://github.com/google/jsonnet"
exit 1
fi
}
defaultDashboards() {
echo "not implemented yet"
devDashboards() {
echo -e "\xE2\x9C\x94 Setting up all dev dashboards using provisioning"
ln -s -f ../../../devenv/dashboards.yaml ../conf/provisioning/dashboards/dev.yaml
}
defaultDatasources() {
echo "setting up all default datasources using provisioning"
devDatasources() {
echo -e "\xE2\x9C\x94 Setting up all dev datasources using provisioning"
ln -s -f -r ./datasources/default/default.yaml ../conf/provisioning/datasources/custom.yaml
ln -s -f ../../../devenv/datasources.yaml ../conf/provisioning/datasources/dev.yaml
}
usage() {
echo -e "install.sh\n\tThis script installs my basic setup for a debian laptop\n"
echo -e "\n"
echo "Usage:"
echo " bulk-dashboards - create and provisioning 400 dashboards"
echo " default-datasources - provisiong all core datasources"
echo " no args - provisiong core datasources and dev dashboards"
}
main() {
local cmd=$1
echo -e "------------------------------------------------------------------"
echo -e "This script setups provisioning for dev datasources and dashboards"
echo -e "------------------------------------------------------------------"
echo -e "\n"
if [[ -z "$cmd" ]]; then
usage
exit 1
fi
local cmd=$1
if [[ $cmd == "bulk-dashboards" ]]; then
bulkDashboard
elif [[ $cmd == "default-datasources" ]]; then
defaultDatasources
elif [[ $cmd == "default-dashboards" ]]; then
bulkDashboard
else
devDashboards
devDatasources
fi
if [[ -z "$cmd" ]]; then
usage
fi
}
main "$@"
+2 -1
View File
@@ -1,3 +1,4 @@
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf
COPY htpasswd /etc/nginx/htpasswd
+3
View File
@@ -0,0 +1,3 @@
user1:$apr1$1odeeQb.$kwV8D/VAAGUDU7pnHuKoV0
user2:$apr1$A2kf25r.$6S0kp3C7vIuixS5CL0XA9.
admin:$apr1$IWn4DoRR$E2ol7fS/dkI18eU4bXnBO1
+20 -1
View File
@@ -13,7 +13,26 @@ http {
listen 10080;
location /grafana/ {
################################################################
# Enable these settings to test with basic auth and an auth proxy header
# the htpasswd file contains an admin user with password admin and
# user1: grafana and user2: grafana
################################################################
# auth_basic "Restricted Content";
# auth_basic_user_file /etc/nginx/htpasswd;
################################################################
# To use the auth proxy header, set the following in custom.ini:
# [auth.proxy]
# enabled = true
# header_name = X-WEBAUTH-USER
# header_property = username
################################################################
# proxy_set_header X-WEBAUTH-USER $remote_user;
proxy_pass http://localhost:3000/;
}
}
}
}
+5 -1
View File
@@ -1,3 +1,5 @@
# Fork of https://github.com/dinkel/docker-openldap
FROM debian:jessie
LABEL maintainer="Christian Luginbühl <dinke@pimprecords.com>"
@@ -6,7 +8,8 @@ ENV OPENLDAP_VERSION 2.4.40
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
slapd=${OPENLDAP_VERSION}* && \
slapd=${OPENLDAP_VERSION}* \
ldap-utils && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
@@ -20,6 +23,7 @@ COPY modules/ /etc/ldap.dist/modules
COPY prepopulate/ /etc/ldap.dist/prepopulate
COPY entrypoint.sh /entrypoint.sh
COPY prepopulate.sh /prepopulate.sh
ENTRYPOINT ["/entrypoint.sh"]
+5 -4
View File
@@ -76,13 +76,14 @@ EOF
IFS=","; declare -a modules=($SLAPD_ADDITIONAL_MODULES); unset IFS
for module in "${modules[@]}"; do
slapadd -n0 -F /etc/ldap/slapd.d -l "/etc/ldap/modules/${module}.ldif" >/dev/null 2>&1
echo "Adding module ${module}"
slapadd -n0 -F /etc/ldap/slapd.d -l "/etc/ldap/modules/${module}.ldif" >/dev/null 2>&1
done
fi
for file in `ls /etc/ldap/prepopulate/*.ldif`; do
slapadd -F /etc/ldap/slapd.d -l "$file"
done
# This needs to run in background
# Will prepopulate entries after ldap daemon has started
./prepopulate.sh &
chown -R openldap:openldap /etc/ldap/slapd.d/ /var/lib/ldap/ /var/run/slapd/
else
+85
View File
@@ -0,0 +1,85 @@
# To troubleshoot and get more log info enable ldap debug logging in grafana.ini
# [log]
# filters = ldap:debug
[[servers]]
# Ldap server host (specify multiple hosts space separated)
host = "127.0.0.1"
# Default port is 389 or 636 if use_ssl = true
port = 389
# Set to true if ldap server supports TLS
use_ssl = false
# Set to true if connect ldap server with STARTTLS pattern (create connection in insecure, then upgrade to secure connection with TLS)
start_tls = false
# set to true if you want to skip ssl cert validation
ssl_skip_verify = false
# set to the path to your root CA certificate or leave unset to use system defaults
# root_ca_cert = "/path/to/certificate.crt"
# Search user bind dn
bind_dn = "cn=admin,dc=grafana,dc=org"
# Search user bind password
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
bind_password = 'grafana'
# User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)"
search_filter = "(cn=%s)"
# An array of base dns to search through
search_base_dns = ["dc=grafana,dc=org"]
# In POSIX LDAP schemas, without memberOf attribute a secondary query must be made for groups.
# This is done by enabling group_search_filter below. You must also set member_of= "cn"
# in [servers.attributes] below.
# Users with nested/recursive group membership and an LDAP server that supports LDAP_MATCHING_RULE_IN_CHAIN
# can set group_search_filter, group_search_filter_user_attribute, group_search_base_dns and member_of
# below in such a way that the user's recursive group membership is considered.
#
# Nested Groups + Active Directory (AD) Example:
#
# AD groups store the Distinguished Names (DNs) of members, so your filter must
# recursively search your groups for the authenticating user's DN. For example:
#
# group_search_filter = "(member:1.2.840.113556.1.4.1941:=%s)"
# group_search_filter_user_attribute = "distinguishedName"
# group_search_base_dns = ["ou=groups,dc=grafana,dc=org"]
#
# [servers.attributes]
# ...
# member_of = "distinguishedName"
## Group search filter, to retrieve the groups of which the user is a member (only set if memberOf attribute is not available)
# group_search_filter = "(&(objectClass=posixGroup)(memberUid=%s))"
## Group search filter user attribute defines what user attribute gets substituted for %s in group_search_filter.
## Defaults to the value of username in [server.attributes]
## Valid options are any of your values in [servers.attributes]
## If you are using nested groups you probably want to set this and member_of in
## [servers.attributes] to "distinguishedName"
# group_search_filter_user_attribute = "distinguishedName"
## An array of the base DNs to search through for groups. Typically uses ou=groups
# group_search_base_dns = ["ou=groups,dc=grafana,dc=org"]
# Specify names of the ldap attributes your ldap uses
[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email = "email"
# Map ldap groups to grafana org roles
[[servers.group_mappings]]
group_dn = "cn=admins,ou=groups,dc=grafana,dc=org"
org_role = "Admin"
# The Grafana organization database id, optional, if left out the default org (id 1) will be used
# org_id = 1
[[servers.group_mappings]]
group_dn = "cn=editors,ou=groups,dc=grafana,dc=org"
org_role = "Editor"
[[servers.group_mappings]]
# If you want to match all (or no ldap groups) then you can use wildcard
group_dn = "*"
org_role = "Viewer"
+33 -1
View File
@@ -1,6 +1,6 @@
# Notes on OpenLdap Docker Block
Any ldif files added to the prepopulate subdirectory will be automatically imported into the OpenLdap database.
Any ldif files added to the prepopulate subdirectory will be automatically imported into the OpenLdap database.
The ldif files add three users, `ldapviewer`, `ldapeditor` and `ldapadmin`. Two groups, `admins` and `users`, are added that correspond with the group mappings in the default conf/ldap.toml. `ldapadmin` is a member of `admins` and `ldapeditor` is a member of `users`.
@@ -11,3 +11,35 @@ After adding ldif files to `prepopulate`:
1. Remove your current docker image: `docker rm docker_openldap_1`
2. Build: `docker-compose build`
3. `docker-compose up`
## Enabling LDAP in Grafana
Copy the ldap_dev.toml file in this folder into your `conf` folder (it is gitignored already). To enable it in the .ini file to get Grafana to use this block:
```ini
[auth.ldap]
enabled = true
config_file = conf/ldap_dev.toml
; allow_sign_up = true
```
Test groups & users
admins
ldap-admin
ldap-torkel
ldap-daniel
backend
ldap-carl
ldap-torkel
ldap-leo
frontend
ldap-torkel
ldap-tobias
ldap-daniel
editors
ldap-editors
no groups
ldap-viewer
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
echo "Pre-populating ldap entries, first waiting for ldap to start"
sleep 3
adminUserDn="cn=admin,dc=grafana,dc=org"
adminPassword="grafana"
for file in `ls /etc/ldap/prepopulate/*.ldif`; do
ldapadd -x -D $adminUserDn -w $adminPassword -f "$file"
done
@@ -0,0 +1,9 @@
dn: ou=groups,dc=grafana,dc=org
ou: Groups
objectclass: top
objectclass: organizationalUnit
dn: ou=users,dc=grafana,dc=org
ou: Users
objectclass: top
objectclass: organizationalUnit
@@ -0,0 +1,80 @@
# ldap-admin
dn: cn=ldap-admin,ou=users,dc=grafana,dc=org
mail: ldap-admin@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldap-admin
cn: ldap-admin
dn: cn=ldap-editor,ou=users,dc=grafana,dc=org
mail: ldap-editor@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldap-editor
cn: ldap-editor
dn: cn=ldap-viewer,ou=users,dc=grafana,dc=org
mail: ldap-viewer@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldap-viewer
cn: ldap-viewer
dn: cn=ldap-carl,ou=users,dc=grafana,dc=org
mail: ldap-carl@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldap-carl
cn: ldap-carl
dn: cn=ldap-daniel,ou=users,dc=grafana,dc=org
mail: ldap-daniel@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldap-daniel
cn: ldap-daniel
dn: cn=ldap-leo,ou=users,dc=grafana,dc=org
mail: ldap-leo@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldap-leo
cn: ldap-leo
dn: cn=ldap-tobias,ou=users,dc=grafana,dc=org
mail: ldap-tobias@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldap-tobias
cn: ldap-tobias
dn: cn=ldap-torkel,ou=users,dc=grafana,dc=org
mail: ldap-torkel@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldap-torkel
cn: ldap-torkel
@@ -0,0 +1,25 @@
dn: cn=admins,ou=groups,dc=grafana,dc=org
cn: admins
objectClass: groupOfNames
objectClass: top
member: cn=ldap-admin,ou=users,dc=grafana,dc=org
member: cn=ldap-torkel,ou=users,dc=grafana,dc=org
dn: cn=editors,ou=groups,dc=grafana,dc=org
cn: editors
objectClass: groupOfNames
member: cn=ldap-editor,ou=users,dc=grafana,dc=org
dn: cn=backend,ou=groups,dc=grafana,dc=org
cn: backend
objectClass: groupOfNames
member: cn=ldap-carl,ou=users,dc=grafana,dc=org
member: cn=ldap-leo,ou=users,dc=grafana,dc=org
member: cn=ldap-torkel,ou=users,dc=grafana,dc=org
dn: cn=frontend,ou=groups,dc=grafana,dc=org
cn: frontend
objectClass: groupOfNames
member: cn=ldap-torkel,ou=users,dc=grafana,dc=org
member: cn=ldap-daniel,ou=users,dc=grafana,dc=org
member: cn=ldap-leo,ou=users,dc=grafana,dc=org
@@ -1,10 +0,0 @@
dn: cn=ldapadmin,dc=grafana,dc=org
mail: ldapadmin@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldapadmin
cn: ldapadmin
memberOf: cn=admins,dc=grafana,dc=org
@@ -1,5 +0,0 @@
dn: cn=admins,dc=grafana,dc=org
cn: admins
member: cn=ldapadmin,dc=grafana,dc=org
objectClass: groupOfNames
objectClass: top
@@ -1,10 +0,0 @@
dn: cn=ldapeditor,dc=grafana,dc=org
mail: ldapeditor@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldapeditor
cn: ldapeditor
memberOf: cn=users,dc=grafana,dc=org
@@ -1,5 +0,0 @@
dn: cn=users,dc=grafana,dc=org
cn: users
member: cn=ldapeditor,dc=grafana,dc=org
objectClass: groupOfNames
objectClass: top
@@ -1,9 +0,0 @@
dn: cn=ldapviewer,dc=grafana,dc=org
mail: ldapviewer@grafana.com
userPassword: grafana
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
sn: ldapviewer
cn: ldapviewer
@@ -52,8 +52,6 @@ This admin flag makes a user a `Super Admin`. This means they can access the `Se
### Dashboard & Folder Permissions
> Introduced in Grafana v5.0
{{< docs-imagebox img="/img/docs/v50/folder_permissions.png" max-width="500px" class="docs-image--right" >}}
For dashboards and dashboard folders there is a **Permissions** page that make it possible to
+4 -2
View File
@@ -154,8 +154,8 @@ Since not all datasources have the same configuration settings we only have the
| tlsAuthWithCACert | boolean | *All* | Enable TLS authentication using CA cert |
| tlsSkipVerify | boolean | *All* | Controls whether a client verifies the server's certificate chain and host name. |
| graphiteVersion | string | Graphite | Graphite version |
| timeInterval | string | Elastic, InfluxDB & Prometheus | Lowest interval/step value that should be used for this data source |
| esVersion | string | Elastic | Elasticsearch version as an number (2/5/56) |
| timeInterval | string | Prometheus, Elasticsearch, InfluxDB, MySQL, PostgreSQL & MSSQL | Lowest interval/step value that should be used for this data source |
| esVersion | number | Elastic | Elasticsearch version as a number (2/5/56) |
| timeField | string | Elastic | Which field that should be used as timestamp |
| interval | string | Elastic | Index date time format |
| authType | string | Cloudwatch | Auth provider. keys/credentials/arn |
@@ -165,6 +165,8 @@ Since not all datasources have the same configuration settings we only have the
| tsdbVersion | string | OpenTSDB | Version |
| tsdbResolution | string | OpenTSDB | Resolution |
| sslmode | string | PostgreSQL | SSLmode. 'disable', 'require', 'verify-ca' or 'verify-full' |
| postgresVersion | number | PostgreSQL | Postgres version as a number (903/904/905/906/1000) meaning v9.3, v9.4, ..., v10 |
| timescaledb | boolean | PostgreSQL | Enable usage of TimescaleDB extension |
#### Secure Json Data
+45 -21
View File
@@ -16,12 +16,11 @@ weight = 2
When an alert changes state, it sends out notifications. Each alert rule can have
multiple notifications. In order to add a notification to an alert rule you first need
to add and configure a `notification` channel (can be email, PagerDuty or other integration). This is done from the Notification Channels page.
to add and configure a `notification` channel (can be email, PagerDuty or other integration).
This is done from the Notification Channels page.
## Notification Channel Setup
{{< imgbox max-width="30%" img="/img/docs/v50/alerts_notifications_menu.png" caption="Alerting Notification Channels" >}}
On the Notification Channels page hit the `New Channel` button to go the page where you
can configure and setup a new Notification Channel.
@@ -30,7 +29,31 @@ sure it's setup correctly.
### Send on all alerts
When checked, this option will nofity for all alert rules - existing and new.
When checked, this option will notify for all alert rules - existing and new.
### Send reminders
> Only available in Grafana v5.3 and above.
{{< docs-imagebox max-width="600px" img="/img/docs/v53/alerting_notification_reminders.png" class="docs-image--right" caption="Alerting notification reminders setup" >}}
When this option is checked additional notifications (reminders) will be sent for triggered alerts. You can specify how often reminders
should be sent using number of seconds (s), minutes (m) or hours (h), for example `30s`, `3m`, `5m` or `1h` etc.
**Important:** Alert reminders are sent after rules are evaluated. Therefore a reminder can never be sent more frequently than a configured [alert rule evaluation interval](/alerting/rules/#name-evaluation-interval).
These examples show how often and when reminders are sent for a triggered alert.
Alert rule evaluation interval | Send reminders every | Reminder sent every (after last alert notification)
---------- | ----------- | -----------
`30s` | `15s` | ~30 seconds
`1m` | `5m` | ~5 minutes
`5m` | `15m` | ~15 minutes
`6m` | `20m` | ~24 minutes
`1h` | `15m` | ~1 hour
`1h` | `2h` | ~2 hours
<div class="clearfix"></div>
## Supported Notification Types
@@ -130,24 +153,25 @@ There are a couple of configuration options which need to be set up in Grafana U
Once these two properties are set, you can send the alerts to Kafka for further processing or throttling.
### All supported notifier
### All supported notifiers
Name | Type |Support images
-----|------------ | ------
Slack | `slack` | yes
Pagerduty | `pagerduty` | yes
Email | `email` | yes
Webhook | `webhook` | link
Kafka | `kafka` | no
Hipchat | `hipchat` | yes
VictorOps | `victorops` | yes
Sensu | `sensu` | yes
OpsGenie | `opsgenie` | yes
Threema | `threema` | yes
Pushover | `pushover` | no
Telegram | `telegram` | no
Line | `line` | no
Prometheus Alertmanager | `prometheus-alertmanager` | no
Name | Type |Support images | Support reminders
-----|------------ | ------ | ------ |
Slack | `slack` | yes | yes
Pagerduty | `pagerduty` | yes | yes
Email | `email` | yes | yes
Webhook | `webhook` | link | yes
Kafka | `kafka` | no | yes
Hipchat | `hipchat` | yes | yes
VictorOps | `victorops` | yes | yes
Sensu | `sensu` | yes | yes
OpsGenie | `opsgenie` | yes | yes
Threema | `threema` | yes | yes
Pushover | `pushover` | no | yes
Telegram | `telegram` | no | yes
Line | `line` | no | yes
Microsoft Teams | `teams` | yes | yes
Prometheus Alertmanager | `prometheus-alertmanager` | no | no
+5
View File
@@ -88,6 +88,11 @@ So as you can see from the above scenario Grafana will not send out notification
to fire if the rule already is in state `Alerting`. To improve support for queries that return multiple series
we plan to track state **per series** in a future release.
> Starting with Grafana v5.3 you can configure reminders to be sent for triggered alerts. This will send additional notifications
> when an alert continues to fire. If other series (like server2 in the example above) also cause the alert rule to fire they will
> be included in the reminder notification. Depending on what notification channel you're using you may be able to take advantage
> of this feature for identifying new/existing series causing alert to fire. [Read more about notification reminders here](/alerting/notifications/#send-reminders).
### No Data / Null values
Below your conditions you can configure how the rule evaluation engine should handle queries that return no data or only null values.
@@ -1,42 +1,43 @@
+++
title = "Grafana Authproxy"
title = "Auth Proxy"
description = "Grafana Auth Proxy Guide "
keywords = ["grafana", "configuration", "documentation", "proxy"]
type = "docs"
keywords = ["grafana", "tutorials", "authproxy"]
aliases = ["/tutorials/authproxy/"]
[menu.docs]
parent = "tutorials"
weight = 10
name = "Auth Proxy"
identifier = "auth-proxy"
parent = "authentication"
weight = 2
+++
# Grafana Authproxy
# Auth Proxy Authentication
AuthProxy allows you to offload the authentication of users to a web server (there are many reasons why youd want to run a web server in front of a production version of Grafana, especially if its exposed to the Internet).
You can configure Grafana to let a http reverse proxy handling authentication. Popular web servers have a very
extensive list of pluggable authentication modules, and any of them can be used with the AuthProxy feature.
Below we detail the configuration options for auth proxy.
Popular web servers have a very extensive list of pluggable authentication modules, and any of them can be used with the AuthProxy feature.
The Grafana AuthProxy feature is very simple in design, but it is this simplicity that makes it so powerful.
## Interacting with Grafanas AuthProxy via curl
The AuthProxy feature can be configured through the Grafana configuration file with the following options:
```js
```bash
[auth.proxy]
# Defaults to false, but set to true to enable this feature
enabled = true
# HTTP Header name that will contain the username or email
header_name = X-WEBAUTH-USER
# HTTP Header property, defaults to `username` but can also be `email`
header_property = username
# Set to `true` to enable auto sign up of users who do not exist in Grafana DB. Defaults to `true`.
auto_sign_up = true
# If combined with Grafana LDAP integration define sync interval
ldap_sync_ttl = 60
# Limit where auth proxy requests come from by configuring a list of IP addresses.
# This can be used to prevent users spoofing the X-WEBAUTH-USER header.
whitelist =
# Optionally define more headers to sync other user attributes
# Example `headers = Name:X-WEBAUTH-NAME Email:X-WEBAUTH-EMAIL``
headers =
```
* **enabled**: this is to toggle the feature on or off
* **header_name**: this is the HTTP header name that passes the username or email address of the authenticated user to Grafana. Grafana will trust what ever username is contained in this header and automatically log the user in.
* **header_property**: this tells Grafana whether the value in the header_name is a username or an email address. (In Grafana you can log in using your account username or account email)
* **auto_sign_up**: If set to true, Grafana will automatically create user accounts in the Grafana DB if one does not exist. If set to false, users who do not exist in the GrafanaDB wont be able to log in, even though their username and password are valid.
* **ldap_sync_ttl**: When both auth.proxy and auth.ldap are enabled, user's organisation and role are synchronised from ldap after the http proxy authentication. You can force ldap re-synchronisation after `ldap_sync_ttl` minutes.
* **whitelist**: Comma separated list of trusted authentication proxies IP.
With a fresh install of Grafana, using the above configuration for the authProxy feature, we can send a simple API call to list all users. The only user that will be present is the default “Admin” user that is added the first time Grafana starts up. As you can see all we need to do to authenticate the request is to provide the “X-WEBAUTH-USER” header.
## Interacting with Grafanas AuthProxy via curl
```bash
curl -H "X-WEBAUTH-USER: admin" http://localhost:3000/api/users
@@ -71,7 +72,8 @@ Ill demonstrate how to use Apache for authenticating users. In this example w
### Apache BasicAuth
In this example we use Apache as a reverseProxy in front of Grafana. Apache handles the Authentication of users before forwarding requests to the Grafana backend service.
In this example we use Apache as a reverse proxy in front of Grafana. Apache handles the Authentication of users before forwarding requests to the Grafana backend service.
#### Apache configuration
@@ -116,38 +118,7 @@ In this example we use Apache as a reverseProxy in front of Grafana. Apache hand
* The last 3 lines are then just standard reverse proxy configuration to direct all authenticated requests to our Grafana server running on port 3000.
#### Grafana configuration
```bash
############# Users ################
[users]
# disable user signup / registration
allow_sign_up = false
# Set to true to automatically assign new users to the default organization (id 1)
auto_assign_org = true
# Default role new users will be automatically assigned (if auto_assign_org above is set to true)
auto_assign_org_role = Editor
############ Auth Proxy ########
[auth.proxy]
enabled = true
# the Header name that contains the authenticated user.
header_name = X-WEBAUTH-USER
# does the user authenticate against the proxy using a 'username' or an 'email'
header_property = username
# automatically add the user to the system if they don't already exist.
auto_sign_up = true
```
#### Full walk through using Docker.
##### Grafana Container
## Full walk through using Docker.
For this example, we use the official Grafana docker image available at [Docker Hub](https://hub.docker.com/r/grafana/grafana/)
@@ -166,7 +137,8 @@ header_property = username
auto_sign_up = true
```
* Launch the Grafana container, using our custom grafana.ini to replace `/etc/grafana/grafana.ini`. We don't expose any ports for this container as it will only be connected to by our Apache container.
Launch the Grafana container, using our custom grafana.ini to replace `/etc/grafana/grafana.ini`. We don't expose
any ports for this container as it will only be connected to by our Apache container.
```bash
docker run -i -v $(pwd)/grafana.ini:/etc/grafana/grafana.ini --name grafana grafana/grafana
+172
View File
@@ -0,0 +1,172 @@
+++
title = "OAuth authentication"
description = "Grafana OAuthentication Guide "
keywords = ["grafana", "configuration", "documentation", "oauth"]
type = "docs"
[menu.docs]
name = "Generic OAuth"
identifier = "generic_oauth"
parent = "authentication"
weight = 3
+++
# Generic OAuth Authentication
You can configure many different oauth2 authentication services with Grafana using the generic oauth2 feature. Below you
can find examples using Okta, BitBucket, OneLogin and Azure.
This callback URL must match the full HTTP address that you use in your browser to access Grafana, but with the prefix path of `/login/generic_oauth`.
Example config:
```bash
[auth.generic_oauth]
enabled = true
client_id = YOUR_APP_CLIENT_ID
client_secret = YOUR_APP_CLIENT_SECRET
scopes =
auth_url =
token_url =
api_url =
allowed_domains = mycompany.com mycompany.org
allow_sign_up = true
```
Set api_url to the resource that returns [OpenID UserInfo](https://connect2id.com/products/server/docs/api/userinfo) compatible information.
## Set up OAuth2 with Okta
First set up Grafana as an OpenId client "webapplication" in Okta. Then set the Base URIs to `https://<grafana domain>/` and set the Login redirect URIs to `https://<grafana domain>/login/generic_oauth`.
Finally set up the generic oauth module like this:
```bash
[auth.generic_oauth]
name = Okta
enabled = true
scopes = openid profile email
client_id = <okta application Client ID>
client_secret = <okta application Client Secret>
auth_url = https://<okta domain>/oauth2/v1/authorize
token_url = https://<okta domain>/oauth2/v1/token
api_url = https://<okta domain>/oauth2/v1/userinfo
```
## Set up OAuth2 with Bitbucket
```bash
[auth.generic_oauth]
name = BitBucket
enabled = true
allow_sign_up = true
client_id = <client id>
client_secret = <client secret>
scopes = account email
auth_url = https://bitbucket.org/site/oauth2/authorize
token_url = https://bitbucket.org/site/oauth2/access_token
api_url = https://api.bitbucket.org/2.0/user
team_ids =
allowed_organizations =
```
## Set up OAuth2 with OneLogin
1. Create a new Custom Connector with the following settings:
- Name: Grafana
- Sign On Method: OpenID Connect
- Redirect URI: `https://<grafana domain>/login/generic_oauth`
- Signing Algorithm: RS256
- Login URL: `https://<grafana domain>/login/generic_oauth`
then:
2. Add an App to the Grafana Connector:
- Display Name: Grafana
then:
3. Under the SSO tab on the Grafana App details page you'll find the Client ID and Client Secret.
Your OneLogin Domain will match the url you use to access OneLogin.
Configure Grafana as follows:
```bash
[auth.generic_oauth]
name = OneLogin
enabled = true
allow_sign_up = true
client_id = <client id>
client_secret = <client secret>
scopes = openid email name
auth_url = https://<onelogin domain>.onelogin.com/oidc/auth
token_url = https://<onelogin domain>.onelogin.com/oidc/token
api_url = https://<onelogin domain>.onelogin.com/oidc/me
team_ids =
allowed_organizations =
```
### Set up OAuth2 with Auth0
1. Create a new Client in Auth0
- Name: Grafana
- Type: Regular Web Application
2. Go to the Settings tab and set:
- Allowed Callback URLs: `https://<grafana domain>/login/generic_oauth`
3. Click Save Changes, then use the values at the top of the page to configure Grafana:
```bash
[auth.generic_oauth]
enabled = true
allow_sign_up = true
team_ids =
allowed_organizations =
name = Auth0
client_id = <client id>
client_secret = <client secret>
scopes = openid profile email
auth_url = https://<domain>/authorize
token_url = https://<domain>/oauth/token
api_url = https://<domain>/userinfo
```
### Set up OAuth2 with Azure Active Directory
1. Log in to portal.azure.com and click "Azure Active Directory" in the side menu, then click the "Properties" sub-menu item.
2. Copy the "Directory ID", this is needed for setting URLs later
3. Click "App Registrations" and add a new application registration:
- Name: Grafana
- Application type: Web app / API
- Sign-on URL: `https://<grafana domain>/login/generic_oauth`
4. Click the name of the new application to open the application details page.
5. Note down the "Application ID", this will be the OAuth client id.
6. Click "Settings", then click "Keys" and add a new entry under Passwords
- Key Description: Grafana OAuth
- Duration: Never Expires
7. Click Save then copy the key value, this will be the OAuth client secret.
8. Configure Grafana as follows:
```bash
[auth.generic_oauth]
name = Azure AD
enabled = true
allow_sign_up = true
client_id = <application id>
client_secret = <key value>
scopes = openid email name
auth_url = https://login.microsoftonline.com/<directory id>/oauth2/authorize
token_url = https://login.microsoftonline.com/<directory id>/oauth2/token
api_url =
team_ids =
allowed_organizations =
```
<hr>
+98
View File
@@ -0,0 +1,98 @@
+++
title = "Google OAuth2 Authentication"
description = "Grafana OAuthentication Guide "
keywords = ["grafana", "configuration", "documentation", "oauth"]
type = "docs"
[menu.docs]
name = "GitHub"
identifier = "github_oauth2"
parent = "authentication"
weight = 4
+++
# GitHub OAuth2 Authentication
To enable the GitHub OAuth2 you must register your application with GitHub. GitHub will generate a client ID and secret key for you to use.
## Configure GitHub OAuth application
You need to create a GitHub OAuth application (you find this under the GitHub
settings page). When you create the application you will need to specify
a callback URL. Specify this as callback:
```bash
http://<my_grafana_server_name_or_ip>:<grafana_server_port>/login/github
```
This callback URL must match the full HTTP address that you use in your
browser to access Grafana, but with the prefix path of `/login/github`.
When the GitHub OAuth application is created you will get a Client ID and a
Client Secret. Specify these in the Grafana configuration file. For
example:
## Enable GitHub in Grafana
```bash
[auth.github]
enabled = true
allow_sign_up = true
client_id = YOUR_GITHUB_APP_CLIENT_ID
client_secret = YOUR_GITHUB_APP_CLIENT_SECRET
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
team_ids =
allowed_organizations =
```
Restart the Grafana back-end. You should now see a GitHub login button
on the login page. You can now login or sign up with your GitHub
accounts.
You may allow users to sign-up via GitHub authentication by setting the
`allow_sign_up` option to `true`. When this option is set to `true`, any
user successfully authenticating via GitHub authentication will be
automatically signed up.
### team_ids
Require an active team membership for at least one of the given teams on
GitHub. If the authenticated user isn't a member of at least one of the
teams they will not be able to register or authenticate with your
Grafana instance. For example:
```bash
[auth.github]
enabled = true
client_id = YOUR_GITHUB_APP_CLIENT_ID
client_secret = YOUR_GITHUB_APP_CLIENT_SECRET
scopes = user:email,read:org
team_ids = 150,300
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
allow_sign_up = true
```
### allowed_organizations
Require an active organization membership for at least one of the given
organizations on GitHub. If the authenticated user isn't a member of at least
one of the organizations they will not be able to register or authenticate with
your Grafana instance. For example
```bash
[auth.github]
enabled = true
client_id = YOUR_GITHUB_APP_CLIENT_ID
client_secret = YOUR_GITHUB_APP_CLIENT_SECRET
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
allow_sign_up = true
# space-delimited organization names
allowed_organizations = github google
```
+115
View File
@@ -0,0 +1,115 @@
+++
title = "Google OAuth2 Authentication"
description = "Grafana OAuthentication Guide "
keywords = ["grafana", "configuration", "documentation", "oauth"]
type = "docs"
[menu.docs]
name = "GitLab"
identifier = "gitlab_oauth"
parent = "authentication"
weight = 5
+++
# GitLab OAuth2 Authentication
To enable the GitLab OAuth2 you must register an application in GitLab. GitLab will generate a client ID and secret key for you to use.
## Create GitLab OAuth keys
You need to [create a GitLab OAuth application](https://docs.gitlab.com/ce/integration/oauth_provider.html).
Choose a descriptive *Name*, and use the following *Redirect URI*:
```
https://grafana.example.com/login/gitlab
```
where `https://grafana.example.com` is the URL you use to connect to Grafana.
Adjust it as needed if you don't use HTTPS or if you use a different port; for
instance, if you access Grafana at `http://203.0.113.31:3000`, you should use
```
http://203.0.113.31:3000/login/gitlab
```
Finally, select *api* as the *Scope* and submit the form. Note that if you're
not going to use GitLab groups for authorization (i.e. not setting
`allowed_groups`, see below), you can select *read_user* instead of *api* as
the *Scope*, thus giving a more restricted access to your GitLab API.
You'll get an *Application Id* and a *Secret* in return; we'll call them
`GITLAB_APPLICATION_ID` and `GITLAB_SECRET` respectively for the rest of this
section.
## Enable GitLab in Grafana
Add the following to your Grafana configuration file to enable GitLab
authentication:
```bash
[auth.gitlab]
enabled = false
allow_sign_up = false
client_id = GITLAB_APPLICATION_ID
client_secret = GITLAB_SECRET
scopes = api
auth_url = https://gitlab.com/oauth/authorize
token_url = https://gitlab.com/oauth/token
api_url = https://gitlab.com/api/v4
allowed_groups =
```
Restart the Grafana backend for your changes to take effect.
If you use your own instance of GitLab instead of `gitlab.com`, adjust
`auth_url`, `token_url` and `api_url` accordingly by replacing the `gitlab.com`
hostname with your own.
With `allow_sign_up` set to `false`, only existing users will be able to login
using their GitLab account, but with `allow_sign_up` set to `true`, *any* user
who can authenticate on GitLab will be able to login on your Grafana instance;
if you use the public `gitlab.com`, it means anyone in the world would be able
to login on your Grafana instance.
You can can however limit access to only members of a given group or list of
groups by setting the `allowed_groups` option.
### allowed_groups
To limit access to authenticated users that are members of one or more [GitLab
groups](https://docs.gitlab.com/ce/user/group/index.html), set `allowed_groups`
to a comma- or space-separated list of groups. For instance, if you want to
only give access to members of the `example` group, set
```ini
allowed_groups = example
```
If you want to also give access to members of the subgroup `bar`, which is in
the group `foo`, set
```ini
allowed_groups = example, foo/bar
```
Note that in GitLab, the group or subgroup name doesn't always match its
display name, especially if the display name contains spaces or special
characters. Make sure you always use the group or subgroup name as it appears
in the URL of the group or subgroup.
Here's a complete example with `alloed_sign_up` enabled, and access limited to
the `example` and `foo/bar` groups:
```ini
[auth.gitlab]
enabled = false
allow_sign_up = true
client_id = GITLAB_APPLICATION_ID
client_secret = GITLAB_SECRET
scopes = api
auth_url = https://gitlab.com/oauth/authorize
token_url = https://gitlab.com/oauth/token
api_url = https://gitlab.com/api/v4
allowed_groups = example, foo/bar
```
+55
View File
@@ -0,0 +1,55 @@
+++
title = "Google OAuth2 Authentication"
description = "Grafana OAuthentication Guide "
keywords = ["grafana", "configuration", "documentation", "oauth"]
type = "docs"
[menu.docs]
name = "Google"
identifier = "ggogle_oauth2"
parent = "authentication"
weight = 3
+++
# Google OAuth2 Authentication
To enable the Google OAuth2 you must register your application with Google. Google will generate a client ID and secret key for you to use.
## Create Google OAuth keys
First, you need to create a Google OAuth Client:
1. Go to https://console.developers.google.com/apis/credentials
2. Click the 'Create Credentials' button, then click 'OAuth Client ID' in the menu that drops down
3. Enter the following:
- Application Type: Web Application
- Name: Grafana
- Authorized Javascript Origins: https://grafana.mycompany.com
- Authorized Redirect URLs: https://grafana.mycompany.com/login/google
- Replace https://grafana.mycompany.com with the URL of your Grafana instance.
4. Click Create
5. Copy the Client ID and Client Secret from the 'OAuth Client' modal
## Enable Google OAuth in Grafana
Specify the Client ID and Secret in the [Grafana configuration file]({{< relref "installation/configuration.md#config-file-locations" >}}). For example:
```bash
[auth.google]
enabled = true
client_id = CLIENT_ID
client_secret = CLIENT_SECRET
scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
auth_url = https://accounts.google.com/o/oauth2/auth
token_url = https://accounts.google.com/o/oauth2/token
allowed_domains = mycompany.com mycompany.org
allow_sign_up = true
```
Restart the Grafana back-end. You should now see a Google login button
on the login page. You can now login or sign up with your Google
accounts. The `allowed_domains` option is optional, and domains were separated by space.
You may allow users to sign-up via Google authentication by setting the
`allow_sign_up` option to `true`. When this option is set to `true`, any
user successfully authenticating via Google authentication will be
automatically signed up.
+12
View File
@@ -0,0 +1,12 @@
+++
title = "Authentication"
description = "Authentication"
type = "docs"
[menu.docs]
name = "Authentication"
identifier = "authentication"
parent = "admin"
weight = 3
+++
@@ -4,27 +4,40 @@ description = "Grafana LDAP Authentication Guide "
keywords = ["grafana", "configuration", "documentation", "ldap"]
type = "docs"
[menu.docs]
name = "LDAP Authentication"
name = "LDAP"
identifier = "ldap"
parent = "admin"
parent = "authentication"
weight = 2
+++
# LDAP Authentication
# LDAP
Grafana (2.1 and newer) ships with a strong LDAP integration feature. The LDAP integration in Grafana allows your
Grafana users to login with their LDAP credentials. You can also specify mappings between LDAP
group memberships and Grafana Organization user roles.
The LDAP integration in Grafana allows your Grafana users to login with their LDAP credentials. You can also specify mappings between LDAP
group memberships and Grafana Organization user roles. Below we detail grafana.ini config file
settings and ldap.toml config file options.
## Configuration
You turn on LDAP in the [main config file]({{< relref "configuration.md#auth-ldap" >}}) as well as specify the path to the LDAP
## Enable LDAP
You turn on LDAP in the [main config file]({{< relref "installation/configuration.md" >}}) as well as specify the path to the LDAP
specific configuration file (default: `/etc/grafana/ldap.toml`).
### Example config
```bash
[auth.ldap]
# Set to `true` to enable LDAP integration (default: `false`)
enabled = true
# Path to the LDAP specific configuration file (default: `/etc/grafana/ldap.toml`)
config_file = /etc/grafana/ldap.toml`
# Allow sign up should almost always be true (default) to allow new Grafana users to be created (if ldap authentication is ok). If set to
# false only pre-existing Grafana users will be able to login (if ldap authentication is ok).
allow_sign_up = true
```
```toml
# Set to true to log user information returned from LDAP
verbose_logging = false
## LDAP Configuration
```bash
# To troubleshoot and get more log info enable ldap debug logging in grafana.ini
# [log]
# filters = ldap:debug
[[servers]]
# Ldap server host (specify multiple hosts space separated)
@@ -39,6 +52,9 @@ start_tls = false
ssl_skip_verify = false
# set to the path to your root CA certificate or leave unset to use system defaults
# root_ca_cert = "/path/to/certificate.crt"
# Authentication against LDAP servers requiring client certificates
# client_cert = "/path/to/client.crt"
# client_key = "/path/to/client.key"
# Search user bind dn
bind_dn = "cn=admin,dc=grafana,dc=org"
@@ -47,6 +63,7 @@ bind_dn = "cn=admin,dc=grafana,dc=org"
bind_password = 'grafana'
# User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)"
# Allow login from email or username, example "(|(sAMAccountName=%s)(userPrincipalName=%s))"
search_filter = "(cn=%s)"
# An array of base dns to search through
@@ -73,6 +90,8 @@ email = "email"
[[servers.group_mappings]]
group_dn = "cn=admins,dc=grafana,dc=org"
org_role = "Admin"
# To make user an instance admin (Grafana Admin) uncomment line below
# grafana_admin = true
# The Grafana organization database id, optional, if left out the default org (id 1) will be used. Setting this allows for multiple group_dn's to be assigned to the same org_role provided the org_id differs
# org_id = 1
@@ -112,7 +131,7 @@ The search filter and search bases settings are still needed to perform the LDAP
## POSIX schema (no memberOf attribute)
If your ldap server does not support the memberOf attribute add these options:
```toml
```bash
## Group search filter, to retrieve the groups of which the user is a member (only set if memberOf attribute is not available)
group_search_filter = "(&(objectClass=posixGroup)(memberUid=%s))"
## An array of the base DNs to search through for groups. Typically uses ou=groups
@@ -132,6 +151,10 @@ Users page, this change will be reset the next time the user logs in. If you
change the LDAP groups of a user, the change will take effect the next
time the user logs in.
### Grafana Admin
with a servers.group_mappings section you can set grafana_admin = true or false to sync Grafana Admin permission. A Grafana server admin has admin access over all orgs &
users.
### Priority
The first group mapping that an LDAP user is matched to will be used for the sync. If you have LDAP users that fit multiple mappings, the topmost mapping in the TOML config will be used.
+87
View File
@@ -0,0 +1,87 @@
+++
title = "Overview"
description = "Overview for auth"
type = "docs"
[menu.docs]
name = "Overview"
identifier = "overview-auth"
parent = "authentication"
weight = 1
+++
# User Authentication Overview
Grafana provides many ways to authenticate users. Some authentication integrations also enable syncing user
permissions and org memberships.
## OAuth Integrations
- [Google OAuth]({{< relref "auth/google.md" >}})
- [GitHub OAuth]({{< relref "auth/github.md" >}})
- [Gitlab OAuth]({{< relref "auth/gitlab.md" >}})
- [Generic OAuth]({{< relref "auth/generic-oauth.md" >}}) (Okta2, BitBucket, Azure, OneLogin, Auth0)
## LDAP integrations
- [LDAP Authentication]({{< relref "auth/ldap.md" >}}) (OpenLDAP, ActiveDirectory, etc)
## Auth proxy
- [Auth Proxy]({{< relref "auth/auth-proxy.md" >}}) If you want to handle authentication outside Grafana using a reverse
proxy.
## Grafana Auth
Grafana of course has a built in user authentication system with password authenticaten enabled by default. You can
disable authentication by enabling anonymous access. You can also hide login form and only allow login through an auth
provider (listed above). There is also options for allowing self sign up.
### Anonymous authenticaten
You can make Grafana accessible without any login required by enabling anonymous access in the configuration file.
Example:
```bash
[auth.anonymous]
enabled = true
# Organization name that should be used for unauthenticated users
org_name = Main Org.
# Role for unauthenticated users, other valid values are `Editor` and `Admin`
org_role = Viewer
```
If you change your organization name in the Grafana UI this setting needs to be updated to match the new name.
### Basic authentication
Basic auth is enabled by default and works with the built in Grafana user password authentication system and LDAP
authenticaten integration.
To disable basic auth:
```bash
[auth.basic]
enabled = false
```
### Disable login form
You can hide the Grafana login form using the below configuration settings.
```bash
[auth]
disable_login_form ⁼ true
```
### Hide sign-out menu
Set to the option detailed below to true to hide sign-out menu link. Useful if you use an auth proxy.
```bash
[auth]
disable_signout_menu = true
```
@@ -115,6 +115,8 @@ and `dimension keys/values`.
In place of `region` you can specify `default` to use the default region configured in the datasource for the query,
e.g. `metrics(AWS/DynamoDB, default)` or `dimension_values(default, ..., ..., ...)`.
Read more about the available dimensions in the [CloudWatch Metrics and Dimensions Reference](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CW_Support_For_AWS.html).
Name | Description
------- | --------
*regions()* | Returns a list of regions AWS provides their service.
@@ -58,8 +58,8 @@ a time pattern for the index name or a wildcard.
### Elasticsearch version
Be sure to specify your Elasticsearch version in the version selection dropdown. This is very important as there are differences how queries are composed. Currently only 2.x and 5.x
are supported.
Be sure to specify your Elasticsearch version in the version selection dropdown. This is very important as there are differences how queries are composed.
Currently the versions available is 2.x, 5.x and 5.6+ where 5.6+ means a version of 5.6 or higher, 6.3.2 for example.
### Min time interval
A lower limit for the auto group by time interval. Recommended to be set to write frequency, for example `1m` if your data is written every minute.
@@ -115,7 +115,7 @@ The Elasticsearch data source supports two types of queries you can use in the *
Query | Description
------------ | -------------
*{"find": "fields", "type": "keyword"} | Returns a list of field names with the index type `keyword`.
*{"find": "fields", "type": "keyword"}* | Returns a list of field names with the index type `keyword`.
*{"find": "terms", "field": "@hostname", "size": 1000}* | Returns a list of values for a field using term aggregation. Query will user current dashboard time range as time range for query.
*{"find": "terms", "field": "@hostname", "query": '<lucene query>'}* | Returns a list of values for a field using term aggregation & and a specified lucene query filter. Query will use current dashboard time range as time range for query.
@@ -188,7 +188,7 @@ queries via the Dashboard menu / Annotations view.
An example query:
```SQL
SELECT title, description from events WHERE $timeFilter order asc
SELECT title, description from events WHERE $timeFilter ORDER BY time ASC
```
For InfluxDB you need to enter a query like in the above example. You need to have the ```where $timeFilter```
+30 -6
View File
@@ -6,7 +6,7 @@ type = "docs"
[menu.docs]
name = "Microsoft SQL Server"
parent = "datasources"
weight = 7
weight = 8
+++
# Using Microsoft SQL Server in Grafana
@@ -33,6 +33,24 @@ Name | Description
*User* | Database user's login/username
*Password* | Database user's password
### Min time interval
A lower limit for the [$__interval](/reference/templating/#the-interval-variable) and [$__interval_ms](/reference/templating/#the-interval-ms-variable) variables.
Recommended to be set to write frequency, for example `1m` if your data is written every minute.
This option can also be overridden/configured in a dashboard panel under data source options. It's important to note that this value **needs** to be formatted as a
number followed by a valid time identifier, e.g. `1m` (1 minute) or `30s` (30 seconds). The following time identifiers are supported:
Identifier | Description
------------ | -------------
`y` | year
`M` | month
`w` | week
`d` | day
`h` | hour
`m` | minute
`s` | second
`ms` | millisecond
### Database User Permissions (Important!)
The database user you specify when you add the data source should only be granted SELECT permissions on
@@ -77,14 +95,19 @@ Macro example | Description
------------ | -------------
*$__time(dateColumn)* | Will be replaced by an expression to rename the column to *time*. For example, *dateColumn as time*
*$__timeEpoch(dateColumn)* | Will be replaced by an expression to convert a DATETIME column type to unix timestamp and rename it to *time*. <br/>For example, *DATEDIFF(second, '1970-01-01', dateColumn) AS time*
*$__timeFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name. <br/>For example, *dateColumn >= DATEADD(s, 1494410783, '1970-01-01') AND dateColumn <= DATEADD(s, 1494410783, '1970-01-01')*
*$__timeFrom()* | Will be replaced by the start of the currently active time selection. For example, *DATEADD(second, 1494410783, '1970-01-01')*
*$__timeTo()* | Will be replaced by the end of the currently active time selection. For example, *DATEADD(second, 1494410783, '1970-01-01')*
*$__timeFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name. <br/>For example, *dateColumn BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:06:17Z'*
*$__timeFrom()* | Will be replaced by the start of the currently active time selection. For example, *'2017-04-21T05:01:17Z'*
*$__timeTo()* | Will be replaced by the end of the currently active time selection. For example, *'2017-04-21T05:06:17Z'*
*$__timeGroup(dateColumn,'5m'[, fillvalue])* | Will be replaced by an expression usable in GROUP BY clause. Providing a *fillValue* of *NULL* or *floating value* will automatically fill empty series in timerange with that value. <br/>For example, *CAST(ROUND(DATEDIFF(second, '1970-01-01', time_column)/300.0, 0) as bigint)\*300*.
*$__timeGroup(dateColumn,'5m', 0)* | Same as above but with a fill parameter so all null values will be converted to the fill value (all null values would be set to zero using this example).
*$__timeGroup(dateColumn,'5m', 0)* | Same as above but with a fill parameter so missing points in that series will be added by grafana and 0 will be used as value.
*$__timeGroup(dateColumn,'5m', NULL)* | Same as above but NULL will be used as value for missing points.
*$__timeGroup(dateColumn,'5m', previous)* | Same as above but the previous value in that series will be used as fill value if no value has been seen yet NULL will be used (only available in Grafana 5.3+).
*$__timeGroupAlias(dateColumn,'5m')* | Will be replaced identical to $__timeGroup but with an added column alias (only available in Grafana 5.3+).
*$__unixEpochFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name with times represented as unix timestamp. For example, *dateColumn > 1494410783 AND dateColumn < 1494497183*
*$__unixEpochFrom()* | Will be replaced by the start of the currently active time selection as unix timestamp. For example, *1494410783*
*$__unixEpochTo()* | Will be replaced by the end of the currently active time selection as unix timestamp. For example, *1494497183*
*$__unixEpochGroup(dateColumn,'5m', [fillmode])* | Same as $__timeGroup but for times stored as unix timestamp (only available in Grafana 5.3+).
*$__unixEpochGroupAlias(dateColumn,'5m', [fillmode])* | Same as above but also adds a column alias (only available in Grafana 5.3+).
We plan to add many more macros. If you have suggestions for what macros you would like to see, please [open an issue](https://github.com/grafana/grafana) in our GitHub repo.
@@ -148,7 +171,8 @@ The resulting table panel:
## Time series queries
If you set `Format as` to `Time series`, for use in Graph panel for example, then the query must must have a column named `time` that returns either a sql datetime or any numeric datatype representing unix epoch in seconds. You may return a column named `metric` that is used as metric name for the value column. Any column except `time` and `metric` is treated as a value column. If you omit the `metric` column, tha name of the value column will be the metric name. You may select multiple value columns, each will have its name as metric.
If you set `Format as` to `Time series`, for use in Graph panel for example, then the query must must have a column named `time` that returns either a sql datetime or any numeric datatype representing unix epoch in seconds. You may return a column named `metric` that is used as metric name for the value column. Any column except `time` and `metric` is treated as a value column. If you omit the `metric` column, the name of the value column will be the metric name. You may select multiple value columns, each will have its name as metric.
If you return multiple value columns and a column named `metric` then this column is used as prefix for the series name (only available in Grafana 5.3+).
**Example database table:**
+28 -4
View File
@@ -36,6 +36,24 @@ Name | Description
*User* | Database user's login/username
*Password* | Database user's password
### Min time interval
A lower limit for the [$__interval](/reference/templating/#the-interval-variable) and [$__interval_ms](/reference/templating/#the-interval-ms-variable) variables.
Recommended to be set to write frequency, for example `1m` if your data is written every minute.
This option can also be overridden/configured in a dashboard panel under data source options. It's important to note that this value **needs** to be formatted as a
number followed by a valid time identifier, e.g. `1m` (1 minute) or `30s` (30 seconds). The following time identifiers are supported:
Identifier | Description
------------ | -------------
`y` | year
`M` | month
`w` | week
`d` | day
`h` | hour
`m` | minute
`s` | second
`ms` | millisecond
### Database User Permissions (Important!)
The database user you specify when you add the data source should only be granted SELECT permissions on
@@ -60,14 +78,19 @@ Macro example | Description
------------ | -------------
*$__time(dateColumn)* | Will be replaced by an expression to convert to a UNIX timestamp and rename the column to `time_sec`. For example, *UNIX_TIMESTAMP(dateColumn) as time_sec*
*$__timeEpoch(dateColumn)* | Will be replaced by an expression to convert to a UNIX timestamp and rename the column to `time_sec`. For example, *UNIX_TIMESTAMP(dateColumn) as time_sec*
*$__timeFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name. For example, *dateColumn > FROM_UNIXTIME(1494410783) AND dateColumn < FROM_UNIXTIME(1494497183)*
*$__timeFrom()* | Will be replaced by the start of the currently active time selection. For example, *FROM_UNIXTIME(1494410783)*
*$__timeTo()* | Will be replaced by the end of the currently active time selection. For example, *FROM_UNIXTIME(1494497183)*
*$__timeFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name. For example, *dateColumn BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:06:17Z'*
*$__timeFrom()* | Will be replaced by the start of the currently active time selection. For example, *'2017-04-21T05:01:17Z'*
*$__timeTo()* | Will be replaced by the end of the currently active time selection. For example, *'2017-04-21T05:06:17Z'*
*$__timeGroup(dateColumn,'5m')* | Will be replaced by an expression usable in GROUP BY clause. For example, *cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)*300 as signed),*
*$__timeGroup(dateColumn,'5m',0)* | Same as above but with a fill parameter so all null values will be converted to the fill value (all null values would be set to zero using this example).
*$__timeGroup(dateColumn,'5m', 0)* | Same as above but with a fill parameter so missing points in that series will be added by grafana and 0 will be used as value.
*$__timeGroup(dateColumn,'5m', NULL)* | Same as above but NULL will be used as value for missing points.
*$__timeGroup(dateColumn,'5m', previous)* | Same as above but the previous value in that series will be used as fill value if no value has been seen yet NULL will be used (only available in Grafana 5.3+).
*$__timeGroupAlias(dateColumn,'5m')* | Will be replaced identical to $__timeGroup but with an added column alias (only available in Grafana 5.3+).
*$__unixEpochFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name with times represented as unix timestamp. For example, *dateColumn > 1494410783 AND dateColumn < 1494497183*
*$__unixEpochFrom()* | Will be replaced by the start of the currently active time selection as unix timestamp. For example, *1494410783*
*$__unixEpochTo()* | Will be replaced by the end of the currently active time selection as unix timestamp. For example, *1494497183*
*$__unixEpochGroup(dateColumn,'5m', [fillmode])* | Same as $__timeGroup but for times stored as unix timestamp (only available in Grafana 5.3+).
*$__unixEpochGroupAlias(dateColumn,'5m', [fillmode])* | Same as above but also adds a column alias (only available in Grafana 5.3+).
We plan to add many more macros. If you have suggestions for what macros you would like to see, please [open an issue](https://github.com/grafana/grafana) in our GitHub repo.
@@ -104,6 +127,7 @@ The resulting table panel:
If you set `Format as` to `Time series`, for use in Graph panel for example, then the query must return a column named `time` that returns either a sql datetime or any numeric datatype representing unix epoch.
Any column except `time` and `metric` is treated as a value column.
You may return a column named `metric` that is used as metric name for the value column.
If you return multiple value columns and a column named `metric` then this column is used as prefix for the series name (only available in Grafana 5.3+).
**Example with `metric` column:**
+30 -2
View File
@@ -31,6 +31,26 @@ Name | Description
*User* | Database user's login/username
*Password* | Database user's password
*SSL Mode* | This option determines whether or with what priority a secure SSL TCP/IP connection will be negotiated with the server.
*Version* | This option determines which functions are available in the query builder (only available in Grafana 5.3+).
*TimescaleDB* | TimescaleDB is a time-series database built as a PostgreSQL extension. If enabled, Grafana will use `time_bucket` in the `$__timeGroup` macro and display TimescaleDB specific aggregate functions in the query builder (only available in Grafana 5.3+).
### Min time interval
A lower limit for the [$__interval](/reference/templating/#the-interval-variable) and [$__interval_ms](/reference/templating/#the-interval-ms-variable) variables.
Recommended to be set to write frequency, for example `1m` if your data is written every minute.
This option can also be overridden/configured in a dashboard panel under data source options. It's important to note that this value **needs** to be formatted as a
number followed by a valid time identifier, e.g. `1m` (1 minute) or `30s` (30 seconds). The following time identifiers are supported:
Identifier | Description
------------ | -------------
`y` | year
`M` | month
`w` | week
`d` | day
`h` | hour
`m` | minute
`s` | second
`ms` | millisecond
### Database User Permissions (Important!)
@@ -60,11 +80,16 @@ Macro example | Description
*$__timeFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name. For example, *dateColumn BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:06:17Z'*
*$__timeFrom()* | Will be replaced by the start of the currently active time selection. For example, *'2017-04-21T05:01:17Z'*
*$__timeTo()* | Will be replaced by the end of the currently active time selection. For example, *'2017-04-21T05:06:17Z'*
*$__timeGroup(dateColumn,'5m')* | Will be replaced by an expression usable in GROUP BY clause. For example, *(extract(epoch from dateColumn)/300)::bigint*300 AS time*
*$__timeGroup(dateColumn,'5m', 0)* | Same as above but with a fill parameter so all null values will be converted to the fill value (all null values would be set to zero using this example).
*$__timeGroup(dateColumn,'5m')* | Will be replaced by an expression usable in GROUP BY clause. For example, *(extract(epoch from dateColumn)/300)::bigint*300*
*$__timeGroup(dateColumn,'5m', 0)* | Same as above but with a fill parameter so missing points in that series will be added by grafana and 0 will be used as value.
*$__timeGroup(dateColumn,'5m', NULL)* | Same as above but NULL will be used as value for missing points.
*$__timeGroup(dateColumn,'5m', previous)* | Same as above but the previous value in that series will be used as fill value if no value has been seen yet NULL will be used (only available in Grafana 5.3+).
*$__timeGroupAlias(dateColumn,'5m')* | Will be replaced identical to $__timeGroup but with an added column alias (only available in Grafana 5.3+).
*$__unixEpochFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name with times represented as unix timestamp. For example, *dateColumn >= 1494410783 AND dateColumn <= 1494497183*
*$__unixEpochFrom()* | Will be replaced by the start of the currently active time selection as unix timestamp. For example, *1494410783*
*$__unixEpochTo()* | Will be replaced by the end of the currently active time selection as unix timestamp. For example, *1494497183*
*$__unixEpochGroup(dateColumn,'5m', [fillmode])* | Same as $__timeGroup but for times stored as unix timestamp (only available in Grafana 5.3+).
*$__unixEpochGroupAlias(dateColumn,'5m', [fillmode])* | Same as above but also adds a column alias (only available in Grafana 5.3+).
We plan to add many more macros. If you have suggestions for what macros you would like to see, please [open an issue](https://github.com/grafana/grafana) in our GitHub repo.
@@ -102,6 +127,7 @@ The resulting table panel:
If you set `Format as` to `Time series`, for use in Graph panel for example, then the query must return a column named `time` that returns either a sql datetime or any numeric datatype representing unix epoch.
Any column except `time` and `metric` is treated as a value column.
You may return a column named `metric` that is used as metric name for the value column.
If you return multiple value columns and a column named `metric` then this column is used as prefix for the series name (only available in Grafana 5.3+).
**Example with `metric` column:**
@@ -285,4 +311,6 @@ datasources:
password: "Password!"
jsonData:
sslmode: "disable" # disable/require/verify-ca/verify-full
postgresVersion: 903 # 903=9.3, 904=9.4, 905=9.5, 906=9.6, 1000=10
timescaledb: false
```
@@ -75,6 +75,32 @@ Name | Description
For details of *metric names*, *label names* and *label values* are please refer to the [Prometheus documentation](http://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
#### Using interval and range variables
> Support for `$__range`, `$__range_s` and `$__range_ms` only available from Grafana v5.3
It's possible to use some global built-in variables in query variables; `$__interval`, `$__interval_ms`, `$__range`, `$__range_s` and `$__range_ms`, see [Global built-in variables](/reference/templating/#global-built-in-variables) for more information. These can be convenient to use in conjunction with the `query_result` function when you need to filter variable queries since
`label_values` function doesn't support queries.
Make sure to set the variable's `refresh` trigger to be `On Time Range Change` to get the correct instances when changing the time range on the dashboard.
**Example usage:**
Populate a variable with the the busiest 5 request instances based on average QPS over the time range shown in the dashboard:
```
Query: query_result(topk(5, sum(rate(http_requests_total[$__range])) by (instance)))
Regex: /"([^"]+)"/
```
Populate a variable with the instances having a certain state over the time range shown in the dashboard, using the more precise `$__range_s`:
```
Query: query_result(max_over_time(<metric>[${__range_s}s]) != <state>)
Regex:
```
### Using variables in queries
There are two syntaxes:
+2 -2
View File
@@ -54,7 +54,7 @@ We utilize a unit abstraction so that Grafana looks great on all screens both sm
> Note: With MaxDataPoint functionality, Grafana can show you the perfect amount of datapoints no matter your resolution or time-range.
Utilize the [Repeating Row functionality](/reference/templating/#utilizing-template-variables-with-repeating-panels-and-repeating-rows) to dynamically create or remove entire Rows (that can be filled with Panels), based on the Template variables selected.
Utilize the [Repeating Rows functionality](/reference/templating/#repeating-rows) to dynamically create or remove entire Rows (that can be filled with Panels), based on the Template variables selected.
Rows can be collapsed by clicking on the Row Title. If you save a Dashboard with a Row collapsed, it will save in that state and will not preload those graphs until the row is expanded.
@@ -72,7 +72,7 @@ Panels like the [Graph](/reference/graph/) panel allow you to graph as many metr
Panels can be made more dynamic by utilizing [Dashboard Templating](/reference/templating/) variable strings within the panel configuration (including queries to your Data Source configured via the Query Editor).
Utilize the [Repeating Panel](/reference/templating/#utilizing-template-variables-with-repeating-panels-and-repeating-rows) functionality to dynamically create or remove Panels based on the [Templating Variables](/reference/templating/#utilizing-template-variables-with-repeating-panels-and-repeating-rows) selected.
Utilize the [Repeating Panel](/reference/templating/#repeating-panels) functionality to dynamically create or remove Panels based on the [Templating Variables](/reference/templating/#repeating-panels) selected.
The time range on Panels is normally what is set in the [Dashboard time picker](/reference/timerange/) but this can be overridden by utilizes [Panel specific time overrides](/reference/timerange/#panel-time-overrides-timeshift).
+29 -1
View File
@@ -13,7 +13,35 @@ weight = 1
# Getting started
This guide will help you get started and acquainted with Grafana. It assumes you have a working Grafana server up and running and have added at least one [Data Source](/features/datasources/).
This guide will help you get started and acquainted with Grafana. It assumes you have a working Grafana server up and running. If not please read the [installation guide](/installation/).
## Logging in for the first time
To run Grafana open your browser and go to http://localhost:3000/. 3000 is the default http port that Grafana listens to if you haven't [configured a different port](/installation/configuration/#http-port).
There you will see the login page. Default username is admin and default password is admin. When you log in for the first time you will be asked to change your password. We strongly encourage you to
follow Grafanas best practices and change the default administrator password. You can later go to user preferences and change your user name.
## How to add a data source
{{< docs-imagebox img="/img/docs/v52/sidemenu-datasource.png" max-width="250px" class="docs-image--right docs-image--no-shadow">}}
Before you create your first dashboard you need to add your data source.
First move your cursor to the cog on the side menu which will show you the configuration menu. If the side menu is not visible click the Grafana icon in the upper left corner. The first item on the configuration menu is data sources, click on that and you'll be taken to the data sources page where you can add and edit data sources. You can also simply click the cog.
Click Add data source and you will come to the settings page of your new data source.
{{< docs-imagebox img="/img/docs/v52/add-datasource.png" max-width="700px" class="docs-image--no-shadow">}}
First, give the data source a Name and then select which Type of data source you'll want to create, see [Supported data sources](/features/datasources/#supported-data-sources/) for more information and how to configure your data source.
{{< docs-imagebox img="/img/docs/v52/datasource-settings.png" max-width="700px" class="docs-image--no-shadow">}}
After you have configuered your data source you are ready to save and test.
## Beginner guides
+46 -15
View File
@@ -14,12 +14,14 @@ weight = -8
Grafana v5.2 brings new features, many enhancements and bug fixes. This article will detail the major new features and enhancements.
* [Elasticsearch alerting]({{< relref "#elasticsearch-alerting" >}}) it's finally here!
* [Cross platform build support]({{< relref "#cross-platform-build-support" >}}) enables native builds of Grafana for many more platforms!
* [Improved Docker image]({{< relref "#improved-docker-image" >}}) with support for docker secrets
* [Prometheus]({{< relref "#prometheus" >}}) with alignment enhancements
* [Alerting]({{< relref "#alerting" >}}) with alert notification channel type for Discord
* [Dashboards & Panels]({{< relref "#dashboards-panels" >}})
- [Elasticsearch alerting]({{< relref "#elasticsearch-alerting" >}}) it's finally here!
- [Native builds for ARM]({{< relref "#native-builds-for-arm" >}}) native builds of Grafana for many more platforms!
- [Improved Docker image]({{< relref "#improved-docker-image" >}}) with support for docker secrets
- [Security]({{< relref "#security" >}}) make your Grafana instance more secure
- [Prometheus]({{< relref "#prometheus" >}}) with alignment enhancements
- [InfluxDB]({{< relref "#influxdb" >}}) now supports the `mode` function
- [Alerting]({{< relref "#alerting" >}}) with alert notification channel type for Discord
- [Dashboards & Panels]({{< relref "#dashboards-panels" >}}) with save & import enhancements
## Elasticsearch alerting
@@ -30,22 +32,37 @@ the most requested features by our community and now it's finally here. Please t
<div class="clearfix"></div>
## Cross platform build support
## Native builds for ARM
Grafana v5.2 brings an improved build pipeline with cross platform support. This enables native builds of Grafana for ARMv7 (x32), ARM64 (x64),
MacOS/Darwin (x64) and Windows (x64) in both stable and nightly builds.
Grafana v5.2 brings an improved build pipeline with cross-platform support. This enables native builds of Grafana for ARMv7 (x32) and ARM64 (x64).
We've been longing for native ARM build support for ages. With the help from our amazing community this is now finally available.
Please try it out and let us know what you think.
We've been longing for native ARM build support for a long time. With the help from our amazing community this is now finally available.
Another great addition with the improved build pipeline is that binaries for MacOS/Darwin (x64) and Windows (x64) are now automatically built and
published for both stable and nightly builds.
## Improved Docker image
The Grafana docker image now includes support for Docker secrets which enables you to supply Grafana with configuration through files. More
The Grafana docker image adds support for Docker secrets which enables you to supply Grafana with configuration through files. More
information in the [Installing using Docker documentation](/installation/docker/#reading-secrets-from-files-support-for-docker-secrets).
## Security
{{< docs-imagebox img="/img/docs/v52/login_change_password.png" max-width="800px" class="docs-image--right" >}}
Starting from Grafana v5.2, when you login with the administrator account using the default password you'll be presented with a form to change the password.
We hope this encourages users to follow Grafana's best practices and change the default administrator password.
<div class="clearfix"></div>
## Prometheus
The Prometheus datasource now aligns the start/end of the query sent to Prometheus with the step, which ensures PromQL expressions with *rate*
functions get consistent results, and thus avoid graphs jumping around on reload.
functions get consistent results, and thus avoids graphs jumping around on reload.
## InfluxDB
The InfluxDB datasource now includes support for the *mode* function which returns the most frequent value in a list of field values.
## Alerting
@@ -57,13 +74,27 @@ By popular demand Grafana now includes support for an alert notification channel
{{< docs-imagebox img="/img/docs/v52/dashboard_save_modal.png" max-width="800px" class="docs-image--right" >}}
Starting from Grafana v5.2 a modified time range or variable are no longer saved by default. To save a modified
time range or variable you'll need to actively select that when saving a dashboard, see screenshot.
This should hopefully make it easier to have sane defaults of time and variables in dashboards and make it more explicit
Starting from Grafana v5.2, a modified time range or variable are no longer saved by default. To save a modified
time range or variable, you'll need to actively select that when saving a dashboard, see screenshot.
This should hopefully make it easier to have sane defaults for time and variables in dashboards and make it more explicit
when you actually want to overwrite those settings.
<div class="clearfix"></div>
### Import dashboard enhancements
{{< docs-imagebox img="/img/docs/v52/dashboard_import.png" max-width="800px" class="docs-image--right" >}}
Grafana v5.2 adds support for specifying an existing folder or creating a new one when importing a dashboard - a long-awaited feature since
Grafana v5.0 introduced support for dashboard folders and permissions. The import dashboard page has also got some general improvements
and should now make it more clear if a possible import will overwrite an existing dashboard, or not.
This release also adds some improvements for those users only having editor or admin permissions in certain folders. The links to
*Create Dashboard* and *Import Dashboard* are now available in the side navigation, in dashboard search and on the manage dashboards/folder page for a
user that has editor role in an organization or the edit permission in at least one folder.
<div class="clearfix"></div>
## Changelog
Checkout the [CHANGELOG.md](https://github.com/grafana/grafana/blob/master/CHANGELOG.md) file for a complete list
+15 -15
View File
@@ -36,11 +36,10 @@ HTTP/1.1 200
Content-Type: application/json
{
"DEFAULT":
{
"app_mode":"production"},
"analytics":
{
"DEFAULT": {
"app_mode":"production"
},
"analytics": {
"google_analytics_ua_id":"",
"reporting_enabled":"false"
},
@@ -195,15 +194,16 @@ HTTP/1.1 200
Content-Type: application/json
{
"user_count":2,
"org_count":1,
"dashboard_count":4,
"db_snapshot_count":2,
"db_tag_count":6,
"data_source_count":1,
"playlist_count":1,
"starred_db_count":2,
"grafana_admin_count":2
"users":2,
"orgs":1,
"dashboards":4,
"snapshots":2,
"tags":6,
"datasources":1,
"playlists":1,
"stars":2,
"alerts":2,
"activeUsers":1
}
```
@@ -340,4 +340,4 @@ HTTP/1.1 200
Content-Type: application/json
{state: "new state", message: "alerts pause/un paused", "alertsAffected": 100}
```
```
+36 -13
View File
@@ -50,6 +50,7 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```http
HTTP/1.1 200
Content-Type: application/json
```
## Get one alert
@@ -59,7 +60,6 @@ Content-Type: application/json
**Example Request**:
```http
```http
GET /api/alerts/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
@@ -87,6 +87,7 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
**Example Request**:
```http
POST /api/alerts/1/pause HTTP/1.1
Accept: application/json
Content-Type: application/json
@@ -147,6 +148,7 @@ JSON Body Schema:
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
@@ -178,6 +180,7 @@ JSON Body Schema:
```
## Update alert notification
`PUT /api/alert-notifications/1`
**Example Request**:
@@ -205,14 +208,21 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
**Example Request**:
```http
**Example Request**:
```http
DELETE /api/alert-notifications/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
DELETE /api/alert-notifications/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
]
```
## Create alert notification
@@ -233,6 +243,7 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
"name": "new alert notification", //Required
"type": "email", //Required
"isDefault": false,
"sendReminder": false,
"settings": {
"addresses": "carl@grafana.com;dev@grafana.com"
}
@@ -244,14 +255,18 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```http
HTTP/1.1 200
Content-Type: application/json
{
"id": 1,
"name": "new alert notification",
"type": "email",
"isDefault": false,
"settings": { addresses: "carl@grafana.com;dev@grafana.com"} }
"created": "2017-01-01 12:34",
"updated": "2017-01-01 12:34"
"sendReminder": false,
"settings": {
"addresses": "carl@grafana.com;dev@grafana.com"
},
"created": "2018-04-23T14:44:09+02:00",
"updated": "2018-08-20T15:47:49+02:00"
}
```
@@ -272,6 +287,8 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
"name": "new alert notification", //Required
"type": "email", //Required
"isDefault": false,
"sendReminder": true,
"frequency": "15m",
"settings": {
"addresses: "carl@grafana.com;dev@grafana.com"
}
@@ -283,12 +300,17 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```http
HTTP/1.1 200
Content-Type: application/json
{
"id": 1,
"name": "new alert notification",
"type": "email",
"isDefault": false,
"settings": { addresses: "carl@grafana.com;dev@grafana.com"} }
"sendReminder": true,
"frequency": "15m",
"settings": {
"addresses": "carl@grafana.com;dev@grafana.com"
},
"created": "2017-01-01 12:34",
"updated": "2017-01-01 12:34"
}
@@ -312,6 +334,7 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```http
HTTP/1.1 200
Content-Type: application/json
{
"message": "Notification deleted"
}
+9 -1
View File
@@ -5,7 +5,7 @@ keywords = ["grafana", "http", "documentation", "api", "authentication"]
aliases = ["/http_api/authentication/"]
type = "docs"
[menu.docs]
name = "Authentication"
name = "Authentication HTTP API"
parent = "http_api"
+++
@@ -44,6 +44,14 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
The `Authorization` header value should be `Bearer <your api key>`.
The API Token can also be passed as a Basic authorization password with the special username `api_key`:
curl example:
```bash
?curl http://api_key:eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk@localhost:3000/api/org
{"id":1,"name":"Main Org."}
```
# Auth HTTP resources / actions
## Api Keys
+1 -1
View File
@@ -85,7 +85,7 @@ Status Codes:
## Get dashboard by uid
`GET /api/dashboards/uid/:uid`
`GET /api/dashboards/uid/:uid`
Will return the dashboard given the dashboard unique identifier (uid).
+7 -3
View File
@@ -19,6 +19,10 @@ The unique identifier (uid) of a folder can be used for uniquely identify folder
The uid can have a maximum length of 40 characters.
## A note about the General folder
The General folder (id=0) is special and is not part of the Folder API which means
that you cannot use this API for retrieving information about the General folder.
## Get all folders
@@ -219,7 +223,7 @@ Status Codes:
Status Codes:
- **200** Found
- **200** Found
- **401** Unauthorized
- **403** Access Denied
- **404** Folder not found
@@ -273,14 +277,14 @@ Status Codes:
## Get folder by id
`GET /api/folders/:id`
`GET /api/folders/id/:id`
Will return the folder identified by id.
**Example Request**:
```http
GET /api/folders/1 HTTP/1.1
GET /api/folders/id/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
+192 -178
View File
@@ -12,7 +12,13 @@ parent = "http_api"
# Organisation API
## Get current Organisation
The Organisation HTTP API is divided in two resources, `/api/org` (current organisation)
and `/api/orgs` (admin organisations). One big difference between these are that
the admin of all organisations API only works with basic authentication, see [Admin Organisations API](#admin-organisations-api) for more information.
## Current Organisation API
### Get current Organisation
`GET /api/org/`
@@ -37,135 +43,7 @@ Content-Type: application/json
`GET /api/org/users`
**Example Request**:
```http
GET /api/orgs/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
Note: The api will only work when you pass the admin name and password
to the request http url, like http://admin:admin@localhost:3000/api/orgs/1
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
## Get Organisation by Name
`GET /api/orgs/name/:orgName`
**Example Request**:
```http
GET /api/orgs/name/Main%20Org%2E HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
Note: The api will only work when you pass the admin name and password
to the request http url, like http://admin:admin@localhost:3000/api/orgs/name/Main%20Org%2E
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
## Create Organisation
`POST /api/orgs`
**Example Request**:
```http
POST /api/orgs HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
Note: The api will work in the following two ways
1) Need to set GF_USERS_ALLOW_ORG_CREATE=true
2) Set the config users.allow_org_create to true in ini file
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
## Update current Organisation
`PUT /api/org`
**Example Request**:
```http
PUT /api/org HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
## Get all users within the actual organisation
`GET /api/org/users`
**Example Request**:
```http
GET /api/org/users HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
## Add a new user to the actual organisation
`POST /api/org/users`
Adds a global user to the actual organisation.
**Example Request**:
```http
POST /api/org/users HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
**Example Request**:
```http
GET /api/org/users HTTP/1.1
@@ -195,36 +73,7 @@ Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
`DELETE /api/org/users/:userId`
**Example Request**:
```http
DELETE /api/org/users/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
# Organisations
## Search all Organisations
`GET /api/orgs`
**Example Request**:
```http
GET /api/orgs HTTP/1.1
Accept: application/json
**Example Response**:
```http
@@ -250,7 +99,7 @@ Content-Type: application/json
```http
HTTP/1.1 200
Content-Type: application/json
Content-Type: application/json
```
@@ -272,19 +121,181 @@ Content-Type: application/json
```http
HTTP/1.1 200
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
Content-Type: application/json
```
### Add a new user to the current organisation
`POST /api/org/users`
Adds a global user to the current organisation.
**Example Request**:
```http
POST /api/org/users HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
## Admin Organisations API
The Admin Organisations HTTP API does not currently work with an API Token. API Tokens are currently
only linked to an organization and an organization role. They cannot be given the permission of server
admin, only users can be given that permission. So in order to use these API calls you will have to
use Basic Auth and the Grafana user must have the Grafana Admin permission (The default admin user
is called `admin` and has permission to use this API).
### Get Organisation by Id
`GET /api/orgs/:orgId`
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
GET /api/orgs/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
### Get Organisation by Name
`GET /api/orgs/name/:orgName`
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
GET /api/orgs/name/Main%20Org%2E HTTP/1.1
Accept: application/json
Content-Type: application/json
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
### Create Organisation
`POST /api/orgs`
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
POST /api/orgs HTTP/1.1
Accept: application/json
Content-Type: application/json
```
Note: The api will work in the following two ways
1) Need to set GF_USERS_ALLOW_ORG_CREATE=true
2) Set the config users.allow_org_create to true in ini file
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
### Search all Organisations
`GET /api/orgs`
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
GET /api/orgs HTTP/1.1
Accept: application/json
Content-Type: application/json
```
Note: The api will only work when you pass the admin name and password
to the request http url, like http://admin:admin@localhost:3000/api/orgs
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
### Update Organisation
`PUT /api/orgs/:orgId`
Update Organisation, fields *Address 1*, *Address 2*, *City* are not implemented yet.
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
PUT /api/orgs/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
### Delete Organisation
`DELETE /api/orgs/:orgId`
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
DELETE /api/orgs/1 HTTP/1.1
Accept: application/json
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
```
### Get Users in Organisation
`GET /api/orgs/:orgId/users`
@@ -303,11 +314,12 @@ Content-Type: application/json
**Example Response**:
Content-Type: application/json
```http
HTTP/1.1 200
Content-Type: application/json
[
```
### Add User in Organisation
`POST /api/orgs/:orgId/users`
@@ -315,7 +327,6 @@ Update Organisation, fields *Address 1*, *Address 2*, *City* are not implemented
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
Accept: application/json
```http
POST /api/orgs/1/users HTTP/1.1
@@ -331,16 +342,17 @@ Content-Type: application/json
Content-Type: application/json
```
## Update Users in Organisation
### Update Users in Organisation
`PATCH /api/orgs/:orgId/users/:userId`
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
PATCH /api/orgs/1/users/2 HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Type: application/json
@@ -352,17 +364,18 @@ Content-Type: application/json
HTTP/1.1 200
Content-Type: application/json
```
### Delete User in Organisation
`DELETE /api/orgs/:orgId/users/:userId`
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
DELETE /api/orgs/1/users/2 HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Type: application/json
```
@@ -384,25 +397,24 @@ Content-Type: application/json
]
```
## Add User in Organisation
### Add User in Organisation
`POST /api/orgs/:orgId/users`
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
POST /api/orgs/1/users HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"loginOrEmail":"user",
"role":"Viewer"
}
```
Note: The api will only work when you pass the admin name and password
to the request http url, like http://admin:admin@localhost:3000/api/orgs/1/users
**Example Response**:
@@ -413,17 +425,18 @@ Content-Type: application/json
{"message":"User added to organization"}
```
## Update Users in Organisation
### Update Users in Organisation
`PATCH /api/orgs/:orgId/users/:userId`
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
PATCH /api/orgs/1/users/2 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"role":"Admin"
@@ -439,17 +452,18 @@ Content-Type: application/json
{"message":"Organization user updated"}
```
## Delete User in Organisation
### Delete User in Organisation
`DELETE /api/orgs/:orgId/users/:userId`
Only works with Basic Authentication (username and password), see [introduction](#admin-organisations-api).
**Example Request**:
```http
DELETE /api/orgs/1/users/2 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
+286
View File
@@ -0,0 +1,286 @@
+++
title = "Playlist HTTP API "
description = "Playlist Admin HTTP API"
keywords = ["grafana", "http", "documentation", "api", "playlist"]
aliases = ["/http_api/playlist/"]
type = "docs"
[menu.docs]
name = "Playlist"
parent = "http_api"
+++
# Playlist API
## Search Playlist
`GET /api/playlists`
Get all existing playlist for the current organization using pagination
**Example Request**:
```bash
GET /api/playlists HTTP/1.1
Accept: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
Querystring Parameters:
These parameters are used as querystring parameters.
- **query** - Limit response to playlist having a name like this value.
- **limit** - Limit response to *X* number of playlist.
**Example Response**:
```json
HTTP/1.1 200
Content-Type: application/json
[
{
"id": 1,
"name": "my playlist",
"interval": "5m"
}
]
```
## Get one playlist
`GET /api/playlists/:id`
**Example Request**:
```bash
GET /api/playlists/1 HTTP/1.1
Accept: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```json
HTTP/1.1 200
Content-Type: application/json
{
"id" : 1,
"name": "my playlist",
"interval": "5m",
"orgId": "my org",
"items": [
{
"id": 1,
"playlistId": 1,
"type": "dashboard_by_id",
"value": "3",
"order": 1,
"title":"my third dasboard"
},
{
"id": 2,
"playlistId": 1,
"type": "dashboard_by_tag",
"value": "myTag",
"order": 2,
"title":"my other dasboard"
}
]
}
```
## Get Playlist items
`GET /api/playlists/:id/items`
**Example Request**:
```bash
GET /api/playlists/1/items HTTP/1.1
Accept: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```json
HTTP/1.1 200
Content-Type: application/json
[
{
"id": 1,
"playlistId": 1,
"type": "dashboard_by_id",
"value": "3",
"order": 1,
"title":"my third dasboard"
},
{
"id": 2,
"playlistId": 1,
"type": "dashboard_by_tag",
"value": "myTag",
"order": 2,
"title":"my other dasboard"
}
]
```
## Get Playlist dashboards
`GET /api/playlists/:id/dashboards`
**Example Request**:
```bash
GET /api/playlists/1/dashboards HTTP/1.1
Accept: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```json
HTTP/1.1 200
Content-Type: application/json
[
{
"id": 3,
"title": "my third dasboard",
"order": 1,
},
{
"id": 5,
"title":"my other dasboard"
"order": 2,
}
]
```
## Create a playlist
`POST /api/playlists/`
**Example Request**:
```bash
PUT /api/playlists/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"name": "my playlist",
"interval": "5m",
"items": [
{
"type": "dashboard_by_id",
"value": "3",
"order": 1,
"title":"my third dasboard"
},
{
"type": "dashboard_by_tag",
"value": "myTag",
"order": 2,
"title":"my other dasboard"
}
]
}
```
**Example Response**:
```json
HTTP/1.1 200
Content-Type: application/json
{
"id": 1,
"name": "my playlist",
"interval": "5m"
}
```
## Update a playlist
`PUT /api/playlists/:id`
**Example Request**:
```bash
PUT /api/playlists/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"name": "my playlist",
"interval": "5m",
"items": [
{
"playlistId": 1,
"type": "dashboard_by_id",
"value": "3",
"order": 1,
"title":"my third dasboard"
},
{
"playlistId": 1,
"type": "dashboard_by_tag",
"value": "myTag",
"order": 2,
"title":"my other dasboard"
}
]
}
```
**Example Response**:
```json
HTTP/1.1 200
Content-Type: application/json
{
"id" : 1,
"name": "my playlist",
"interval": "5m",
"orgId": "my org",
"items": [
{
"id": 1,
"playlistId": 1,
"type": "dashboard_by_id",
"value": "3",
"order": 1,
"title":"my third dasboard"
},
{
"id": 2,
"playlistId": 1,
"type": "dashboard_by_tag",
"value": "myTag",
"order": 2,
"title":"my other dasboard"
}
]
}
```
## Delete a playlist
`DELETE /api/playlists/:id`
**Example Request**:
```bash
DELETE /api/playlists/1 HTTP/1.1
Accept: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```json
HTTP/1.1 200
Content-Type: application/json
{}
```
+33
View File
@@ -363,6 +363,39 @@ Content-Type: application/json
]
```
## Teams that the actual User is member of
`GET /api/user/teams`
Return a list of all teams that the current user is member of.
**Example Request**:
```http
GET /api/user/teams HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
[
{
"id": 1,
"orgId": 1,
"name": "MyTestTeam",
"email": "",
"avatarUrl": "\/avatar\/3f49c15916554246daa714b9bd0ee398",
"memberCount": 1
}
]
```
## Star a dashboard
`POST /api/user/stars/dashboard/:dashboardId`
+3 -3
View File
@@ -60,9 +60,9 @@ aliases = ["v1.1", "guides/reference/admin"]
<h4>Provisioning</h4>
<p>A guide to help you automate your Grafana setup & configuration.</p>
</a>
<a href="{{< relref "guides/whats-new-in-v5.md" >}}" class="nav-cards__item nav-cards__item--guide">
<h4>What's new in v5.0</h4>
<p>Article on all the new cool features and enhancements in v5.0</p>
<a href="{{< relref "guides/whats-new-in-v5-2.md" >}}" class="nav-cards__item nav-cards__item--guide">
<h4>What's new in v5.2</h4>
<p>Article on all the new cool features and enhancements in v5.2</p>
</a>
<a href="{{< relref "tutorials/screencasts.md" >}}" class="nav-cards__item nav-cards__item--guide">
<h4>Screencasts</h4>
+2 -2
View File
@@ -26,7 +26,7 @@ Otherwise Grafana will not behave correctly. See example below.
## Examples
Here are some example configurations for running Grafana behind a reverse proxy.
### Grafana configuration (ex http://foo.bar.com)
### Grafana configuration (ex http://foo.bar)
```bash
[server]
@@ -47,7 +47,7 @@ server {
}
```
### Examples with **sub path** (ex http://foo.bar.com/grafana)
### Examples with **sub path** (ex http://foo.bar/grafana)
#### Grafana configuration with sub path
```bash
+43 -370
View File
@@ -15,6 +15,8 @@ weight = 1
The Grafana back-end has a number of configuration options that can be
specified in a `.ini` configuration file or specified using environment variables.
> **Note.** Grafana needs to be restarted for any configuration changes to take effect.
## Comments In .ini Files
Semicolons (the `;` char) are the standard way to comment out lines in a `.ini` file.
@@ -80,6 +82,11 @@ Path to where Grafana stores the sqlite3 database (if used), file based
sessions (if used), and other data. This path is usually specified via
command line in the init.d script or the systemd service file.
### temp_data_lifetime
How long temporary images in `data` directory should be kept. Defaults to: `24h`. Supported modifiers: `h` (hours),
`m` (minutes), for example: `168h`, `30m`, `10h30m`. Use `0` to never clean up temporary files.
### logs
Path to where Grafana will store logs. This path is usually specified via
@@ -174,7 +181,7 @@ embedded database (included in the main Grafana binary).
### url
Use either URL or or the other fields below to configure the database
Use either URL or the other fields below to configure the database
Example: `mysql://user:secret@host:port/database`
### type
@@ -188,9 +195,9 @@ will be stored.
### host
Only applicable to MySQL or Postgres. Includes IP or hostname and port.
Only applicable to MySQL or Postgres. Includes IP or hostname and port or in case of unix sockets the path to it.
For example, for MySQL running on the same host as Grafana: `host =
127.0.0.1:3306`
127.0.0.1:3306` or with unix sockets: `host = /var/run/mysqld/mysqld.sock`
### name
@@ -259,7 +266,8 @@ The number of days the keep me logged in / remember me cookie lasts.
### secret_key
Used for signing keep me logged in / remember me cookies.
Used for signing some datasource settings like secrets and passwords. Cannot be changed without requiring an update
to datasource settings to re-encode them.
### disable_gravatar
@@ -291,6 +299,12 @@ Set to `true` to automatically add new users to the main organization
(id 1). When set to `false`, new users will automatically cause a new
organization to be created for that new user.
### auto_assign_org_id
Set this value to automatically add new users to the provided org.
This requires `auto_assign_org` to be set to `true`. Please make sure
that this organization does already exists.
### auto_assign_org_role
The role new users will be assigned for the main organization (if the
@@ -308,368 +322,17 @@ Defaults to `false`.
## [auth]
### disable_login_form
Set to true to disable (hide) the login form, useful if you use OAuth, defaults to false.
### disable_signout_menu
Set to true to disable the signout link in the side menu. useful if you use auth.proxy, defaults to false.
<hr>
## [auth.anonymous]
### enabled
Set to `true` to enable anonymous access. Defaults to `false`
### org_name
Set the organization name that should be used for anonymous users. If
you change your organization name in the Grafana UI this setting needs
to be updated to match the new name.
### org_role
Specify role for anonymous users. Defaults to `Viewer`, other valid
options are `Editor` and `Admin`.
## [auth.github]
You need to create a GitHub OAuth application (you find this under the GitHub
settings page). When you create the application you will need to specify
a callback URL. Specify this as callback:
```bash
http://<my_grafana_server_name_or_ip>:<grafana_server_port>/login/github
```
This callback URL must match the full HTTP address that you use in your
browser to access Grafana, but with the prefix path of `/login/github`.
When the GitHub OAuth application is created you will get a Client ID and a
Client Secret. Specify these in the Grafana configuration file. For
example:
```bash
[auth.github]
enabled = true
allow_sign_up = true
client_id = YOUR_GITHUB_APP_CLIENT_ID
client_secret = YOUR_GITHUB_APP_CLIENT_SECRET
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
team_ids =
allowed_organizations =
```
Restart the Grafana back-end. You should now see a GitHub login button
on the login page. You can now login or sign up with your GitHub
accounts.
You may allow users to sign-up via GitHub authentication by setting the
`allow_sign_up` option to `true`. When this option is set to `true`, any
user successfully authenticating via GitHub authentication will be
automatically signed up.
### team_ids
Require an active team membership for at least one of the given teams on
GitHub. If the authenticated user isn't a member of at least one of the
teams they will not be able to register or authenticate with your
Grafana instance. For example:
```bash
[auth.github]
enabled = true
client_id = YOUR_GITHUB_APP_CLIENT_ID
client_secret = YOUR_GITHUB_APP_CLIENT_SECRET
scopes = user:email,read:org
team_ids = 150,300
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
allow_sign_up = true
```
### allowed_organizations
Require an active organization membership for at least one of the given
organizations on GitHub. If the authenticated user isn't a member of at least
one of the organizations they will not be able to register or authenticate with
your Grafana instance. For example
```bash
[auth.github]
enabled = true
client_id = YOUR_GITHUB_APP_CLIENT_ID
client_secret = YOUR_GITHUB_APP_CLIENT_SECRET
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
allow_sign_up = true
# space-delimited organization names
allowed_organizations = github google
```
<hr>
## [auth.google]
First, you need to create a Google OAuth Client:
1. Go to https://console.developers.google.com/apis/credentials
2. Click the 'Create Credentials' button, then click 'OAuth Client ID' in the
menu that drops down
3. Enter the following:
- Application Type: Web Application
- Name: Grafana
- Authorized Javascript Origins: https://grafana.mycompany.com
- Authorized Redirect URLs: https://grafana.mycompany.com/login/google
Replace https://grafana.mycompany.com with the URL of your Grafana instance.
4. Click Create
5. Copy the Client ID and Client Secret from the 'OAuth Client' modal
Specify the Client ID and Secret in the Grafana configuration file. For example:
```bash
[auth.google]
enabled = true
client_id = CLIENT_ID
client_secret = CLIENT_SECRET
scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
auth_url = https://accounts.google.com/o/oauth2/auth
token_url = https://accounts.google.com/o/oauth2/token
allowed_domains = mycompany.com mycompany.org
allow_sign_up = true
```
Restart the Grafana back-end. You should now see a Google login button
on the login page. You can now login or sign up with your Google
accounts. The `allowed_domains` option is optional, and domains were separated by space.
You may allow users to sign-up via Google authentication by setting the
`allow_sign_up` option to `true`. When this option is set to `true`, any
user successfully authenticating via Google authentication will be
automatically signed up.
## [auth.generic_oauth]
This option could be used if have your own oauth service.
This callback URL must match the full HTTP address that you use in your
browser to access Grafana, but with the prefix path of `/login/generic_oauth`.
```bash
[auth.generic_oauth]
enabled = true
client_id = YOUR_APP_CLIENT_ID
client_secret = YOUR_APP_CLIENT_SECRET
scopes =
auth_url =
token_url =
api_url =
allowed_domains = mycompany.com mycompany.org
allow_sign_up = true
```
Set api_url to the resource that returns [OpenID UserInfo](https://connect2id.com/products/server/docs/api/userinfo) compatible information.
### Set up oauth2 with Okta
First set up Grafana as an OpenId client "webapplication" in Okta. Then set the Base URIs to `https://<grafana domain>/` and set the Login redirect URIs to `https://<grafana domain>/login/generic_oauth`.
Finally set up the generic oauth module like this:
```bash
[auth.generic_oauth]
name = Okta
enabled = true
scopes = openid profile email
client_id = <okta application Client ID>
client_secret = <okta application Client Secret>
auth_url = https://<okta domain>/oauth2/v1/authorize
token_url = https://<okta domain>/oauth2/v1/token
api_url = https://<okta domain>/oauth2/v1/userinfo
```
### Set up oauth2 with Bitbucket
```bash
[auth.generic_oauth]
name = BitBucket
enabled = true
allow_sign_up = true
client_id = <client id>
client_secret = <client secret>
scopes = account email
auth_url = https://bitbucket.org/site/oauth2/authorize
token_url = https://bitbucket.org/site/oauth2/access_token
api_url = https://api.bitbucket.org/2.0/user
team_ids =
allowed_organizations =
```
### Set up oauth2 with OneLogin
1. Create a new Custom Connector with the following settings:
- Name: Grafana
- Sign On Method: OpenID Connect
- Redirect URI: `https://<grafana domain>/login/generic_oauth`
- Signing Algorithm: RS256
- Login URL: `https://<grafana domain>/login/generic_oauth`
then:
2. Add an App to the Grafana Connector:
- Display Name: Grafana
then:
3. Under the SSO tab on the Grafana App details page you'll find the Client ID and Client Secret.
Your OneLogin Domain will match the url you use to access OneLogin.
Configure Grafana as follows:
```bash
[auth.generic_oauth]
name = OneLogin
enabled = true
allow_sign_up = true
client_id = <client id>
client_secret = <client secret>
scopes = openid email name
auth_url = https://<onelogin domain>.onelogin.com/oidc/auth
token_url = https://<onelogin domain>.onelogin.com/oidc/token
api_url = https://<onelogin domain>.onelogin.com/oidc/me
team_ids =
allowed_organizations =
```
### Set up oauth2 with Auth0
1. Create a new Client in Auth0
- Name: Grafana
- Type: Regular Web Application
2. Go to the Settings tab and set:
- Allowed Callback URLs: `https://<grafana domain>/login/generic_oauth`
3. Click Save Changes, then use the values at the top of the page to configure Grafana:
```bash
[auth.generic_oauth]
enabled = true
allow_sign_up = true
team_ids =
allowed_organizations =
name = Auth0
client_id = <client id>
client_secret = <client secret>
scopes = openid profile email
auth_url = https://<domain>/authorize
token_url = https://<domain>/oauth/token
api_url = https://<domain>/userinfo
```
### Set up oauth2 with Azure Active Directory
1. Log in to portal.azure.com and click "Azure Active Directory" in the side menu, then click the "Properties" sub-menu item.
2. Copy the "Directory ID", this is needed for setting URLs later
3. Click "App Registrations" and add a new application registration:
- Name: Grafana
- Application type: Web app / API
- Sign-on URL: `https://<grafana domain>/login/generic_oauth`
4. Click the name of the new application to open the application details page.
5. Note down the "Application ID", this will be the OAuth client id.
6. Click "Settings", then click "Keys" and add a new entry under Passwords
- Key Description: Grafana OAuth
- Duration: Never Expires
7. Click Save then copy the key value, this will be the OAuth client secret.
8. Configure Grafana as follows:
```bash
[auth.generic_oauth]
name = Azure AD
enabled = true
allow_sign_up = true
client_id = <application id>
client_secret = <key value>
scopes = openid email name
auth_url = https://login.microsoftonline.com/<directory id>/oauth2/authorize
token_url = https://login.microsoftonline.com/<directory id>/oauth2/token
api_url =
team_ids =
allowed_organizations =
```
<hr>
## [auth.basic]
### enabled
When enabled is `true` (default) the http api will accept basic authentication.
<hr>
## [auth.ldap]
### enabled
Set to `true` to enable LDAP integration (default: `false`)
### config_file
Path to the LDAP specific configuration file (default: `/etc/grafana/ldap.toml`)
### allow_sign_up
Allow sign up should almost always be true (default) to allow new Grafana users to be created (if ldap authentication is ok). If set to
false only pre-existing Grafana users will be able to login (if ldap authentication is ok).
> For details on LDAP Configuration, go to the [LDAP Integration]({{< relref "ldap.md" >}}) page.
<hr>
## [auth.proxy]
This feature allows you to handle authentication in a http reverse proxy.
### enabled
Defaults to `false`
### header_name
Defaults to X-WEBAUTH-USER
#### header_property
Defaults to username but can also be set to email
### auto_sign_up
Set to `true` to enable auto sign up of users who do not exist in Grafana DB. Defaults to `true`.
### whitelist
Limit where auth proxy requests come from by configuring a list of IP addresses. This can be used to prevent users spoofing the X-WEBAUTH-USER header.
### headers
Used to define additional headers for `Name`, `Email` and/or `Login`, for example if the user's name is sent in the X-WEBAUTH-NAME header and their email address in the X-WEBAUTH-EMAIL header, set `headers = Name:X-WEBAUTH-NAME Email:X-WEBAUTH-EMAIL`.
<hr>
Grafana provides many ways to authenticate users. The docs for authentication has been split in to many different pages
below.
- [Authentication Overview]({{< relref "auth/overview.md" >}}) (anonymous access options, hide login and more)
- [Google OAuth]({{< relref "auth/google.md" >}}) (auth.google)
- [GitHub OAuth]({{< relref "auth/github.md" >}}) (auth.github)
- [Gitlab OAuth]({{< relref "auth/gitlab.md" >}}) (auth.gitlab)
- [Generic OAuth]({{< relref "auth/generic-oauth.md" >}}) (auth.generic_oauth, okta2, auth0, bitbucket, azure)
- [Basic Authentication]({{< relref "auth/overview.md" >}}) (auth.basic)
- [LDAP Authentication]({{< relref "auth/ldap.md" >}}) (auth.ldap)
- [Auth Proxy]({{< relref "auth/auth-proxy.md" >}}) (auth.proxy)
## [session]
@@ -684,9 +347,9 @@ session provider you have configured.
- **file:** session file path, e.g. `data/sessions`
- **mysql:** go-sql-driver/mysql dsn config string, e.g. `user:password@tcp(127.0.0.1:3306)/database_name`
- **postgres:** ex: user=a password=b host=localhost port=5432 dbname=c sslmode=verify-full
- **memcache:** ex: 127.0.0.1:11211
- **redis:** ex: `addr=127.0.0.1:6379,pool_size=100,prefix=grafana`
- **postgres:** ex: `user=a password=b host=localhost port=5432 dbname=c sslmode=verify-full`
- **memcache:** ex: `127.0.0.1:11211`
- **redis:** ex: `addr=127.0.0.1:6379,pool_size=100,prefix=grafana`. For unix socket, use for example: `network=unix,addr=/var/run/redis/redis.sock,pool_size=100,db=grafana`
Postgres valid `sslmode` are `disable`, `require`, `verify-ca`, and `verify-full` (default).
@@ -852,7 +515,7 @@ Secret key. e.g. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Url to where Grafana will send PUT request with images
### public_url
Optional parameter. Url to send to users in notifications, directly appended with the resulting uploaded file name.
Optional parameter. Url to send to users in notifications. If the string contains the sequence ${file}, it will be replaced with the uploaded filename. Otherwise, the file name will be appended to the path part of the url, leaving any query string unchanged.
### username
basic auth username
@@ -893,3 +556,13 @@ Defaults to true. Set to false to disable alerting engine and hide Alerting from
### execute_alerts
Makes it possible to turn off alert rule execution.
### error_or_timeout
> Available in 5.3 and above
Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state)
### nodata_or_nullvalues
> Available in 5.3 and above
Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
+15 -10
View File
@@ -15,10 +15,9 @@ weight = 1
Description | Download
------------ | -------------
Stable for Debian-based Linux | [grafana_5.1.3_amd64.deb](https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.1.3_amd64.deb)
<!--
Beta for Debian-based Linux | [grafana_5.1.0-beta1_amd64.deb](https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.1.0-beta1_amd64.deb)
-->
Stable for Debian-based Linux | [x86-64](https://grafana.com/grafana/download?platform=linux)
Stable for Debian-based Linux | [ARM64](https://grafana.com/grafana/download?platform=arm)
Stable for Debian-based Linux | [ARMv7](https://grafana.com/grafana/download?platform=arm)
Read [Upgrading Grafana]({{< relref "installation/upgrading.md" >}}) for tips and guidance on updating an existing
installation.
@@ -27,17 +26,18 @@ installation.
```bash
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.1.3_amd64.deb
wget <debian package url>
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_5.1.3_amd64.deb
sudo dpkg -i grafana_5.1.4_amd64.deb
```
<!-- ## Install Latest Beta
Example:
```bash
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.1.0-beta1_amd64.deb
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.1.4_amd64.deb
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_5.1.0-beta1_amd64.deb
``` -->
sudo dpkg -i grafana_5.1.4_amd64.deb
```
## APT Repository
@@ -166,3 +166,8 @@ To configure Grafana add a configuration file named `custom.ini` to the
Start Grafana by executing `./bin/grafana-server web`. The `grafana-server`
binary needs the working directory to be the root install directory (where the
binary and the `public` folder is located).
## Logging in for the first time
To run Grafana open your browser and go to http://localhost:3000/. 3000 is the default http port that Grafana listens to if you haven't [configured a different port](/installation/configuration/#http-port).
Then follow the instructions [here](/guides/getting_started/).
+32 -9
View File
@@ -20,7 +20,7 @@ $ docker run -d -p 3000:3000 grafana/grafana
## Configuration
All options defined in conf/grafana.ini can be overridden using environment
All options defined in `conf/grafana.ini` can be overridden using environment
variables by using the syntax `GF_<SectionName>_<KeyName>`.
For example:
@@ -38,6 +38,21 @@ The back-end web server has a number of configuration options. Go to the
[Configuration]({{< relref "configuration.md" >}}) page for details on all
those options.
> For any changes to `conf/grafana.ini` (or corresponding environment variables) to take effect you need to restart Grafana by restarting the Docker container.
### Default Paths
The following settings are hard-coded when launching the Grafana Docker container and can only be overridden using environment variables, not in `conf/grafana.ini`.
Setting | Default value
----------------------|---------------------------
GF_PATHS_CONFIG | /etc/grafana/grafana.ini
GF_PATHS_DATA | /var/lib/grafana
GF_PATHS_HOME | /usr/share/grafana
GF_PATHS_LOGS | /var/log/grafana
GF_PATHS_PLUGINS | /var/lib/grafana/plugins
GF_PATHS_PROVISIONING | /etc/grafana/provisioning
## Running a Specific Version of Grafana
```bash
@@ -49,10 +64,13 @@ $ docker run \
grafana/grafana:5.1.0
```
## Running of the master branch
## Running the master branch
For every successful commit we publish a Grafana container to [`grafana/grafana`](https://hub.docker.com/r/grafana/grafana/tags/) and [`grafana/grafana-dev`](https://hub.docker.com/r/grafana/grafana-dev/tags/). In `grafana/grafana` container we will always overwrite the `master` tag with the latest version. In `grafana/grafana-dev` we will include
the git commit in the tag. If you run Grafana master in production we **strongly** recommend that you use the later since different machines might run different version of grafana if they pull the master tag at different times.
For every successful build of the master branch we update the `grafana/grafana:master` tag and create a new tag `grafana/grafana-dev:master-<commit hash>` with the hash of the git commit that was built. This means you can always get the latest version of Grafana.
When running Grafana master in production we **strongly** recommend that you use the `grafana/grafana-dev:master-<commit hash>` tag as that will guarantee that you use a specific version of Grafana instead of whatever was the most recent commit at the time.
For a list of available tags, check out [grafana/grafana](https://hub.docker.com/r/grafana/grafana/tags/) and [grafana/grafana-dev](https://hub.docker.com/r/grafana/grafana-dev/tags/).
## Installing Plugins for Grafana
@@ -137,16 +155,16 @@ docker run -d --user $ID --volume "$PWD/data:/var/lib/grafana" -p 3000:3000 graf
## Reading secrets from files (support for Docker Secrets)
> Available in v5.2.0 and later
> Only available in Grafana v5.2+.
It's possible to supply Grafana with configuration through files. This works well with [Docker Secrets](https://docs.docker.com/engine/swarm/secrets/) as the secrets by default gets mapped into `/run/secrets/<name of secret>` of the container.
You can do this with any of the configuration options in conf/grafana.ini by setting `GF_<SectionName>_<KeyName>_FILE` to the path of the file holding the secret.
You can do this with any of the configuration options in conf/grafana.ini by setting `GF_<SectionName>_<KeyName>__FILE` to the path of the file holding the secret.
Let's say you want to set the admin password this way.
- Admin password secret: `/run/secrets/admin_password`
- Environment variable: `GF_SECURITY_ADMIN_PASSWORD_FILE=/run/secrets/admin_password`
- Environment variable: `GF_SECURITY_ADMIN_PASSWORD__FILE=/run/secrets/admin_password`
## Migration from a previous version of the docker container to 5.1 or later
@@ -166,7 +184,7 @@ The docker container for Grafana has seen a major rewrite for 5.1.
Previously `/var/lib/grafana`, `/etc/grafana` and `/var/log/grafana` were defined as volumes in the `Dockerfile`. This led to the creation of three volumes each time a new instance of the Grafana container started, whether you wanted it or not.
You should always be careful to define your own named volume for storage, but if you depended on these volumes you should be aware that an upgraded container will no longer have them.
You should always be careful to define your own named volume for storage, but if you depended on these volumes you should be aware that an upgraded container will no longer have them.
**Warning**: when migrating from an earlier version to 5.1 or later using docker compose and implicit volumes you need to use `docker inspect` to find out which volumes your container is mapped to so that you can map them to the upgraded container as well. You will also have to change file ownership (or user) as documented below.
@@ -201,7 +219,7 @@ services:
#### Modifying permissions
The commands below will run bash inside the Grafana container with your volume mapped in. This makes it possible to modify the file ownership to match the new container. Always be careful when modifying permissions.
The commands below will run bash inside the Grafana container with your volume mapped in. This makes it possible to modify the file ownership to match the new container. Always be careful when modifying permissions.
```bash
$ docker run -ti --user root --volume "<your volume mapping here>" --entrypoint bash grafana/grafana:5.1.0
@@ -212,3 +230,8 @@ chown -R root:root /etc/grafana && \
chown -R grafana:grafana /var/lib/grafana && \
chown -R grafana:grafana /usr/share/grafana
```
## Logging in for the first time
To run Grafana open your browser and go to http://localhost:3000/. 3000 is the default http port that Grafana listens to if you haven't [configured a different port](/installation/configuration/#http-port).
Then follow the instructions [here](/guides/getting_started/).
+21
View File
@@ -11,6 +11,8 @@ weight = 4
# Installing on Mac
## Install using homebrew
Installation can be done using [homebrew](http://brew.sh/)
Install latest stable:
@@ -75,3 +77,22 @@ If you want to manually install a plugin place it here: `/usr/local/var/lib/graf
The default sqlite database is located at `/usr/local/var/lib/grafana`
## Installing from binary tar file
Download [the latest `.tar.gz` file](https://grafana.com/get) and
extract it. This will extract into a folder named after the version you
downloaded. This folder contains all files required to run Grafana. There are
no init scripts or install scripts in this package.
To configure Grafana add a configuration file named `custom.ini` to the
`conf` folder and override any of the settings defined in
`conf/defaults.ini`.
Start Grafana by executing `./bin/grafana-server web`. The `grafana-server`
binary needs the working directory to be the root install directory (where the
binary and the `public` folder is located).
## Logging in for the first time
To run Grafana open your browser and go to http://localhost:3000/. 3000 is the default http port that Grafana listens to if you haven't [configured a different port](/installation/configuration/#http-port).
Then follow the instructions [here](/guides/getting_started/).
+28 -17
View File
@@ -15,42 +15,49 @@ weight = 2
Description | Download
------------ | -------------
Stable for CentOS / Fedora / OpenSuse / Redhat Linux | [5.1.3 (x86-64 rpm)](https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.3-1.x86_64.rpm)
<!--
Latest Beta for CentOS / Fedora / OpenSuse / Redhat Linux | [5.1.0-beta1 (x86-64 rpm)](https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.0-beta1.x86_64.rpm)
-->
Stable for CentOS / Fedora / OpenSuse / Redhat Linux | [x86-64](https://grafana.com/grafana/download?platform=linux)
Stable for CentOS / Fedora / OpenSuse / Redhat Linux | [ARM64](https://grafana.com/grafana/download?platform=arm)
Stable for CentOS / Fedora / OpenSuse / Redhat Linux | [ARMv7](https://grafana.com/grafana/download?platform=arm)
Read [Upgrading Grafana]({{< relref "installation/upgrading.md" >}}) for tips and guidance on updating an existing
installation.
Read [Upgrading Grafana]({{< relref "installation/upgrading.md" >}}) for tips and guidance on updating an existing installation.
## Install Stable
You can install Grafana using Yum directly.
```bash
$ sudo yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.3-1.x86_64.rpm
$ sudo yum install <rpm package url>
```
<!-- ## Install Beta
Example:
```bash
$ sudo yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.0-beta1.x86_64.rpm
``` -->
$ sudo yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm
```
Or install manually using `rpm`.
#### On CentOS / Fedora / Redhat:
Or install manually using `rpm`. First execute
```bash
$ wget <rpm package url>
```
Example:
```bash
$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm
```
### On CentOS / Fedora / Redhat:
```bash
$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.3-1.x86_64.rpm
$ sudo yum install initscripts fontconfig
$ sudo rpm -Uvh grafana-5.1.3-1.x86_64.rpm
$ sudo rpm -Uvh <local rpm package>
```
#### On OpenSuse:
### On OpenSuse:
```bash
$ sudo rpm -i --nodeps grafana-5.1.3-1.x86_64.rpm
$ sudo rpm -i --nodeps <local rpm package>
```
## Install via YUM Repository
@@ -186,3 +193,7 @@ Start Grafana by executing `./bin/grafana-server web`. The `grafana-server`
binary needs the working directory to be the root install directory (where the
binary and the `public` folder is located).
## Logging in for the first time
To run Grafana open your browser and go to http://localhost:3000/. 3000 is the default http port that Grafana listens to if you haven't [configured a different port](/installation/configuration/#http-port).
Then follow the instructions [here](/guides/getting_started/).
+1 -1
View File
@@ -21,7 +21,7 @@ the data source response.
To check this you should use Query Inspector (new in Grafana v4.5). The query Inspector shows query requests and responses.
For more on the query insector read [this guide here](https://community.grafana.com/t/using-grafanas-query-inspector-to-troubleshoot-issues/2630). For
For more on the query inspector read [this guide here](https://community.grafana.com/t/using-grafanas-query-inspector-to-troubleshoot-issues/2630). For
older versions of Grafana read the [how troubleshoot metric query issue](https://community.grafana.com/t/how-to-troubleshoot-metric-query-issues/50/2) article.
## Logging
+8
View File
@@ -109,3 +109,11 @@ positioning system when you load them in v5. Dashboards saved in v5 will not wor
external panel plugins might need to be updated to work properly.
For more details on the new panel positioning system, [click here]({{< relref "reference/dashboard.md#panel-size-position" >}})
## Upgrading to v5.2
One of the database migrations included in this release will update all annotation timestamps from second to millisecond precision. If you have a large amount of annotations the database migration may take a long time to complete which may cause problems if you use systemd to run Grafana.
We've got one report where using systemd, PostgreSQL and a large amount of annotations (table size 1645mb) took 8-20 minutes for the database migration to complete. However, the grafana-server process was killed after 90 seconds by systemd. Any database migration queries in progress when systemd kills the grafana-server process continues to execute in database until finished.
If you're using systemd and have a large amount of annotations consider temporary adjusting the systemd `TimeoutStartSec` setting to something high like `30m` before upgrading.
+8 -5
View File
@@ -12,17 +12,15 @@ weight = 3
Description | Download
------------ | -------------
Latest stable package for Windows | [grafana-5.1.3.windows-x64.zip](https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.3.windows-x64.zip)
<!--
Latest beta package for Windows | [grafana.5.1.0-beta1.windows-x64.zip](https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.0-beta5.windows-x64.zip)
-->
Latest stable package for Windows | [x64](https://grafana.com/grafana/download?platform=windows)
Read [Upgrading Grafana]({{< relref "installation/upgrading.md" >}}) for tips and guidance on updating an existing
installation.
## Configure
**Important:** After you've downloaded the zip file and before extracting it, make sure to open properties for that file (right-click Properties) and check the `unblock` checkbox and `Ok`.
The zip file contains a folder with the current Grafana version. Extract
this folder to anywhere you want Grafana to run from. Go into the
`conf` directory and copy `sample.ini` to `custom.ini`. You should edit
@@ -40,6 +38,11 @@ service using that tool.
Read more about the [configuration options]({{< relref "configuration.md" >}}).
## Logging in for the first time
To run Grafana open your browser and go to the port you configured above, e.g. http://localhost:8080/.
Then follow the instructions [here](/guides/getting_started/).
## Building on Windows
The Grafana backend includes Sqlite3 which requires GCC to compile. So
@@ -0,0 +1,99 @@
+++
title = "Authentication for Datasource Plugins"
type = "docs"
[menu.docs]
name = "Authentication for Datasource Plugins"
parent = "developing"
weight = 3
+++
# Authentication for Datasource Plugins
Grafana has a proxy feature that proxies all data requests through the Grafana backend. This is very useful when your datasource plugin calls an external/thirdy-party API. The Grafana proxy adds CORS headers and can authenticate against the external API. This means that a datasource plugin that proxies all requests via Grafana can enable token authentication and the token will be renewed automatically for the user when it expires.
The plugin config page should save the API key/password to be encrypted (using the `secureJsonData` feature) and then when a request from the datasource is made, the Grafana Proxy will:
1. decrypt the API key/password on the backend.
2. carry out authentication and generate an OAuth token that will be added as an `Authorization` HTTP header to all requests (or it will add a HTTP header with the API key).
3. renew the token if it expires.
This means that users that access the datasource config page cannot access the API key or password after is saved the first time and that no secret keys are sent in plain text through the browser where they can be spied on.
For backend authentication to work, the external/third-party API must either have an OAuth endpoint or that the API accepts an API key as a HTTP header for authentication.
## Plugin Routes
You can specify routes in the `plugin.json` file for your datasource plugin. [Here is an example](https://github.com/grafana/azure-monitor-datasource/blob/d74c82145c0a4af07a7e96cc8dde231bfd449bd9/src/plugin.json#L30-L95) with lots of routes (though most plugins will just have one route).
When you build your url to the third-party API in your datasource class, the url should start with the text specified in the path field for a route. The proxy will strip out the path text and replace it with the value in the url field.
For example, if my code makes a call to url `azuremonitor/foo/bar` with this code:
```js
this.backendSrv.datasourceRequest({
url: url,
method: 'GET',
})
```
and this route:
```json
"routes": [{
"path": "azuremonitor",
"method": "GET",
"url": "https://management.azure.com",
...
}]
```
then the Grafana proxy will transform it into "https://management.azure.com/foo/bar" and add CORS headers.
The `method` parameter is optional. It can be set to any HTTP verb to provide more fine-grained control.
## Encrypting Sensitive Data
When a user saves a password or secret with your datasource plugin's Config page, then you can save data to a column in the datasource table called `secureJsonData` that is an encrypted blob. Any data saved in the blob is encrypted by Grafana and can only be decrypted by the Grafana server on the backend. This means once a password is saved, no sensitive data is sent to the browser. If the password is saved in the `jsonData` blob or the `password` field then it is unencrypted and anyone with Admin access (with the help of Chrome Developer Tools) can read it.
This is an example of using the `secureJsonData` blob to save a property called `password`:
```html
<input type="password" class="gf-form-input" ng-model='ctrl.current.secureJsonData.password' placeholder="password"></input>
```
## API Key/HTTP Header Authentication
Some third-party API's accept a HTTP Header for authentication. The [example](https://github.com/grafana/azure-monitor-datasource/blob/d74c82145c0a4af07a7e96cc8dde231bfd449bd9/src/plugin.json#L91-L93) below has a `headers` section that defines the name of the HTTP Header that the API expects and it uses the `SecureJSONData` blob to fetch an encrypted API key. The Grafana server proxy will decrypt the key, add the `X-API-Key` header to the request and forward it to the third-party API.
```json
{
"path": "appinsights",
"method": "GET",
"url": "https://api.applicationinsights.io",
"headers": [
{"name": "X-API-Key", "content": "{{.SecureJsonData.appInsightsApiKey}}"}
]
}
```
## How Token Authentication Works
The token auth section in the `plugin.json` file looks like this:
```json
"tokenAuth": {
"url": "https://login.microsoftonline.com/{{.JsonData.tenantId}}/oauth2/token",
"params": {
"grant_type": "client_credentials",
"client_id": "{{.JsonData.clientId}}",
"client_secret": "{{.SecureJsonData.clientSecret}}",
"resource": "https://management.azure.com/"
}
}
```
This interpolates in data from both `jsonData` and `secureJsonData` to generate the token request to the third-party API. It is common for tokens to have a short expiry period (30 minutes). The proxy in Grafana server will automatically renew the token if it has expired.
## Always Restart the Grafana Server After Route Changes
The plugin.json files are only loaded when the Grafana server starts so when a route is added or changed then the Grafana server has to be restarted for the changes to take effect.
@@ -0,0 +1,175 @@
+++
title = "Plugin Review Guidelines"
type = "docs"
[menu.docs]
name = "Plugin Review Guidelines"
parent = "developing"
weight = 2
+++
# Plugin Review Guidelines
The Grafana team reviews all plugins that are published on Grafana.com. There are two areas we review, the metadata for the plugin and the plugin functionality.
## Metadata
The plugin metadata consists of a `plugin.json` file and the README.md file. These `plugin.json` file is used by Grafana to load the plugin and the README.md file is shown in the plugins section of Grafana and the plugins section of Grafana.com.
### README.md
The README.md file is shown on the plugins page in Grafana and the plugin page on Grafana.com. There are some differences between the GitHub markdown and the markdown allowed in Grafana/Grafana.com:
- Cannot contain inline HTML.
- Any image links should be absolute links. For example: https://raw.githubusercontent.com/grafana/azure-monitor-datasource/master/dist/img/grafana_cloud_install.png
The README should:
- describe the purpose of the plugin.
- contain steps on how to get started.
### Plugin.json
The `plugin.json` file is the same concept as the `package.json` file for an npm package. When the Grafana server starts it will scan the plugin folders (all folders in the data/plugins subfolder) and load every folder that contains a `plugin.json` file unless the folder contains a subfolder named `dist`. In that case, the Grafana server will load the `dist` folder instead.
A minimal `plugin.json` file:
```json
{
"type": "panel",
"name": "Clock",
"id": "yourorg-clock-panel",
"info": {
"description": "Clock panel for grafana",
"author": {
"name": "Author Name",
"url": "http://yourwebsite.com"
},
"keywords": ["clock", "panel"],
"version": "1.0.0",
"updated": "2018-03-24"
},
"dependencies": {
"grafanaVersion": "3.x.x",
"plugins": [ ]
}
}
```
- The convention for the plugin id is [github username/org]-[plugin name]-[datasource|app|panel] and it has to be unique. Although if org and plugin name are the same then [plugin name]-[datasource|app|panel] is also valid. The org **cannot** be `grafana` unless it is a plugin created by the Grafana core team.
Examples:
- raintank-worldping-app
- ryantxu-ajax-panel
- alexanderzobnin-zabbix-app
- hawkular-datasource
- The `type` field should be either `datasource` `app` or `panel`.
- The `version` field should be in the form: x.x.x e.g. `1.0.0` or `0.4.1`.
The full file format for the `plugin.json` file is described [here](http://docs.grafana.org/plugins/developing/plugin.json/).
## Plugin Language
JavaScript, TypeScript, ES6 (or any other language) are all fine as long as the contents of the `dist` subdirectory are transpiled to JavaScript (ES5).
## File and Directory Structure Conventions
Here is a typical directory structure for a plugin.
```bash
johnnyb-awesome-datasource
|-- dist
|-- src
| |-- img
| | |-- logo.svg
| |-- partials
| | |-- annotations.editor.html
| | |-- config.html
| | |-- query.editor.html
| |-- datasource.js
| |-- module.js
| |-- plugin.json
| |-- query_ctrl.js
|-- Gruntfile.js
|-- LICENSE
|-- package.json
|-- README.md
```
Most JavaScript projects have a build step. The generated JavaScript should be placed in the `dist` directory and the source code in the `src` directory. We recommend that the plugin.json file be placed in the src directory and then copied over to the dist directory when building. The `README.md` can be placed in the root or in the dist directory.
Directories:
- `src/` contains plugin source files.
- `src/partials` contains html templates.
- `src/img` contains plugin logos and other images.
- `dist/` contains built content.
## HTML and CSS
For the HTML on editor tabs, we recommend using the inbuilt Grafana styles rather than defining your own. This makes plugins feel like a more natural part of Grafana. If done correctly, the html will also be responsive and adapt to smaller screens. The `gf-form` css classes should be used for labels and inputs.
Below is a minimal example of an editor row with one form group and two fields, a dropdown and a text input:
```html
<div class="editor-row">
<div class="section gf-form-group">
<h5 class="section-heading">My Plugin Options</h5>
<div class="gf-form">
<label class="gf-form-label width-10">Label1</label>
<div class="gf-form-select-wrapper max-width-10">
<select class="input-small gf-form-input" ng-model="ctrl.panel.mySelectProperty" ng-options="t for t in ['option1', 'option2', 'option3']" ng-change="ctrl.onSelectChange()"></select>
</div>
<div class="gf-form">
<label class="gf-form-label width-10">Label2</label>
<input type="text" class="input-small gf-form-input width-10" ng-model="ctrl.panel.myProperty" ng-change="ctrl.onFieldChange()" placeholder="suggestion for user" ng-model-onblur />
</div>
</div>
</div>
</div>
```
Use the `width-x` and `max-width-x` classes to control the width of your labels and input fields. Try to get labels and input fields to line up neatly by having the same width for all the labels in a group and the same width for all inputs in a group if possible.
## Data Sources
A basic guide for data sources can be found [here](http://docs.grafana.org/plugins/developing/datasources/).
### Config Page Guidelines
- It should be as easy as possible for a user to configure a url. If the data source is using the `datasource-http-settings` component, it should use the `suggest-url` attribute to suggest the default url or a url that is similar to what it should be (especially important if the url refers to a REST endpoint that is not common knowledge for most users e.g. `https://yourserver:4000/api/custom-endpoint`).
```html
<datasource-http-settings
current="ctrl.current"
suggest-url="http://localhost:8080">
</datasource-http-settings>
```
- The `testDatasource` function should make a query to the data source that will also test that the authentication details are correct. This is so the data source is correctly configured when the user tries to write a query in a new dashboard.
#### Password Security
If possible, any passwords or secrets should be be saved in the `secureJsonData` blob. To encrypt sensitive data, the Grafana server's proxy feature must be used. The Grafana server has support for token authentication (OAuth) and HTTP Header authentication. If the calls have to be sent directly from the browser to a third-party API then this will not be possible and sensitive data will not be encrypted.
Read more here about how [Authentication for Datasources]({{< relref "auth-for-datasources.md" >}}) works.
If using the proxy feature then the Config page should use the `secureJsonData` blob like this:
- good: `<input type="password" class="gf-form-input" ng-model='ctrl.current.secureJsonData.password' placeholder="password"></input>`
- bad: `<input type="password" class="gf-form-input" ng-model='ctrl.current.password' placeholder="password"></input>`
### Query Editor
Each query editor is unique and can have a unique style. It should be adapted to what the users of the data source are used to.
- Should use the Grafana CSS `gf-form` classes.
- Should be neat and tidy. Labels and fields in columns should be aligned and should be the same width if possible.
- The datasource should be able to handle when a user toggles a query (by clicking on the eye icon) and not execute the query. This is done by checking the `hide` property - an [example](https://github.com/grafana/grafana/blob/master/public/app/plugins/datasource/postgres/datasource.ts#L35-L38).
- Should not execute queries if fields in the Query Editor are empty and the query will throw an exception (defensive programming).
- Should handle errors. There are two main ways to do this:
- use the notification system in Grafana to show a toaster popup with the error message. Example [here](https://github.com/alexanderzobnin/grafana-zabbix/blob/fdbbba2fb03f5f2a4b3b0715415e09d5a4cf6cde/src/panel-triggers/triggers_panel_ctrl.js#L467-L471).
- provide an error notification in the query editor like the MySQL/Postgres data sources do. Example code in the `query_ctrl` [here](https://github.com/grafana/azure-monitor-datasource/blob/b184d077f082a69f962120ef0d1f8296a0d46f03/src/query_ctrl.ts#L36-L51) and in the [html](https://github.com/grafana/azure-monitor-datasource/blob/b184d077f082a69f962120ef0d1f8296a0d46f03/src/partials/query.editor.html#L190-L193).
+14 -12
View File
@@ -13,7 +13,7 @@ dev environment. Grafana ships with its own required backend server; also comple
## Dependencies
- [Go 1.10](https://golang.org/dl/)
- [Go 1.11](https://golang.org/dl/)
- [Git](https://git-scm.com/downloads)
- [NodeJS LTS](https://nodejs.org/download/)
- node-gyp is the Node.js native addon build tool and it requires extra dependencies: python 2.7, make and GCC. These are already installed for most Linux distros and MacOS. See the Building On Windows section or the [node-gyp installation instructions](https://github.com/nodejs/node-gyp#installation) for more details.
@@ -57,7 +57,7 @@ For this you need nodejs (v.6+).
```bash
npm install -g yarn
yarn install --pure-lockfile
npm run watch
yarn watch
```
## Running Grafana Locally
@@ -83,21 +83,18 @@ go get github.com/Unknwon/bra
bra run
```
You'll also need to run `npm run watch` to watch for changes to the front-end (typescript, html, sass)
You'll also need to run `yarn watch` to watch for changes to the front-end (typescript, html, sass)
### Running tests
- You can run backend Golang tests using "go test ./pkg/...".
- Execute all frontend tests with "npm run test"
- You can run backend Golang tests using `go test ./pkg/...`.
- Execute all frontend tests with `yarn test`
Writing & watching frontend tests (we have two test runners)
Writing & watching frontend tests
- Start watcher: `yarn jest`
- Jest will run all test files that end with the name ".test.ts"
- jest for all new tests that do not require browser context (React+more)
- Start watcher: `npm run jest`
- Jest will run all test files that end with the name ".jest.ts"
- karma + mocha is used for testing angularjs components. We do want to migrate these test to jest over time (if possible).
- Start watcher: `npm run karma`
- Karma+Mocha runs all files that end with the name "_specs.ts".
## Creating optimized release packages
@@ -144,3 +141,8 @@ Please contribute to the Grafana project and submit a pull request! Build new fe
**Problem**: On Windows, getting errors about a tool not being installed even though you just installed that tool.
**Solution**: It is usually because it got added to the path and you have to restart your command prompt to use it.
## Logging in for the first time
To run Grafana open your browser and go to the default port http://localhost:3000 or the port you have configured.
Then follow the instructions [here](/guides/getting_started/).
+20 -30
View File
@@ -21,42 +21,32 @@ If you open scripted.js you can see how it reads url parameters from ARGS variab
## Example
```javascript
var rows = 1;
var seriesName = 'argName';
if(!_.isUndefined(ARGS.rows)) {
rows = parseInt(ARGS.rows, 10);
}
if(!_.isUndefined(ARGS.name)) {
seriesName = ARGS.name;
}
for (var i = 0; i < rows; i++) {
dashboard.rows.push({
title: 'Scripted Graph ' + i,
height: '300px',
panels: [
{
title: 'Events',
type: 'graph',
span: 12,
fill: 1,
linewidth: 2,
targets: [
{
'target': "randomWalk('" + seriesName + "')"
},
{
'target': "randomWalk('random walk2')"
}
],
}
]
});
}
dashboard.panels.push({
title: 'Events',
type: 'graph',
fill: 1,
linewidth: 2,
gridPos: {
h: 10,
w: 24,
x: 0,
y: 10,
},
targets: [
{
'target': "randomWalk('" + seriesName + "')"
},
{
'target': "randomWalk('random walk2')"
}
]
});
return dashboard;
```
+30 -10
View File
@@ -11,7 +11,7 @@ weight = 1
# Variables
Variables allows for more interactive and dynamic dashboards. Instead of hard-coding things like server, application
and sensor name in you metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of
and sensor name in your metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of
the dashboard. These dropdowns make it easy to change the data being displayed in your dashboard.
{{< docs-imagebox img="/img/docs/v50/variables_dashboard.png" >}}
@@ -245,7 +245,7 @@ Grafana has global built-in variables that can be used in expressions in the que
### The $__interval Variable
This $__interval variable is similar to the `auto` interval variable that is described above. It can be used as a parameter to group by time (for InfluxDB), Date histogram interval (for Elasticsearch) or as a *summarize* function parameter (for Graphite).
This $__interval variable is similar to the `auto` interval variable that is described above. It can be used as a parameter to group by time (for InfluxDB, MySQL, Postgres, MSSQL), Date histogram interval (for Elasticsearch) or as a *summarize* function parameter (for Graphite).
Grafana automatically calculates an interval that can be used to group by time in queries. When there are more data points than can be shown on a graph then queries can be made more efficient by grouping by a larger interval. It is more efficient to group by 1 day than by 10s when looking at 3 months of data and the graph will look the same and the query will be faster. The `$__interval` is calculated using the time range and the width of the graph (the number of pixels).
@@ -273,29 +273,49 @@ The `$__timeFilter` is used in the MySQL data source.
This variable is only available in the Singlestat panel and can be used in the prefix or suffix fields on the Options tab. The variable will be replaced with the series name or alias.
### The $__range Variable
> Only available in Grafana v5.3+
Currently only supported for Prometheus data sources. This variable represents the range for the current dashboard. It is calculated by `to - from`. It has a millisecond and a second representation called `$__range_ms` and `$__range_s`.
## Repeating Panels
Template variables can be very useful to dynamically change your queries across a whole dashboard. If you want
Grafana to dynamically create new panels or rows based on what values you have selected you can use the *Repeat* feature.
If you have a variable with `Multi-value` or `Include all value` options enabled you can choose one panel or one row and have Grafana repeat that row
for every selected value. You find this option under the General tab in panel edit mode. Select the variable to repeat by, and a `min span`.
The `min span` controls how small Grafana will make the panels (if you have many values selected). Grafana will automatically adjust the width of
each repeated panel so that the whole row is filled. Currently, you cannot mix other panels on a row with a repeated panel.
If you have a variable with `Multi-value` or `Include all value` options enabled you can choose one panel and have Grafana repeat that panel
for every selected value. You find the *Repeat* feature under the *General tab* in panel edit mode.
The `direction` controls how the panels will be arranged.
By choosing `horizontal` the panels will be arranged side-by-side. Grafana will automatically adjust the width
of each repeated panel so that the whole row is filled. Currently, you cannot mix other panels on a row with a repeated
panel. Each panel will never be smaller that the provided `Min width` if you have many selected values.
By choosing `vertical` the panels will be arranged from top to bottom in a column. The `Min width` doesn't have any effect in this case. The width of the repeated panels will be the same as of the first panel (the original template) being repeated.
Only make changes to the first panel (the original template). To have the changes take effect on all panels you need to trigger a dynamic dashboard re-build.
You can do this by either changing the variable value (that is the basis for the repeat) or reload the dashboard.
## Repeating Rows
This option requires you to open the row options view. Hover over the row left side to trigger the row menu, in this menu click `Row Options`. This
opens the row options view. Here you find a *Repeat* dropdown where you can select the variable to repeat by.
As seen above with the *Panels* you can also repeat *Rows* if you have variables set with `Multi-value` or
`Include all value` selection option.
### URL state
To enable this feature you need to first add a new *Row* using the *Add Panel* menu. Then by hovering the row title and
clicking on the cog button, you will access the `Row Options` configuration panel. You can then select the variable
you want to repeat the row for.
It may be a good idea to use a variable in the row title as well.
Example: [Repeated Rows Dashboard](http://play.grafana.org/dashboard/db/repeated-rows)
## URL state
Variable values are always synced to the URL using the syntax `var-<varname>=value`.
### Examples
## Examples
- [Graphite Templated Dashboard](http://play.grafana.org/dashboard/db/graphite-templated-nested)
- [Elasticsearch Templated Dashboard](http://play.grafana.org/dashboard/db/elasticsearch-templated)
+1 -1
View File
@@ -27,7 +27,7 @@ Grafana will now persist all long term data in the database. How to configure th
## User sessions
The second thing to consider is how to deal with user sessions and how to configure your load balancer infront of Grafana.
Grafana support two says of storing session data locally on disk or in a database/cache-server.
Grafana supports two ways of storing session data: locally on disk or in a database/cache-server.
If you want to store sessions on disk you can use `sticky sessions` in your load balanacer. If you prefer to store session data in a database/cache-server
you can use any stateless routing strategy in your load balancer (ex round robin or least connections).

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