Compare commits

...

515 Commits

Author SHA1 Message Date
Robby Milo
ca6d08d5cb Docs: Fix Broken Link (#22894)
(cherry picked from commit a61af9ed1d)
2020-03-20 14:13:09 +01:00
Leonard Gram
d01bdb517d release 6.7.1 2020-03-20 14:13:09 +01:00
Torkel Ödegaard
63dfdb7066 Panels: Fixed size issue with panels when existing panel edit mode (#22912)
(cherry picked from commit 8e131384e3)
2020-03-20 14:13:09 +01:00
Torkel Ödegaard
e95667fffb Azure: Fixed dropdowns not showing current value (#22914)
(cherry picked from commit d16211b782)
2020-03-20 14:13:09 +01:00
Hugo Häggmark
c08b901664 BackendSrv: only add content-type on POST, PUT requests (#22910)
* BackendSrv: only add content-type on POST, PUT requests
Fixes #22869

* Tests: imports polyfill for Headers

(cherry picked from commit 8d5c6053db)
2020-03-20 14:13:09 +01:00
Cyril Tovena
7cd6fef466 Check if the datasource is of type loki using meta.id instead of name. (#22877)
Signed-off-by: Cyril Tovena <cyril.tovena@gmail.com>
(cherry picked from commit ec9167e972)
2020-03-20 14:13:09 +01:00
Arve Knudsen
1b4f93b88c CircleCI: Pin grabpl to 0.1.0 (#22904) 2020-03-19 19:06:28 +01:00
Arve Knudsen
c4656a885d Release version 6.7.0
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-03-19 12:27:02 +01:00
Ivana Huckova
818a2f3d64 Design tweaks (#22886)
(cherry picked from commit 8ba75e77b1)
2020-03-19 12:27:02 +01:00
Jess
7f52e023b5 Rich history UX fixes (#22783)
* Initial commit

* Visualised renamed or deleted  datasources as well, if they have queries

* Pass ds image to card and information if the datasource was removed/renamed

* Set up card with datasource info and change run query

* Style comment, run button

* Fix button naming

* Remember last filters

* Update public/app/core/store.ts

* Update public/app/features/explore/RichHistory/RichHistory.tsx

* Update comments

* Rename datasource to data source

* Add test coverage, fix naming

* Remove unused styles, add feedback info

Co-authored-by: Ivana <ivana.huckova@gmail.com>
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
(cherry picked from commit db85c3e7b9)
2020-03-19 12:27:02 +01:00
Daniel Lee
962a06545a AzureMonitor: support workspaces function for template variables (#22882)
* azuremonitor: adds support for workspaces query macro...

...for Azure Logs template variable queries

* docs: azure logs workspaces templating function

* Update docs/sources/features/datasources/azuremonitor.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* docs: convert list into table

* docs: fixes prettier formatting problem

Prettier adds a slash before dollar signs in markdown. Disabling it
for this table with a prettier comment.

https://prettier.io/docs/en/ignore.html

Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
(cherry picked from commit 3b9a4e6444)
2020-03-19 12:27:02 +01:00
Arve Knudsen
79aeeaa10a SQLStore: Add migration for adding index on annotation.alert_id (#22876)
(cherry picked from commit bb05989e43)
2020-03-19 12:27:02 +01:00
Carl Bergquist
ea483c0ce1 Plugins: Return jsondetails as an json object instead of raw json on datasource healthchecks. (#22859)
(cherry picked from commit 579abad9cc)
2020-03-19 12:27:02 +01:00
Marcus Efraimsson
3e88197f96 Backend plugins: Exclude plugin metrics in Grafana's metrics endpoint (#22857)
Excludes backend plugin metrics in Grafana's metrics endpoint
Adds /api/:pluginId/metrics endpoint for retrieving metrics
from backend plugin as Prometheus text-based exposition format.

Fixes #22814

(cherry picked from commit 60e3437fc1)
2020-03-19 12:27:02 +01:00
Torkel Ödegaard
66df54db80 Graphite: Fixed issue with query editor and next select metric now showing after selecting metric node (#22856)
* Graphite: Fixed digest issue in graphite query editor

* Fixed unit test

* Updated

(cherry picked from commit aa4ed76a00)
2020-03-19 12:27:02 +01:00
Erik Sundell
e4b4480064 Stackdriver: Fix GCE auth bug when creating new data source (#22836)
* Fix test datasource for gce auth

* Cache gce default project locally

* Await gce default project call

* Remove reload functionality

* Fix build problem

(cherry picked from commit 1cd7ce24c7)
2020-03-19 12:27:02 +01:00
Marcus Efraimsson
4e4f69b5f6 @grafana/runtime: Add cancellation of queries to DataSourceWithBackend (#22818)
(cherry picked from commit eb96a8fcc8)
2020-03-19 12:27:02 +01:00
Ivana Huckova
a4b7209e39 Rich history: Test coverage (#22852)
* Add unit test coverage

* Add tests to util/richHistory

* Remove unused import

* Remove redundant tests

* Fix tests for components

* Test saving to local storage

* Add boxshadow to container

* Revert "Add boxshadow to container"

This reverts commit 5ca2e850e4.

* Fix failing tests after merging master

* Fix imports, aria-labels

* Remove console.log

(cherry picked from commit 8edf8e3982)
2020-03-19 12:27:02 +01:00
Carl Bergquist
6c001d9c09 Datasource config was not mapped for datasource healthcheck (#22848)
closes #22825

(cherry picked from commit 0a094a7319)
2020-03-19 12:27:02 +01:00
Carl Bergquist
312600aa2c upgrades plugin sdk to 0.30.0 (#22846)
ref grafana/grafana-plugin-sdk-go#94
ref grafana/grafana-plugin-sdk-go#70

(cherry picked from commit b0407b3578)
2020-03-19 12:27:02 +01:00
Ivana Huckova
26d701dcf9 Rich History: UX adjustments and fixes (#22729)
* Initial commit

* Fix spelling of data sources

* Display sorting value for starred and query tab

* Fix handle color for light theme

* Add close button and fix animation

* Remove toggling of tabs

* Stop event propagation when clicking on comment buttons

* Add title for card functionality

* Remove interpolation for easier searchability of variables

* Improve syncing of comments and starred

* Add modal to check if user wants to permanently delete history

* Fix the height of the query card buttons

* Adjust slider's width based on drawer width

* Add spacing between slider and legend

* Semantic variable naming

* Fix disabled button when live tailing

* Add error handling

* Remove unused imports

* Fix starring, remove useEffect

* Remove emiting of appEvents.alertError in store

* Remove unused imports

(cherry picked from commit 544690060a)
2020-03-19 12:27:02 +01:00
Dominik Prokop
e347b62cee TablePanel: Enable new units picker (#22833)
(cherry picked from commit 58298919c8)
2020-03-19 12:27:02 +01:00
Alex Khomenko
36232857df Fix dashboard picker's props (#22815)
(cherry picked from commit 2fac834413)
2020-03-19 12:27:02 +01:00
Alex Khomenko
9d605bdd04 Grafana-UI: Add invalid state to Forms.Textarea (#22775)
(cherry picked from commit cd50da3dbe)
2020-03-19 12:27:02 +01:00
Torkel Ödegaard
4d235b978e SaveDashboard: Updated modal design/layout a bit (#22810)
(cherry picked from commit 46165a7f7b)
2020-03-19 12:27:02 +01:00
Torkel Ödegaard
6575c9cb6e Forms: Fix input suffix position (#22780)
* Forms: Fix input suffix position

* Update

(cherry picked from commit ab0238eced)
2020-03-19 12:27:02 +01:00
Torkel Ödegaard
0ad27a6596 AngularPanels: Fixed inner height calculation (#22796)
(cherry picked from commit f78501f3b5)
2020-03-19 12:27:02 +01:00
Hugo Häggmark
a0c6afa0a5 Fix: fixes issue with headers property with different casing (#22778)
Fixes #22756

(cherry picked from commit b30f4c7bb0)
2020-03-19 12:27:02 +01:00
Ryan McKinley
3d0bc141c7 DataSourceWithBackend: use /health endpoint for test (#22789)
(cherry picked from commit 8b067a5fe0)
2020-03-19 12:27:02 +01:00
Ryan McKinley
ed307897e7 Chore: remove expressions flag and allow (#22764)
(cherry picked from commit c65db9bf25)
2020-03-19 12:27:02 +01:00
Alex Khomenko
1d63f57caf Core: Pass the rest of to props to Select (#22776)
* Pass the rest of to props to Select

* Remove log

(cherry picked from commit 451c95808d)
2020-03-19 12:27:02 +01:00
Carl Bergquist
e00f393a17 Add support for sending health check to datasource plugins. (#22771)
closes #21519
ref grafana/grafana-plugin-sdk-go#93

(cherry picked from commit ebc9549cbc)
2020-03-19 12:27:02 +01:00
Marcus Andersson
277e00aaed Datasource: making sure we are having the same data field order when using mixed data sources. (#22718)
* changed so data query response always it returned in the correct order when using mixed data sources.

* refactored the code to make it a bit simpler and not failing the tests.

* changed to simple array type.

(cherry picked from commit f44c0f0643)
2020-03-19 12:27:02 +01:00
Dominik Prokop
ba6104190e DashboardSave: Autofocus save dashboard form input (#22748)
(cherry picked from commit b441b73345)
2020-03-19 12:27:02 +01:00
Steven Vachon
eaaca91f25 @grafana/e2e: cherry picked 4fecf5a7a6 (#22739) 2020-03-12 08:51:05 +01:00
Arve Knudsen
a551cd2470 Release version 6.7.0-beta1 (#22727) 2020-03-11 16:30:55 +01:00
Arve Knudsen
9bcccd7574 CircleCI: Implement new release pipeline (#22625)
* CircleCI: Adapt build-pipeline to implement also release pipeline
2020-03-11 15:45:52 +01:00
Martin Brenner
6b61c65b58 Toolkit: use fs-extra instead of fs (#22723)
* use fs-extra instead of fs

* use moveSync instead of renameSync
2020-03-11 07:37:31 -07:00
Jon Gyllenswärd
d11bb2e198 What's new docs for 6.7 release (#22721)
* added docs

* Update docs/sources/guides/whats-new-in-v6-7.md

* Docs: minor restruturing of whats new

Co-authored-by: Leonard Gram <leo@xlson.com>
2020-03-11 15:23:47 +01:00
Kyle Brandt
69a5530aec Backend Plugins: use sdk v0.26.0 (#22725)
allows Field names to be duplicated, goes with #22705
2020-03-11 10:06:16 -04:00
Peter Holmberg
08d8190c02 PanelInspector: Add Stats Tab (#22683)
* add tab

* add process measurement

* Fixed some design issues

* Align tabs margin

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
2020-03-11 13:19:06 +01:00
Torkel Ödegaard
c75574298c Revert "Graph: Improve point rendering performance (#22610)" (#22716)
This reverts commit 0f6769665a.
2020-03-11 13:18:37 +01:00
Agnès Toulet
8477d7b4a2 Docs: add rendering configuration in reporting (#22715)
* Docs: add rendering configuration in reporting

* Docs: fix mispelling
2020-03-11 12:58:03 +01:00
Marcus Andersson
f26d14eef1 reverting the changes that failed the e2e tests. (#22714) 2020-03-11 11:26:52 +01:00
Mohit Nain
49418f1a63 Remove multiple occurrences of "before" (#22710) 2020-03-11 11:12:20 +01:00
Agnès Toulet
34c9233501 Datasources: Update dashboards (#22476)
* Datasources: Update dashboards

* Datasources: increase dashboard versions

* Datasources: prometheus dashboards improvements

- Update links
- Add target="blank" if missing
- Remove not showing image
2020-03-11 10:56:45 +01:00
Sofia Papagiannaki
be022d4239 API: Fix redirect issues (#22285)
* Revert "API: Fix redirect issue when configured to use a subpath (#21652)" (#22671)

This reverts commit 0e2d874ecf.

* Fix redirect validation (#22675)

* Chore: Add test for parse of app url and app sub url

Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>

* Fix redirect: prepend subpath only if it's missing (#22676)

* Validate redirect in login oauth (#22677)

* Fix invalid redirect for authenticated user (#22678)

* Login: Use correct path for OAuth logos

Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
2020-03-11 11:04:48 +02:00
Lukas Siatka
688283a5cc Explore: adds QueryRowErrors component, moves error display to QueryRow (#22438)
* Explore: adds QueryRowErrors component

* Explore: updates QueryRow to use QueryRowErrors component

* Explore: updates PromQueryField to remove error render

* Explore: updates Elastic query field  to remove error render

* Explore: updates LokiQueryFieldForm to remove error render

* Explore: updates QueryRow component - brings back passing errors down

* Explore: removes QueryRowErrors component

* Explore: updates ErrorContainer component - moves out data filtering

* Explore: updates QueryRow component - changes QueryRowErrors to ErrorContainer

* Explore: updates Explore component - adds error filtering for ErrorContainer

* Explore: updates ErrorContainer and adds a basic test for it

* Explore: updates Explore component props name and adds a basic render test

* Explore: adds snapshots for Explore and ErrorContainer

* Explore: adds a test for error render

* Explore: adds a comment to Explore component explaining the way we filter non-query-row-specific errors

* Explore: adds getFirstNonQueryRowSpecificError method to explore utilities

* Explore: extracts getFirstNonQueryRowSpecificError method and slightly refactors Explore component

* Explore: updates Explore component tests to cover non-query-row-specific errors
2020-03-11 10:01:58 +01:00
Torkel Ödegaard
bbed213115 RichHistory: Design Tweaks (#22703)
* design tweaks

* RichHistory: Design tweaks
2020-03-11 09:37:35 +01:00
Dominik Prokop
4845321b43 Modals: Unify angular/react modals backdrop color (#22708) 2020-03-11 09:30:08 +01:00
Sofia Papagiannaki
c6829645c7 Graphite: Don't issue empty "select metric" queries (#22699)
* Don't issue empty "select metric" queries

* Update pkg/tsdb/graphite/graphite.go

Co-Authored-By: Carl Bergquist <carl.bergquist@gmail.com>

* Fix indentation

* Add missing import

Co-authored-by: Carl Bergquist <carl.bergquist@gmail.com>
2020-03-11 09:28:36 +01:00
Ryan McKinley
cf6adb8b54 support duplicate field names in arrow format (#22705) 2020-03-11 09:24:50 +01:00
Torkel Ödegaard
9824219a58 UX: Update new form styles to dark inputs (#22701)
* UX: Update new form styles to dark inputs

* Aligning styles a bit

* Updated snapshot
2020-03-11 09:20:28 +01:00
Mohit Nain
ec18b00e2d Docs: Grammar corrections
line 31 : makes user a superadmin  : multiple use of  'a' can be avoided for better reading

line 35: User can belong to : remove 'be' it is incorrect

line 51: allow you : typo correction
2020-03-11 08:42:23 +01:00
Mohit Nain
6a3e4db692 Docs: Overcoming Grammatical errors (#22707)
* correcting line 15

one typo needs correction

* Update docs/sources/permissions/organization_roles.md

Co-Authored-By: Peter Holmberg <peterholmberg@users.noreply.github.com>

Co-authored-by: Peter Holmberg <peterholmberg@users.noreply.github.com>
2020-03-11 08:41:30 +01:00
Tobias Skarhed
b4666456f0 Pass dashboard via angular directive (#22696) 2020-03-11 08:31:07 +01:00
annelaurefroment
e2a9dcdc32 Docs: Replace "API" by "Integration" key for PagerDuty (#22639) 2020-03-11 00:16:50 -07:00
Diana Payton
800431bc1f Docs: Edited Enterprise docs (#22602)
* Update white-labeling.md

* Update team-sync.md

* Update saml.md

* Update saml.md

* Update menu.yaml

* Update reporting.md

* Update saml.md

* Update reporting.md

* Update reporting.md

* Update enhanced_ldap.md

* Update _index.md

* content updates

content updates

* Update menu.yaml

* Update datasource_permissions.md

* Update _index.md

* Minor edits

* Update _index.md

* Update docs/sources/enterprise/_index.md

Co-Authored-By: Emil Tullstedt <sakjur@gmail.com>

* Update _index.md

* Update saml.md

* Update reporting.md

Co-authored-by: Emil Tullstedt <sakjur@gmail.com>
2020-03-10 13:54:19 -07:00
Erik Sundell
763fb3bc32 CloudWatch: Expand alias variables when query yields no result (#22695)
* Return empty time series with expanded aliases in case query yielded no results

* PR feedback
2020-03-10 21:14:58 +01:00
Kyle Brandt
73c4bef70f Dependency: sdk's dataframe package renamed to data (#22700)
* use sdk 0.24.0
2020-03-10 15:42:15 -04:00
Steven Vachon
2c6993f18a @grafana/e2e: include Cypress tsconfig in published package (#22698) 2020-03-10 15:37:48 -04:00
Shavonn Brown
b761679d80 Graphite: Update config editor (#22553)
* update config editor

* inlining

* move inline styles

* removed inline style but emotion not working

* fix styles, update types const
2020-03-10 13:20:38 -04:00
Steven Vachon
23d72d25e4 @grafana/e2e: fix runtime ts-loader errors with Cypress support files (#22688)
* Minor changes

* Only exclude installed packages that are not @grafana/e2e itself

* Explicitly load Cypress tsconfig for clarity

* Fix Cypress tsconfig

  * it was trying to extend a config that is not published
  * it needs to be commonjs
2020-03-10 12:20:44 -04:00
Marcus Efraimsson
9cab3b65ec Docs: Add version note about Azure AD OAuth2 (#22692)
Fixes #22633
2020-03-10 17:15:25 +01:00
Tobias Skarhed
9a67e94618 StatPanel: Return base color when there is no value set (#22690) 2020-03-10 16:57:23 +01:00
Carl Bergquist
5f94d31da9 Send jsondata for Datasources on DatasourceConfig for backend plugins (#22681)
ref https://github.com/grafana/grafana-plugin-sdk-go/pull/84
2020-03-10 15:18:27 +01:00
Ivana Huckova
62c824e3a4 Explore: Rich History (#22570)
* Explore: Refactor active buttons css

* Explore: Add query history button

* WIP: Creating drawer

* WIP: Create custom drawer (for now)

* Revert changes to Drawer.tsx

* WIP: Layout finished

* Rich History: Set up boilerplate for Settings

* WIP: Query history cards

* Refactor, split components

* Add resizability, interactivity

* Save history to local storage

* Visualise queries from queryhistory local storage

* Set up query history settings

* Refactor

* Create link, un-refactored verison

* Copyable url

* WIP: Add slider

* Commenting feature

* Slider filtration

* Add headings

* Hide Rich history behind feature toggle

* Cleaning up, refactors

* Update tests

* Implement getQueryDisplayText

* Update lockfile for new dependencies

* Update heading based on sorting

* Fix typescript strinctNullCheck errors

* Fix Forms, new forms

* Fixes based on provided feedback

* Fixes, splitting component into two

* Add tooltips, add delete history button

* Clicking on card adds queries to query rows

* Delete history, width of drawers

* UI/UX changes, updates

* Add number of queries to headings, box shadows

* Fix slider, remove feature toggle

* Fix typo in the beta announcement

* Fix how the rich history state is rendered when initialization

* Move updateFilters when activeDatasourceFilter onlyto RichHistory, remove duplicated code

* Fix typescript strictnull errors, not used variables errors
2020-03-10 15:08:15 +01:00
Torkel Ödegaard
da37f4c83f XSS: Fixed history XSS issue (#22680) 2020-03-10 14:56:27 +01:00
Erik Sundell
cd012bdfb4 Fix caching problem (#22473) 2020-03-10 14:10:48 +01:00
Shavonn Brown
65370c5443 on update for checkbox and switch (#22656)
* on update for checkbox and switch

* use ? instead
2020-03-10 08:45:08 -04:00
Tobias Skarhed
7598d3fb43 Notification Channel: Make test button wider (#22653)
* Remove width
2020-03-10 13:17:03 +01:00
Marcus Efraimsson
c12245bbb3 Backend plugins: Updates due to changes in SDK (#22649)
Use v0.20.0 of SDK
2020-03-10 12:59:03 +01:00
Dominik Prokop
805abdfa2a Make sure commit hook in FieldPropertiesEditor is invalidated when value changes (#22673) 2020-03-10 12:45:51 +01:00
Rob McGuire
17a14a8a48 Docs: Plugin.json: Fix property descriptions, add missing properties, add example (#22281)
* Fix property descriptions, add missing properties

Fixes incorrect property descriptions, adds missing properties, and adds an up-to-date example.

* Update logo descriptions

Updates the "large" and "small" logo descriptions to specify SVG image type requirement, and that they may be identical

* Update docs/sources/plugins/developing/plugin.json.md
2020-03-10 11:50:14 +01:00
Miguel Carvajal
6979b44592 Alerting: Fixed bad background color for default notifications in alert tab (#22660)
* fix: remove harcoded bg color

* added default info

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
2020-03-10 11:24:23 +01:00
Torkel Ödegaard
4e25823705 Webpack: Updated terser plugin (#22669) 2020-03-10 11:09:45 +01:00
Alex Khomenko
5aeb367322 Core: DashboardPicker improvements (#22619)
* Refactor the picker to FC

* Remove redundant variable

* currentDashboardId => currentDashboard

* Make isClearable configurable

* Use useAsyncFn for options loading

* Move getDashboards outside of component
2020-03-10 11:16:56 +02:00
Alex Khomenko
385be77687 Storybook: Forms.Form docs (#22654)
* Add Select error message

* Update Form docs

* Tweak examples

* Fix docs
2020-03-10 10:23:35 +02:00
Marcus Andersson
cc813d71c6 Templating: Migrates some variable types from Angular to React/Redux (#22434)
* Refactor: Adds variables in state to TemplateSrv

* Refactor: Introduces some typings and structures

* Refactor: Introduces picker to adapter

* Refactor: Removes useState and introduces contains instead

* Refactor: Introduces Variable Editor

* Refactor: Adds uuid and simplifies state

* Refactor: Consolidates to VariableRenderer

* Refactor: Adds name change capability

* Refactor: Adds variableMiddleware

* Refactor: Adds ability to change Angular type to type in State

* Fix: Fixes so we check for duplicate names

* Refactor: Adds ability to change State type to type in Angular

* Refactor: Updates name in dashboard templating list

* Refactor: Adds label change to VariableEditor

* Refactor: Adds hide change to VariableEditor

* Refactor: Adds update ability

* Refactor: Adds tooltip

* Refactor: Adds SelectionOptionsEditor

* Refactor: Adds query editor and validation

* Refactor: Adds regex and sort to editor

* Refactor: Adds Selection options

* Refactor: Adds Varible Values Previewer

* Refactor: Changes from array in state to Record

* Refactor: Removes getVariableAtIndex from templateSrv

* Tests: Fixs broken tests

* Chore: Fixes duplicate merge import

* Refactor: Removes strict null errors

* Refactor: Adds duplicate variable

* Refactor: Adds remove variable

* Refactor: Adds change order of variables

* Refactor: Adds add new variable

* Chore: Fixes Prettier formatting

* Refactor: Adds VariablePicker

* Fixed so sub menu is displayed when we only have redux template variables.

* removed unused variable.

* tags will be visibile in the new react picker.

* added some nice colors to the tags.

* Added thunk for selecting a tag.

* Refactor: Cleans up templating state when dashboard unloads

* Refactor: Adds save capabilities for variables in state

* added possibility to select tag.

* Added so you can deselect a tag.

* Fixed issue with coloring on top.

* minor refactoring to make the code more slim.

* Refactor: Fixes dispatch return and copy of variable

* selecting options when tag i selected

* small refactoring.

* fixed so we use options.

* Refactor: Adds getValueForUrl capabilities

* first implementation of keyboard navigation on picker.

* removed comment.

* fixed so you can toggle all options.

* Refactor: Simplified state handling using Redux Toolkit and flat reducer structure

* Refactor: Adds sharedTemplatingReducer and queryVariableReducer

* Tests: Fixs broken tests

* Chore: Removes some strict null errors

* Tests: Fix broken tests

* Refactor: Splitted QueryVariablePicker into smaller components

* Refactor: Moves linktext and selected tags to component instead

* Fix: Fixes the ability to have multiple dropdowns opened at same time

* Fix: Fixes onKeyDown from prev refactor

* Refactor: Adds searchfilter searching

* Tests: Fixes after running e2e tests

* Refactor: Adds an attempt to solve dependencies at startup

* Refactor: Adds feature toggle

* Refactor: Resets all angular files to master

* Refactor: Move stuff to query folder

* Refactor: Initial commit for SubMenu component

* Refactor: Updated DashboardModel with new list

* Refactor: Adds feature toggle to dashboard model and friends

* Refactor: Adds picker to SubMenu

* Refactor: Fixes styling on SubMenu

* Refactor: Fixes processvariables

* Refactor: Initial EditorList skeleton

* Refactor: Refactors out VariableEditorList and VariableEditorContainer

* Refactor: Adds New variable functionality

* Refactor: Adds registred types

* Refactor: Adds edit existing variable functionality

* Refactor: Changes params to thunks

* Refactor: Small fix for cleaning up state when clicking update/add

* Refactor: Better typings for outer containers

* Refactor: Adds change order functionality

* Refactor: Removed notify angular args

* Change so the url is in sync with the redux template variables.

* Adding support for saving proper values and checking changes.

* Refactor: Adds duplicate variable functionality

* Feature: Adds remove variable functionality

* Refactor: Small refactor so e2e tests work as before

* Refactor: Returns null if no visible variables

* Refactor: Adds annotations to SubMenu

* Refactor: Fixes toggling of annotations in SubMenu

* added dashboard links to new submehu.

* Refactor: Small refactor breaking up into smaller components

* Fix: Fixes infinite recursive loop when changing varible name

* Templating: Do not mutate location query state

* Refactor: Fixes minor timing issue when adding new variable

* Refactor: removes initialization in variable_srv constructor

* Refactor: Suggestion on how to handle templating.list in DashboardExporter

* Refactor: Adds getVariables typings and changes ChangeTracker and ShareSnapshotCtrl

* Refactor: Adds getVariable on DashboardModel and changes DashboardMigrator

* Fix: Fixes repeated panels

* wip: starting to add custom variable type.

* Refactor: Merging two different toVariablePayload functions

* Tests: Fixes broken tests

* Fix: Reduces strict null errors

* Tests: Initial commit and fixes strange dependency order

* Tests: Covers sharedTemplatingReducer with tests

* Refactor: Rename state/index.ts => state/reducers.ts as every where else

* Refactor: Renames and moves adapters.ts

* Tests: Adds tests for templatingReducer

* Tests: Adds intitial tests for queryVariableReducer

* starting to ad custom variable.

* Tests: Adds more queryVariableReducer tests

* Added support for custom variable. Next up applying some DRY principles and refactoring.

* fixed compile issue.

* added todo.

* Tests: Fixes broken test

* Tests: Covers queryVariableReducer with tests and fixed a couple of bugs

* Fix: Fixes broken test

* Fix: Reduces strict null errors

* change so custom won't be depending on anything elese.

* fixed descriptions.

* removed unused dependency.

* Fixed issue when adding a new variable and editor is being unmount twice.

* fixed issue with select option loop.

* changed so we update query on typing in editor and removed it from component state.

* Moved runQuery up one level in the component tree.

* renamed action and moved it to custom actions.

* moved applyStateChanges to shared code.

* removed todo comment.

* first stab on moving picker to more general.

* Refactor: Changes so we always show variables type

* removed duplicate code regarding picker.

* Did some renamings.

* Feature: Adds text box variable type

* moved tests from query reducer to picker reducer.

* Removed picker from VariableState.

* removed reference to picker.

* Some more refactorings of the picker reducer + actions.

* Chore: Refactors away editor state to its own state slice (#22515)

* Refactor: Inital move, tests not working

* Tests: Adds editorReducer tests

* Refactor: Cleaning up

* Refactor: Moves logic to thunk instead

* Refactor: Initial commit

* Refactor: Combines reducers to one state

* Refactor: Adds combine reducers

* moved navigation logic flow to a thunk instead of in the component.

* fixed issue with rendering picker link.

* Refactor: Removes variable prop from templating.variables

* refactored and removed some more code.

* Feature: adds Constant variable type

* fixed so tags can be selected.

* Fix: fixes default hide for constant and enum order

* fixed so tags works again.

* Fix: fixes so we use Angular editor when newVariables is not defined

* Fix: fixes wrong hide default for Constant variable

* Fix: fixes bug when using duplicate button

* Fix: changes action id

* Tests: prepares for newVariables

* Chore: reduces strict null errors

* Refactor: removes uuidInEditorReducer for simplification

* Chore: changes after PR comments

* Chore: uses getConfig instead of config

* Tests: fixes so e2e tests check for feature toggle and fixed initLock bug

* Refactor: changes so sharedReducer uses createSlice instead

* Refactor: changes textBoxVariableReducer to use creactSlice instead

* Refactor: changes queryBoxVariableReducer to use creactSlice instead

* Refactor: changes customVariableReducer to use creactSlice instead

* Refactor: changes constantVariableReducer to use creactSlice instead

* Refactor: moves types to specific types.ts files instead

* changed so we use queryValue stored on the variable to populate options input when opening picker.

* Feature: adds the ability to test templating thunks using real store and middleware

* Chore: cleans up unused import

* excluded queryValue from the getSaveModel

* Refactor: adds whenAsyncActionIsDispatched to reduxTester

* Tests: adds initial tests for processVariables

* Added reducer tests for constant variable.

* added tests for custom reducer.

* added tets for texbox reducer.

* Tests: adds more tests for ProcessVariable

* Refactor: fixes processVariable flow so we do notrun updateOptions twice

* Tests: finishes tests for processVariables and removed skip test

* added actions tests for custom and constant.

* Tests: adds tests for setOptionFromUrl

* Tests: adds a naive variable mock builder

* Tests: adds tests for validateVariableSelectionState

* added tests for query variable actions.

* added last test for query actions.

* added more tests.

* some more tests.

* fixed typing errors.

* Fixed issues with variable tags.

Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
2020-03-10 08:53:41 +01:00
Alex Khomenko
88c3b719a1 Grafana UI: Fix Forms.Select onChangeWithEmpty (#22647)
* Sort props

* Add missing deps to useCallback
2020-03-10 08:41:38 +02:00
Chad Nedzlek
0e7c746a87 Azure Monitor: Fix app insights source to allow for new __timeFrom and __timeTo (#21879)
* Fix app insights source to allow for new __timeFrom and __timeTo

* Try fixing the switch
2020-03-10 00:55:41 +01:00
Steven Vachon
cd42b31da5 @grafana/e2e: install necessary dependencies for published package (#22657) 2020-03-09 14:16:09 -04:00
Dominik Prokop
0304493bd2 DashboardSave: Correctly overwrite dashboard when saving (#22650) 2020-03-09 18:16:10 +01:00
Torkel Ödegaard
5d8fc6a1a9 StatPanel: Fixes base color is being used for null values (#22646)
* StatPanel: Fixed color for null values

* StatPanels: Show base value for null values
2020-03-09 17:00:25 +01:00
Dominik Prokop
9d858220ce FieldOverrides: Add value mappings editor to standard config properties registry (#22648) 2020-03-09 15:09:32 +01:00
hutuxian
9716289196 Docs: Update gauge.md (#22637)
Update the hierarchy of gauge.md
2020-03-09 08:19:05 +01:00
Diana Payton
e6aac7a36c Docs: Create Intro grafana (#22522)
* Create add-a-data-source.md

* Added links to Add a data source

* Create intro-to-grafana.md

* Updated menu and files

* fixed link

* Update dashboards.md

* Updated enterprise links

* Update _index.md

* Update intro-to-grafana.md

* added content and links

* Update menu.yaml

* fixing links

* fixing links

* Update menu.yaml

* Updated index.md and what is grafana

* changed topic title

* Update getting_started.md

* Updated content

* Update docs/sources/guides/intro-to-grafana.md

Co-Authored-By: Marcus Olsson <accounts+github@marcus.se.net>

* Update docs/sources/guides/intro-to-grafana.md

Co-Authored-By: Marcus Olsson <accounts+github@marcus.se.net>

* Update docs/sources/guides/intro-to-grafana.md

Co-Authored-By: Marcus Olsson <accounts+github@marcus.se.net>

* Update intro-to-grafana.md

* changed file name

* Update _index.md

* Minor edits

* Update menu.yaml

* Update what-is-grafana.md

* Update what-is-grafana.md

* Fix: updates snapshots

* Revert "Fix: updates snapshots"

Co-authored-by: Marcus Olsson <accounts+github@marcus.se.net>
Co-authored-by: Lukas Siatka <lukasz.siatka@grafana.com>
2020-03-06 13:06:30 -08:00
Ryan McKinley
46fcf9bf08 Toolkit: wrap plugin signing stub with error checking (#22626) 2020-03-06 10:51:48 -08:00
Steven Vachon
aa7e6cf55f @grafana/e2e: fix empty bundle files (#22607)
* Minor changes

* Revert CLI to JavaScript

... as Rollup is only accepts ESM modules and TypeScript would need to use the new incremental builds feature which causes weird Redux module errors.
2020-03-06 12:25:55 -05:00
Stephanie Closson
3745cccde6 Toolkit: include a github release utility (#22520)
* Adding git publish to toolkit

* grafana-toolkit new feature plugin:github-release

* Feedback from code review
1. Used async await and exec for executing commands
2. Using dist folder to get plugin information

* Reverting change to plugin.json back to original value.

* reverted changes to yarn.lock

* reverted changes to yarn.lock

* feedback from code review

* feedback from code review 2

* moved constants to recommended functions

* styling changes and reverting yarn.lock

* removing changes to package.json

* replced execLine with execa

* better error detection around the publish token

* made simpler with commitHash from build

* Testing showed a number of required changes:
- Make the sha configurable
  or through environment variable
  or through git config.
- Allow a release to be recreated
- Set name and repo from git config as this is what
ghr is expecting anyway.
- Appropriate errors if the user
  tries to run a release without
  doing a ci-build and ci-package first.

* Using spinner.
Took out extra dependencies out of project.json
wrote tests manually.

* Updated tests. Now passing

* Adding git publish to toolkit

* grafana-toolkit new feature plugin:github-release

* Feedback from code review
1. Used async await and exec for executing commands
2. Using dist folder to get plugin information

* Reverting change to plugin.json back to original value.

* reverted changes to yarn.lock

* reverted changes to yarn.lock

* feedback from code review

* feedback from code review 2

* moved constants to recommended functions

* styling changes and reverting yarn.lock

* removing changes to package.json

* replced execLine with execa

* better error detection around the publish token

* made simpler with commitHash from build

* Testing showed a number of required changes:
- Make the sha configurable
  or through environment variable
  or through git config.
- Allow a release to be recreated
- Set name and repo from git config as this is what
ghr is expecting anyway.
- Appropriate errors if the user
  tries to run a release without
  doing a ci-build and ci-package first.

* Using spinner.
Took out extra dependencies out of project.json
wrote tests manually.

* Updated tests. Now passing

* updated test for reducers, from master

* package.json and yarn.lock from master
2020-03-06 10:15:04 -07:00
Torkel Ödegaard
5a53c2d02b Rendering: Have phantomjs wait a bit before rendering to give fonts a change to load (#22623) 2020-03-06 17:55:13 +01:00
Torkel Ödegaard
917860c4d3 Cascader: Do not override default width behavior (#22620)
* Cascader: Do not override default width behavior

* Fixed storybook
2020-03-06 16:21:46 +01:00
Diana Payton
733450c7b7 Update documentation-style-guide.md (#22581)
Added link to Google tech writing courses
2020-03-06 06:50:23 -08:00
Carl Bergquist
1dcfaf25fc Adds signed in user to backend v2 plugins requests (#22584)
closes #12043
2020-03-06 14:37:36 +01:00
Jeet Parekh
c73a0007c7 CloudWatch: updated namespaces - Athena, DocDB, and Route53Resolver (#22604) 2020-03-06 10:41:29 +02:00
jonghyeon
0f6769665a Graph: Improve point rendering performance (#22610)
this PR improves canvas rendering performance in drawSeriesPoints
2020-03-06 09:26:15 +01:00
Lukas Siatka
99daa4454b Alerting: Fix state age test failures (#22606)
- use output from relative time instead of static string to prevent
clock issues
2020-03-06 00:28:20 +01:00
Diana Payton
6af45bf4ac Docs: Update image_rendering.md (#22586)
Trying to fix the numbering in Run as standalone Node.js application.
2020-03-05 14:03:40 -08:00
Erik Sundell
5ad8a9722e UI: Segment improvements (#22601)
* Trigger onchange in case user has edited a custom option, and then clicked outside the react select dropdown

* The width of the label is calculated so that the react select input field could get the same width. However, the react select input font is slightly wider, so we need to make that width a little bit larget than the label.
2020-03-05 20:19:43 +01:00
Carl Bergquist
0b86a371bb remove section about alias imports (#22585)
this is not relevant anymore since we removed
all aliased imports.
2020-03-05 19:51:14 +01:00
Marcus Efraimsson
4ff613a432 Backend Plugins: Support handling of streaming resource response (#22580)
Use v0.19.0 of SDK.
Support handling of streaming resource response.
Disable gzip/compression middleware for resources 
to allow chunked/streaming response to clients the gzip
middleware had to be disabled since it buffers the full
response before sending it to the client.

Closes #22569

Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
2020-03-06 01:44:07 +07:00
Daniel Lee
f95c8b785c Stackdriver: Migrate GCE default project (#22593)
* Ensure default project

* Remove debug logging

* Fix broken test

* Update snapshot
2020-03-05 17:53:41 +01:00
Ryan McKinley
e688f13535 Toolkit: plugin ci needs to cooperate better with make/mage (#22588)
* cleanup

* cleanup
2020-03-05 06:06:06 -08:00
Erik Sundell
0f8cfca4e6 surround CloudWatch dimension names with double quotes (#22222) 2020-03-05 14:15:45 +01:00
Marcus Andersson
d227353321 Fix: when reloading page make sure that time picker history is converted to dateTime. 2020-03-05 13:14:42 +01:00
Agnès Toulet
ea3d368e91 Core: add active users stat (#22563)
* Stats: add active user count query

* License: add info in settings

* Stats: Retrieve active users stats for different roles

+ Clean files and tests

* Stats: add dialect.Quote in queries

* Stats: improve tests (require instead of assert)

* Stats: improve tests (require instead of assert)
2020-03-05 12:34:44 +01:00
Marcus Efraimsson
c6cc840ceb Chore: Modules tidy and vendor (#22578) 2020-03-05 00:45:05 +01:00
David
54a3f5fd87 Loki: use series API for stream facetting (#21332) 2020-03-04 17:17:02 +01:00
Marcus Efraimsson
2cf538a466 Testing code owners for backend code (#22572) 2020-03-04 17:08:07 +01:00
Shavonn Brown
b27985ef38 Azure Monitor: config editor updates, update sameas switch, fix test snaps (#22554)
* azure monitor config editor updates, do not show helper for sameas unless just switched, not create

* update snapshots
2020-03-04 09:11:11 -05:00
Alex Khomenko
c5ceae3808 Grafana-UI: Use value for Radio group id (#22568) 2020-03-04 15:31:01 +02:00
Alexander Zobnin
e1af933d4a Chore: fix moment import in alerting tests (#22567)
* Chore: disable no-restricted-imports rule for moment

fix enterprise build

* Chore: get rid of moment, use dateTime in alerting tetst
2020-03-04 15:47:23 +03:00
Carl Bergquist
766d8a5888 avoid aliased import in cli (#22566) 2020-03-04 13:18:13 +01:00
Carl Bergquist
3fdd2648b1 Chore: Avoid aliasing importing models in api package (#22492) 2020-03-04 12:57:20 +01:00
Alexander Zobnin
fcaff011b1 ShareModal: able to extend tabs (#22537)
* ShareModal: use generic tab type

* ShareModal: able to extend with custom tabs

* ShareModal: able to extend dash/panel tabs separately

* grafana-ui: ModalTabContent component
2020-03-04 12:59:30 +03:00
Alexander Zobnin
9731ea9b89 Tests: fix alerting reducers tests (#22560) 2020-03-04 12:39:56 +03:00
Emil Tullstedt
3c6a7a51bf Logs: Improve log level guess (#22094)
Fixes #22075
2020-03-04 09:48:21 +01:00
Ryan McKinley
5166073f98 DataSourceWithBackend: apply template variables (#22558) 2020-03-03 22:27:58 -08:00
Steven Vachon
ee5fcc03df @grafana/e2e: added support for plugin repositories (#22546)
* Minor changes

* Include Cypress support files in published package

* Added CLI

… with support for custom configurations (which Cypress does not currently support by default):

  * Loads cypress.json from @grafana/e2e as a base config (via a custom Cypress plugin)
  * Sets default values for project-level Cypress files (tests, etc)
  * Optionally loads a cypress.json from the current working directory as overrides

* Updated lockfile
2020-03-03 18:12:52 -05:00
Ricardo
c3884abf62 Add fallback to search_base_dns if group_search_base_dns is undefined. (#21263)
* Add fallback to search_base_dns if group_search_base_dns is undefined.

refs: #20862

* removed newline to make lint-go happy

* Added requested changes on ldap.md for last commit

Refs: #21263
2020-03-03 09:11:16 -08:00
Joseph Robinson
b24c7cdd64 Docs: Added a Markdown Style Guide (#22425)
* Docs: Adding a Markdown Style Guide

What this PR does / why we need it: This request builds a markdown style guide for writers documenting information about Grafana services for users.
This PR serves the need to make documentation and READMEs more consistent and maintainable.

Which issue(s) this PR fixes: This request fixes the issue grafana#19592

Fixes grafana#19592

Special notes for your reviewer:

@marcusolsson and @oddlittlebird, sorry for the delay. I've set up the style guide, and it is ready for review, or additional sections.

* Docs: Adding a Markdown Style Guide

What this PR does / why we need it: This request builds a markdown style guide for writers documenting information about Grafana services for users.
This PR serves the need to make documentation and READMEs more consistent and maintainable.

Which issue(s) this PR fixes: This request fixes the issue grafana#19592

Fixes grafana#19592

Special notes for your reviewer:

@marcusolsson and @oddlittlebird, sorry for the delay. I've set up the style guide, and it is ready for review, or additional sections.

* Docs: fixing typos and char repetition

Editing some typos in the text, and removing the repetition of A and B characters that appeared in the file.

* Docs: Changing content following review of new Markdown Style Guide

- adjustment to headings to sentence case.
- adding an introduction
- removing punctuation content
- making suggested word and punctuation fixes

Fixes #19592
2020-03-03 09:06:00 -08:00
Tobias Skarhed
98418ea55f Old AsyncSelect: Add story (#22536)
* Change to CSF

* Remove comments

* Fix AsyncSelect error

* Remove changes to the component

* Restructure

* Remove comments

* Add searching

* Remove witespace

Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-03-03 17:06:57 +01:00
Alexander Zobnin
3aa3fa3ee1 Chore: add missing aria-label for rendered panel image (e2e tests) (#22543) 2020-03-03 18:51:49 +03:00
Alex Khomenko
3a5375ddd8 Form migrations: Dashboard- and TimeZonePicker (#22459)
* Add new form styles to dashboard picker

* Use Forms.Select for TimeZonePicker

* Use new form elements for DashboardPicker

* Grafana UI: Extract types from SelectBase, add utils.ts

* Grafana UI: Fix imports

* Grafana UI: Add support for value of type number

* Grafana UI: tweak value search function

* Grafana UI: Add tests for findSelectedValue

* Grafana UI: Add tests for cleanValue

* Grafana UI: Remove redundant check

* Grafana UI: Order imports

* Grafana-UI: Fix TimeZonePicker.story.tsx

* Grafana-UI: Fix timezone value

* Fix merge

* Grafana-UI: Use Cascader vs Forms.Select for TimeZonePicker

* Grafana-UI: Add default size props
2020-03-03 15:09:52 +01:00
Alexander Zobnin
d66e72fa67 Migration: Share dashboard/panel modal (#22436)
* ShareModal: refactor dashboard export modal

* Modal: show react modals with appEvents

* ShareModal: embed panel tab

* ShareModal: bind to shortcut (p s)

* grafana-ui: ClipboardButton component

* ShareModal: use ClipboardButton component

* ClipboardButton: add to storybook

* ShareModal: use event-based approach for dashboard share

* ShareModal: remove unused

* ModalReact: pass theme to the component

* ShareModal: styles clean up

* DashboardExporter: fix tests

* fixed whitespace betwen icon and link

* ShareModal: use theme from config

* Modal: tab header refactor

* ShareModal: tests

* ShareModal: fix share url rendering

* ShareModal: remove unused angular files

* Chore: fix strictNullChecks errors

* Modal: provide theme for event-based modal usage

* ShareModal: use ModalsController for opening modal

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
2020-03-03 15:04:28 +03:00
Tobias Skarhed
87da6a293b Revert "Select: scroll into view when navigate with up/down arrows (#22503)" (#22535)
This reverts commit 75fe3c839b.
2020-03-03 11:51:17 +01:00
Marcus Efraimsson
e6cec8dbdc Backend plugins: Prepare and clean request headers before resource calls (#22321)
Moves common request proxy utilities to proxyutil package with
support for removing X-Forwarded-Host, X-Forwarded-Port,
X-Forwarded-Proto headers, setting X-Forwarded-For header
and cleaning Cookie header.
Using the proxyutil package to prepare and clean request
headers before resource calls.

Closes #21512
2020-03-03 11:45:16 +01:00
Tobias Skarhed
8b122ee464 Cascader: Add size for input (#22517) 2020-03-03 10:34:42 +01:00
Ryan McKinley
f09ee3d8c2 ArrowDataFrame: allow empty results (#22524) 2020-03-02 23:56:01 -08:00
Dominik Prokop
baa356e26d Migration: Save dashboard modals (#22395)
* Add mechanism for imperatively showing modals

* Migration work in progress

* Reorganise save modal components

* use app events emmiter instead of root scope one

* Add center alignment to layoout component

* Make save buttons wotk

* Prettier

* Remove save dashboard logic  from dashboard srv

* Remove unused code

* Dont show error notifications

* Save modal when dashboard is overwritten

* For tweaks

* Folder picker tweaks

* Save dashboard tweaks

* Copy provisioned dashboard to clipboard

* Enable saving dashboard json to file

* Use SaveDashboardAsButton

* Review

* Align buttons in dashboard settings

* Migrate SaveDashboardAs tests

* TS fixes

* SaveDashboardForm tests migrated

* Fixe some failing tests

* Fix folder picker tests

* Fix HistoryListCtrl tests

* Remove old import

* Enable fixed positioning for folder picker select menu

* Modal: show react modals with appEvents

* Open react modals using event

* Move save dashboard modals to dashboard feature

* Make e2e pass

* Update public/app/features/dashboard/components/SaveDashboard/SaveDashboardButton.tsx

* Hacking old vs new buttons to make all the things look like it's old good Grafana ;)

Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
2020-03-03 08:22:26 +01:00
Ryan McKinley
cc638e81f4 Toolkit: don't clean dist folder before build (#22521) 2020-03-02 11:29:09 -08:00
Tobias Skarhed
2483efb8c5 Docs: Add Storybook guidelines (#22465)
* Add Storybook guidlines

* Make lists

* Update contribute/style-guides/storybook.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/storybook.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/storybook.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/storybook.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/storybook.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/storybook.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/storybook.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update docs with feedback

Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
2020-03-02 20:11:04 +01:00
Marcus Andersson
29a8417c93 Docs: Removed menu links to SDK Reference until we are ready for 7.0 (#22509) 2020-03-02 15:49:44 +01:00
Erik Sundell
934a8f08ae Stackdriver: Project selector (#22447)
* clean PR #17366

* udpate vendor

* [WIP] Implement projects management for stackdriver

* [WIP] Implement projects management for stackdriver

* [WIP] Implement projects management for stackdriver

* Implement projects management for stackdriver

* [WIP][Tests] Fix errors

* clean anonymous struct

* remove await

* don't store project list

* Add default project on query editor

* gofmt

* Fix tests

* Move test data source to backend

* Use segment instead of dropdown. remove ensure default project since it's not being used anymore.

* Fix broken annotation editor

* Load gceDefaultAccount only once when in the config page

* Reset error message on auth type change

* Add metric find query for projects

* Remove debug code

* Fix broken tests

* Fix typings

* Fix lint error

* Slightly different approach - now having a distiction between config page default project, and project that is selectable from the dropdown in the query editor.

* Fix broken tests

* Attempt to fix strict ts errors

* Prevent state from being set multiple times

* Remove noOptionsMessage since it seems to be obosolete in react select

* One more attempt to solve ts strict error

* Interpolate project template variable. Make sure its loaded correctly when opening variable query editor first time

* Implicit any fix

* fix: typescript strict null check fixes

* Return empty array in case project endpoint fails

* Rename project to projectName to prevent clashing with legacy query prop

* Fix broken test

* fix: Stackdriver - template replace on filter label

should have a regex format as that escapes the dots
in the label name which is not valid.

Co-authored-by: Labesse Kévin <kevin@labesse.me>
Co-authored-by: Elias Cédric Laouiti <elias@abtasty.com>
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
2020-03-02 09:31:09 -05:00
Boyko
75fe3c839b Select: scroll into view when navigate with up/down arrows (#22503)
* scroll into view when move item up/down

Signed-off-by: blalov <boiskila@gmail.com>

* update test snapshots

Signed-off-by: blalov <boiskila@gmail.com>
2020-03-02 12:17:39 +01:00
Chadi El Masri
3c21a37bbe Elastic: To get fields, start with today's index and go backwards (#22318)
* Elastic: To get fields, start with today's index and go backwards

* Elastic: distinguish non-existing indices from other issues; change index traversal from recursive to iterative; go through a max of 7 days

* Elastic: fix the comments

Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
2020-03-02 10:45:31 +01:00
Mohit Gupta
94951df1c1 API: Include IP address when logging request error (#21596)
Includes IP address when logging request error, for example 
when a user fails to login.

Fixes #21310
2020-03-02 09:43:16 +01:00
Carl Bergquist
f9962eabff chore: avoid aliasing imports in services (#22499) 2020-02-29 13:35:15 +01:00
Alex Khomenko
a8531978b6 Grafana-UI: add storysource addon to Storybook (#22490)
* Add @storybook/addon-storysource

* Enable the addon

* Fix Select label

* Lock storysource version
2020-02-28 18:44:18 +02:00
Shavonn Brown
0c020f222e canary 404 previous versions (#22495) 2020-02-28 11:27:45 -05:00
Steven Vachon
0f06200a9d Fix Dockerfile lint errors (#22496) 2020-02-28 16:27:49 +01:00
Tobias Skarhed
768911a6f9 Migration: Invite Signup (#22437)
* Inital commit with new page

* Make routing work

* Correct field

* Move submit button and fix routing after signup

* Remove comments

* Fix feedback

* Undo mistake
2020-02-28 15:45:00 +01:00
Agnès Toulet
1db26d354f Core: add hideFromMenu for child items (#22494) 2020-02-28 15:09:55 +01:00
lfroment
72628c8ea0 Dashboard: Adds support for a global minimum dashboard refresh interval (#19416)
This feature would provide a way for administrators to limit the minimum 
dashboard refresh interval globally.
Filters out the refresh intervals available in the time picker that are lower 
than the set minimum refresh interval in the configuration .ini file
Adds the minimum refresh interval as available in the time picker.
If the user tries to enter a refresh interval that is lower than the minimum 
in the URL, defaults to the minimum interval.
When trying to update the JSON via the API, rejects the update if the 
dashboard's refresh interval is lower than the minimum.
When trying to update a dashboard via provisioning having a lower 
refresh interval than the minimum, defaults to the minimum interval 
and logs a warning. 

Fixes #3356

Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
2020-02-28 14:32:01 +01:00
Torkel Ödegaard
1db8849e51 CI: Deploy enterprise image (#22488) 2020-02-28 13:22:38 +01:00
Carl Bergquist
63fe7fd8c7 changelog: adds note about breaking change (#22480) 2020-02-28 12:51:53 +01:00
Carl Bergquist
67ec9edcc8 chore: avoid alias for models in plugins (#22483) 2020-02-28 12:51:21 +01:00
Carl Bergquist
f2f2722bb1 chore: avoid aliasing models in middleware (#22484) 2020-02-28 12:50:58 +01:00
Alex Khomenko
8b9b67f248 Grafana UI: Add missing argument (#22487) 2020-02-28 13:09:21 +02:00
Torkel Ödegaard
c002a39456 NewPanelEditor: Angular panel options, and angular component state to redux major change (#22448)
* NewPanelEdit: Added angular options to new panel editor and started looking and angular component state

* Moved angular component state to redux

* Close to working 100%

* Think everything is working

* AlertTab: Alert tab now gets angularComponent from redux

* Fixed panel menu access to angular panel component

* Added new tests

* Fixed unit test

* Fixed strict null errors

* Fixed typescript issues

* fixed issues
2020-02-28 11:04:40 +01:00
Ivana Huckova
60dbf72820 @grafana/ui: Create slider component (#22275)
* grafana/ui: Create slider

* grafana/ui: Create slider, tests, add to storybook

* Update Slider, minor changes

* Implement single value slider

* Update style

* Update packages/grafana-ui/package.json

Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>

* Update packages/grafana-ui/src/components/Slider/Slider.tsx

Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>

* Update slider, include PR review feedback

* Update packages/grafana-ui/src/components/Slider/Slider.tsx

Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>

* Update packages/grafana-ui/src/components/Slider/Slider.tsx

Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>

* Export orientatin types, gix selectability of tooltip text

* Remove Orientation export from grafana/ui

* Testing Global component to inject global styles

* Add comments

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-02-28 11:02:31 +01:00
Agnès Toulet
646b74efbb Icons: add reports icon (#22445) 2020-02-28 09:51:03 +01:00
Peter Holmberg
3f7b058bea Panel inspect: Horizontal scrolling in Data table (#22245)
* First try at horizontal scrolling

* move width logic to table

* Update packages/grafana-ui/src/components/Table/Table.tsx

Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>

* wrap table with memo

* fix typo

* re add field

* WIP: Table scrolling troubles

* Annother approach

* Think it's working

* Removed unnessary change

* Table: Added custom scrollbar for horizontal scrolling

* Removed console log and fixed test

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
2020-02-28 09:26:20 +01:00
Vikky Omkar
066d5cf4da Alerting: Fixed the issue/bug of diff and percent_diff functions *Breaking change* (#21338)
fixes #16270 #10129
2020-02-27 20:25:03 +01:00
Ryan McKinley
0606555ba1 App Plugins: support react pages in nav (#22428) 2020-02-27 09:10:21 -08:00
Steven Vachon
2b6a88bf59 Optimized package.json files (#22475)
* Used repository shortcut syntax where possible
* Added repository directories for monorepo packages
* Alphabetically sorted npm scripts
2020-02-27 12:00:36 -05:00
Ryan McKinley
63c6fc5f4e Toolkit: add junit reporting and jest.config.js to plugin build (#22450) 2020-02-27 08:53:59 -08:00
Alex Khomenko
62d86c956f Grafana UI: Add forwardRef (#22466) 2020-02-27 12:24:36 +02:00
Diana Payton
f92f657f17 Docs: Update Getting started (#22422)
* Rewrite getting started

Added Intro to grafana file

* Update getting_started.md

* Delete intro-to-grafana

* Adding and organizing intro content

* Update intro-to-grafana.md

* Update intro-to-grafana.md

* More work on geting started

* Update getting_started.md

* Update getting_started.md

* Update getting_started.md

* updated links

* Update dashboards.md

* Update dashboards.md

* Update getting_started.md
2020-02-26 10:39:47 -08:00
Martin
cffcc95be0 pkg/api/pluginproxy: Access token provider should handle access tokens without ExpiresOn field (#19928)
* pkg/api/pluginproxy: Add support for expire_in field in access-token

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-02-26 15:59:02 +01:00
Marc-Antoine Leclercq
67a7e03615 Documentation: Specify usage of datasource whitelist (#22412)
* Specify usage of datasource whitelist

Added a sentence explaining the data_source_proxy_whitelist  property does not have any effect on pgsql mssql and mysql.

Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>
2020-02-26 15:57:11 +01:00
Dominik Prokop
22ce16cc9b Form: Allow default values updates (#22435)
* Allow default values update in form

* Update packages/grafana-ui/src/components/Forms/Form.story.tsx
2020-02-26 14:17:21 +01:00
Torkel Ödegaard
712253fbee NewPanelEditor: Wait a bit before resending query result on panel editor exit (#22421) 2020-02-26 13:39:23 +01:00
Alex Khomenko
bb6a6d795f Grafana-UI: update date picker (#22414)
* Grafana UI: Add new styles

* Grafana UI: add picker focus styles

* Grafana UI: use formInputBg

* Grafana UI: remove extra box-shadow

* Grafana UI: Tweak overlay position

* Grafana UI: Tweak overlay borders

* Grafana UI: Align overlay with input
2020-02-26 13:56:01 +02:00
Arve Knudsen
eb98d9c15b grafana-cli: Upgrade to urfave/cli v2 (#22402)
* grafana-cli: Upgrade to urfave/cli v2
2020-02-26 12:27:31 +01:00
Marcus Andersson
6bc369629d Docs: adding first version of the auto-generated packages API docs. (#22107)
* trying out api-extractor.

* works with our setup of build.

* wip.

* changed the packages so it works better with the api-extractor.

* Changes to make the api-extractor to work.

* cleaned up the api-extractor config files.

* added some more documentation.

* added tsdoc-metadata to gitignore.

* removed the generated docs (will do that in another PR).

* added execute permission to script for generating dosc.

* added so we will push generated docs to branch.

* will clean packages_api on abort.

* Fixed failing tests.

* fixed formatting issue with typedoc comment.

* temporarily disabled tslint rules about namespace until https://github.com/microsoft/rushstack/issues/1029 is resolved

* temporary enabled bable namespaces.

* updated build script.

* updated script.

* updated script with some colors.

* changed to camelCase.

* removed spacing.

* Starting to add documentation guidelines.

* added examples headline.

* added menu options.

* added parameters and return values.

* Fixed merge error.

* Added first version of auto-generated docs.

* changed so we use the eslint ignore syntax.

* changed to correct eslint ingnore comment.

* fixed some spelling errors reported by codespell.

* added script to generate docs in current folder.

* updated api docs.

* lerna bootstrap.

* added eror to the ingore words list.

* removed file that should be ignored.

* updated locKFILE.

* referenced the code comments guidelines.

* updated packages.

* updated deps.

* updated the autogenerated dosc.

* adding missing new line.
2020-02-26 10:03:53 +01:00
Torkel Ödegaard
89e6c45090 NewPanelEditor: Panel edit tweaks (#22415)
* NewPanelEditor: Alternative edit layout

* Fixed full height issue

* panel-edit-tabs experiment

* minor tweaks

* PanelEditor: Minor tweaks
2020-02-25 18:13:16 +01:00
Torkel Ödegaard
9272af264a NewPanelEditor: Panel edit tweaks (#22415)
* NewPanelEditor: Alternative edit layout

* Fixed full height issue

* panel-edit-tabs experiment

* minor tweaks

* PanelEditor: Minor tweaks
2020-02-25 17:58:20 +01:00
Agnès Toulet
1dd404a1fb Core: Make application title customizable for WL (#22401)
* Core: Add custom app title

* Docs: Update White Labeling title customization

* Core: set back export for Branding types
2020-02-25 15:18:37 +01:00
Marcus Andersson
204682e9b8 Fix: making select to return empty list when no values are selected in multivalue mode.
* Fixed error in storybook when remving selections.

* moved fix to select base instead of in story.

* updated to check for null or undefined.
2020-02-25 15:07:13 +01:00
Marcus Andersson
12f1af2956 Fix: Added missing "remove"-icon for light theme. 2020-02-25 14:43:15 +01:00
Marcus Andersson
e2038e0614 Docs: adding API reference documentation support for the packages libraries. (#21931)
* trying out api-extractor.

* works with our setup of build.

* wip.

* changed the packages so it works better with the api-extractor.

* Changes to make the api-extractor to work.

* cleaned up the api-extractor config files.

* added some more documentation.

* added tsdoc-metadata to gitignore.

* removed the generated docs (will do that in another PR).

* added execute permission to script for generating dosc.

* added so we will push generated docs to branch.

* will clean packages_api on abort.

* Fixed failing tests.

* fixed formatting issue with typedoc comment.

* temporarily disabled tslint rules about namespace until https://github.com/microsoft/rushstack/issues/1029 is resolved

* temporary enabled bable namespaces.

* updated build script.

* updated script.

* updated script with some colors.

* changed to camelCase.

* removed spacing.

* Starting to add documentation guidelines.

* added examples headline.

* added parameters and return values.

* Fixed merge error.

* changed so we use the eslint ignore syntax.

* changed to correct eslint ingnore comment.

* fixed some spelling errors reported by codespell.

* added script to generate docs in current folder.

* lerna bootstrap.

* removed file that should be ignored.

* updated locKFILE.

* referenced the code comments guidelines.

* updated packages.

* updated deps.
2020-02-25 13:59:11 +01:00
maximka
002d2119fd Accessibility: Makes tag colors more accessible (#22398)
solves issue #22396
2020-02-25 12:27:39 +01:00
Agnès Toulet
d3c50692c0 Admin: fix images on license page (#22413) 2020-02-25 12:06:46 +01:00
Ryan McKinley
e4d2b6c203 DataSourceWithBackend: Add a get/post resource standard path (#22408) 2020-02-25 11:58:05 +01:00
Rob McGuire
c758440c50 Docs: Fix examples, grammar, add links (#22406)
- Fix examples: syntax errors, formatting
- Add links to referenced Emotion documentation
- Fix grammar, punctuation
- Update headings: Remove top-level "Emotion", adjust others
2020-02-24 17:54:28 -08:00
Rob McGuire
798d62c605 Docs: Add links, fix grammar, formatting, wording (#22381)
* Docs: Add links, fix grammar, formatting, wording

- Add links to theme files and technology references
- Adjust formatting to be consistent, e.g., syntax highlighting, section spacing
- Fix misc grammar, punctuation
- Fix SASS -> Sass

Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
2020-02-24 23:05:56 +01:00
Leonard Gram
aeab27c34c Changelog: adds missing enterprise features (#22399)
* Changelog: adds missing enterprise features

* wording
2020-02-24 16:50:09 +01:00
Agnès Toulet
7f86f2d4f3 Docs: Add info on active LDAP sync (#22347)
* Docs: Add info on active LDAP sync

* Update docs/sources/enterprise/enhanced_ldap.md

Co-Authored-By: Leonard Gram <leo@xlson.com>

* Docs: remove usage of "he" in LDAP sync

Co-authored-by: Leonard Gram <leo@xlson.com>
2020-02-24 10:48:07 +01:00
Torkel Ödegaard
7946eee389 Docs: Fixed formatting issue in new stat docs (#22390)
* Docs: Fixed formatting issue in new stat docs

* Fixed newline
2020-02-24 10:03:57 +01:00
Steven Vachon
3de625ef8e @grafana/toolkit: completed support for source maps in plugin builds (#22379) 2020-02-22 18:54:02 -05:00
Torkel Ödegaard
5b40b26744 UX: BackButton left arrow icon (#22369)
* Adding new svg for back arrow button

* Created new back button component

* same stroke width

* minor fix

* Style changes

* hover animation

* Minor tweak
2020-02-22 22:13:56 +01:00
Torkel Ödegaard
22eb558d80 Scrollbar: Show scrollbar on only on hover (#22386) 2020-02-22 21:09:06 +01:00
Torkel Ödegaard
1f4a04436c NewPanelEditor: Fixed cleanup that could cause crash (#22384)
* NewPanelEditor: Fixed cleanup that could cause crash

* Fixed unit test
2020-02-22 21:08:42 +01:00
Torkel Ödegaard
c79e7afcbd Theme: Fixed bug in sass file (#22382) 2020-02-22 16:01:04 +01:00
Arve Knudsen
bf908424a7 Alerting: Don't include image_url field with Slack message if empty (#22372) 2020-02-21 15:43:54 +01:00
Torkel Ödegaard
8c2107cd35 Docs: New doc pages for panels Stat, Gauge & Bar Gauge (#22335)
* Initial take

* inital gauge docs

* Updated and added bar gauge docs

* Updated based on feedback
2020-02-21 15:23:20 +01:00
Dominik Prokop
d6ca781c49 Docs: Update front-end style guide (#22197)
* Update front end style guide

* Update contribute/style-guides/frontend.md

* Update contribute/style-guides/frontend.md

* Add code samples after review

* Update contribute/style-guides/frontend.md

* Update contribute/style-guides/frontend.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/frontend.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/frontend.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/frontend.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/frontend.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/frontend.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/frontend.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/frontend.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update contribute/style-guides/frontend.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Review

* Review

* Update contribute/style-guides/frontend.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
2020-02-21 07:35:54 +01:00
Sofia Papagiannaki
e7a1896fae Chore: Update latest.json (#22345) 2020-02-20 08:49:05 -08:00
Arve Knudsen
9154d7013f CircleCI: Fix publishing of releases (#22342) 2020-02-20 17:24:57 +01:00
Sofia Papagiannaki
252a2fdce3 Changelog: v6.6.2 (#22341) 2020-02-20 08:01:53 -08:00
Arve Knudsen
9baec83600 CircleCI: Switch to new master build pipeline (#22158) 2020-02-20 16:09:28 +01:00
eldin
21015b0899 Docs: Update white-labeling.md (#22224) 2020-02-20 16:01:58 +01:00
Torkel Ödegaard
4f9b6c55c0 Webpack: Upgrade terser webpack plugin (#22332) 2020-02-20 11:38:37 +01:00
Alex Khomenko
fa8246aa4c grafana/ui: Export TextArea under Forms namespace (#22328) 2020-02-20 10:35:14 +01:00
Mohit Nain
458eccbfc0 Suggesting couple of changes to the document (#22298)
* Suggesting couple of changes to the document

Line 15 should be modified to use your application instead of an application, same way it is being used in other auth docs.

typo in line 76, can is repeated twice . Correcting that typo

* Update docs/sources/auth/gitlab.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update gitlab.md

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
2020-02-20 10:19:39 +01:00
Mohit Nain
0418fb3f4f Correcting Line 22 (#22292)
* Correcting Line 22

Menu drop down is correct description for the control , rather than the menu that drops down

* Update docs/sources/auth/google.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update docs/sources/auth/google.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
2020-02-20 10:16:25 +01:00
Rob McGuire
ccdd964811 Docs: Fix "enable" steps formatting (#22324)
* Docs: Fix "enable" steps formatting

* Update docs/sources/features/datasources/testdata.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
2020-02-20 10:14:23 +01:00
Diljit PR
48648561fa [Docs] Improvised instructions for adding data source. (#22305) 2020-02-20 10:03:52 +01:00
Roman Misyurin
e7244f0f8a DashLinks: Add pull right to dropdown menu (#22233) 2020-02-20 10:02:13 +01:00
Tobias Skarhed
d2689b6d6c Migration: User invite (#22263)
* Add new form and functionality

* Add new files

* Connect to Redux and add navigation stuff

* Add required login/name

* Remove import

* Fix feedback

* Replace direct button spacing with HorizontalGroup

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-02-20 08:01:14 +01:00
Tobias Skarhed
9cf84c51f5 Select: Fix focus issue and remove select container (#22309) 2020-02-20 07:25:23 +01:00
Miguel Carvajal
49fe4ff69e Annotations: Call panel refresh when table transform changes to annotations (#22323) 2020-02-20 07:11:42 +01:00
Mohit Nain
9a65c5a90d Docs: Couple of changes to the document (#22291)
* Couple of changes to the document

Correcting a typo in line 53
Line 226 should be re-written as "To easily configure"

* Update docs/sources/auth/generic-oauth.md

Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-02-19 14:56:12 -08:00
Mohit Nain
5e1d1c1d01 Docs: Typo correction in Line 19 (#22297)
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-02-19 14:54:47 -08:00
Marcus Efraimsson
d0a80c59f3 Rendering: Store render key in remote cache (#22031)
By storing render key in remote cache it will enable
image renderer to use public facing url or load
balancer url to render images and thereby remove
the requirement of image renderer having to use the
url of the originating Grafana instance when running
HA setup (multiple Grafana instances).

Fixes #17704
Ref grafana/grafana-image-renderer#91
2020-02-19 19:47:39 +01:00
Marcus Efraimsson
9d7c74ef91 Backend Plugins: Provide proper plugin config to plugins (#21985)
Properly provides plugin configs to backend plugins.
Uses v0.16.0 of grafana-plugin-sdk-go-

Ref #21512
Ref #19667
2020-02-19 19:17:05 +01:00
Dominik Prokop
f82a6aa0d0 New panel edit: data links tweaks (#22304)
* Add basic layout components

* Add some love to data links in new panel edit

* fix prettier
2020-02-19 18:55:44 +01:00
Carl Bergquist
b0b46991ec Metrics: Add gauge for requests currently in flight (#22168)
Add gauge for requests currently in flight.

Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
2020-02-19 18:29:47 +01:00
Arve Knudsen
8d1bef3769 OAuth: Enforce auto_assign_org_id setting when role mapping enabled using Generic OAuth (#22268)
* OAuth: Make use of auto_assign_org_id setting
2020-02-19 17:38:53 +01:00
Arve Knudsen
4c282c538a CircleCI: Upgrade Ubuntu base image to 19.10 also for enterprise (#22315) 2020-02-19 17:06:02 +01:00
Leonard Gram
d5a2bc1a54 CI: check ubuntu and alpine images with trivy (#22314)
* CI: check ubuntu and alpine images with trivy

* CI: clear trivy cache before running
2020-02-19 16:10:22 +01:00
Arve Knudsen
b148b306e2 Docker: Upgrade Ubuntu to 19.10 (#22306) 2020-02-19 15:23:54 +01:00
Steven Vachon
7bf3f0b9c1 grafana/data: runtime dependencies moved from devDependencies (#22283)
... so that they get installed within consumer projects
2020-02-19 14:40:41 +01:00
Torkel Ödegaard
0dbe5323d7 PanelInspector: Fixed issue in panel inspector (#22302) 2020-02-19 14:39:44 +01:00
Dominik Prokop
e6c59d0729 grafana/ui: Add basic horizontal and vertical layout components (#22303) 2020-02-19 13:45:25 +01:00
Dominik Prokop
55277ca732 Field Config Editors: Remove namespacing from standard field config editors (#22296) 2020-02-19 13:44:33 +01:00
Dominik Prokop
943f9b29ec CircleCI: Increase nodejs max memory (#22295)
* Increase nodejs max memory

* Indentation

* Update .circleci/config.yml

Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>

* Update .circleci/config.yml

Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-02-19 12:18:36 +01:00
Diana Payton
b81c842510 Update rpm.md (#22284)
Minor format edits
2020-02-19 11:53:26 +01:00
Torkel Ödegaard
a45794d0ec FieldConfigs: String select type & cell display mode added to table panel (#22274)
* FieldConfigs: Added string select field config

* FieldConfigs: Added string select field config

* Changed to generic select type
2020-02-19 11:30:19 +01:00
Torkel Ödegaard
e591fbc322 LinkSrv: Add newlines so I can read code 2020-02-19 09:18:50 +01:00
Rob McGuire
33fae87899 Docs: Fix TestData docs (#22279)
* Update TestData docs

Fixes TestData docs by correcting name, installation instructions, etc. Should prevent issues like #16386.

- Fix name: `Grafana TestData` -> `TestData DB`
- Fix "Enable" section instructions
- Fix "Dashboard" section instructions
- Fix grammar

* Bold clickable items, list step-by-step instrs.

* Apply suggestions from code review

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
2020-02-18 15:06:33 -08:00
Marcus Efraimsson
fd52570b7f API: Improve recovery middleware when response already been written (#22256)
Suppresses stacktrace in recovery middleware if error is
http.ErrAbortHandler.
Skips writing response error in recovery middleware if
resoonse have already been written.
Skips try rotate of auth token if response have already
been written.
Skips adding default response headers if response have
already been written.

Fixes #15728
Ref #18082

Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
2020-02-18 22:53:40 +01:00
Diana Payton
131610e8f7 Update mac.md (#22280)
Minor link update
2020-02-18 13:23:07 -08:00
Steven Vachon
c35dc9a0f5 @grafana/toolkit: lint fix option now writes changes to disk (#22278) 2020-02-18 15:55:42 -05:00
Diana Payton
e08b39d4f0 Docs: minor fixes (#22223)
* Update enhanced_ldap.md

* Update ldap.md

* Minor fixes
2020-02-18 12:28:59 -08:00
Adrian Coveney
39e0ce305b Reorder cipher suites for better security (#22101)
Put the cipher suites with Forward Secrecy at or nearer the top, keeping any TLS v1.3 suites at the top, following best practice guides for the ordering of the rest. There is no change to the selection of suites only reordering.
2020-02-18 18:58:36 +01:00
Diana Payton
37aa584a54 Docs: Minor typo fix (#22221) 2020-02-18 09:08:49 -08:00
Torkel Ödegaard
7acea5b3fa NewPanelEdit: Add back datalinks and new table panel fix (#22267)
* NewPanelEditor: Add back data links

* Made custom table options work in table panel
2020-02-18 17:08:39 +01:00
Sebastian Poxhofer
4cf765839a Prometheus: Implement region annotation (#22225) 2020-02-18 16:10:15 +01:00
Torkel Ödegaard
6ad8375293 Table: Fixed header alignment (#22236) 2020-02-18 14:16:42 +01:00
Carl Bergquist
ff9556229a Data proxy: Log proxy errors using Grafana logger (#22174)
Now any errors logged by http.ReverseProxy are forwarded to 
Grafana's logger and includes more contextual information like
level (error), user id, org id, username, proxy path, referer and 
IP address.

Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
2020-02-18 13:26:01 +01:00
Marcus Andersson
08bf2a5452 TimePicker: fixing weird behavior with calendar when switching between months/years (#22253)
* fixed issues with timepicker closing when month is changed.

* removed console.logs.

* fixed so calendar isn't changing size when selecting several dates.

* Prevent calendar from closing when changing year.

* fixed according to PR feedback.
2020-02-18 12:30:11 +01:00
ROY
45da3b77a8 Update timeseries.md (#20795)
* Update timeseries.md

Update to docs-imagebox for the image link.

* Update docs/sources/guides/timeseries.md

Co-Authored-By: Marcus Olsson <olsson.e.marcus@gmail.com>

Co-authored-by: Marcus Olsson <accounts+github@marcus.se.net>
2020-02-18 01:19:48 +01:00
Carl Bergquist
fe16028e02 Auth: Don't rotate auth token when requests are cancelled by client (#22106)
if the client closes the connection we should not
rotate token since the client will never receive the
new token.

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-02-17 17:31:44 +01:00
Andrej Ocenas
934d93ad94 Elastic: Map level field based on config. (#22182)
* Map level field based on config.

* Fix type
2020-02-17 16:49:24 +01:00
Leonard Gram
10fbabfb2e Sqlstore: guard against getting a dashboard without specifying identi… (#22246)
* Sqlstore: guard against getting a dashboard without specifying identifier

* Sqlstore: linting
2020-02-17 15:32:20 +01:00
Tobias Skarhed
0c4dae321c Migrations: Signup page (#21514)
* Start Angular migration

* Add SignupCtrl

* Change name signup

* Add backend call

* Put form in separate file

* Add form model

* Start using react-hook-forms

* Add FormModel to state

* Reduxify

* Connect nav with Redux

* Fix routing and navModel

* Fetch state options on mount

* Add default values and add button margin

* Add errror messages

* Fix title

* Remove files and cleanup

* Add Signup tests

* Add boot config assingnAutoOrg and verifyEmailEnabled

* Remove onmount call

* Remove ctrl and move everything to SignupForm

* Make routeParams optional for testing

* Remove name if it is empty

* Set username

* Make function component

* Fix subpath issues and add link button

* Move redux to SignupPage
2020-02-17 11:13:13 +01:00
Tobias Skarhed
029a6c64b4 Storybook: Add color theme and theme switcher (#22005)
* Add color theme and serve static files for storybook

* Add color theme and serve static files for storybook

* Export dark and light theme

* Add storybook-dark-mode package

* Add theme toggle functionality

* Toggle story theme too

* Remove unused import

* webpack config changes not needed
2020-02-17 10:36:16 +01:00
Torkel Ödegaard
d9414b4693 NewPanelEditor: Making angular panels reuse data and render on edit mode enter (#22229)
* First stab at angular panels load in new edit

* Things are working
2020-02-17 07:28:53 +01:00
Torkel Ödegaard
bfa959c66a PanelEdit: Title tweaks (#22237) 2020-02-17 07:28:00 +01:00
Torkel Ödegaard
5396c9ef92 NewPanelEdit: Minor changes (#22239) 2020-02-17 07:27:21 +01:00
Torkel Ödegaard
4ca3967091 Chore: Fixed strict null errors (#22238) 2020-02-17 07:25:27 +01:00
Torkel Ödegaard
f1ecaa5d45 NewPanelEditor: Thresholds v2 (#22232)
* initial wip

* Progress on new threshold design

* Testing radio button group for mode option

* Starting to come together

* Fixed percent mode

* Full width radio groups

* Minor tweaks, cursor to trash icon and hover state

* fixed unit tests

* Fixed storybook

* re-ordering fields

* Updated snapshot

* Make it consistent, add vs create
2020-02-17 06:57:10 +01:00
Jacky
a743a1cc12 Toolkit: support sass style for plugins (#22235) 2020-02-16 16:47:31 -08:00
Martin Passing
90541d3084 add CloudWatch Usage Metrics (#22179)
https://docs.amazonaws.cn/en_us/AmazonCloudWatch/latest/monitoring/CloudWatch-Usage-Metrics.html
2020-02-16 18:07:28 +01:00
Torkel Ödegaard
c162af8142 FieldOverrides: Fix issue with same series name for every display value (#22234)
* fieldOverrides: Fix issue with same series name for every display value

* Added unit test
2020-02-16 14:56:24 +01:00
Ryan McKinley
cc589a0d76 Inspector: find the datasource from the refId, not the metadata (#22231)
* remove datasource

* get datasoure from refId

* metrictank does not need to say the datasource
2020-02-16 05:12:40 -08:00
Dominik Prokop
131a3248ba New panel editor: Persist panel editor ui state (#22210) 2020-02-15 11:31:11 -08:00
Ryan McKinley
21b53b7d79 Toolkit: don't create declaration files for plugins (by default) (#22228) 2020-02-15 09:05:07 -08:00
Diana Payton
69c512d5f4 Docs: Update windows.md (#22185)
Added missing link
2020-02-14 10:20:38 -08:00
Diana Payton
ffde18eedf Docs: Add linking topic (#21986)
* Create linking.md

* Update linking.md

* Updated menu and edited linking content

* Changed file name

* Update navigation-links.md
2020-02-14 10:19:26 -08:00
Diana Payton
0d3d8edb92 Docs: Refactored Enterprise side menu (#22189)
* Refactored Enterprise side menu

* Update menu.yaml

* Fixed links

* Update menu.yaml
2020-02-14 09:34:39 -08:00
Arve Knudsen
d03075b811 CircleCI: Push master Docker images without revision in tag (#22218) 2020-02-14 17:28:30 +01:00
Arve Knudsen
019834ae12 Alerting: Update the types of recipient supported by the Slack notifier (#22205)
* Alerting: Update types of supported Slack recipients
* Document Slack recipient requirements
2020-02-14 17:11:23 +01:00
Jeet Parekh
f1989f1bfc docs: change URL occurences to uppercase (#22151)
* change URL occurences to uppercase

* Update docs/sources/tutorials/iis.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
2020-02-14 08:11:08 -08:00
annelaurefroment
56cd845e97 Docs: Fix link for provisioning data sources (#22159)
fixing link for provisioning data sources to use relref
2020-02-14 07:06:18 -08:00
Lukas Siatka
fd44abd177 DevEnv: update frontend dependencies - tests (#22140)
* DevEnv: updates @types/testing-library__react-hooks 3.1.0 -> 3.2.0

* DevEnv: updates @types/enzyme-adapter-react-16 1.0.5 -> 1.0.6

* DevEnv: updates @types/react-test-renderer 16.9.0 -> 16.9.2

* DevEnv: updates react-test-renderer 16.9.0 -> 16.12.0

* DevEnv: updates @types/enzyme 3.9.0 -> 3.10.5

* DevEnv: updates enzyme-adapter-react-16 1.0.6 -> 1.15.2

* DevEnv: updates enzyme 3.9.0 -> 3.11.0

* Fix: updates snapshots

* Fix: updates tests

* DevEnv: updates enzyme-to-json 3.3.5 -> 3.4.4

* DevEnv: updates expect.js 0.2.0 -> 0.3.1

* DevEnv: updates @types/puppeteer-core 1.9.0 -> 2.0.0

* DevEnv: updates puppeteer-core 1.15.0 -> 2.1.1

* DevEnv: updates @types/expect-puppeteer 3.3.1 -> 4.4.0

* DevEnv: updates expect-puppeteer 4.1.1 -> 4.4.0

* DevEnv: updates mocha 4.1.0 -> 7.0.1
2020-02-14 15:16:07 +01:00
Lukas Siatka
c433a1513f DevEnv: update frontend dependencies - type definitions (#22141)
* DevEnv: updates @types/classnames 2.2.7 -> 2.2.9

* DevEnv: updates @types/jquery 1.10.35 -> 3.3.32

* DevEnv: updates @types/lodash 4.14.123 -> 4.14.149

* DevEnv: updates @types/pngjs 3.3.2 -> 3.4.1
2020-02-14 15:15:51 +01:00
Dominik Prokop
fa34a7692e Make Explore panel link work when grafana served from sub url (#22202)
* Make explore url work when grafana served from sub url

* Update public/app/core/utils/explore.ts
2020-02-14 15:13:49 +01:00
Lukas Siatka
565387a42e DevEnv: update frontend dependencies - node (#22139)
* DevEnv: updates node-sass 4.12.0 -> 4.13.1

* DevEnv: updates ts-node 8.5.0 -> 8.6.2

* DevEnv: updates @types/node 11.13.4 -> 13.7.0

* DevEnv: updates lockfile
2020-02-14 14:53:06 +01:00
Brian Gann
0e2d874ecf API: Fix redirect issue when configured to use a subpath (#21652)
* request uri will contain the subpath
2020-02-14 14:51:35 +01:00
Peter Holmberg
0cde7decd7 Inspect: Inspect header design update (#22120)
* first things

* rename

* add stats, remove table related changes

* header size and expand icon

* add case for nan request time

* fixing null checks

* reverting changes to table

* fix background on header

* Some small fixes after review

* do not use formInputBg
2020-02-14 14:14:37 +01:00
Dominik Prokop
e846a26c8c FieldOverrides: FieldOverrides UI (#22187) 2020-02-14 13:46:08 +01:00
Alexander Zobnin
f2fc7aa3aa Azure OAuth: enable teamsync (#22160)
* Azure OAuth: extract groups from token for teamsync

* Docs: changed some headers

* Azure OAuth: fix tests

* Azure OAuth: fix linter error (simplify)

* Azure OAuth: add allowed_groups option

* Azure OAuth: docs for team sync and allowed_groups

* Azure OAuth: tests for allowed_groups

* Update docs/sources/auth/azuread.md

Co-Authored-By: Leonard Gram <leo@xlson.com>

Co-authored-by: Leonard Gram <leo@xlson.com>
2020-02-14 14:03:00 +03:00
Diana Payton
961cb6b284 Docs: Organize basic concepts and getting started (#21859)
* Update shortcuts.md

Removed content that was out-of-date and redundant with the UI.

* Added panels.md

* Added dashboards.md

* Added data-sources.md

* Update data-sources.md

* Sorted basic concepts into other topics

* Update docs/sources/menu.yaml

Co-Authored-By: Marcus Olsson <accounts+github@marcus.se.net>

* Update panels.md

* Update data-sources.md

Co-authored-by: Marcus Olsson <accounts+github@marcus.se.net>
2020-02-13 13:04:05 -08:00
Ryan McKinley
2c9b321c48 FieldOverides: apply field overrides based on configuration (#22047)
* test apply

* test apply

* Move standard field config editor registry to grafana-data

* merge master

* Apply field config defaults

* Make field and dataFrameIndex optional on on FieldOverrideContext

* Apply custom field config overrides

* Gauge - make sure thresholds are set

* Move series and field scoped vars calculation

* Enable template variables interpolation in title fields

* Expose standars field configs from grafana ui via function

* Add missing option to the config for the min value to be derived from field values

* Fix ts issue

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-02-13 21:37:24 +01:00
Mohit Nain
824f7362d4 Docs: Suggesting few changes to the doc (#22115)
* Suggesting few changes to the doc

1. Note should be followed by a dot (.)
2. Correcting a typo in default
3.  Re-writing sub sentence to make reading better

* Update docs/sources/installation/configuration.md

Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>

* Update configuration.md

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-02-13 10:57:13 -08:00
Mohit Nain
4f94a4c495 Docs: Update phrasing line 35 (#22152)
Idea is to provide information to the user that query can be executed on any data source that is available in grafana, therefore suggested little modification
2020-02-13 10:34:58 -08:00
Mohit Nain
63d999a739 Docs: Correcting Typo in Line131 (#22155) 2020-02-13 10:34:01 -08:00
Torkel Ödegaard
e1d5cfbd20 Dashboard: fixed padding inconsistency 2020-02-13 19:32:28 +01:00
Hugo Häggmark
335b1a8983 BackendSrv: Fixes a stupid mistake with a missing return (#22177) 2020-02-13 16:08:41 +01:00
Torkel Ödegaard
70b0ec65b3 PanelEdit: Fixed timing and state related issues (#22131)
* PanelEdit: Fixed timing and state related issues

* Added unit test and changed some logic

* Fixed id logic

* Updated snapshots

* Update public/app/features/dashboard/state/PanelModel.ts

Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-02-13 16:06:45 +01:00
Andrej Ocenas
9c55500cc0 Elastic: Replace range as number not string (#22173) 2020-02-13 16:00:01 +01:00
Robby Milo
e60b124001 change sync target branch to master (#21930) 2020-02-13 06:10:25 -08:00
Torkel Ödegaard
ba7c931286 e2e: Fixed issue with aria label (#22166)
* e2e: Fixed issue with aria label

* removed ini
2020-02-13 13:14:55 +01:00
Peter Holmberg
e5df200893 Fix: Do not remove whitespace in PanelLink url (#22087)
* remove whitespace replace

* readd replace newline

* adding a test
2020-02-13 11:32:18 +01:00
kay delaney
0d5c1e1bc7 React Migration: Migrates FolderPicker from angular to react (#21088)
* Angular/React: Migrates FolderPicker from angular to react

* move to core

* snap

* minor changes

* more removes

* Managing creating new and saving in movetofolderctrl

* Do not use new forms.field, fix select menu

* FolderPicker responsible to creating new folder

* create new as prop

* snap

* remove unnecessary things

* remove console log

* snap

* fix null checks

* add search debouncing

* set folder to state, null check

* typing folder

* adding case for loadOptions

* snap

Co-authored-by: Peter Holmberg <peterholmberg@users.noreply.github.com>
2020-02-13 11:13:03 +01:00
twendt
ff6a082e23 Auth: Azure AD OAuth (#20030)
* Implement Azure AD oauth

* Use go-jose and cleanup

* Update go-jose in go.mod

* cleanup

* Add unit tests

* Fix scopes

* Add documentation page

* Improve documentation

* Convert extract_role into function.

* Do not use upn and replace unique_name with preferred_username

* Configure login button

* Use official microsoft icon and color from branding guideline.

* Add Azure AD config section in sample.ini.
2020-02-13 12:12:25 +03:00
Lukas Siatka
ceca067d4f DevEnv: update frontend dependencies - grunt (#22136)
* DevEnv: updates grunt 1.0.1 -> 1.0.4

* DevEnv: updates grunt-cli 1.2.0 -> 1.3.2

* DevEnv: updates grunt-contrib-clean 1.0.0 -> 2.0.0

* DevEnv: updates grunt-exec 1.0.1 -> 3.0.0

* DevEnv: updates grunt-postcss 0.8.0 -> 0.9.0

* DevEnv: updates load-grunt-tasks 3.5.2 -> 5.1.0
2020-02-13 09:10:17 +01:00
Lukas Siatka
9ed08d1903 Bugfix: updates cloudwatch query editor test async render to prevent it from throwing error (#22150) 2020-02-13 09:07:33 +01:00
Torkel Ödegaard
6d879a0227 NewPanelEdit: Design tweaks (#22156)
* NewPanelEdit: minor design tweak

* Updated
2020-02-13 09:01:03 +01:00
Diana Payton
8641b91389 TestData: Update streaming.json (#22132)
Changed `graph2` to `graph` in two places.
2020-02-13 06:29:36 +01:00
Lukas Siatka
a0464c1239 DevEnv: update frontend dependencies - babel (#22135)
* DevEnv: updates @babel/core 7.8.3 -> 7.8.4

* DevEnv: updates @babel/preset-env 7.8.3 -> 7.8.4

* DevEnv: updates babel-loader 8.0.5 -> 8.0.6
2020-02-13 06:26:52 +01:00
Arve Knudsen
cece9547ae Docs: Fix port config list formatting (#22113)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-02-12 12:05:37 -08:00
Ivana Huckova
2be4d8dfd0 Explore: Refactor active buttons css (#22124) 2020-02-12 20:11:40 +01:00
kay delaney
ef36276584 Forms/Switch: Simplifies and adjusts CSS/Markup (#22129)
- Fixes CSS so switch dot is symmetrical when checked/unchecked
- Fixes CSS so hover styles are applied
2020-02-12 18:05:56 +00:00
kay delaney
003fb4a3d0 Datasource/Loki: Fixes issue where live tailing displayed date as invalid (#22128)
Closes #21929
2020-02-12 17:44:26 +00:00
Torkel Ödegaard
cfe30080e4 NewPanelEditor: Fixed issue going back to dashboard after pull page reload (#22121)
* Fixed issue going back to dashboard

* fixed logic

* Fixed unit test

* Fixed unit test
2020-02-12 18:36:32 +01:00
Ivana Huckova
1448767c08 Loki, Prometheus: Fix PromQL and LogQL syntax highlighting (#21944)
* Loki, Prometheus: Fix syntax to not highlight # in quotes as a comment in queryField

* Loki, Prometheus: Fix syntax to not highlight # in quotes as a comment in queryField

* Fix regex

* PromQL, LogQL: Update syntax

* LogQL, PromQL highlighting: Add tests
2020-02-12 15:45:36 +01:00
Torkel Ödegaard
fa1602daea NewPanelEdit: Added visualization tab / selection view (#22117)
* NewPanelEdit: Added visualization tab

* Minor fix
2020-02-12 12:54:58 +01:00
Dominik Prokop
60ed1e9527 Increase ts fork check mem limit (#22118) 2020-02-12 12:08:37 +01:00
Torkel Ödegaard
df1d43167a NewPanelEditor: Panel editor tabs in state (url) (#22102)
* tabs & style tweaks

* Styling updates

* ok look

* tweaks

* Updated snapshots

* Moved transforms

* Updated
2020-02-12 10:42:57 +01:00
Torkel Ödegaard
8080bbc8ec Delete report.20200209.125304.14262.0.001.json 2020-02-12 10:41:36 +01:00
Hugo Häggmark
8264b220c5 Annotation & Alerts: Makes various annotation and alert requests cancelable (#22055)
* Annotations: Makes various annotation and alert calls cancelable
Fixes #21943

* Refactor: Uses backendSrv.get method with requestId instead

* Update public/app/features/annotations/annotations_srv.ts

Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>

Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
2020-02-12 09:37:36 +01:00
Dominik Prokop
95b1607cbf Select zindex (#22109) 2020-02-12 09:07:06 +01:00
Diana Payton
6ee84cd2fc Docs: Add doc templates (#21927)
* Adding template docs

* Update doc-concept-template.md

* Added content to templates

* Added task info
2020-02-11 14:05:39 -08:00
Arve Knudsen
6f09bc9fb4 Fix mentioning Slack users/groups (#21734)
* alerting/slack: Allow mentioning users, groups, and channels separately
2020-02-11 21:43:28 +01:00
Diana Payton
717e1a3b2b Docs: Update rules.md (#21989)
Minor edits
2020-02-11 10:37:35 -08:00
Diana Payton
929cbd3315 Docs: Update metrics.md (#21988) 2020-02-11 10:36:45 -08:00
Diana Payton
e1518666dd Docs: Update dashboard.md (#21951) 2020-02-11 10:36:18 -08:00
Diana Payton
4642a76ad8 Docs: Added release notes tag (#22012) 2020-02-11 10:35:44 -08:00
kay delaney
ca85176ac6 Forms/RadioButtonGroup: Improves semantics and simplifies CSS (#22093)
* Forms/RadioButtonGroup: Improves semantics and simplifies CSS
- Changes base element to radio input for improved semantics & automatic keyboard support
- Simplifies CSS
2020-02-11 18:31:01 +00:00
Agnès Toulet
534295a9ae Docs: add LDAP active sync limitation for single bind configuration (#22098)
* Docs: add LDAP active sync limitation for single bind

* Docs: update header for LDAP active sync limitation

Co-Authored-By: Leonard Gram <leo@xlson.com>
2020-02-11 17:58:39 +01:00
Jim Johnson
b55a39a221 Docs: Update behind_proxy.md to include HTTPS and URL rewrite example (#21832) 2020-02-11 17:55:02 +01:00
Ryan McKinley
173375cb65 DataLinks: Avoid null exception in new edit mode (#22100) 2020-02-11 16:46:31 +01:00
Diana Payton
2a2b33bb55 Docs: Image rendering improvements (#22084) 2020-02-11 07:38:13 -08:00
Thomas Dräbing
113365cff9 Fix display of multiline logs in log panel and explore (#22057)
Logs that contained line breaks were displayed in a single wrapped
line and not respecting the line break characters.
2020-02-11 16:08:39 +01:00
Alex Khomenko
ec0051c075 Fix/add width to toggle button group (#21924)
* Grafana-UI: Add option to customize ToggleButtonGroup's width

* Grafana-UI: Add an option to customize TimeOfDayPicker width via width prop

* Grafana-UI: Add comment

* Grafana-UI: Switch width to size for TimeOfDayPicker

* Cleanup merge
2020-02-11 16:47:52 +02:00
Torkel Ödegaard
fee18f143e NewPanelEditor: Introduce redux state and reducer (#22070)
* New panel editor redux

* minor change

* Updated

* progress

* updated

* Fixed panel data mutable issue

* more actions

* Discard works

* Updated

* Updated
2020-02-11 14:57:16 +01:00
Bruce Merry
02c779cfa3 Prometheus: make $__range more precise (#21722)
* Make $__range more precise in Prometheus

It is now always equivalent to `${__range_s}s`, rather than rounding
down to an integer multiple of the biggest possible unit. For example,
a range of 47 hours is now represented as `169200s` rather than `1d`.

Closes #21689.

* Update a unit test to match new __range calc
2020-02-11 14:28:06 +01:00
Dominik Prokop
e612d7a2f9 New panel edit: data links edit (#22077)
* Move data links suggestions to grafana-data

* Data links -  field config and overrides

* Lint

* Fix test

* Add variable suggestions  to field override context

* Revert "Move data links suggestions to grafana-data"

This reverts commit 5d8d01a65e.

* Move FieldConfigEditor to core
2020-02-11 13:48:36 +01:00
Alex Khomenko
94b66258b5 Docs: fix minor typos in datasources.md (#22092) 2020-02-11 14:32:20 +02:00
Ryan McKinley
34e4f182bc Toolkit: add a warning about tslint migration (#22089) 2020-02-11 13:27:26 +01:00
Alex Khomenko
e07e03c26d Read target prop from the links in the footer (#22074)
* Grafana-core: Read target prop from the links in footer instead of having them hardcoded

* Grafana-core: Update ServerStats snapshot
2020-02-11 14:00:06 +02:00
Arve Knudsen
3b86bc97ea CircleCI: Publish enterprise Docker dev image for new master pipeline (#22091) 2020-02-11 12:55:38 +01:00
Arve Knudsen
ffdbe60da0 CircleCI: Include build ID in version for new master pipeline (#22013)
* CircleCI: Include build ID in version for new master pipeline
2020-02-11 09:19:34 +01:00
Andrii Melnyk
47314d0f13 Alerting: Handle NaN in reducers (#22053)
- Fix bug with NaN in alerting - Closes #21953
- Alert reducers (avg/max/etc) drop null values from their calculation. This change makes it so NaN values are handled in the same way as null values.
2020-02-10 19:28:07 -05:00
Ilia Shulgin
26e294c29b Docs: Fix broken link to "Configure a Grafana Docker image" page (#22080) 2020-02-10 13:13:21 -08:00
Ryan McKinley
0ff19e9414 Toolkit: create manifest files for plugins (#22056) 2020-02-10 19:39:24 +01:00
Marcus Efraimsson
679acd30ba Backend Plugins: make transform work again (#22078) 2020-02-10 12:17:54 -05:00
Diana Payton
efbe5e8729 Docs: Fix broken link (#22010)
* Fix broken link

* Update docs/sources/installation/configuration.md

Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-02-10 08:59:24 -08:00
Beck
5dd170d2e9 Docs: Fix formatting typo (#22067) 2020-02-10 08:43:48 -08:00
Arve Knudsen
bc412b48ea CircleCI: Publish enterprise ARM variants from master pipeline (#22011)
* CircleCI: Publish ARM Docker images for enterprise
2020-02-10 16:45:17 +01:00
Hugo Häggmark
747b546c26 Chore: Adds cancellation to backendSrv request function (#22066)
* Chore: Adds cancellation to backendSrv request function

* Refactor: Corrects typing for requestId
2020-02-10 15:14:53 +01:00
Torkel Ödegaard
49407987fe Dashboard: Move some plugin & panel state to redux (#22052)
* WIP: dashboard panel redux

* Progress

* Progress

* Changing plugin type

* Progress

* Updated

* Progess

* Fixed timing issue

* Updated

* Fixed unit tests

* Fixed issue in dashboard page

* Updated test
2020-02-10 14:23:54 +01:00
Even Thomassen
258b507179 Docs: Clarify that extraction of zip is required to install plugin (#22061) 2020-02-10 13:40:54 +01:00
Hugo Häggmark
0b082e8768 Chore: Fixes non utc tests (#22063) 2020-02-10 13:15:30 +01:00
Alex Khomenko
bf4c11d0d4 Grafana ui/time of day picker ui improvements (#21950)
* Grafana-UI: Add caret to the picker

* Grafana-UI: Customise popup's font-size and border-color

* Grafana-UI: Replace highlight background with border color

* Grafana-UI: Use stylesFactory vs inline classes

* Grafana-UI: Import stylesFactory from themes vs index
2020-02-10 13:57:59 +02:00
Dominik Prokop
dd37d003ef Links: Assure base url when single stat, panel and data links are built (#21956)
* Assure base url when single stat, panel and data links are built

* Update public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderCorner.tsx

* Update public/app/features/panel/panellinks/link_srv.ts

* Update public/app/features/panel/panellinks/link_srv.ts

* Update public/app/features/panel/panellinks/link_srv.ts

* Update public/app/features/panel/panellinks/link_srv.ts

* Review updates

* Remove unnecessary code
2020-02-10 12:45:15 +01:00
Hugo Häggmark
cd6809685f BackendSrv: Returns correct error when a request is cancelled (#21992)
Fixes #21991
2020-02-10 06:29:52 +01:00
Dominik Prokop
31101d54a4 Make zoom and time shift work after emmitter change (#22051) 2020-02-09 19:19:44 +01:00
Ryan McKinley
34b52cb835 New Editor: refresh when time values change (#22049) 2020-02-09 18:48:14 +01:00
Dominik Prokop
58639ee53e New Editor: Add ValuePicker for overrides selection (#22048) 2020-02-09 18:47:47 +01:00
Ryan McKinley
bedc708dfa Collapse: add a controlled collapse (#22046) 2020-02-09 17:39:26 +01:00
Tobias Skarhed
1554dcee0d Cascader: Fix issue where the dropdown wouldn't show (#22045)
* Fix z-index on cascader

* Cleanup

* Remove unused import
2020-02-09 17:02:07 +01:00
Ryan McKinley
e9c6c040da New Editor: add display modes to fix ratio with actual display (#22032)
* add mode picker

* ratio cleanup

* add siebar toggle

* use secondary button

* use cog icon

* cleanup

* full to fill

* Portaling for Select

* Centering container for panel edit

* Panel editor tabs

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-02-09 15:39:46 +01:00
Tobias Skarhed
88922ea4ee Chore: Use forwardRef in ButtonSelect (#22042)
* forwardRef to ButtonSelect

* Remove innerRef prop

* Use styleFactory
2020-02-09 15:13:26 +01:00
Ryan McKinley
08a4317b46 DashNavTimeControls: remove $injector and rootScope from time picker (#22041) 2020-02-09 14:36:49 +01:00
Dominik Prokop
1728742096 New panel edit: field overrides ui (#22036)
* Add title editor

* Wip

* FIeld config overrides UI (v1)

* Basic property override editors

* name to prop

* use prop not path

Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
2020-02-09 14:34:42 +01:00
Dominik Prokop
25431f32f0 Select: Portaling for Select (#22040) 2020-02-09 13:37:00 +01:00
Tobias Skarhed
eba0390502 New Select: Fix the overflow issue and menu positioning (#22039)
* Fix the overflow issue and menu positioning

* Add portal as a property
2020-02-09 12:50:01 +01:00
Torkel Ödegaard
e9bc8afac8 Upgrade: React layout grid upgrade (#22038) 2020-02-09 10:54:08 +01:00
Torkel Ödegaard
34c397002c PanelChrome: Use react Panel Header for angular panels. (#21265)
* WIP: Angular panel chrome, this is going to be tricky

* AngularPanelChrome: initial render works

* Options are showing up

* viz options working

* Fixed singlestat background

* AngularPanels: Fixed alert tab

* Removed anuglar loading spinner

* Dashboard: Refactor dashboard reducer & actions

* Dashboard: minor refactoring

* PanelChrome: loading state moved to header

* Subscribe to render events to solve title update issue

* Time info and query errors now works

* PanelHeader: unifying angular and react behavior

* added getPanelMenu test

* Scrollable now works again

* Various fixes

* Making stuff work

* seperate event emitter for angular

* Fixed issue sending updated dimensions to angular panel

* Minor tweaks

* Fixed tests

* Alerting: alert state now works

* Fixed unit tests

* Fixed a few null check errors

* Simplified events handling

* Fixed strict null checks
2020-02-09 10:53:34 +01:00
Ryan McKinley
2feaad8b0d New Editor: add a tabs row for the query section (#22037) 2020-02-09 10:50:58 +01:00
Ryan McKinley
66191f946d New Editor: use unit picker (#22033)
* use unit picker

* export correct file name

* override is the same
2020-02-09 10:29:10 +01:00
Torkel Ödegaard
a58d2b87f8 Dashboard: Refactor dashboard reducer & actions (#22021)
* Dashboard: Refactor dashboard reducer & actions

* Dashboard: minor refactoring

* Minor cleanup
2020-02-09 09:45:50 +01:00
Dominik Prokop
b8e68efe70 New panel editor: Add title editor (#22030) 2020-02-08 19:31:17 +01:00
Tobias Skarhed
c75ca5cf06 UnitPicker: Use the new Cascader implementation (#22029)
* Use Cascader for UnitPicker and add relevant props to Cascader

* Fix grammar

* Add placeholder for UnitPicker

* Update comments
2020-02-08 19:06:06 +01:00
Ryan McKinley
da395729c3 FieldEditor: extendable FieldConfig UI (#21882)
* initial POC

* fix import

* field config editor in the sidebar

* field config editor in the sidebar

* field config editor in the sidebar

* sidebar

* include threshold in sidebar

* include threshold in sidebar

* include threshold in sidebar

* init to empty threshold

* merge

* Make sure editor is fully rendered when page is refreshed

* use scrollbars

* add matcher UI folder

* remove

* Field options basic editors

* Removed deebugger

* Make number field editor controlled

* Update public/app/features/dashboard/state/PanelModel.ts

* Update public/app/plugins/panel/gauge/GaugePanel.tsx

* Ready for production

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-02-08 18:29:09 +01:00
Tobias Skarhed
20c4d00df8 Cascader: Add enable custom value (#21812)
* Add an early exit

* Fix issue with blur and only display label

* Remove unused code

* Enabled custom value

* Update test

* Add custom value creating according to #21869
2020-02-08 16:02:03 +01:00
Dominik Prokop
3617e59548 New panel edit: support scrolling (#22026)
* Make new edit work again

* Add custom scrolls

* better merge

Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
2020-02-08 14:12:02 +01:00
Ryan McKinley
e7710f0c66 Thresholds: get theme from context automatically (#22025)
* get theme from context for thresholds

* remove theme

* use theme context

* remove theme from gauge/bargauge
2020-02-08 13:59:26 +01:00
Dominik Prokop
e17b76ad7a New Panel Edit: works for panels with and without queries (#22024)
* Make new edit work again

* add cx

Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
2020-02-08 13:23:16 +01:00
Ryan McKinley
a51ac787c0 PanelEditor: use splitpane for new editor (#22022)
* use splitpane for new editor

* change header

* use back button icon

* adding react split
2020-02-08 12:01:09 +01:00
Torkel Ödegaard
72b9f78e14 Select: Fixed allow custom value in Select/UnitPicker/Segment/AsyncSegment (#22018) 2020-02-08 11:49:14 +01:00
Ryan McKinley
d0470409d6 Chore: export arrow dataframe utilities (#22016)
* export arrow dataframe

* use the same table
2020-02-08 09:50:35 +01:00
Steven Vachon
f48169633c TSLint → ESLint (#21006)
* Alphabetized tslint and tsconfig files

* Optimized tsconfig files

* Optimized editorconfig & prettier config files

… to reduce redundancy

* Switched to @grafana/tsconfig

… and:
* de-duped options
* removed options with default values

* Fixed nasty issue with types for nested slate-react

* Replaced TSLint with ESLint

* TSLint disables → ESLint disables

… also JSHint removals, which haven’t had an affect since it was replaced with TSLint.

* Compliances for ESLint, Prettier and TypeScript

* Updated lockfile
2020-02-08 02:40:04 +01:00
Leonard Gram
7dcf5887e6 Docker: Publish enterprise image with master-commit tag (#22008) 2020-02-07 16:08:14 +01:00
Marcus Efraimsson
285ebd3413 Chore: Resolve random failure with golangci-lint (#21970) 2020-02-07 15:53:03 +01:00
Dominik Prokop
9b6a843177 New panel edit: don't query when entering edit mode (#21921)
* First attempt

* Save confirmation with discard option, reusing queriess a little bit differently

* simplify cloning panels and restoring last results in panel query runner

* Remove save button

* Update public/app/features/dashboard/components/PanelEditor/PanelEditor.tsx

* Exit/discard buttons

* Update snaps

* Review comments

* Fix lint
2020-02-07 14:59:04 +01:00
Dominik Prokop
4b271f27fb Fix bad grammar in Dashboard Link page (#21984) 2020-02-06 19:23:38 +01:00
Diana Payton
4a8dfc42cf Update documentation-style-guide.md (#21736)
Added "metadata" to Word Usage
2020-02-06 08:33:55 -08:00
Ed Welch
f2c3d23140 Prometheus: Allow sub-second step in the prometheus datasource (#21861) 2020-02-06 15:28:20 +01:00
Alexander Zobnin
e2b06d9228 Update latest.json versions to 6.6.1 (#21972) 2020-02-06 16:34:16 +03:00
Alexander Zobnin
32394374ff Change log for 6.6.1 (#21969)
* Change log 6.6.1

* Add PR co-authors

* fix label type for PR #21949

Co-authored-by: Sofia Papagiannaki <papagian@users.noreply.github.com>
2020-02-06 16:08:15 +03:00
Lukas Siatka
2d3c5064e1 Datasource: updates PromExploreQueryEditor to prevent it from throwing error on edit (#21605)
* Datasource: updates PromExploreQueryEditor - rewrite to functional component

* Datasource: updates PromQueryField - moves an extra field from children to the separate prop

* Datasource: adds PromExploreExtraField

* Datasource: updates PromExploreQueryEditor - fixes typo

* Datasource: updates prometheus explore editor snapshots

* Datasource: updates PromExploreExtraField export

* Datasource: removes unnecessary div from PromExploreQueryEditor

* Datasource: adds basic PromExploreExtraField snapshot test

* Datasource: adds basic PromExploreQueryEditor test

* Datasource: updates PromExploreQueryEditor snapshot to fix timezone issues

* Datasource: updates PromExploreQueryEditor - onChangeQueryStep cleanup

* Datasource: updates PromExploreQueryEditor test to check ExtraFieldElement render

* Datasource: simplified PromExploreQueryEditor onStepChange method

* Datasource: updates Prometheus module import

* Datasource: updates PromExploreQueryEditor test

* Datasource: updates PromExploreQueryEditor tests

* Datasource: fixes PromExploreQueryEditor error on empty interval init

* Datasource: adds a tooltip to PromExploreExtraField mounted in PromExploreQueryEditor

* Datasource: updates PromExploreQueryEditor snapshots
2020-02-06 12:37:30 +00:00
Lukas Siatka
df48d1c19f Explore: Adds Loki explore query editor (#21497)
* Explore: updates grafana-data explore query field props with explore mode

* Explore: updates query row to pass down explore mode to query fields

* Explore: adds LokiExploreQueryEditor

* Explore: updates loki query field form to render children

* Explore: adds loki explore extra field component

* Explore: adds extra field element to loki query field form

* Explore: updates loki explore query editor to use extra field element

* Explore: moves ExploreMode to grafana-data

* Explore: updates query row limit string

* Explore: adds maxLines to DataQuery

* Explore: adds maxLines to loki datasource runRangeQueryWithFallback

* Explore: adds onChangeQueryLimit to LokiExploreQueryEditor

* Explore: updates loki explore query editor to render extra field only in logs mode

* Explore: fixes query limits for live and legacy queries

* Explore: fixes result processor max lines limit in get logs result

* Explore: fixes Loki datasource limit test

* Explore: removes unnecessary ExploreMode from Loki language provider

* Explore: fixes formatting

* Explore: updates grafana-data datasource types - replaces strings with explore mode enum

* Explore: updates loki explore query field props to take ReactNode

* Explore: updates the way we calculate loki query lines limit to fall back to 0 lines on negative or invalid input instead of datasource maxLines

* Explore: updates result processor get logs result method to avoid counting invalid/negative line limits

* Explore: updates loki result transformer to process only an appropriate slice of a result instead of an entire one

* Explore: adds a method for query limit preprocessing/mapping

* Explore: updates loki datasource run range query with fallback method to use options.maxDataPoints in dashboards

* Explore: removes unnecessary maxlineslimt from getLogsResult in resultProcessor

* Explore: moves line limit to metadata

* Explore: adds an ability to specify input type of extra field

* Explore: updates LokiExploreQueryEditor - adds an input type

* Explore: updates LokiExploreQueryEditor to run queries when maxLines is positive

* Explore: fixes failing import of ExploreMode

* Explore: fixes reducers test imports formatting

* Explore: updates Loki extra field with min value set to 0

* Explore: exports LokiExploreExtraFieldProps

* Explore: adds render test of LokiExploreQueryEditor

* Explore: adds LokiExploreQueryEditor snapshot

* Explore: updates LokiExploreQueryEditor onChangeQueryLimit method to prevent it from running when query input is empty - fixes cheatsheet display issue

* Explore: updates Loki editor snapshots

* Explore: fixes typo in test set name in LokiExploreQueryEditor

* Explore: adds a render test of LokiExploreExtraField

* Explore: fixes typo in LokiExploreQueryEditor

* Explore: updates LokiExploreQueryEditor snapshot due to timezone issues

* Explore: updates LokiExploreExtraField to export both functional component and a version using memo

* Explore: updates LokiExploreQueryEditor to export both functional component and memoized function

* Explore: updates LokiExploreQueryEditor - removes unnecessary react fragment

* Explore: updates LokiExploreQueryEditor snapshot

* Explore: adds LokiExploreQueryEditor tests for different explore mode cases

* Explore: fixes Loki datasource and result transformer

* Explore: updates LokiExploreQueryEditor snapshot

* Explore: updates LokiExploreQueryEditor tests and test setup

* Explore: updates LokiExploreQueryEditor - refactors component

* Explore: updates LokiExploreQueryEditor to use default import from LokiExploreExtraField

* Explore: updates LokiExploreQueryEditor snapshot

* Explore: fixes formatting

* Explore: updates LokiExploreQueryEditor max lines change

* Explore: updates LokiExploreQueryEditor tests checking ExtraFieldElement

* Explore: adds mock loki datasource to LokiExploreQueryEditor

* Explore: updates LokiExploreQueryEditor test mock - adds language provider

* Explore: updates LokiExploreQueryEditor snapshot

* Explore: updates Loki ResultTransformer to filter out rows on limit - logic to be moved into a component with new form styles

* Explore: updates LokiExploreQueryEditor tests
2020-02-06 12:34:52 +00:00
Ivana Huckova
9b9f1ad1b9 @grafana/ui: Fix displaying of bars in React Graph (#21968) 2020-02-06 13:30:41 +01:00
Huan Wang
8b632ac029 Prometheus: Do not show rate hint when increase function is applied (#21955) 2020-02-06 12:56:53 +01:00
Ivana Huckova
89d1ab37de Elastic: Limit the number of datapoints for the counts query (#21937) 2020-02-06 11:06:26 +01:00
Tobias Skarhed
165c3adf1d Storybook: Update categories (#21898)
* Update paths for Storybook categories

* Restructure categories
2020-02-06 10:32:35 +01:00
Leonard Gram
59530e4758 Quota: Makes sure we provide the request context to the quota service (#21949)
It was missing for ldap_login which means that the first signup failed
for users with LDAP+quota enabled. There's also potential cases where we
can't provide a request context (background jobs) which is also covered,
but needs a refactoring.
2020-02-06 08:49:58 +02:00
Ivana Huckova
c16040a4a6 Docs: Documentation for 6.6 Explore and Logs panel features (#21754)
* Add documentation for explore and logs panel features

* Update docs/sources/features/explore/index.md

* Docs: Update

* Update docs/sources/features/panels/logs.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update docs/sources/features/panels/logs.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update docs/sources/features/explore/index.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update docs/sources/features/explore/index.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* Update docs/sources/features/explore/index.md

Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
2020-02-05 22:01:34 +01:00
Sofia Papagiannaki
5ae95190ed Annotations: Change indices and rewrites annotation find query to improve database query performance (#21915)
Drop indices and create new ones and rewrites annotation find query 
to address performance issues when querying annotation table and 
there is a large amount of rows.

Fixes #21902

Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-authored-by: Kyle Brandt <kyle@kbrandt.com>
2020-02-05 16:52:41 +01:00
Hugo Häggmark
26d71c90f5 Prometheus: Fixes default step value for annotation query (#21934)
Fixes #21914
2020-02-05 16:40:37 +01:00
Dominik Prokop
90d415861d Dashboard edit: Fix 404 when making dashboard editable 2020-02-05 13:29:11 +01:00
Arve Knudsen
b84e651eac Publish from new master pipeline (#21813)
* CircleCI: Move postgres/mysql integration tests to step after linting
* CircleCI: Implement publishing of packages and Docker images for new master pipeline
2020-02-05 12:22:13 +01:00
Mark Carey
28230bbf52 Metrics: Adds back missing summary quantiles (#21858)
Adds back missing summary quantiles which was mistakenly
removed in v6.6.0. 

Fixes #21857
2020-02-05 11:11:14 +01:00
jianweizhang
140e267639 delete redundant alias (#21907)
* delete redundant alias

Fixes #21906
2020-02-05 09:00:40 +01:00
Ivana Huckova
88226672f1 grafana/ui: Fix displaying of bars in React Graph (#21922) 2020-02-04 23:14:42 +01:00
Diana Payton
caac9d83ca Docs: Added developer-resources.md (#21806)
* Added developer-resources.md

Added Developer resources and updated menu.yaml file

* Updated menu.yaml

Updated menu.yaml, changed folder name, and removed redundant file building_from_source.md and containing folder

* Removed links to deleted file
2020-02-04 13:40:25 -08:00
Erik Sundell
78b1ab8360 Fix formatting (#21894) 2020-02-04 14:16:56 +01:00
Tobias Skarhed
5c54bd1e98 New Select: Blur input on select (#21876) 2020-02-04 11:35:18 +01:00
Alex Khomenko
3d8317a747 Fix/add default props to prom query editor (#21908)
* Plugins: Add default query to PromQueryEditor

* Plugins: Update PromQueryEditor snapshot

* Plugins: Use Partial for default PromQuery
2020-02-04 11:37:18 +02:00
Edgar Orendain
bb8e15ceab Graph Panel: Fixed typo in thresholds form (#21903) 2020-02-04 10:04:21 +01:00
Tobias Skarhed
959c49f6d8 Disable logging in button (#21900) 2020-02-04 09:41:11 +01:00
Adrien F
5c89a8451e DatasourceEditor: Add UI to edit custom HTTP headers (#17846)
* DatasourceEditor: Add UI to edit custom HTTP headers

Support for custom headers was added in #11643 but was missing in the UI.

Fixes #12779

* Review

* Layout updates

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-02-04 09:25:10 +01:00
Jorge Luis Betancourt
96099636dc Datasource: Show access (Browser/Server) select on the Prometheus datasource (#21833)
* Datasource: Show access (Browser/Server) select on the Prometheus datasource configuration editor

* Trigger build
2020-02-04 08:42:26 +01:00
Jacopo Rota
21340a5ece Docs: Update dashboard.md (#21896)
Fix typo in templating JSON
2020-02-03 08:42:35 -08:00
Diana Payton
98c912e1a7 Docs: Update dashboard.md (#21200) 2020-02-03 08:00:08 -08:00
Stefan
0953dae221 Docs: Make upgrading instructions for Docker work (#21836)
One has to use "grafana/grafana" image - only using "grafana" will
result in an error message like this:
Error response from daemon: pull access denied for grafana, repository does not exist or may require 'docker login'

It's a good idea to daemonize new container. The install instructions
for Docker do this, and this instructions assume that running container
already is daemonized (otherwise you wouldn't have to stop it).

Best practise would be to create a new container, then stop old one and
start new one - this would reduce downtime. To keep instructions simple
and understandable, I didn't include that.
2020-02-03 07:59:24 -08:00
Shavonn Brown
c4e3110034 deps so can mock in tests (#21827) 2020-02-03 09:07:50 -05:00
Damien Castanier
7720bfab95 Templating: Add new global built-in variables (#21790)
* Add new global built-in variables #20523
new branch from master

* #20523 Revert change on __from and __to like requested

* #20523 simplify contextSrv access

* #20523 simplify contextSrv access

* #20523 repair jest tests
2020-02-03 08:57:38 +01:00
Peter Holmberg
93195facba Fix: Reimplement HideFromTabs in Tabs component (#21863)
* reimplement hidefromtabs

* remove console log

* going with option b instead

* less explicit
2020-02-03 08:16:48 +01:00
Ryan McKinley
c140d110c6 grafana/data: Remove unused PanelSize interface (#21877) 2020-02-03 08:14:34 +01:00
Dominik Prokop
249ae05281 New Select: Extend creatable select api (#21869) 2020-01-31 13:47:34 +01:00
Marcus Efraimsson
0390b5601e Backend plugins: Implement support for resources (#21805)
Implements initial support for resources using v0.14.0 of SDK.

Ref #21512
2020-01-31 11:15:50 +01:00
Leonard Gram
5345868148 Docker: change plugin path in custom docker (#21837)
This is to make the custom dockerfiles compatible with our instruction
to use persitent volumes for the /var/lib/grafana dir. Without this
change the contents of that folder will be overshadowed by the persitent
volume and none of the pre-installed plugins will be available.
2020-01-30 11:17:41 -08:00
Marcus Efraimsson
6e80315531 Image Rendering: Fix render of graph panel legend aligned to the right using Grafana image renderer plugin/service (#21854)
Don't render class body--phantomjs on body element when 
PhantomJS renderer not is in use.

Fixes #21830
2020-01-30 17:35:32 +01:00
Diana Payton
aa6ee5ef38 Docs: Update _index.md (#21700) 2020-01-30 07:46:45 -08:00
Dominik Prokop
f8654a3a2f grafana/toolkit: Fix failing linter when there were lint issues (#21849) 2020-01-30 15:42:53 +01:00
Torkel Ödegaard
b7faa9023e DatasourceSettings: Fixed issue navigating away from data source settings page (#21841) 2020-01-30 14:40:55 +01:00
Dominik Prokop
050d902ed1 AppPageCtrl: Fix digest issue with app page initialisation (#21847) 2020-01-30 13:47:11 +01:00
Lukas Siatka
c425a837a9 Explore: adds basic tests to TableContainer checking the render and output on 0 series returned 2020-01-30 12:02:50 +00:00
Lukas Siatka
f7fe4d4865 Explore: adds MetaInfoText tests 2020-01-30 12:02:50 +00:00
Lukas Siatka
61b5471ed8 Explore: adds export of MetaItem and its props 2020-01-30 12:02:50 +00:00
Lukas Siatka
865a8dd355 Explore: updates TableContainer to use MetaInfoText component 2020-01-30 12:02:50 +00:00
Lukas Siatka
d99121d6fa Explore: updates Logs component to use MetaInfoText component 2020-01-30 12:02:50 +00:00
Lukas Siatka
a5ca5dffa4 Explore: adds MetaInfoText component 2020-01-30 12:02:50 +00:00
Lukas Siatka
db3797c1d2 Explore: removes unnecessary styles for panel logs 2020-01-30 12:02:50 +00:00
Lukas Siatka
e230e1df96 Explore: updates Table container render to avoid rendering table on empty result 2020-01-30 12:02:50 +00:00
Lukas Siatka
2bdbdd6930 Explore: updates explore table container to show a span on 0 series returned 2020-01-30 12:02:50 +00:00
Arve Knudsen
57a0f0fe92 docs/cli: Fix documentation of reset-admin-password with --homepath (#21840) 2020-01-30 11:58:38 +01:00
Steven Vachon
9005b484f0 Replace ts-loader with Babel (#21587)
* Applied prettier to relevant webpack configs

* Replaced ng-annotate with babel-plugin-angularjs-annotate

… and replaced ts-loader with @preset/typescript

* Removed redundant import

… that is problematic with Babel's module resolver

* Updated lockfile

* Traspile debug package to es5 for PhantomJS support

* Update babel to latest version

* Remove @babel/poolyfill and url search params polyfill

* Add ts-loader to grafana-ui dependencies

* Update prod webpack build to use cor-js 3

* Applied prettier to relevant webpack configs

* Replaced ng-annotate with babel-plugin-angularjs-annotate

… and replaced ts-loader with @preset/typescript

* Updated lockfile

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-01-30 10:54:11 +01:00
Emil Tullstedt
a0ad81180e Docs: Add information about license expiration (#21578)
* Docs: Add information about license expiration

* Docs: Improve clarity of license expiration page

* review comments

* change renewal instructions to a list

* language improvements

* review fixes
2020-01-30 09:41:59 +01:00
Dominik Prokop
1ef91e3fc4 Fix digest issue with query part editor's actions menu (#21834) 2020-01-30 09:13:22 +01:00
Torkel Ödegaard
0fd088c757 Graphite: Fixed issue with functions with multiple required params and no defaults caused params that could not be edited (groupByNodes groupByTags) (#21814)
* Graphite: Fixed issue functions with multiple required params and no defaults

* removed some prev changes

* Update public/app/plugins/datasource/graphite/func_editor.ts

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-01-30 09:06:23 +01:00
Evgeny Bibko
7638156666 TimePicker: Should display in kiosk mode (#21816)
* Timepicker class fixed

* Missed arrow in dashboard title
2020-01-30 08:07:50 +01:00
Marcus Andersson
6dada090b3 Chore: Upgrade Storybook to 5.3.9 (#21550)
* Upgraded to latest stroybook.

* Upgraded to version 5.3.9

* updated yarn.lock file.
2020-01-30 07:49:43 +01:00
Dominik Prokop
9882464505 Table: Make the height of the table include header cells (#21824)
* Mak table panel with padding

* Make table have a correct height
2020-01-30 07:47:20 +01:00
Torkel Ödegaard
13948c0b76 StatPanels: Fixed migration from old singlestat and default min & max being copied even when gauge was disbled (#21820) 2020-01-29 19:42:07 +00:00
Diana Payton
c344a3a66e Docs: Update docker image run and configuration instructions (#21705)
* Update docker.md

* Update configuration.md

* Update configuration.md

* Update configuration, docker, and add configure-docker

* Moe Docker updates

* Update docker.md

* deleted build custom docker image file and moved content

* Update docker.md

* Minor updates

Mostly grammar fixes

* Update docs/sources/installation/docker.md

Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>

* Updated config-docker and configuration

Moved environment variables information back to configuration.md

* Update docs/sources/installation/configuration.md

Co-Authored-By: Leonard Gram <leo@xlson.com>

* Update docs/sources/installation/configure-docker.md

Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>

* Update docs/sources/installation/docker.md

Co-Authored-By: Leonard Gram <leo@xlson.com>

* Update docs/sources/installation/docker.md

Co-Authored-By: Leonard Gram <leo@xlson.com>

* Update docs/sources/installation/docker.md

Co-Authored-By: Leonard Gram <leo@xlson.com>

* Applied edits

* Update _index.md

Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-authored-by: Leonard Gram <leo@xlson.com>
2020-01-29 09:23:28 -08:00
Ryan McKinley
c15ddc295c DataFrame: update golden test files (#21808) 2020-01-29 08:30:03 -08:00
Diljit PR
63dfc892f1 Docs: Alphabetize datasource names in sidebar under docs/Features/DataSources (#21740)
This alphabetizes names in the sidebar docs/features/DataSources and
also includes a fix in typo for the item "TestData".
2020-01-29 08:28:28 -08:00
Peter Holmberg
5203376bc5 Inspect: Add error tab (#21565)
* add error tab

* conditional tabs

* feedback from review

* expose lastResult via function

* remove todo and weird char

* fixing overflow states and height of tabcontent

* style fixes

* more changes to scroll handling

* fixing null checks

* Change drawer content padding

* Add scroll in the story

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-01-29 15:41:25 +01:00
Dominik Prokop
80a2dce994 Select: Fix direct usages of react-select to make the scroll great again (#21822) 2020-01-29 14:52:43 +01:00
michael-az
427629b4d5 TablePanel: display multi-line text (#20210)
* TablePanel: display multi-line text

* Fix tests
2020-01-29 13:18:34 +00:00
Marcus Andersson
ffe0a1f975 Fixed strict errors (#21823) 2020-01-29 14:18:06 +01:00
Marcus Andersson
cab082438e Fix: prevents the BarGauge from exploding when the datasource returns empty result. (#21791)
* Fixed issue where gauge throw error on empty result.

* Some refactorings to improve the code.

* Added some tests to make sure this doesn't happen again.
2020-01-29 11:40:30 +01:00
Tobias Skarhed
8aed87394d Select: Fix scroll issue (#21795) 2020-01-29 09:08:52 +01:00
Hugo Häggmark
08d330b406 Fix: Fixes user logout for datasourceRequests with 401 from datasource (#21800) 2020-01-29 06:24:15 +01:00
Shavonn Brown
0fa20cb231 Azure Monitor: Fix Application Insights API key field to allow input (#21738)
* Fix update api key input

* update snapshot
2020-01-28 23:47:34 -05:00
Andrej Ocenas
85dad73e9d Influxdb: Fix cascader when doing log query in explore (#21787)
* Fix cascader options and add tests

* Add comment

* Fix typo
2020-01-28 18:12:15 +01:00
Marcus Efraimsson
b4570b4996 Devenv: OpenTSDB dashboard (#21797)
Simple test dashboard for OpenTSDB.
2020-01-28 18:02:33 +01:00
Leonard Gram
20e96a9241 MSI: License for Enterprise (#21794) 2020-01-28 16:18:00 +01:00
Marcus Efraimsson
b75412d6ae OpenTSDB: Add back missing ngInject (#21796)
Adds back missing ngInject on datasource constructor
to make it work again.

Fixes #21770
2020-01-28 16:17:27 +01:00
sv5d
ae3d25986d Heatmap: Legend color range is incorrect when using custom min/max (#21748)
Fix opacity and color scales initializations which took wrong range 
arguments (current data min/max instead of custom range min/max).

Fixes #18139
2020-01-28 13:58:28 +01:00
Emil Tullstedt
e95bcc4ba2 Config: add meta feature toggle (#21786) 2020-01-28 12:00:07 +01:00
Ivana Huckova
b3bcbcccce Logs panel: Rename labels to unique labels (#21783) 2020-01-28 11:23:22 +01:00
Carl Bergquist
5dbd7c9e58 Add link guide for installing new renderer (#21702) 2020-01-28 10:57:55 +01:00
Hugo Häggmark
ea18779781 Chore: Lowers strict error limit (#21781) 2020-01-28 10:44:48 +01:00
Hugo Häggmark
9e5eb05769 Chore: Removes Cypress record (#21782) 2020-01-28 10:44:28 +01:00
Marcus Efraimsson
d5d5f1858c Docs: Document configuration of console, file and syslog log formats (#21768)
Adds missing configuration documentation of the different 
log formats; console, file and syslog.

Ref #21765
2020-01-28 10:38:31 +01:00
Hugo Häggmark
2acfbdb768 Annotations: Fixes this.templateSrv.replace is not a function error for Grafana datasource (#21778) 2020-01-28 09:41:19 +01:00
Émile Fugulin
be09722d84 Fix typos in the communication documentation (#21774) 2020-01-28 09:26:59 +01:00
Hugo Häggmark
044bea0935 Chore: Fixes various strict null errors (#21763)
* Chore: Removes strict null checks in ReducerTester

* Chore: Fixes strict null errors in ConfigureStore

* Chore: Fixes strict null errors in reducer tests

* Chore: Fixes strict null errors in reducers tests

* Chore: Fixes strict null errors in reducers tests

* Chore: Fixes strict null errors in toggleLogActionsMiddleware

* Chore: Fixes strict null errors in navModelReducer

* Core: Fixes strict null errors in public/app/features/admin/state

* Chore: Fixes strict null errors in public/app/features/dashboard/state/reducers.test.ts

* Chore: Fixes strict null errors in public/app/features/explore/state/reducers.test.ts

* Chore: Fixes strict null errors in public/app/features/datasources/state/reducers.test.ts

* Chore: Fixes strict null errors in public/e2e-test/scenarios/templating/templatevariables-crud.test.ts

* Chore: Fixes strict null errors in public/app/features/dashboard/containers/DashboardPage.test.tsx
2020-01-28 09:13:56 +01:00
Dominik Prokop
6c32a4c0ab Forms: Allow custom value creation in async select (#21759) 2020-01-28 08:38:21 +01:00
Tobias Skarhed
1ad569c470 Chore: bump react-select to 3.0.8 (#21638)
* Update imports

* Solve compability issues with react-select

* Fix frozen lockfile

* Update snapshots

* Change name to something less general

* Fix proposed changes

* Fix imports

* Fix changes
2020-01-28 07:43:18 +01:00
Ryan McKinley
67c5531961 grafana/data: Add type for secure json in DataSourceAPI (#21772) 2020-01-28 07:13:20 +01:00
Andrej Ocenas
c3a19c6d98 Influxdb: Fix issues with request creation and parsing (#21743) 2020-01-27 18:21:41 +01:00
kay delaney
7569a8608a Explore/Loki: Fix handling of legacy log row context request (#21767)
Closes #21695
2020-01-27 15:45:01 +00:00
Leonard Gram
00fa30f243 6.6.0 latest (#21762) 2020-01-27 15:35:35 +01:00
Hugo Häggmark
0e4f7e1d9a Docs: Updates Changelog for 6.6.0 (#21753)
* Docs: Adds backendSrv notice

* Update CHANGELOG.md

Co-Authored-By: Leonard Gram <leo@xlson.com>

* Docs: Updates notice placement

* Changelog: v6.6.0

Co-authored-by: Leonard Gram <leo@xlson.com>
2020-01-27 15:10:32 +01:00
Peter Eckel
50993b5dfd Docs: Update image rendering (#21650)
This is a small documentation update for the situation that led to 
#19842 in the first place. It describes a procedure required to 
provide root certificates to the headless Chrome instance used 
by the Grafana image renderer plugin.
2020-01-27 13:57:50 +01:00
Samuel Alfageme
261191ffd7 Docs: misc. nitpicks to the HTTP API docs (#21758)
* Replace bash/json with http in http_api codeblocks

Since http is used elsewhere on the API docs and makes the
markdown rendering look different on the blocks that use bash/json

* Fix the annotations API link on 'Features'

- Noticed the Features/Dashboard Features/Annotations link pointing to
the HTTP API was linking itself instead of '../http_api/annotations.md'.
- Also add a link on Dashboard Export and Import to its HTTP API.

* Add missing links to features in API Index

Noticed there was 3 missing references in the API docs index.
- https://grafana.com/docs/grafana/latest/http_api/playlist
- https://grafana.com/docs/grafana/latest/http_api/datasource_permissions
- https://grafana.com/docs/grafana/latest/http_api/external_group_sync

Last two are Grafana Enterprise -only, so created a separate subsection
for them.
2020-01-27 13:41:15 +01:00
Marcus Andersson
1c0d022ac2 Dashboard: fixes issue with UI not being re-rendered after moving dashboard 2020-01-27 11:30:16 +01:00
Marcus Andersson
4e3ff19689 Dashboard: fixed issues with re-rendering of UI when importing dashboard (#21723)
* Fixed issues with angular digest and new backendSrv.
* Fixed failing tests.
2020-01-27 11:29:46 +01:00
Marcus Andersson
f46ee12364 Build: Added devenv docker block for testing grafana with traefik. 2020-01-27 11:29:04 +01:00
Sofia Papagiannaki
8f2f07cabf Update What's new in 6.6 (#21745)
* APT and YUM repositories

* Add julie's fixes

* Fix links

* Docs: Adds backendSrv notice (#21752)

* Docs: Adds backendSrv notice

* Update docs/sources/guides/whats-new-in-v6-6.md

* Add links to installation notes

Co-authored-by: Hugo Häggmark <hugo.haggmark@gmail.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-01-27 11:11:08 +02:00
Emil Tullstedt
3fabbbff4d Footer: Display Grafana edition (#21717)
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
2020-01-27 09:24:44 +01:00
Hugo Häggmark
84ef0ebb17 BackendSrv: Fixes POST body for form data (#21714)
* BackendSrv: Fixes POST body for form data
Fixes #21688

* Tests: Changes to POST examples
2020-01-27 08:47:27 +01:00
Erik Sundell
5166ffca33 Docs: Update CloudWatch and Stackdriver docs for 6.6 (#21679)
* Add info about meta data labels

* Add part about auto period calculations in cloudwatch

* Minor adjustments

* Updates after feedback

* Add more context

* Clarify what a metadata label is
2020-01-27 08:35:48 +01:00
Hugo Häggmark
18788727f4 BackendSrv: Adds missing props back to response object in datasourceRequest (#21727)
* BackendSrv: Adds status, headers, statusText, redirect, type and url back to response
Fixes #21662

* BackendSrv: Adds request object back to datasourceRequest response
Fixes #21662
2020-01-27 07:25:24 +01:00
Andrej Ocenas
0fda3c4f44 Explore: Fix context view in logs, where some rows may have been filtered out. (#21729)
* Fix timestamp formats and use uid to filter context rows

* Remove timestamps from tests
2020-01-26 23:13:56 +01:00
Ryan McKinley
ed140346a7 Toolkit: add canvas-mock to test setup (#21739) 2020-01-25 08:11:08 -08:00
Tobias Skarhed
751eb2c8bb TablePabel: Sanitize column link (#21735) 2020-01-25 16:59:58 +01:00
Arve Knudsen
089162b0be Docs: Fix getting started links on Windows installation page (#21724) 2020-01-24 19:33:11 +01:00
Leonard Gram
90f552b6b6 Docs: Enterprise 6.6 (#21666)
* Docs: gitlab team-sync documented correctly

* docs: initial docs for whitelabeling

* Docs: enterprise repositories

* Docs: rpm enterprise install

* Docs: re-structured the rpm install page to be more similar to the deb page

* Docs: responded to review feedback

* Docs: recommends the enterprise edition

* Update docs/sources/installation/debian.md
2020-01-24 16:33:59 +01:00
Tobias Skarhed
4c41d7e7fb Template vars: Add error message for failed query var (#21731) 2020-01-24 15:55:36 +01:00
Andrej Ocenas
39f7cff7c7 Loki: Refactor editor and syntax hooks (#21687) 2020-01-24 15:07:45 +01:00
Torkel Ödegaard
b28eac2626 Devenv: Fixed devenv dashboard template var datasource (#21715) 2020-01-24 12:36:09 +01:00
Torkel Ödegaard
198f561541 Footer: added back missing footer to login page (#21720) 2020-01-24 12:35:54 +01:00
Marcus Efraimsson
63a912629d Admin: Viewer should not see link to teams in side menu (#21716)
Fixes so that viewers don't see a link to teams in side menu when
editors_can_admin setting is enabled.
2020-01-24 12:00:52 +01:00
Dominik Prokop
d9e1cb44c8 Annotations: Fix issue with annotation queries editors (#21712) 2020-01-24 10:55:54 +01:00
Dominik Prokop
5e87af8b2a grafana/ui: Remove path import from grafana-data (#21707) 2020-01-24 10:02:11 +01:00
Ivana Huckova
e75840737e Loki: Fix Loki with repeated panels and interpolation for Explore (#21685) 2020-01-24 09:50:09 +01:00
Arve Knudsen
f91a495875 CircleCI: Add workflow for building with Grafana Build Pipeline (#21449)
* CircleCI: Add workflow for building with grabpl
2020-01-24 09:49:02 +01:00
Torkel Ödegaard
8266959681 StatPanels: Fixed possible migration issue (#21681) 2020-01-24 07:46:33 +01:00
Shavonn Brown
b3d5e678f4 Make importDataSourcePlugin cancelable (#21430)
* make importDataSourcePlugin cancelable

* fix imported plugin assignment

* init datasource plugin to redux

* remove commented

* testDataSource to redux

* add err console log

* isTesting is never used

* tests, loadError type

* more tests, testingStatus obj
2020-01-23 20:37:20 -05:00
Sofia Papagiannaki
c0b839eff7 Docs: Update what's new in 6.6 (#21699)
* Update what's new in 6.6

* Add upgrading and changelog sections

* Remove lines

* Update cookie management section

* Update Bar Gauge unfilled option

* Add missing dot
2020-01-23 20:41:27 +02:00
Marcus Efraimsson
b0dfa48f04 Docs: Fix broken link in upgrade notes (#21698)
Fixes a broken link in the 6.6 upgrade notes.
2020-01-23 18:57:10 +01:00
John Dyer
0fcb2d0b2f Alerting: Support passing tags to Pagerduty and allow notification on specific event categories (#21335)
Add support for passing tags to Pagerduty and allow notification 
on specific event categories such as Class, Group and Component.

Ref #19912, #19913

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-01-23 13:20:07 +01:00
Dominik Prokop
cdfac32dfd PhantomJS: Fix rendering of panels using Prometheus datasource
In 043bb59 a URLSearchParams usage was introduced which is not supported by PhantomJS. @babel/polyfill(deprecated) does not contain polyfill for URLSearchParams, hence the code (and Prometheus graphs rendering) was failing in PhantomJS environment.

The solution is to add https://www.npmjs.com/package/url-search-params-polyfill that takes care of the URLSearchParams
2020-01-23 13:10:38 +01:00
kay delaney
87af7d9987 backendSrv: Only stringifies request body if payload isn't already a string (#21639)
* backendSrv: Only stringifies request body if payload isn't already a string

* Add test cases to verify behaviour
2020-01-23 08:54:20 +00:00
Sofia Papagiannaki
3fd8505195 Update changelog generation to ignore not merged pull requests (#21641) 2020-01-23 10:12:19 +02:00
Torkel Ödegaard
a734cd3640 StatPanel: minor height tweak (#21663) 2020-01-23 08:51:30 +01:00
Dominik Prokop
814020c05c Circle: Introduce es-check to branches & pr workflow (#21677)
* Transpile selected es6 node deps

* Add es-check to build-fast-frontend

* change es-check is used

* transpile react-hook-form
2020-01-23 08:33:39 +01:00
Erik Sundell
296af36a6f Run query when region, namespace and metric changes (#21633) 2020-01-22 21:37:40 +01:00
kay delaney
a115729c55 Explore: Fixes some LogDetailsRow markup (#21671)
- Moves filter titles to icons rather than table cell
- Increases colspan of ad-hoc stats cell instead of
rendering empty cells for parsed fields
2020-01-22 16:10:19 +00:00
Sofia Papagiannaki
2283ceec09 SQLStore: Fix PostgreSQL failure to create organisation for first time (#21648)
* Fix PostgreSQL failure to create organisation for first time

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-01-22 17:56:12 +02:00
Dominik Prokop
5afcf79c59 Migrations: migrate admin user create page (#21506)
* Create basic react page for AdminUserCreate

* Forms.Field - render asterisk when field is marked as required

* Add validation to user create form wih react-hook-form

* Remove Angular code for UserCreatePage

* Remove commented route for admin settings

* Remove unused import

* Hide react-hooks-form behind Form component

* Fix webkit autofill

* Webkit autofill on inpiuts - bring back focus shadow

* Temporarily fix story (before 21635 is merged)

* Form: docs and minor updates to new form elements (#21635)

* Allow Switch, checkbox to be uncontrolled, forward refs, styles update

* Add Form docs

* User create page update

* Remove unused import

* Apply review notes
2020-01-22 15:26:03 +01:00
Torkel Ödegaard
36aab3a738 Docs: Whats new updates (#21664)
* Docs: Whats new updates

* Add cloudwatch and stackdriver paragraphs

* Minor changes

* Add link helper to render gif

* Docs: what's new updates

Co-authored-by: Erik Sundell <erik.sundell87@gmail.com>
2020-01-22 14:02:47 +01:00
Erik Sundell
685c9043a8 CloudWatch: Auto period snap to next higher period (#21659)
* Snap to next higher period instead of closest

* Adjust period calc
2020-01-22 13:43:36 +01:00
Torkel Ödegaard
741e1bb7e9 Login: Better auto sizing of login logo (#21645) 2020-01-22 11:06:12 +01:00
Hugo Häggmark
5dddc91ba5 Chore: Fixes PhantomJs by adding polyfills for fetch and AbortController (#21655)
* Chore: Fixes PhantomJs rendering

* Docs: Updated docs

* Update contribute/style-guides/e2e.md

Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>

* Docs: Updates docs according to PR comments

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-01-22 08:15:31 +01:00
Torkel Ödegaard
c228cde2b6 Alert: Minor tweak to work with license warnings (#21654) 2020-01-22 07:53:24 +01:00
Ryan McKinley
aee07949a3 Toolkit: copyIfNonExistent order swapped (#21653) 2020-01-21 22:10:16 -08:00
basefas
6553d775d5 Doc: Update configuration.md (#21602)
Minor format fix
2020-01-21 10:31:30 -08:00
Ivana Huckova
6feb4a3221 Explore: Fix log level color and add tests (#21646) 2020-01-21 17:20:22 +01:00
Torkel Ödegaard
92ef8644c5 Templating: A way to support object syntax for global vars (#21634) 2020-01-21 16:06:04 +01:00
kenju
935d447c6a CloudWatch: Add DynamoDB Accelerator (DAX) metrics & dimensions (#21644)
Closes #10494
2020-01-21 15:19:39 +01:00
Leonard Gram
4a1f993fd1 next version 6.7.0 (#21617)
* next version 6.7.0

* updates grafana/toolkit and co

* Verison: manually fixed version
2020-01-21 15:15:38 +01:00
Leonard Gram
e8be2bbbec latest.jso: Update latest beta 6.6.0-beta1 (#21623) 2020-01-21 15:14:03 +01:00
Torkel Ödegaard
35d4aef5f8 Docs: Update changelog with attribution (#21637) 2020-01-21 15:12:05 +01:00
Torkel Ödegaard
46ccfacb2b Docs: Updated what's new article (#21624)
* Docs: Updated what's new articel

* fixed spelling

* Updated
2020-01-21 11:54:24 +01:00
Emil Hessman
25e2f1c2dd Plugins: Apply adhoc filter in Elasticsearch logs query (#21346)
Fixes #21086
2020-01-21 09:39:55 +00:00
Leonard Gram
07d96fe486 Changelog: v6.6.0-beta1 (#21619)
* Changelod: v6.6.0-beta1

* Changelog: grafana/ui v6.6.0-beta.1.0

* Changelog: moved toolkit to its own file

* Changelog: fix version

* Remove closed PR

Co-authored-by: Sofia Papagiannaki <papagian@users.noreply.github.com>
2020-01-21 10:10:16 +01:00
kay delaney
cf2cc71393 Chore: Remove angular dependency from backendSrv (#20999)
* Chore: Remove angular dependency from backendSrv

* Refactor: Naive soultion for logging out unauthorized users

* Refactor: Restructures to different streams

* Refactor: Restructures datasourceRequest

* Refactor: Flipped back if statement

* Refactor: Extracted getFromFetchStream

* Refactor: Extracts toFailureStream operation

* Refactor: Fixes issue when options.params contains arrays

* Refactor: Fixes broken test (but we need a lot more)

* Refactor: Adds explaining comments

* Refactor: Adds latest RxJs version so cancellations work

* Refactor: Cleans up the takeUntil code

* Refactor: Adds tests for request function

* Refactor: Separates into smaller functions

* Refactor: Adds last error tests

* Started to changed so we require getBackendSrv from the @grafana-runtime when applicable.

* Using the getBackendSrv from @grafana/runtime.

* Changed so we use the getBackendSrv from the @grafana-runtime when possible.

* Fixed so Server Admin -> Orgs works again.

* Removed unused dependency.

* Fixed digest issues on the Server Admin -> Users page.

* Fix: Fixes digest problems in Playlists

* Fix: Fixes digest issues in VersionHistory

* Tests: Fixes broken tests

* Fix: Fixes digest issues in Alerting => Notification channels

* Fixed digest issues on the Intive page.

* Fixed so we run digest after password reset email sent.

* Fixed digest issue when trying to sign up account.

* Fixed so the Server Admin -> Edit Org works with backendSrv

* Fixed so Server Admin -> Users works with backend srv.

* Fixed digest issues in Server Admin -> Orgs

* Fix: Fixes digest issues in DashList plugin

* Fixed digest issues on Server Admin -> users.

* Fix: Fixes digest issues with Snapshots

* Fixed digest issue when deleting a user.

* Fix: Fixes digest issues with dashLink

* Chore: Changes RxJs version to 6.5.4 which includes the same cancellation fix

* Fix: Fixes digest issue when toggling folder in manage dashboards

* Fix: Fixes bug in executeInOrder

* Fix: Fixes digest issue with CreateFolderCtrl and FolderDashboardsCtrl

* Fix: Fixes tslint error in test

* Refactor: Changes default behaviour for emitted messages as before migration

* Fix: Fixes various digest issues when saving, starring or deleting dashboards

* Fix: Fixes digest issues with FolderPickerCtrl

* Fixed digest issue.

* Fixed digest issues.

* Fixed issues with angular digest.

* Removed the this.digest pattern.

Co-authored-by: Hugo Häggmark <hugo.haggmark@gmail.com>
Co-authored-by: Marcus Andersson <systemvetaren@gmail.com>
2020-01-21 10:08:07 +01:00
Tobias Skarhed
6ff315a299 Emotion: Add main package with version 10 (#21560)
* Update version and snapshots

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2020-01-21 07:40:05 +01:00
Ryan McKinley
5f14d62c0d TestData: allow negative values for random_walk parameters (#21627) 2020-01-20 10:50:42 -08:00
Sofia Papagiannaki
2021a2df74 Update musl checksums (#21621) 2020-01-20 19:55:55 +02:00
Erik Sundell
a1733bb412 CloudWatch: Expand dimension value in alias correctly (#21626)
* Make sure dimension value is being returned, and not just label

* Fix typo
2020-01-20 18:51:32 +01:00
Marcus Efraimsson
5f332682ec Devenv: InfluxDB logs dashboard (#21620)
Test dashboard for using influxdb with logs panel
2020-01-20 17:00:37 +01:00
Leonard Gram
7e0890d57d Build: adds missing filters required to build oss msi (#21618) 2020-01-20 14:37:34 +01:00
2255 changed files with 106150 additions and 31047 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -16,6 +16,9 @@ charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{js,ts,tsx,scss}]
quote_type = single
[*.md]
trim_trailing_whitespace = false

4
.eslintrc Normal file
View File

@@ -0,0 +1,4 @@
{
"extends": ["@grafana/eslint-config"],
"root": true
}

7
.github/CODEOWNERS vendored
View File

@@ -13,4 +13,9 @@
# Documentation owner: Diana Payton
/docs/ @oddlittlebird
/contribute/ @oddlittlebird @marcusolsson
/contribute/ @oddlittlebird @marcusolsson
# Backend code
*.go @grafana/backend-platform
go.mod @grafana/backend-platform
go.sum @grafana/backend-platform

View File

@@ -19,7 +19,7 @@ jobs:
id: publish
with:
repository: grafana/website
branch: docs-grafana
branch: master
host: github.com
github_pat: '${{ secrets.GH_BOT_ACCESS_TOKEN }}'
source_folder: docs/sources

3
.gitignore vendored
View File

@@ -11,6 +11,8 @@ awsconfig
/public/views/error.html
/emails/dist
/reports
.yarnrc
.yarn/
# Enterprise emails
/emails/templates/enterprise_*
@@ -89,6 +91,7 @@ debug.test
/packages/**/dist
/packages/**/compiled
/packages/**/.rpt2_cache
/packages/**/tsdoc-metadata.json
# Ignore go local build dependencies
/scripts/go/bin/**

View File

@@ -1,16 +1,169 @@
# 6.6.0 (unreleased)
# 6.7.0 (unreleased)
## Breaking changes
* **Slack**: Removed _Mention_ setting and instead introduce _Mention Users_, _Mention Groups_, and _Mention Channel_. The first two settings require user and group IDs, respectively. This change was necessary because the way of mentioning via the Slack API [changed](https://api.slack.com/changelog/2017-09-the-one-about-usernames) and mentions in Slack notifications no longer worked.
* **Alerting**: Reverts the behavior of `diff` and `percent_diff` to not always be absolute. Something we introduced by mistake in [6.1.0](https://github.com/grafana/grafana/commit/28eaac3a9c7082e8c496005c1cb66b4b70a4f82f). Alerting now support `diff()`, `diff_abs()`, `percent_diff()` and `percent_diff_abs()`. [#21338](https://github.com/grafana/grafana/pull/21338)
### Notice about changes in backendSrv for plugin authors
In our mission to migrate away from AngularJS to React we have removed all AngularJS dependencies in the core data retrieval service `backendSrv`.
Removing the AngularJS dependencies in `backendSrv` has the unfortunate side effect of AngularJS digest no longer being triggered for any request made with `backendSrv`. Because of this, external plugins using `backendSrv` directly may suffer from strange behaviour in the UI.
To remedy this issue, as a plugin author you need to trigger the digest after a direct call to `backendSrv`.
Example:
```js
backendSrv.get(http://your.url/api).then(result => {
this.result = result;
this.$scope.$digest();
});
```
You can test your plugin with the `master` branch version of Grafana.
# 6.6.2 (2020-02-20)
### Features / Enhancements
* **Data proxy**: Log proxy errors using Grafana logger. [#22174](https://github.com/grafana/grafana/pull/22174), [@bergquist](https://github.com/bergquist)
* **Metrics**: Add gauge for requests currently in flight. [#22168](https://github.com/grafana/grafana/pull/22168), [@bergquist](https://github.com/bergquist)
* **Graphite**: Add Metrictank dashboard to Graphite datasource
### Bug Fixes
* **@grafana/ui**: Fix displaying of bars in React Graph. [#21968](https://github.com/grafana/grafana/pull/21968), [@ivanahuckova](https://github.com/ivanahuckova)
* **API**: Fix redirect issue when configured to use a subpath. [#21652](https://github.com/grafana/grafana/pull/21652), [@briangann](https://github.com/briangann)
* **API**: Improve recovery middleware when response already been written. [#22256](https://github.com/grafana/grafana/pull/22256), [@marefr](https://github.com/marefr)
* **Auth**: Don't rotate auth token when requests are cancelled by client. [#22106](https://github.com/grafana/grafana/pull/22106), [@bergquist](https://github.com/bergquist)
* **Docker**: Downgrade to 18.04 LTS base image. [#22313](https://github.com/grafana/grafana/pull/22313), [@aknuds1](https://github.com/aknuds1)
* **Elasticsearch**: Fix auto interval for date histogram in explore logs mode. [#21937](https://github.com/grafana/grafana/pull/21937), [@ivanahuckova](https://github.com/ivanahuckova)
* **Image Rendering**: Fix PhantomJS compatibility with es2016 node dependencies. [#21677](https://github.com/grafana/grafana/pull/21677), [@dprokop](https://github.com/dprokop)
* **Links**: Assure base url when single stat, panel and data links are built. [#21956](https://github.com/grafana/grafana/pull/21956), [@dprokop](https://github.com/dprokop)
* **Loki, Prometheus**: Fix PromQL and LogQL syntax highlighting. [#21944](https://github.com/grafana/grafana/pull/21944), [@ivanahuckova](https://github.com/ivanahuckova)
* **OAuth**: Enforce auto_assign_org_id setting when role mapping enabled using Generic OAuth. [#22268](https://github.com/grafana/grafana/pull/22268), [@aknuds1](https://github.com/aknuds1)
* **Prometheus**: Updates explore query editor to prevent it from throwing error on edit. [#21605](https://github.com/grafana/grafana/pull/21605), [@Estrax](https://github.com/Estrax)
* **Server**: Reorder cipher suites for better security. [#22101](https://github.com/grafana/grafana/pull/22101), [@tofu-rocketry](https://github.com/tofu-rocketry)
* **TimePicker**: fixing weird behavior with calendar when switching between months/years . [#22253](https://github.com/grafana/grafana/pull/22253), [@mckn](https://github.com/mckn)
# 6.6.1 (2020-02-06)
### Bug Fixes
* **Annotations**: Change indices and rewrites annotation find query to improve database query performance. [#21915](https://github.com/grafana/grafana/pull/21915), [@papagian](https://github.com/papagian), [@marefr](https://github.com/marefr), [@kylebrandt](https://github.com/kylebrandt)
* **Azure Monitor**: Fix Application Insights API key field to allow input. [#21738](https://github.com/grafana/grafana/pull/21738), [@shavonn](https://github.com/shavonn)
* **BarGauge**: Fix so we properly display the "no result" value when query returns empty result. [#21791](https://github.com/grafana/grafana/pull/21791), [@mckn](https://github.com/mckn)
* **Datasource**: Show access (Browser/Server) select on the Prometheus datasource. [#21833](https://github.com/grafana/grafana/pull/21833), [@jorgelbg](https://github.com/jorgelbg)
* **DatasourceSettings**: Fixed issue navigating away from data source settings page. [#21841](https://github.com/grafana/grafana/pull/21841), [@torkelo](https://github.com/torkelo)
* **Graph Panel**: Fix typo in thresholds form. [#21903](https://github.com/grafana/grafana/pull/21903), [@orendain](https://github.com/orendain)
* **Graphite**: Fixed issue with functions with multiple required params and no defaults caused params that could not be edited (groupByNodes groupByTags). [#21814](https://github.com/grafana/grafana/pull/21814), [@torkelo](https://github.com/torkelo)
* **Image Rendering**: Fix render of graph panel legend aligned to the right using Grafana image renderer plugin/service. [#21854](https://github.com/grafana/grafana/pull/21854), [@marefr](https://github.com/marefr)
* **Metrics**: Adds back missing summary quantiles. [#21858](https://github.com/grafana/grafana/pull/21858), [@kogent](https://github.com/kogent)
* **OpenTSDB**: Adds back missing ngInject to make it work again. [#21796](https://github.com/grafana/grafana/pull/21796), [@marefr](https://github.com/marefr)
* **Plugins**: Fix routing in app plugin pages. [#21847](https://github.com/grafana/grafana/pull/21847), [@dprokop](https://github.com/dprokop)
* **Prometheus**: Fixes default step value for annotation query. [#21934](https://github.com/grafana/grafana/pull/21934), [@hugohaggmark](https://github.com/hugohaggmark)
* **Quota**: Makes LDAP + Quota work for the first login of a new user. [#21949](https://github.com/grafana/grafana/pull/21949), [@xlson](https://github.com/xlson)
* **StatPanels**: Fixed change from singlestat to Gauge / BarGauge / Stat where default min & max (0, 100) was copied . [#21820](https://github.com/grafana/grafana/pull/21820), [@torkelo](https://github.com/torkelo)
* **TimePicker**: Should display in kiosk mode. [#21816](https://github.com/grafana/grafana/pull/21816), [@evgbibko](https://github.com/evgbibko)
* **grafana/toolkit**: Fix failing linter when there were lint issues. [#21849](https://github.com/grafana/grafana/pull/21849), [@dprokop](https://github.com/dprokop)
# 6.6.0 (2020-01-27)
### Features / Enhancements
* **CloudWatch**: Add DynamoDB Accelerator (DAX) metrics & dimensions. [#21644](https://github.com/grafana/grafana/pull/21644), [@kenju](https://github.com/kenju)
* **CloudWatch**: Auto period snap to next higher period. [#21659](https://github.com/grafana/grafana/pull/21659), [@sunker](https://github.com/sunker)
* **Template variables**: Add error for failed query variable on time range update. [#21731](https://github.com/grafana/grafana/pull/21731), [@tskarhed](https://github.com/tskarhed)
* **XSS**: Sanitize column link. [#21735](https://github.com/grafana/grafana/pull/21735), [@tskarhed](https://github.com/tskarhed)
### Bug Fixes
* **Elasticsearch**: Fix adhoc variable filtering for logs query. [#21346](https://github.com/grafana/grafana/pull/21346), [@ceh](https://github.com/ceh)
* **Explore**: Fix colors for log level when level value is capitalised. [#21646](https://github.com/grafana/grafana/pull/21646), [@ivanahuckova](https://github.com/ivanahuckova)
* **Explore**: Fix context view in logs, where some rows may have been filtered out.. [#21729](https://github.com/grafana/grafana/pull/21729), [@aocenas](https://github.com/aocenas)
* **Loki**: Fix Loki with repeated panels and interpolation for Explore. [#21685](https://github.com/grafana/grafana/pull/21685), [@ivanahuckova](https://github.com/ivanahuckova)
* **SQLStore**: Fix PostgreSQL failure to create organisation for first time. [#21648](https://github.com/grafana/grafana/pull/21648), [@papagian](https://github.com/papagian)
# 6.6.0-beta1 (2020-01-20)
## Breaking changes
* **PagerDuty**: Change `payload.custom_details` field in PagerDuty notification to be a JSON object instead of a string.
* **Security**: The `[security]` setting `cookie_samesite` configured to `none` now renders cookies with `SameSite=None` attribute compared to before where no `SameSite` attribute was added to cookies. To get the old behavior, use value `disabled` instead of `none`. Refer to [Upgrade Grafana](https://grafana.com/docs/grafana/latest/installation/upgrading/#upgrading-to-v6-6) for more information.
### Features / Enhancements
* **Graphite**: Add Metrictank dashboard to Graphite datasource
* **Admin**: Show name of user in users table view. [#18108](https://github.com/grafana/grafana/pull/18108), [@eleijonmarck](https://github.com/eleijonmarck)
* **Alerting**: Add configurable severity support for PagerDuty notifier. [#19425](https://github.com/grafana/grafana/pull/19425), [@yemble](https://github.com/yemble)
* **Alerting**: Add more information to webhook notifications. [#20420](https://github.com/grafana/grafana/pull/20420), [@michael-az](https://github.com/michael-az)
* **Alerting**: Add support for sending tags in OpsGenie notifier. [#20810](https://github.com/grafana/grafana/pull/20810), [@aSapien](https://github.com/aSapien)
* **Alerting**: Added fallbackText to Google Chat notifier. [#21464](https://github.com/grafana/grafana/pull/21464), [@alvarolmedo](https://github.com/alvarolmedo)
* **Alerting**: Adds support for sending a single email to all recipients in email notifier. [#21091](https://github.com/grafana/grafana/pull/21091), [@marefr](https://github.com/marefr)
* **Alerting**: Enable setting of OpsGenie priority via a tag. [#21298](https://github.com/grafana/grafana/pull/21298), [@zabullet](https://github.com/zabullet)
* **Alerting**: Use fully qualified status emoji in Threema notifier. [#21305](https://github.com/grafana/grafana/pull/21305), [@dbrgn](https://github.com/dbrgn)
* **Alerting**: new min_interval_seconds option to enforce a minimum evaluation frequency . [#21188](https://github.com/grafana/grafana/pull/21188), [@papagian](https://github.com/papagian)
* **CloudWatch**: Calculate period based on time range. [#21471](https://github.com/grafana/grafana/pull/21471), [@sunker](https://github.com/sunker)
* **CloudWatch**: Display partial result in graph when max DP/call limit is reached . [#21533](https://github.com/grafana/grafana/pull/21533), [@sunker](https://github.com/sunker)
* **CloudWatch**: ECS/ContainerInsights metrics support. [#21125](https://github.com/grafana/grafana/pull/21125), [@briancurt](https://github.com/briancurt)
* **CloudWatch**: Upgrade aws-sdk-go. [#20510](https://github.com/grafana/grafana/pull/20510), [@mtanda](https://github.com/mtanda)
* **DataLinks**: allow using values from other fields in the same row (cells). [#21478](https://github.com/grafana/grafana/pull/21478), [@ryantxu](https://github.com/ryantxu)
* **Editor**: Ignore closing brace when it was added by editor. [#21172](https://github.com/grafana/grafana/pull/21172), [@davkal](https://github.com/davkal)
* **Explore**: Context tooltip to copy labels and values from graph. [#21405](https://github.com/grafana/grafana/pull/21405), [@ivanahuckova](https://github.com/ivanahuckova)
* **Explore**: Log message line wrapping options for logs. [#20360](https://github.com/grafana/grafana/pull/20360), [@ivanahuckova](https://github.com/ivanahuckova)
* **Forms**: introduce RadioButtonGroup. [#20828](https://github.com/grafana/grafana/pull/20828), [@dprokop](https://github.com/dprokop)
* **Frontend**: Changes in Redux location should not strip subpath from location url. [#20161](https://github.com/grafana/grafana/pull/20161), [@wybczu](https://github.com/wybczu)
* **Graph**: Add fill gradient option to series override line fill. [#20941](https://github.com/grafana/grafana/pull/20941), [@hendrikvh](https://github.com/hendrikvh)
* **Graphite**: Add metrictank dashboard to Graphite datasource. [#20776](https://github.com/grafana/grafana/pull/20776), [@Dieterbe](https://github.com/Dieterbe)
* **Graphite**: Do not change query when opening the query editor and there is no data. [#21588](https://github.com/grafana/grafana/pull/21588), [@daniellee](https://github.com/daniellee)
* **Gravatar**: Use HTTPS by default. [#20964](https://github.com/grafana/grafana/pull/20964), [@jiajunhuang](https://github.com/jiajunhuang)
* **Loki**: Support for template variable queries. [#20697](https://github.com/grafana/grafana/pull/20697), [@ivanahuckova](https://github.com/ivanahuckova)
* **NewsPanel**: Add news as a builtin panel. [#21128](https://github.com/grafana/grafana/pull/21128), [@ryantxu](https://github.com/ryantxu)
* **OAuth**: Removes send_client_credentials_via_post setting . [#20044](https://github.com/grafana/grafana/pull/20044), [@LK4D4](https://github.com/LK4D4)
* **OpenTSDB**: Adding lookup limit to OpenTSDB datasource settings. [#20647](https://github.com/grafana/grafana/pull/20647), [@itamarst](https://github.com/itamarst)
* **Postgres/MySQL/MSSQL**: Adds support for region annotations. [#20752](https://github.com/grafana/grafana/pull/20752), [@Bercon](https://github.com/Bercon)
* **Prometheus**: Field to specify step in Explore. [#20195](https://github.com/grafana/grafana/pull/20195), [@Estrax](https://github.com/Estrax)
* **Prometheus**: User metrics metadata to inform query hints. [#21304](https://github.com/grafana/grafana/pull/21304), [@davkal](https://github.com/davkal)
* **Renderer**: Add user-agent to remote rendering service requests. [#20956](https://github.com/grafana/grafana/pull/20956), [@kfdm](https://github.com/kfdm)
* **Security**: Add disabled option for cookie samesite attribute. [#21472](https://github.com/grafana/grafana/pull/21472), [@marefr](https://github.com/marefr)
* **Stackdriver**: Support meta labels. [#21373](https://github.com/grafana/grafana/pull/21373), [@sunker](https://github.com/sunker)
* **TablePanel, GraphPanel**: Exclude hidden columns from CSV. [#19925](https://github.com/grafana/grafana/pull/19925), [@literalplus](https://github.com/literalplus)
* **Templating**: Update variables on location changed. [#21480](https://github.com/grafana/grafana/pull/21480), [@ryantxu](https://github.com/ryantxu)
* **Tracing**: Support configuring Jaeger client from environment. [#21103](https://github.com/grafana/grafana/pull/21103), [@hairyhenderson](https://github.com/hairyhenderson)
* **Units**: Add currency and energy units. [#20428](https://github.com/grafana/grafana/pull/20428), [@anirudh-ramesh](https://github.com/anirudh-ramesh)
* **Units**: Support dynamic count and currency units. [#21279](https://github.com/grafana/grafana/pull/21279), [@ryantxu](https://github.com/ryantxu)
* **grafana/toolkit**: Add option to override webpack config. [#20872](https://github.com/grafana/grafana/pull/20872), [@sebimarkgraf](https://github.com/sebimarkgraf)
* **grafana/ui**: ConfirmModal component. [#20965](https://github.com/grafana/grafana/pull/20965), [@alexanderzobnin](https://github.com/alexanderzobnin)
* **grafana/ui**: Create Tabs component. [#21328](https://github.com/grafana/grafana/pull/21328), [@peterholmberg](https://github.com/peterholmberg)
* **grafana/ui**: New table component. [#20991](https://github.com/grafana/grafana/pull/20991), [@peterholmberg](https://github.com/peterholmberg)
* **grafana/ui**: New updated time picker. [#20931](https://github.com/grafana/grafana/pull/20931), [@mckn](https://github.com/mckn)
* **White-labeling**: Makes it possible to customize the footer and login background (Enterprise)
### Bug Fixes
* **API**: Optionally list expired API keys. [#20468](https://github.com/grafana/grafana/pull/20468), [@papagian](https://github.com/papagian)
* **Alerting**: Fix custom_details to be a JSON object instead of a string in PagerDuty notifier. [#21150](https://github.com/grafana/grafana/pull/21150), [@tehGoti](https://github.com/tehGoti)
* **Alerting**: Fix image rendering and uploading timeout preventing to send alert notifications. [#21536](https://github.com/grafana/grafana/pull/21536), [@marefr](https://github.com/marefr)
* **Alerting**: Fix panic in dingding notifier . [#20378](https://github.com/grafana/grafana/pull/20378), [@csyangchen](https://github.com/csyangchen)
* **Alerting**: Fix template query validation logic. [#20721](https://github.com/grafana/grafana/pull/20721), [@okhowang](https://github.com/okhowang)
* **Alerting**: If no permission to clear history, keep the historical data. [#19007](https://github.com/grafana/grafana/pull/19007), [@lzdw](https://github.com/lzdw)
* **Alerting**: Unpausing a non-paused alert rule should not change status to Unknown. [#21375](https://github.com/grafana/grafana/pull/21375), [@vikkyomkar](https://github.com/vikkyomkar)
* **Api**: Fix returned message when enabling, disabling and deleting a non-existing user. [#21391](https://github.com/grafana/grafana/pull/21391), [@dpavlos](https://github.com/dpavlos)
* **Auth**: Rotate auth tokens at the end of requests. [#21347](https://github.com/grafana/grafana/pull/21347), [@woodsaj](https://github.com/woodsaj)
* **Azure Monitor**: Fixes error using azure monitor credentials with log analytics and non-default cloud. [#21032](https://github.com/grafana/grafana/pull/21032), [@shavonn](https://github.com/shavonn)
* **CLI**: Return error and aborts when plugin file extraction fails. [#20849](https://github.com/grafana/grafana/pull/20849), [@marefr](https://github.com/marefr)
* **CloudWatch**: Multi-valued template variable dimension alias fix. [#21541](https://github.com/grafana/grafana/pull/21541), [@sunker](https://github.com/sunker)
* **Dashboard**: Disable draggable panels on small devices. [#20629](https://github.com/grafana/grafana/pull/20629), [@peterholmberg](https://github.com/peterholmberg)
* **DataLinks**: Links with ${__value.time} do not work when clicking on first result . [#20019](https://github.com/grafana/grafana/pull/20019), [@dweineha](https://github.com/dweineha)
* **Explore**: Fix showing of results in selected timezone (UTC/local). [#20812](https://github.com/grafana/grafana/pull/20812), [@ivanahuckova](https://github.com/ivanahuckova)
* **Explore**: Fix timepicker when browsing back after switching datasource. [#21454](https://github.com/grafana/grafana/pull/21454), [@ivanahuckova](https://github.com/ivanahuckova)
* **Explore**: Sync timepicker and logs after live-tailing stops. [#20979](https://github.com/grafana/grafana/pull/20979), [@ivanahuckova](https://github.com/ivanahuckova)
* **Graph**: Fix when clicking a plot on a touch device we won't display the annotation menu. [#21479](https://github.com/grafana/grafana/pull/21479), [@mckn](https://github.com/mckn)
* **OAuth**: Fix role mapping from id token. [#20300](https://github.com/grafana/grafana/pull/20300), [@seanson](https://github.com/seanson)
* **Plugins**: Add appSubUrl string to config pages. [#21414](https://github.com/grafana/grafana/pull/21414), [@Maddin-619](https://github.com/Maddin-619)
* **Provisioning**: Start provision dashboards after Grafana server have started. [#21564](https://github.com/grafana/grafana/pull/21564), [@marefr](https://github.com/marefr)
* **Render**: Use https as protocol when rendering if HTTP2 enabled. [#21600](https://github.com/grafana/grafana/pull/21600), [@marefr](https://github.com/marefr)
* **Security**: Use same cookie settings for all cookies. [#19787](https://github.com/grafana/grafana/pull/19787), [@jeffdesc](https://github.com/jeffdesc)
* **Singlestat**: Support empty value map texts. [#20952](https://github.com/grafana/grafana/pull/20952), [@hendrikvh](https://github.com/hendrikvh)
* **Units**: Custom suffix and prefix units can now be specified, for example custom currency & SI & time formats. [#20763](https://github.com/grafana/grafana/pull/20763), [@ryantxu](https://github.com/ryantxu)
* **grafana/ui**: Do not build grafana/ui in strict mode as it depends on non-strict libs. [#21319](https://github.com/grafana/grafana/pull/21319), [@dprokop](https://github.com/dprokop)
# 6.5.3 (2020-01-15)
### Features / Enhancements
* **API**: Validate redirect_to cookie has valid (Grafana) url . [#21057](https://github.com/grafana/grafana/pull/21057), [@papagian](https://github.com/papagian)
* **API**: Validate redirect_to cookie has valid (Grafana) url . [#21057](https://github.com/grafana/grafana/pull/21057), [@papagian](https://github.com/papagian), Thanks Habi S Ravi for reporting this issue.
### Bug Fixes
* **AdHocFilter**: Shows SubMenu when filtering directly from table. [#21017](https://github.com/grafana/grafana/pull/21017), [@hugohaggmark](https://github.com/hugohaggmark)
@@ -133,7 +286,8 @@
* **Templating**: Made default template variable query editor field a textarea with automatic height. [#20288](https://github.com/grafana/grafana/pull/20288), [@torkelo](https://github.com/torkelo)
* **Units**: Add milli/microSievert, milli/microSievert/h and pixels. [#20144](https://github.com/grafana/grafana/pull/20144), [@ryantxu](https://github.com/ryantxu)
* **Units**: Added mega ampere and watt-hour per kg. [#19922](https://github.com/grafana/grafana/pull/19922), [@Karan96Kaushik](https://github.com/Karan96Kaushik)
* **Enterprise**: Enterprise without a license behaves like OSS (Enterprise)
### Bug Fixes
* **API**: Added dashboardId and slug in response to dashboard import api. [#19692](https://github.com/grafana/grafana/pull/19692), [@jongyllen](https://github.com/jongyllen)
* **API**: Fix logging of dynamic listening port. [#19644](https://github.com/grafana/grafana/pull/19644), [@oleggator](https://github.com/oleggator)
@@ -234,6 +388,7 @@ also fixed a security vulnerability. Thanks Yuriy Dyachenko for discovering and
* **Explore**: Take root_url setting into account when redirecting from dashboard to explore. [#19447](https://github.com/grafana/grafana/pull/19447), [@ivanahuckova](https://github.com/ivanahuckova)
* **Explore**: Update broken link to logql docs. [#19510](https://github.com/grafana/grafana/pull/19510), [@ivanahuckova](https://github.com/ivanahuckova)
* **Logs**: Adds Logs Panel as a visualization. [#19504](https://github.com/grafana/grafana/pull/19504), [@davkal](https://github.com/davkal)
* **Reporting**: Generate and email PDF reports based on Dashboards (Enterprise)
### Bug Fixes
* **CLI**: Fix version selection for plugin install. [#19498](https://github.com/grafana/grafana/pull/19498), [@aocenas](https://github.com/aocenas)
@@ -486,6 +641,7 @@ Please consider migrating from PhantomJS to the [Grafana Image Renderer plugin](
* **Templating**: Support selecting all filtered values of a multi-value variable. [#16873](https://github.com/grafana/grafana/pull/16873), [@r66ad](https://github.com/r66ad)
* **Tracing**: allow propagation with Zipkin headers. [#17009](https://github.com/grafana/grafana/pull/17009), [@jrockway](https://github.com/jrockway)
* **Users**: Disable users removed from LDAP. [#16820](https://github.com/grafana/grafana/pull/16820), [@alexanderzobnin](https://github.com/alexanderzobnin)
* **SAML**: Add SAML as an authentication option (Enterprise)
### Bug Fixes
* **AddPanel**: Fix issue when removing moved add panel widget . [#17659](https://github.com/grafana/grafana/pull/17659), [@dehrax](https://github.com/dehrax)

View File

@@ -35,7 +35,7 @@ COPY packages packages
RUN yarn install --pure-lockfile --no-progress
COPY Gruntfile.js tsconfig.json tslint.json .browserslistrc ./
COPY Gruntfile.js tsconfig.json .eslintrc .editorconfig .browserslistrc ./
COPY public public
COPY scripts scripts
COPY emails emails

View File

@@ -26,15 +26,15 @@ COPY packages packages
RUN yarn install --pure-lockfile
COPY Gruntfile.js tsconfig.json tslint.json .browserslistrc ./
COPY public public
COPY Gruntfile.js tsconfig.json .eslintrc .editorconfig .browserslistrc ./
COPY public public
COPY scripts scripts
COPY emails emails
ENV NODE_ENV production
RUN ./node_modules/.bin/grunt build
FROM ubuntu:18.10
FROM ubuntu:19.10
LABEL maintainer="Grafana team <hello@grafana.com>"
EXPOSE 3000

34
api-extractor.json Normal file
View File

@@ -0,0 +1,34 @@
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
"mainEntryPointFilePath": "<projectFolder>/dist/index.d.ts",
"bundledPackages": [],
"compiler": {},
"apiReport": {
"enabled": false
},
"docModel": {
"enabled": true,
"apiJsonFilePath": "<projectFolder>/../../reports/docs/<unscopedPackageName>.api.json"
},
"dtsRollup": {
"enabled": false
},
"tsdocMetadata": {},
"messages": {
"compilerMessageReporting": {
"default": {
"logLevel": "warning"
}
},
"extractorMessageReporting": {
"default": {
"logLevel": "warning"
}
},
"tsdocMessageReporting": {
"default": {
"logLevel": "warning"
}
}
}
}

View File

@@ -230,6 +230,10 @@ snapshot_remove_expired = true
# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1
versions_to_keep = 20
# Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is not set/unrestricted.
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
min_refresh_interval =
#################################### Users ###############################
[users]
# disable user signup / registration
@@ -366,6 +370,19 @@ client_secret = some_secret
scopes = user:email
allowed_organizations =
#################################### Azure AD OAuth #######################
[auth.azuread]
name = Azure AD
enabled = false
allow_sign_up = true
client_id = some_client_id
client_secret = some_client_secret
scopes = openid email profile
auth_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
allowed_domains =
allowed_groups =
#################################### Generic OAuth #######################
[auth.generic_oauth]
name = OAuth

View File

@@ -229,6 +229,10 @@
# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1
;versions_to_keep = 20
# Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is not set/unrestricted.
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
;min_refresh_interval =
#################################### Users ###############################
[users]
# disable user signup / registration
@@ -356,6 +360,19 @@
;scopes = user:email
;allowed_organizations =
#################################### Azure AD OAuth #######################
[auth.azuread]
;name = Azure AD
;enabled = false
;allow_sign_up = true
;client_id = some_client_id
;client_secret = some_client_secret
;scopes = openid email profile
;auth_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
;token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
;allowed_domains =
;allowed_groups =
#################################### Generic OAuth ##########################
[auth.generic_oauth]
;enabled = false

View File

@@ -72,7 +72,7 @@ if err := s.bus.Dispatch(cmd); err != nil {
### Handle commands
Let others parts of the application dispatch commands to a service, by registering a _command handler_:
Let other parts of the application dispatch commands to a service, by registering a _command handler_:
To handle a command, register a command handler in the `Init` function.
@@ -91,7 +91,7 @@ func (s *MyService) SendStickers(cmd *models.SendStickersCommand) error {
## Queries
A command handler can optionally populate the command sent it. This pattern is commonly used to implement _queries_.
A command handler can optionally populate the command sent to it. This pattern is commonly used to implement _queries_.
### Making a query

View File

@@ -39,7 +39,3 @@ Tests must use the standard library, `testing`. For assertions, prefer using [te
The majority of our tests uses [GoConvey](http://goconvey.co/) but that's something we want to avoid going forward.
In the `sqlstore` package we do database operations in tests and while some might say that's not suited for unit tests. We think they are fast enough and provide a lot of value.
## General guidelines
- Avoid using import aliases, e.g. `import m "github.com/grafana/grafana/pkg/models"`.

View File

@@ -0,0 +1,209 @@
# Guidelines for code comments in grafana-* packages
This document aims to give you some recommendation on how to add code comments to the exported code in the grafana packages.
## Table of Contents
1. [Add package description](#add-package-description)
1. [Set stability of an API](#set-stability-of-an-api)
1. [Deprecate an API](#deprecate-an-api)
1. [Specify parameters](#specify-parameters)
1. [Set return values](#set-return-values)
____
## Add package description
Each package has an overview explaining the overall responsibility and usage of the package.
You can document this description with [`@packageDocumentation`](https://api-extractor.com/pages/tsdoc/tag_packagedocumentation/) tag.
Add this tag to the `<packageRoot>/src/index.ts` entry file to have one place for the package description.
## Set stability of an API
All `exported` apis from the package should have a release tag to indicate its stability.
- [`@alpha`](https://api-extractor.com/pages/tsdoc/tag_alpha/) - early draft of api and will probably change.
- [`@beta`](https://api-extractor.com/pages/tsdoc/tag_beta/) - close to being stable but might change.
- [`@public`](https://api-extractor.com/pages/tsdoc/tag_public/) - ready for useage in production.
- [`@internal`](https://api-extractor.com/pages/tsdoc/tag_internal/) - for internal use only.
### Main stability of APIs
Add a tag to mark the stability of the whole exported `class/interface/function/type` etc.
Please place the `release tag` at the bottom of the comment to make it consistent among files and easier to read.
**Do:**
```typescript
/**
* Will help to create DataFrame objects and handle
* the heavy lifting of creating a complex object.
*
* @example
* ```typescript
* const dataFrame = factory.create();
* ```
*
* @public
**/
export class DataFrameFactory {
create(): DataFrame { }
}
```
**Don't**
```typescript
/**
* Will help to create DataFrame objects and handle
* the heavy lifting of creating a complex object.
*
* @public
* @example
* ```typescript
* const dataFrame = factory.create();
* ```
**/
export class DataFrameFactory {
create(): DataFrame { }
}
```
### Partial stability of APIs
Add the main stability of the API at the top according to [Main stability of API](#main-stability-of-api).
Then override the non-stable parts of the API with the proper [release tag](#release-tags). This should also be place at the bottom of the comment block.
**Do:**
```typescript
/**
* Will help to create DataFrame objects and handle
* the heavy lifting of creating a complex object.
*
* @example
* ```typescript
* const dataFrame = factory.create();
* ```
*
* @public
**/
export class DataFrameFactory {
create(): DataFrame { }
/**
* @beta
**/
createMany(): DataFrames[] {}
}
```
**Don't**
```typescript
/**
* Will help to create DataFrame objects and handle
* the heavy lifting of creating a complex object.
*
* @example
* ```typescript
* const dataFrame = factory.create();
* ```
**/
export class DataFrameFactory {
/**
* @public
**/
create(): DataFrame { }
/**
* @beta
**/
createMany(): DataFrame[] {}
}
```
## Deprecate an API
If you want to mark an API as deprecated to signal that this API will be removed in the future, then add the [`@deprecated`](https://api-extractor.com/pages/tsdoc/tag_deprecated/) tag.
If applicable add a reason why the API is deprecated directly after the `@deprecated tag`.
## Specify parameters
If you want to specify the possible parameters that can be passed to an API, then add the [`@param`](https://api-extractor.com/pages/tsdoc/tag_param/) tag.
This attribute can be skipped if the type provided by `typescript` and the function comment or the function name is enough to explain what the parameters are.
**Do:**
```typescript
/**
* Will help to create a resource resovler depending
* on the current execution context.
*
* @param context - The current execution context.
* @returns FileResolver if executed on the server otherwise a HttpResolver.
* @public
**/
export const factory = (context: Context): IResolver => {
if (context.isServer) {
return new FileResolver();
}
return new HttpResolver();
}
```
**Don't**
```typescript
/**
* Will compare two numbers to see if they are equal to each others.
*
* @param x - The first number
* @param y - The second number
* @public
**/
export const isEqual = (x: number, y: number): boolean => {
return x === y;
}
```
## Set return values
If you want to specify the return value from a function you can use the [`@returns`](https://api-extractor.com/pages/tsdoc/tag_returns/) tag.
This attribute can be skipped if the type provided by `typescript` and the function comment or the function name is enough to explain what the function returns.
**Do:**
```typescript
/**
* Will help to create a resource resovler depending
* on the current execution context.
*
* @param context - The current execution context.
* @returns FileResolver if executed on the server otherwise a HttpResolver.
* @public
**/
export const factory = (context: Context): IResolver => {
if (context.isServer) {
return new FileResolver();
}
return new HttpResolver();
}
```
**Don't**
```typescript
/**
* Will compare two numbers to see if they are equal to each others.
*
* @returns true if values are equal
* @public
**/
export const isEqual = (x: number, y: number): boolean => {
return x === y;
}
```

View File

@@ -0,0 +1,144 @@
# Markdown style guide
This guide for Markdown style helps keep contributions consistent across all documentation
created for Grafana products. Refer to the guide and update its sections as needed when a
Subject Matter Expert answers a question on Markdown style, or a decision is made about
how to apply Markdown.
## Headers
In Markdown, the number of "#" symbols creates different heading levels, similar to
HTML heading levels:
**Example**
* \# is \<h1>.
* \#\# is \<h2>.
* \#\#\# is \<h3>.
Start your document with a single ``#`` for the title of the page. Add the sub-headings with two ``##``.
## Bold and emphasis
* Make text **bold** using two asterisks.
**Example:** It is ``**important**`` to use Github Flavored Markdown emoji consistently.
* Make text ``*emphasized*`` using single `` _underscores_`` or a single asterisk.
**Example:** Github Flavored Markdown emoji should _only_ appear in specific cases.
## Links and references
Create links to other website by wrapping the display text in square brackets, and
the web URL in curved brackets.
\[text to display](www.website.com)
**Example:** For more information on including emoji in Github flavored Markdown, refer to the [webfx page on emoji](https://www.webfx.com/tools/emoji-cheat-sheet/) for a list of emoji.
## Block quotes
Include Block quotes inside text using right-facing arrows:
**Example**
> Any important information
> about emoji can be separated into
> a blockquote.
## Code blocks
Code blocks written with markdown can show off syntax highlighting specific
to different languages. Use three back tics to create a code block:
```
function testNum(a) {
if (a > 0) {
return "positive";
} else {
return "NOT positive";
}
}
```
Write the name of the language after the first set of back tics, no spaces,
to show specific syntax highlighting. For example; "\```javascript" produces the following:
```javascript
function testNum(a) {
if (a > 0) {
return "positive";
} else {
return "NOT positive";
}
}
```
## Tables
Construct a table by typing the table headings, and separating them with
a "|" character. Then, add a second line of dashes ("-") separated by
another "|" character. When constructing the table cells, separate each cell data with another
"|".
**Example**
Heading one | Heading two
\------------|------------
Cell one data| Cell two data
Will publish as:
Heading one | Heading two
------------|------------
Cell one data| Cell two data
## Lists
### Numbered lists
To avoid inconsistent list numbering, use repetitive list numbering:
\1. First
\1. Second
\1. Third
The list above will always display as:
1. First
2. Second
3. Third
### Unordered lists
Build a list of points - an unordered or unnumbered list - by
using "\*" characters.
**Example**
* First
* Another item
* The last list item
## Images
Include images in a document using the following syntax:
**Example** \!\[Grafana Logo](/link/to/grafanalogo/logo.png)
This follows the format of "!", alt text wrapped in "[]" and the link URL wrapped in "()".
## Comments
You can include comments that will not appear in published markdown using the
following syntax:
\[comment]: <> (Comment text to display)
The word "comment" wrapped in "[]" followed by a ":", a space, "<>", and then
the comment itself wrapped in "()".

View File

@@ -2,6 +2,8 @@
This style guide applies to all documentation created for Grafana products.
For information about how to write technical documentation, we suggest reviewing the content of the [Google Technical Writing courses](https://developers.google.com/tech-writing).
## Contributing
The *Documentation style guide* is a living document. Add to it whenever a style decision is made or a question is answered regarding style, grammar, or word choice.
@@ -137,6 +139,10 @@ Two words, not one
* Correct, but passive voice: Your list of active alarms is displayed.
* Incorrect: The list of active alarms displays.
#### metadata
One word, not two.
#### open source, open-source
Do not hyphenate when used as an adjective unless the lack of hyphen would cause confusion. For example: _Open source software design is the most open open-source system I can imagine._

View File

@@ -150,6 +150,14 @@ describe('List test', () => {
## Debugging PhantomJS image rendering
### Common Error
The most common error with PhantomJs image rendering is when a PR introduces an import that has functionality that's not supported by PhantomJs. To quickly identify which new import causes this you can use a tool like `es-check`.
1. Run > `npx es-check es5 './public/build/*.js'`
2. Check the output for files that break es5 compatibility.
3. Lazy load the failing imports if possible.
### Debugging
There is no easy or comprehensive way to debug PhantomJS smoke test (image rendering) failures. However, PhantomJS exposes remote debugging interface which can give you a sense of what is going wrong in the smoke test. Before performing the steps described below make sure your local Grafana instance is running:
1. Go to `tools/phantomjs` directory

View File

@@ -7,31 +7,239 @@ Generally we follow the Airbnb [React Style Guide](https://github.com/airbnb/jav
- [Frontend Style Guide](#frontend-style-guide)
- [Table of Contents](#table-of-contents)
- [Basic rules](#basic-rules)
- [Organization](#organization)
- [Props](#props)
- [Naming conventions](#naming-conventions)
- [Files and directories naming conventions](#files-and-directories-naming-conventions)
- [Code organization](#code-organization)
- [Exports](#exports)
- [Comments](#comments)
- [React](#react)
- [Props](#props)
- [State management](#state-management)
## Basic rules
- Try to keep files small and focused.
- Break large components up into sub-components.
- Use spaces for indentation.
## Organization
### Naming conventions
- Components and types that needs to be used by external plugins needs to go into @grafana/ui
- Components should get their own folder under features/xxx/components
- Sub components can live in that component folders, so small component do not need their own folder
- Place test next to their component file (same dir)
- Component sass should live in the same folder as component code
- State logic & domain models should live in features/xxx/state
- Containers (pages) can live in feature root features/xxx
- up for debate?
#### Use `PascalCase` for:
## Props
##### Typescript class names
- Name callback props and handlers with an "on" prefix.
```typescript
// bad
class dataLink {
//...
}
// good
class DataLink {
//...
}
```
##### Types and interfaces
```
// bad
interface buttonProps {
//...
}
// bad
interface button_props {
//...
}
// bad
interface IButtonProps {
//...
}
// good
interface ButtonProps {
//...
}
// bad
type requestInfo = ...
// bad
type request_info = ...
// good
type RequestInfo = ...
```
##### Enums
```
// bad
enum buttonVariant {
//...
}
// good
enum ButtonVariant {
//...
}
```
#### Use `camelCase` for:
##### Functions
```typescript
// bad
const CalculatePercentage = () => { ... }
// bad
const calculate_percentage = () => { ... }
// good
const calculatePercentage = () => { ... }
```
##### Methods
```typescript
class DateCalculator {
// bad
CalculateTimeRange () {...}
}
class DateCalculator {
// bad
calculate_timee_range () {...}
}
class DateCalculator {
// good
calculateTimeRange () {...}
}
```
##### Variables
```typescript
// bad
const QueryTargets = [];
// bad
const query_targets = [];
// good
const queryTargets = [];
```
##### React state and properties
```typescript
interface ModalState {
// bad
IsActive: boolean;
// bad
is_active: boolean;
// good
isActive: boolean;
}
```
##### Emotion class names
```typescript
const getStyles = = () => ({
// bad
ElementWraper: css`...`,
// bad
["element-wrapper"]: css`...`,
// good
elementWrapper: css`...`,
});
```
#### Use `ALL_CAPS` for constants.
```typescript
// bad
const constantValue = "This string won't change";
// bad
const constant_value = "This string won't change";
// good
const CONSTANT_VALUE = "This string won't change";
```
#### Use [BEM](http://getbem.com/) convention for SASS styles.
_SASS styles are deprecated. Please migrate to Emotion whenever you need to modify SASS styles._
### File and directory naming conventions
Name files according to the primary export:
- When the primary export is a class or React component, use PascalCase.
- When the primary export is a function, use camelCase.
For files exporting multiple utility functions, use the name that describes the responsibility of grouped utilities. For example, a file exporting math utilities should be named `math.ts`.
- Use `constants.ts` for files exporting constants.
- Use `actions.ts` for files exporting Redux actions.
- Use `reducers.ts` Redux reducers.
- Use `*.test.ts(x)` for test files.
### Code organization
Organize your code in a directory that encloses feature code:
- Put Redux state and domain logic code in `state` directory (i.e. `features/my-feature/state/actions.ts`).
- Put React components in `components` directory (i.e. `features/my-feature/components/ButtonPeopleDreamOf.tsx`).
- Put test files next to the test subject.
- Put containers (pages) in feature root (i.e. `features/my-feature/DashboardPage.tsx`).
- Subcomponents can live in the component folders. Small component do not need their own folder.
- Component SASS styles should live in the same folder as component code.
For code that needs to be used by external plugin:
- Put components and types in `@grafana/ui`.
- Put data models and data utilities in `@grafana/data`.
- Put runtime services interfaces in `@grafana/runtime`.
#### Exports
- Use named exports for all code you want to export from a file.
- Use declaration exports (i.e. `export const foo = ...`).
- Export only the code that is meant to be used outside the module.
### Comments
- Use [TSDoc](https://github.com/microsoft/tsdoc) comments to document your code.
- Use [react-docgen](https://github.com/reactjs/react-docgen) comments (`/** ... */`) for props documentation.
- Use inline comments for comments inside functions, classes etc.
- Please try to follow the [code comment guidelines](./code-comments.md) when adding comments.
### Linting
Linting is performed using [@grafana/eslint-config](https://github.com/grafana/eslint-config-grafana).
## React
Use the following conventions when implementing React components:
### Props
##### Name callback props and handlers with an "on" prefix.
```tsx
// bad
handleChange = () => {
};
render() {
return (
<MyComponent changed={this.handleChange} />
);
}
// good
onChange = () => {
@@ -43,46 +251,36 @@ render() {
);
}
// bad
handleChange = () => {
};
render() {
return (
<MyComponent changed={this.handleChange} />
);
}
```
- React Component definitions
##### React Component definitions
```jsx
// good
export class YourClass extends PureComponent<{},{}> { ... }
// bad
export class YourClass extends PureComponent { ... }
// good
export class YourClass extends PureComponent<{},{}> { ... }
```
- React Component constructor
##### React Component constructor
```typescript
// good
constructor(props:Props) {...}
// bad
constructor(props) {...}
// good
constructor(props: Props) {...}
```
- React Component defaultProps
##### React Component defaultProps
```typescript
// good
static defaultProps: Partial<Props> = { ... }
// bad
static defaultProps = { ... }
// good
static defaultProps: Partial<Props> = { ... }
```
## State management

View File

@@ -0,0 +1,179 @@
# Storybook
[Storybook](https://storybook.js.org/) is a tool which we use to manage our design system and the components which are a part of it. Storybook consists of _stories:_ each story represents a component and a case in which it is used. To show a wide variety of use cases is good both documentation wise and for troubleshooting -- it might be possible to reproduce a bug for an edge case in a story.
Storybook is:
- A good way to publish our design system with its implementations
- Used as a tool for documentation
- Used for debugging and displaying edge cases
## How to create stories
Stories for a component should be placed next to the component file. The Storybook file requires the same name as the component file. For example, a story for `SomeComponent.tsx` will have the file name `SomeComponent.story.tsx`.
### Writing stories
When writing stories, we use the [CSF format](https://storybook.js.org/docs/formats/component-story-format/). For more in-depth information on writing stories, see [Storybooks documentation on writing stories](https://storybook.js.org/docs/basics/writing-stories/).
With the CSF format, the default export defines some general information about the stories in the file:
- `title`: Where the component is going to live in the hierarchy
- `decorators`: A list which can contain wrappers or provide context, such as theming
```jsx
// In MyComponent.story.tsx
import MyComponent from './MyComponent';
export default {
title: 'General/MyComponent',
component: MyComponent,
decorators: [ ... ],
}
```
When it comes to writing the actual stories, you continue in the same file with named exports. The exports are turned into the story name.
```jsx
// Will produce a story name “some story”
export const someStory = () => <MyComponent />;
```
If you want to write cover cases with different values for props, then using knobs is usually enough. You dont need to create a new story. This will be covered further down.
### Categorization
We currently have these categories:
- **Docs Overview** - Guidelines and information regarding the design system
- **Forms** - Components commonly used in forms such as different kind of inputs
- **General** - Components which can be used in a lot of different places
- **Visualizations** - Data visualizations
- **Panel** - Components belonging to panels and panel editors
## Writing MDX documentation
An MDX file is basically a markdown file with the possibility to add jsx. These files are used by Storybook to create a “docs” tab.
### Link the MDX file to a components stories
To link a components stories with an MDX file you have to do this:
```jsx
// In TabsBar.story.tsx
import { TabsBar } from "./TabsBar";
// Import the MDX file
import mdx from "./TabsBar.mdx";
export default {
title: "General/Tabs/TabsBar",
component: TabsBar,
parameters: {
docs: {
// This is the reference required for the MDX file
page: mdx,
},
},
};
```
### MDX file structure
There are some things that the MDX file should contain:
- When and why the component should be used
- Best practices - dos and donts for the component
- Usage examples with code. It is possible to use the `Preview` element to show live examples in MDX
- Props table. This can be generated by doing the following:
```jsx
// In MyComponent.mdx
import { Props } from "@storybook/addon-docs/blocks";
import { MyComponent } from "./MyComponent";
<Props of={MyComponent} />;
```
### MDX file without a relationship to a component
An MDX file can exist by itself without any connection to a story. This can be good for writing things such as a general guidelines page. Something that is required when the MDX file has no relation to a component is a `Meta` tag that says where in the hierarchy the component will live. It can look like this:
```jsx
<Meta title="Docs Overview/Color Palettes"/>
# Guidelines for using colors
...
```
You can add parameters to the Meta tag. This example shows how to hide the tools:
```jsx
<Meta title="Docs Overview/Color Palettes" parameters={{ options: { isToolshown: false }}}/>
# Guidelines for using colors
...
```
## Documenting component properties
A quick way to get an overview of what a component does is by looking at its properties. That's why it is important that we document these in a good way.
### Comments
When writing the props interface for a component, it is possible to add a comment to that specific property, which will end up in the Props table in the MDX file. The comments are generated by [react-docgen](https://github.com/reactjs/react-docgen) and are formatted by writing `/** */`.
```jsx
interface MyProps {
/** Sets the initial values, which are overridden when the query returns a value*/
defaultValues: Array<T>;
}
```
### Knobs
Knobs is an [addon to Storybook](https://github.com/storybookjs/storybook/tree/master/addons/knobs) which can be used to easily switch values in the UI. A good use case for it is to try different props for the component. Using knobs is easy. Grafana is set up so knobs can be used straight out of the box. Here is an example of how you might use it.
```jsx
// In MyComponent.story.tsx
import { number, text } from "@storybook/addon-knobs";
export const basicStory = () => (
<MyComponent
max={number("Max value", 10)}
min={number("Min value", -10)}
title={text("Title", "Look at the value!")}
/>
);
```
The general convention is that the first parameter of the knob is its name and the second is the default value. There are some more types:
| Knob | Description |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `text` | Any text field |
| `number` | Any number input. Also [available as range](https://github.com/storybookjs/storybook/tree/master/addons/knobs#number-bound-by-range) |
| `boolean` | A switch between true/false |
| `color` | Color picker |
| `object` | JSON input or array. Good to use if the property requires more complex data structures. |
| `array` | Array of strings separated by a comma |
| `select` | Select a value from an options object. Good for trying different test cases. |
| `options` | Configurable UI for selecting a range of options |
| `files` | File selector |
| `date` | Select date as stringified Unix timestamp |
| `button` | Has a handler which is called when clicked |
## Best practices
- When creating a new component or writing documentation for an existing one, always cover the basic use case it was intended for with a code example.
- Use stories and knobs to create edge cases. If you are trying to solve a bug, try to reproduce it with a story.
- Do not create stories in the MDX, always create them in the `*.story.tsx` file.

View File

@@ -1,48 +1,55 @@
# Styling Grafana
## Emotion
[Emotion](https://emotion.sh/docs/introduction) is our default-to-be approach to styling React components. It provides a way for styles to be a consequence of properties and state of a component.
### Usage
## Usage
#### Basic styling
### Basic styling
For styling components use Emotion's `css` function
For styling components, use [Emotion's `css` function](https://emotion.sh/docs/emotion#css).
```tsx
import { css } from 'emotion';
import React from 'react';
import { css } from 'emotion';
const ComponentA = () => {
return (
<div className={css`background: red;`}>
As red as you can ge
</div>
);
}
const ComponentA = () => (
<div
className={css`
background: red;
`}
>
As red as you can get
</div>
);
```
#### Styling complex components
### Styling complex components
In more complex cases, especially when you need to style multiple DOM elements in one component or when your styles that depend on properties and/or state, you should create a helper function that returns an object with desired stylesheet. This function should also be wrapped in `stylesFactory` helper function that will provide basic memoization.
In more complex cases, especially when you need to style multiple DOM elements in one component, or when using styles that depend on properties and/or state, you should create a helper function that returns an object of styles. This function should also be wrapped in the `stylesFactory` helper function, which will provide basic memoization.
Let's say you need to style a component that has different background depending on the theme:
Let's say you need to style a component that has a different background depending on the theme:
```tsx
import { css, cx } from 'emotion';
import { GrafanaTheme, useTheme, selectThemeVariant, stylesFactory } from '@grafana/ui';
import React from 'react';
import { css } from 'emotion';
import { GrafanaTheme } from '@grafana/data';
import { selectThemeVariant, stylesFactory, useTheme } from '@grafana/ui';
const getStyles = stylesFactory((theme: GrafanaTheme) => {
const backgroundColor = selectThemeVariant({ light: theme.colors.red, dark: theme.colors.blue }, theme.type);
const backgroundColor = selectThemeVariant(
{ light: theme.colors.red, dark: theme.colors.blue },
theme.type
);
return {
wrapper: css`
background: ${backgroundColor};
`,
icon: css`font-size:${theme.typography.size.sm}`;
icon: css`
font-size: ${theme.typography.size.sm};
`,
};
}
});
const ComponentA = () => {
const theme = useTheme();
@@ -54,18 +61,18 @@ const ComponentA = () => {
<i className={styles.icon} />
</div>
);
});
};
```
For more information about themes at Grafana please see [themes guide](./themes.md)
For more information about themes at Grafana please see the [themes guide](./themes.md).
#### Composing class names
### Composing class names
For class composition use Emotion's `cx` function
For class composition, use [Emotion's `cx` function](https://emotion.sh/docs/emotion#cx).
```tsx
import { css, cx } from 'emotion';
import React from 'react';
import { css, cx } from 'emotion';
interface Props {
className?: string;
@@ -74,13 +81,11 @@ interface Props {
const ComponentA: React.FC<Props> = ({ className }) => {
const finalClassName = cx(
className,
css`background: red`,
)
return (
<div className={finalClassName}>
As red as you can ge
</div>
css`
background: red;
`
);
}
return <div className={finalClassName}>As red as you can ge</div>;
};
```

View File

@@ -2,11 +2,22 @@
## Overview
**Themes are implemented in Typescript.** That's because our goal is to share variables between Grafana Typescript code and SASS files. Theme definitions are located in `packages/grafana-ui/src/themes/[default|dark|light].ts` files. `default.ts` file holds common variables like typography and spacing definitions, while `[light|dark].ts` primarily specify colors used in themes.
**Themes are implemented in Typescript.** That's because our goal is to share variables between Grafana TypeScript and [Sass](https://sass-lang.com/) code. Theme definitions are located in the following files:
- [packages/grafana-ui/src/themes/dark.ts](../../packages/grafana-ui/src/themes/dark.ts)
- [packages/grafana-ui/src/themes/default.ts](../../packages/grafana-ui/src/themes/default.ts)
- [packages/grafana-ui/src/themes/light.ts](../../packages/grafana-ui/src/themes/light.ts)
The `default.ts` file holds common variables like typography and spacing definitions, while `[light|dark].ts` primarily specify colors used in themes.
## Usage
This section provides usage guidelines.
### Using themes in React components
Here's how to use Grafana themes in React components.
#### Using `ThemeContext` directly
```tsx
@@ -26,12 +37,11 @@ const Foo: React.FunctionComponent<FooProps> = () => {
// Your component has access to the theme variables now
}
```
#### Using `withTheme` higher-order component (HOC)
With this method your component will be automatically wrapped in `ThemeContext.Consumer` and provided with current theme via `theme` prop. Component used with `withTheme` must implement `Themeable` interface.
With this method your component will be automatically wrapped in `ThemeContext.Consumer` and provided with current theme via `theme` prop. Components used with `withTheme` must implement the `Themeable` interface.
```ts
import { ThemeContext, Themeable } from '@grafana/ui';
@@ -43,7 +53,7 @@ const Foo: React.FunctionComponent<FooProps> = () => ...
export default withTheme(Foo);
```
### Test components that use ThemeContext
### Test components that use `ThemeContext`
When implementing snapshot tests for components that use the `withTheme` HOC, the snapshot will contain the entire theme object. Any change to the theme renders the snapshot outdated.
@@ -73,9 +83,11 @@ describe('MyComponent', () => {
});
```
### Using themes in Storybook
### Using themes in [Storybook](https://storybook.js.org/)
All stories are wrapped with `ThemeContext.Provider` using global decorator. To render `Themeable` component that's not wrapped by `withTheme` HOC you either create a new component in your story:
All stories are wrapped with `ThemeContext.Provider` using a global decorator. To render a `Themeable` component that isn't wrapped by a `withTheme` HOC, either create a new component in your story, or use the `renderComponentWithTheme` helper.
#### Create a new component:
```tsx
// Foo.story.tsx
@@ -86,7 +98,7 @@ FooStories.add('Story' () => {
});
```
or use `renderComponentWithTheme` helper:
#### Use `renderComponentWithTheme` helper:
```tsx
// Bar.story.tsx
@@ -98,29 +110,42 @@ BarStories.add('Story' () => {
### Using themes in Angular code
There should be very few cases where theme would be used in Angular context. For this purpose there is a function available that retrieves current theme: `import { getCurrentTheme } from app/core/utils/ConfigProvider`. Angular components should be migrated to React, or if that's not possible at the moment, styled using SASS.
There should be very few cases where a theme would be used in an Angular context. For this purpose, there is a function available that retrieves the current theme:
```ts
import { getCurrentTheme } from app/core/utils/ConfigProvider
```
Angular components should be migrated to React, or if that's not possible at the moment, styled using Sass.
## FAQ
### How can I modify SASS variable files?
This section provides insight into frequently-asked questions.
### How can I modify Sass variable files?
> For the following to apply you need to run `yarn dev` task.
`[_variables|_variables.dark|_variables.light].generated.scss` files are the ones that are referenced in the main SASS files for SASS variables to be available. **These files are automatically generated and should never be modified by hand!**.
`[_variables|_variables.dark|_variables.light].generated.scss` files are the ones that are referenced in the main Sass files for Sass variables to be available. **These files are automatically generated and should never be modified by hand!**
#### If you need to modify *SASS variable value* you need to modify corresponding Typescript file that is a source of the variables:
#### If you need to modify a *Sass variable value* you need to modify the corresponding Typescript file that is the source of the variables:
- `_variables.generated.scss` - modify `grafana-ui/src/themes/default.ts`
- `_variables.light.generated.scss` - modify `grafana-ui/src/themes/light.ts`
- `_variables.dark.generated.scss` - modify `grafana-ui/src/themes/dark.ts`
#### If you need to *add new variable* to SASS variables you need to modify corresponding template file:
#### If you need to *add new variable* to Sass variables you need to modify corresponding template file:
- `_variables.generated.scss` - modify `grafana-ui/src/themes/_variables.scss.tmpl.ts`
- `_variables.light.generated.scss` - modify `grafana-ui/src/themes/_variables.light.scss.tmpl.ts`
- `_variables.dark.generated.scss` - modify `grafana-ui/src/themes/_variables.dark.scss.tmpl.ts`
## Limitations
### You must ensure ThemeContext provider is available in a React tree
By default all react2angular directives have `ThemeContext.Provider` ensured. But, there are cases where we create another React tree via `ReactDOM.render`. This happens in case of graph legend rendering and `ReactContainer` directive. In such cases theme consumption will fail. To make sure theme context is available in such cases, you need to wrap your rendered component with ThemeContext.Provider using `provideTheme` function:
This section describes limitations with Grafana's theming system.
### You must ensure `ThemeContext` provider is available in a React tree
By default all react2angular directives have `ThemeContext.Provider` ensured. But, there are cases where we create another React tree via `ReactDOM.render`. This happens in the case of graph legend rendering and the `ReactContainer` directive. In such cases theme consumption will fail. To make sure theme context is available in such cases, you need to wrap your rendered component with ThemeContext.Provider using the `provideTheme` function:
```ts
// graph.ts

View File

@@ -0,0 +1,57 @@
# Templates
Templates are both a starting point and an instruction manual for writing something new. They are intended to make life easier by providing a jumping-off point, something besides a blank page to start from. They are not intended to be a limitation. If the template does not work perfectly for your use case, you can adjust or change it. We will work it out in code review.
## Create a template
Feel free to add templates to the `templates` folder. Try to make them as generic as possible and include clear instructions for when and how to use the template. Assume that the template user is a brand new contributor and write accordingly.
## Use a template
1. Read the template. Make sure you understand what it is for and how it is intended to be used.
1. Copy and rename the template. Move it to where you actually need it.
You might also want to copy the content of the template and paste it into a different file. This is acceptable use.
1. Replace the template content with your own. Delete whatever is unnecessary.
## Documentation templates
In an ideal world, each topic will correspond to an information *type* ([task](doc-task-template.md), [reference](doc-reference-template.md), [concept](doc-concept-template.md)) and contain only that type of information.
However, this is not always practical. For example, you have a series of short topics, you can group them into one topic.
Try to *chunk* your content. This means you should organize the document so that the same kinds of content are grouped together.
### Chunking example
If I was writing a topic called *Doggie handbook*, I might organize it like this.
**Concept**
* What a dog is
* Brief history of dogs
* Why you might want a dog
* Tasks dogs can be trained to do
**Tasks**
* Feed the dog
* Groom the dog
* Train the dog
**Reference**
* List of dog equipment you will need
* Table of breeds that includes breed name, size range, short or long hair, and type of dog
### Audience
Write for an audience that is computer literate and has general technical knowledge, but is not necessarily familiar with Grafana or the finer points of observability.
Pretend you are explaining your topic to a brand new Grafana user or developer.
### Self-contained
Thanks to search engines, every page in the documentation might be a reader's entry point. This means that each page needs to be self-contained and make sense on its own. The reader should not need to read other topics in order to perform the task or understand the concept.
However, try to be helpful and link to related information. Using the *Doggie handbook* example, the concept topic that explains what dogs can be trained to do might link to the Train the dog task.
## Code templates
This is a placeholder for future templates.

View File

@@ -0,0 +1,42 @@
DELETE THIS LINE: If draft = false, then the document will not be built in the doc site. If the date is earlier than the build date, than the document will not show in the build site. Use these settings to control whether future content is shown in the doc site.
+++
draft = "false"
date = "yyyy-mm-dd"
title = "Title in sentence case"
description = "Description in title case"
keywords = ["grafana", "enter", "keywords", "here"]
type = "docs"
[menu.docs]
name = "Name of topic"
identifier = "identifier"
parent = "menu parent"
weight = 100
+++
# Concept
The title of the concept topic will generally be a noun or a gerund. Examples include Templates, Templating, Dashboards, and panels.
Concepts are topic types for any information that doesn't involve task lists or reference information. Ideally you use concept elements to explain concepts, ideas, overviews, workflows, and the like. In the intro section, this first paragraph or two, you should explain to the user what to expect in this topic or section.
[Permissions overview](https://grafana.com/docs/grafana/latest/permissions/overview/) is an example of a concept topic.
## Idea
Concept topics or sections explain *what* and *why*. They do not explain *how*. If you are a new user, you might look for concept information to learn about what Grafana is, why it might be useful to you, and what the general workflow is.
## Workflow
Continuing the example in the previous section, here is a sample Grafana workflow.
1. Install Grafana. <link to task for installing Grafana>
2. Set up data sources. <link to data sources concept topic, which links to data source task topics>
3. Create panels. <link to panel concept topic, which links to tasks>
4. Create dashboards. <link to panel concept topic, which links to tasks>
5. Enter queries. <link to query editor concept topic>
6. Add users. <link to user management concept topic, which links to tasks>
7. Create playlists. <link to Playlist topic that contains concept information and tasks>
## Next steps
Concept tasks often link to related information, including *tasks* related to the concept and *reference* topics related to the concept.

View File

@@ -0,0 +1,75 @@
DELETE THIS LINE: If draft = false, then the document will not be built in the doc site. If the date is earlier than the build date, than the document will not show in the build site. Use these settings to control whether future content is shown in the doc site.
+++
draft = "false"
date = "yyyy-mm-dd"
title = "Title in sentence case"
description = "Description in title case"
keywords = ["grafana", "enter", "keywords", "here"]
type = "docs"
[menu.docs]
name = "Name of topic"
identifier = "identifier"
parent = "menu parent"
weight = 100
+++
# Reference
The *reference* topic type is for storing reference information, such as extensive tables, lists, or other information that is used as support for a task. Reference topics are also designed for API information.
Often reference topics are linked from *task* topics, because they contain information the user needs in order to perform a task.
[Grafana CLI](https://grafana.com/docs/grafana/latest/administration/cli/) is one example of a reference topic.
## Lists
Lists of commands or parameters are often organized in reference topics. The information you need to present will dictate the format.
* They might
* be in
* unordered lists.
[Configuration](https://grafana.com/docs/grafana/latest/installation/configuration/) is an example of lists.
## Tables
If you have a large list of things to store in a table, then you are probably dealing with reference information. Hugo accepts either tables in Markdown or in HTML format, so use whichever is easier for you.
The [Glossary](https://grafana.com/docs/grafana/latest/guides/glossary/) provides an example of reference data in a table.
### Empty markdown table
While you might not need a heading for each table, headings are a good way to chunk information if you have several tables. They also make the content easy to skim. Use headings or intro paragraphs like this one to explain to the reader what the information in the table is used for.
| | | | | | |
|:---|:---|:--:|:--:|---:|---:|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
### Empty HTML table
And here is intro text, similar to the paragraph in the previous section. Do not add local styling to the table. The website CSS will take care of that for you.
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td>Eve</td>
<td>Jackson</td>
<td>94</td>
</tr>
</table>
## API documentation
API documentation is always a reference topic rather than a task topic, but it has its own rules.

View File

@@ -0,0 +1,57 @@
+++
draft = "false"
date = "yyyy-mm-dd"
title = "Title in sentence case"
description = "Description in title case"
keywords = ["grafana", "enter", "keywords", "here"]
type = "docs"
[menu.docs]
name = "Name of topic"
identifier = "identifier"
parent = "menu parent"
weight = 100
+++
# Task
A *task* topic is intended for a procedure that describes how to accomplish a task. It lists a series of steps that users follow to produce an intended outcome. It tells the reader *how* to do something. [Install Grafana plugins](https://grafana.com/docs/grafana/latest/plugins/installation/) and [Playlist](https://grafana.com/docs/grafana/latest/reference/playlist/) are examples of task topics. Playlist includes a small amount of concept information in the introduction, which is appropriate.
Always include an introduction of a short paragraph or two to explain what the task is for, perhaps give the reader an idea of what the outcome will be.
In most cases, each topic should only contain one task. If you have several very short, related tasks, then you might combine them into one topic.
In the case of a long task, then you probably won't need any headings except for the h1 at the top of the page.
1. Start with step one.
1. Use second-person imperative tense.
1. Basically, "You, do this" with every sentence.
1. Do not use the third-person "user" for steps you want the reader ("you") to perform.
1. Write steps that contain one action, possibly two related actions, such as copy and paste a thing or save and quite the program.
If a sentence is not telling the reader to do something, then it is not a step. You can use nested images or paragraphs like this one to add information if necessary.
In many cases, you should tell the reader what the outcome should be so that they know when they are done.
## One-step task
Some tasks are so short, they only contain one step.
Write one-step tasks as simple sentences, not as unordered lists or numbered lists.
## Short task
Short tasks can be grouped. How short constitutes "short" is a judgment call based on number of steps and how long individual steps are.
1. Use your judgment.
2. Ask your coworkers or someone on the Comm team for advice if you aren't sure.
## Next steps
If the task you are writing leads naturally to one or more other tasks, then include links after the task to help the reader figure out where to go next.
Thanks to internet search engines, every page in the documentation could be page one. Pretend you are explaining your task to a new Grafana user who just walked in off the street.
## Testing
It is a good practice to have someone else test the task you have written. If they can successfully complete the task using *only* what the steps you have written, not guessing or using their inherent knowledge, then your task has passed the test. However, it is very common to find you have skipped steps, because *you* are very familiar with Grafana and the topic you are explaining.
New users or people from other teams are very helpful for these tests.

View File

@@ -0,0 +1,191 @@
{
"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,
"id": null,
"links": [],
"panels": [
{
"aliasColors": {},
"bars": true,
"dashLength": 10,
"dashes": false,
"datasource": "gdev-influxdb-telegraf",
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 6,
"w": 24,
"x": 0,
"y": 0
},
"hiddenSeries": false,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": false,
"total": false,
"values": false
},
"lines": false,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"alias": "Count",
"groupBy": [
{
"params": ["1m"],
"type": "time"
},
{
"params": ["null"],
"type": "fill"
}
],
"measurement": "logs",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": ["message"],
"type": "field"
},
{
"params": [],
"type": "count"
}
]
],
"tags": []
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Log messages over time",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"datasource": "gdev-influxdb-telegraf",
"gridPos": {
"h": 18,
"w": 24,
"x": 0,
"y": 6
},
"id": 2,
"options": {
"showLabels": false,
"showTime": true,
"sortOrder": "Descending",
"wrapLogMessage": true
},
"targets": [
{
"groupBy": [],
"measurement": "logs",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "table",
"select": [
[
{
"params": ["message"],
"type": "field"
}
]
],
"tags": []
}
],
"timeFrom": null,
"timeShift": null,
"title": "Logs",
"type": "logs"
}
],
"schemaVersion": 22,
"style": "dark",
"tags": ["gdev", "influxdb", "datasource-test"],
"templating": {
"list": []
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": ["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"]
},
"timezone": "",
"title": "Datasource tests - InfluxDB Logs",
"uid": "yjRroGsWk",
"version": 4
}

View File

@@ -0,0 +1,217 @@
{
"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,
"id": null,
"links": [],
"panels": [
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "gdev-opentsdb",
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
"y": 0
},
"hiddenSeries": false,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "sum",
"downsampleAggregator": "avg",
"downsampleFillPolicy": "none",
"metric": "cpu",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "gdev-opentsdb",
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
"y": 0
},
"hiddenSeries": false,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "sum",
"downsampleAggregator": "avg",
"downsampleFillPolicy": "none",
"metric": "logins.count",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Login Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
}
],
"schemaVersion": 22,
"style": "dark",
"tags": ["datasource-test", "gdev", "opentsdb"],
"templating": {
"list": []
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": ["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"]
},
"timezone": "",
"title": "Datasource tests - OpenTSDB",
"uid": "tFU1mQyWz",
"version": 2
}

View File

@@ -66,7 +66,7 @@
{
"targetBlank": false,
"title": "Drill it down",
"url": "http://localhost:3000/d/wfTJJL5Wz/datalinks-source?var-seriesName=${__series.name}&var-labelDatacenter=${__series.labels.datacenter}&var-labelDatacenterRegion=${__series.labels[\"datacenter.region\"]}&var-valueTime=${__value.time}&var-valueNumeric=${__value.numeric}&var-valueText=${__value.text}"
"url": "/d/wfTJJL5Wz/datalinks-source?var-seriesName=${__series.name}&var-labelDatacenter=${__series.labels.datacenter}&var-labelDatacenterRegion=${__series.labels[\"datacenter.region\"]}&var-valueTime=${__value.time}&var-valueNumeric=${__value.numeric}&var-valueText=${__value.text}"
}
]
},
@@ -164,7 +164,7 @@
{
"targetBlank": false,
"title": "Drill it down",
"url": "http://localhost:3000/d/wfTJJL5Wz/datalinks-source?var-seriesName=${__series.name}&var-valueTime=${__value.time}&var-valueNumeric=${__value.numeric}&var-valueText=${__value.text}&var-fieldName=${__field.name}"
"url": "/d/wfTJJL5Wz/datalinks-source?var-seriesName=${__series.name}&var-valueTime=${__value.time}&var-valueNumeric=${__value.numeric}&var-valueText=${__value.text}&var-fieldName=${__field.name}"
}
]
},
@@ -246,7 +246,7 @@
{
"targetBlank": true,
"title": "Drill it down!",
"url": "http://localhost:3000/d/wfTJJL5Wz/datalinks-source\n?var-fieldName=${__field.name}\n&var-labelDatacenter=${__series.labels.datacenter}\n&var-labelDatacenterRegion=${__series.labels[\"datacenter.region\"]}\n&var-valueNumeric=${__value.numeric}\n&var-valueText=${__value.text}\n&var-valueCalc=${__value.calc}"
"url": "/d/wfTJJL5Wz/datalinks-source\n?var-fieldName=${__field.name}\n&var-labelDatacenter=${__series.labels.datacenter}\n&var-labelDatacenterRegion=${__series.labels[\"datacenter.region\"]}\n&var-valueNumeric=${__value.numeric}\n&var-valueText=${__value.text}\n&var-valueCalc=${__value.calc}"
}
],
"mappings": [
@@ -307,7 +307,7 @@
"links": [
{
"title": "Drill it down",
"url": "http://localhost:3000/d/wfTJJL5Wz/datalinks-source?var-fieldName=${__field.name}&var-labelDatacenter=${__series.labels.datacenter}&var-labelDatacenterRegion=${__series.labels[\"datacenter.region\"]}&var-valueNumeric=${__value.numeric}&var-valueText=${__value.text}&var-valueCalc=${__value.calc}"
"url": "/d/wfTJJL5Wz/datalinks-source?var-fieldName=${__field.name}&var-labelDatacenter=${__series.labels.datacenter}&var-labelDatacenterRegion=${__series.labels[\"datacenter.region\"]}&var-valueNumeric=${__value.numeric}&var-valueText=${__value.text}&var-valueCalc=${__value.calc}"
}
],
"mappings": [],

View File

@@ -222,7 +222,7 @@
"text": "A",
"value": ["A"]
},
"datasource": "TestData DB-1",
"datasource": "gdev-testdata",
"definition": "*",
"hide": 0,
"includeAll": true,
@@ -247,7 +247,7 @@
"text": "AA",
"value": ["AA"]
},
"datasource": "TestData DB-1",
"datasource": "gdev-testdata",
"definition": "$datacenter.*",
"hide": 0,
"includeAll": true,

View File

@@ -0,0 +1,19 @@
http:
middlewares:
compress-response:
compress: {}
services:
grafana-subpath:
loadBalancer:
servers:
- url: 'http://grafana-subpath:3000/'
routers:
grafana-subpath:
entryPoints:
- web
middlewares:
- compress-response
rule: 'Path(`/grafana`) || PathPrefix(`/grafana/`)'
service: grafana-subpath

View File

@@ -0,0 +1,19 @@
version: '3'
services:
traefik:
image: traefik:v2.1
volumes:
- './traefik.yml:/etc/traefik/traefik.yml'
- './configs:/etc/traefik/configs'
ports:
- '80:80'
- '8080:8080'
links:
- grafana-subpath
grafana-subpath:
image: grafana/grafana:latest
environment:
- GF_SERVER_ROOT_URL=/grafana
- GF_SERVER_SERVE_FROM_SUB_PATH=true

View File

@@ -0,0 +1,18 @@
## traefik.yml
# Entrypoints enabled
entryPoints:
web:
address: ':80'
# API and dashboard configuration
api:
insecure: true
# Loggings
log: {}
# File configurations folder
providers:
file:
directory: /etc/traefik/configs

View File

@@ -0,0 +1,71 @@
import { sleep, check, group } from 'k6';
import { createClient, createBasicAuthClient } from './modules/client.js';
import { createTestOrgIfNotExists, createTestdataDatasourceIfNotExists } from './modules/util.js';
export let options = {
noCookiesReset: true
};
let endpoint = __ENV.URL || 'http://localhost:3000';
const client = createClient(endpoint);
export const setup = () => {
const basicAuthClient = createBasicAuthClient(endpoint, 'admin', 'admin');
const orgId = createTestOrgIfNotExists(basicAuthClient);
const datasourceId = createTestdataDatasourceIfNotExists(basicAuthClient);
client.withOrgId(orgId);
return {
orgId: orgId,
datasourceId: datasourceId,
};
}
export default (data) => {
group("annotation by tag test", () => {
if (__ITER === 0) {
group("user authenticates thru ui with username and password", () => {
let res = client.ui.login('admin', 'admin');
check(res, {
'response status is 200': (r) => r.status === 200,
'response has cookie \'grafana_session\' with 32 characters': (r) => r.cookies.grafana_session[0].value.length === 32,
});
});
}
if (__ITER !== 0) {
group("batch tsdb requests with annotations by tag", () => {
const batchCount = 20;
const requests = [];
const payload = {
from: '1547765247624',
to: '1547768847624',
queries: [{
refId: 'A',
scenarioId: 'random_walk',
intervalMs: 10000,
maxDataPoints: 433,
datasourceId: data.datasourceId,
}]
};
requests.push({ method: 'GET', url: '/api/annotations?from=1580825186534&to=1580846786535' });
for (let n = 0; n < batchCount; n++) {
requests.push({ method: 'POST', url: '/api/tsdb/query', body: payload });
}
let responses = client.batch(requests);
for (let n = 0; n < batchCount; n++) {
check(responses[n], {
'response status is 200': (r) => r.status === 200,
});
}
});
}
});
sleep(5)
}
export const teardown = (data) => {}

View File

@@ -1,24 +1,21 @@
{
"compilerOptions": {
"moduleResolution": "node",
"target": "es6",
"lib": ["es6"],
"module": "commonjs",
"declaration": false,
"allowSyntheticDefaultImports": true,
"inlineSourceMap": false,
"sourceMap": true,
"noEmitOnError": false,
"emitDecoratorMetadata": false,
"experimentalDecorators": true,
"noImplicitReturns": true,
"noImplicitThis": false,
"noImplicitUseStrict":false,
"noImplicitAny": false,
"noUnusedLocals": true
},
"include": [
"*.ts",
"**/*.ts"
]
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"declaration": false,
"emitDecoratorMetadata": false,
"experimentalDecorators": true,
"inlineSourceMap": false,
"lib": ["es6"],
"module": "commonjs",
"moduleResolution": "node",
"noEmitOnError": false,
"noImplicitAny": false,
"noImplicitReturns": true,
"noImplicitThis": false,
"noImplicitUseStrict": false,
"noUnusedLocals": true,
"sourceMap": true,
"target": "es6"
},
"include": ["*.ts", "**/*.ts"]
}

View File

@@ -1,9 +1,12 @@
.PHONY: docs docs-test
.PHONY: docs docs-no-pull docs-test
docs:
docker pull grafana/docs-base:latest
docker run -v $(PWD)/sources:/hugo/content/docs/grafana/latest -p 3002:3002 --rm -it grafana/docs-base:latest /bin/bash -c 'npm i && make webpack && hugo server -p 3002 -D --ignoreCache --baseUrl http://localhost:3002 --bind 0.0.0.0'
docker run -v $(PWD)/sources:/hugo/content/docs/grafana/latest -p 3002:3002 --rm -it grafana/docs-base:latest /bin/bash -c 'npm i && make webpack && make docs-menu && hugo server -p 3002 -D --ignoreCache --baseUrl http://localhost:3002 --bind 0.0.0.0'
docs-no-pull:
docker run -v $(PWD)/sources:/hugo/content/docs/grafana/latest -p 3002:3002 --rm -it grafana/docs-base:latest /bin/bash -c 'make docs-menu && hugo server -p 3002 -D --ignoreCache --baseUrl http://localhost:3002 --bind 0.0.0.0'
docs-test:
docker pull grafana/docs-base:latest
docker run -v $(PWD)/sources:/hugo/content/docs/grafana/latest --rm -it grafana/docs-base:latest /bin/bash -c 'npm i && make prod'
docker run -v $(PWD)/sources:/hugo/content/docs/grafana/latest --rm -it grafana/docs-base:latest /bin/bash -c 'npm i && make prod'

View File

@@ -6,24 +6,28 @@ type = "docs"
aliases = ["/docs/grafana/v1.1", "/docs/grafana/latest/guides/reference/admin", "/docs/grafana/v3.1"]
+++
# Grafana Documentation
# Grafana documentation
<h2>Installing Grafana</h2>
<div class="nav-cards">
<a href="{{< relref "installation/debian.md" >}}" class="nav-cards__item nav-cards__item--install">
<div class="nav-cards__icon fa fa-linux">
</div>
<h5>Installing on Linux</h5>
<h5>Install on Linux</h5>
</a>
<a href="{{< relref "installation/mac.md" >}}" class="nav-cards__item nav-cards__item--install">
<div class="nav-cards__icon fa fa-apple">
</div>
<h5>Installing on macOS</h5>
<h5>Install on macOS</h5>
</a>
<a href="{{< relref "installation/windows.md" >}}" class="nav-cards__item nav-cards__item--install">
<a href="{{< relref "installation/windows.md" >}}" class="nav-cards__item nav-cards__item--install">
<div class="nav-cards__icon fa fa-windows">
</div>
<h5>Installing on Windows</h5>
<h5>Install on Windows</h5>
</a>
<a href="{{< relref "installation/docker.md" >}}" class="nav-cards__item nav-cards__item--install">
<h4>Run Docker image</h4>
<p>Run Grafana on a Docker image.</p>
</a>
<a href="https://grafana.com/cloud/grafana" class="nav-cards__item nav-cards__item--install">
<div class="nav-cards__icon fa fa-cloud">
@@ -33,28 +37,28 @@ aliases = ["/docs/grafana/v1.1", "/docs/grafana/latest/guides/reference/admin",
<a href="https://grafana.com/grafana/download" class="nav-cards__item nav-cards__item--install">
<div class="nav-cards__icon fa fa-moon-o">
</div>
<h5>Nightly Builds</h5>
<h5>Nightly builds</h5>
</a>
<div class="nav-cards__item nav-cards__item--install">
<h5>For other platforms read the <a href="{{< relref "project/building_from_source.md" >}}">build from source</a>
instructions for more information.</h5>
</div>
</div>
<h2>Guides</h2>
<div class="nav-cards">
<a href="https://grafana.com/grafana" class="nav-cards__item nav-cards__item--guide">
<a href="{{< relref "guides/what-is-grafana.md" >}}" class="nav-cards__item nav-cards__item--guide">
<h4>What is Grafana?</h4>
<p>Get an overview of Grafana's key features.</p>
</a>
<a href="{{< relref "guides/getting_started.md" >}}" class="nav-cards__item nav-cards__item--guide">
<h4>Getting started</h4>
<p>Learn the basics of using Grafana.</p>
</a>
<a href="{{< relref "installation/configuration.md" >}}" class="nav-cards__item nav-cards__item--guide">
<h4>Configure Grafana</h4>
<p>Review the configuration and setup options.</p>
</a>
<a href="{{< relref "guides/getting_started.md" >}}" class="nav-cards__item nav-cards__item--guide">
<h4>Getting started</h4>
<p>Learn the basics of using Grafana.</p>
<a href="{{< relref "guides/timeseries.md" >}}" class="nav-cards__item nav-cards__item--guide">
<h4>Intro to time series</h4>
<p>Learn about time series data.</p>
</a>
<a href="{{< relref "administration/provisioning.md" >}}" class="nav-cards__item nav-cards__item--guide">
<h4>Provisioning</h4>
@@ -67,7 +71,7 @@ aliases = ["/docs/grafana/v1.1", "/docs/grafana/latest/guides/reference/admin",
</div>
<h2>Data Source Guides</h2>
<h2>Data source guides</h2>
<div class="nav-cards">
<a href="{{< relref "features/datasources/graphite.md" >}}" class="nav-cards__item nav-cards__item--ds">
<img src="/img/docs/logos/icon_graphite.svg" >

View File

@@ -125,7 +125,7 @@ Sets the path for the Grafana install/home path, defaults to working directory.
**Example:**
```bash
grafana-cli admin reset-admin-password --homepath "c:\Program Files\grafana" mynewpassword
grafana-cli --homepath "c:\Program Files\grafana" admin reset-admin-password mynewpassword
```
### Override config file

View File

@@ -1,66 +1,58 @@
+++
title = "Image Rendering"
title = "Image rendering"
description = ""
keywords = ["grafana", "image", "rendering", "phantomjs"]
keywords = ["grafana", "image", "rendering", "plugin"]
type = "docs"
aliases = ["/docs/grafana/latest/installation/image-rendering"]
[menu.docs]
parent = "admin"
parent = "features"
weight = 8
+++
# Image Rendering
# Image rendering
Grafana supports rendering of panels and dashboards as PNG-images.
Grafana supports automatic rendering of panels and dashboards as PNG images. This allows Grafana to automatically generate images of your panels to include in [alert notifications]({{< relref "../alerting/notifications.md" >}}).
When an image is being rendered the PNG-image is temporary written to the filesystem, i.e. a sub-directory of Grafana's [data](/installation/configuration/#data) directory named `png`.
When an image is being rendered the PNG-image is temporarily written to the file system. When an image is rendered, the PNG image is temporary written to the `png` folder in the Grafana `data` folder.
A background job runs each 10 minutes and will remove temporary images. You can configure how long time an image should be stored before being removed by configuring the [temp-data-lifetime](/installation/configuration/#temp-data-lifetime) setting.
A background job runs every 10 minutes and removes temporary images. You can configure how long an image should be stored before being removed by configuring the [temp-data-lifetime]({{< relref "../installation/configuration/#temp-data-lifetime" >}}) setting.
## Requirements
You can also render a PNG by clicking the dropdown arrow next to a panel title, then clicking **Share > Direct link rendered image**.
Rendering images may require quite a lot of memory, mainly because there are "browser instances" started in the
background responsible for the actual rendering. Further, if multiple images are being rendered in parallel it most
certainly has a bigger memory footprint. Minimum free memory recommendation is 1GB.
## Memory requirements
Depending on [rendering method](#rendering-methods) you would need that memory available in the system where the
rendering process is running. For [Grafana Image renderer plugin](#grafana-image-renderer-plugin) and [PhantomJS](#phantomjs)
it's the system which Grafana is installed on. For [Remote rendering service](#remote-rendering-service) it is the system where
that's installed.
Minimum free memory recommendation is 16GB on the system doing the rendering.
## Rendering methods
Rendering images can require a lot of memory, mainly because Grafana creates browser instances in the background for the actual rendering. If multiple images are rendered in parallel, then the rendering has a bigger memory footprint. One advantage of using the remote rendering service is that the rendering will be done on the remote system, so your local system resources will not be affected by rendering.
### Grafana image renderer plugin
## Alerting and render limits
> This plugin currently does not work if it is installed in the Grafana docker image. See [Install in Grafana docker image](#install-in-grafana-docker-image).
Alert notifications can include images, but rendering many images at the same time can overload the server where the renderer is running. For instructions of how to configure this, see [concurrent_render_limit]({{< relref "../installation/configuration/#concurrent_render_limit" >}}).
The [Grafana image renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer) is a plugin that runs on the backend and handles rendering panels and dashboards as PNG-images using headless chrome.
## Install Grafana Image Renderer plugin
You can install it using grafana-cli:
The [Grafana image renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer) is a plugin that runs on the backend and handles rendering panels and dashboards as PNG images using headless Chrome.
```bash
grafana-cli plugins install grafana-image-renderer
```
To install the plugin, refer to the [Grafana Image Renderer Installation instructions](https://grafana.com/grafana/plugins/grafana-image-renderer/installation).
For further information and instructions refer to [troubleshooting](#troubleshooting) and the [plugin details](https://grafana.com/grafana/plugins/grafana-image-renderer).
## Run in custom Grafana Docker image
#### Install in Grafana docker image
We recommend setting up another Docker container for rendering and using remote rendering. Refer to [Remote rendering service]({{< relref "#remote-rendering-service" >}}) for instructions.
This plugin is not compatible with the current Grafana Docker image without installing further system-level dependencies. We recommend setting up another Docker container for rendering and using remote rendering, see [Remote rendering service](#remote-rendering-service) for reference.
If you still want to install the plugin in the Grafana Docker image, refer to [Build with Grafana Image Renderer plugin pre-installed]({{< relref "../installation/docker/#build-with-grafana-image-renderer-plugin-pre-installed" >}}).
If you still want to install the plugin in the Grafana docker image we provide instructions for how to build a custom Grafana image, see [Installing using Docker](/installation/docker/#custom-image-with-grafana-image-renderer-plugin-pre-installed).
## Remote rendering service
### Remote rendering service
> Requires an internet connection.
The [Grafana image renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer) can also be run as a remote HTTP rendering service. In this setup Grafana will render an image by making a HTTP request to the remote rendering service, which in turn render the image and returns it back in the HTTP response to Grafana.
The [Grafana Image Renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer) can also be run as a remote HTTP rendering service. In this setup, Grafana renders an image by making a HTTP request to the remote rendering service, which in turn renders the image and returns it back in the HTTP response to Grafana.
You can run the remote HTTP rendering service using Docker or as a standalone Node.js application.
**Using Docker:**
### Run in Docker
The following example describes how to run Grafana and the remote HTTP rendering service in two separate docker containers using Docker Compose.
The following example shows how to run Grafana and the remote HTTP rendering service in two separate Docker containers using Docker Compose.
Create a `docker-compose.yml` with the following content.
Create a `docker-compose.yml` with the following content:
```yaml
version: '2'
@@ -80,54 +72,45 @@ services:
- 8081
```
and finally run:
And then run:
```bash
docker-compose up
```
**Running as standalone Node.js application:**
## Run as standalone Node.js application
The following example describes how to build and run the remote HTTP rendering service as a standalone node.js application and configure Grafana appropriately.
The following example describes how to build and run the remote HTTP rendering service as a standalone Node.js application and configure Grafana appropriately.
1. Git clone the [Grafana image renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer) repository.
1. Clone the [Grafana image renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer) Git repository.
2. Install dependencies and build:
```bash
yarn install --pure-lockfile
yarn run build
```
3. Run the server
```bash
yarn install --pure-lockfile
yarn run build
```
```bash
node build/app.js server --port=8081
```
3. Update Grafana configuration:
3. Run the server:
```
[rendering]
server_url = http://localhost:8081/render
callback_url = http://localhost:3000/
```
4. Restart Grafana
```bash
node build/app.js server --port=8081
```
For further information and instructions refer to [troubleshooting](#troubleshooting) and the [plugin details](https://grafana.com/grafana/plugins/grafana-image-renderer).
4. Update Grafana configuration:
### PhantomJS
```
[rendering]
server_url = http://localhost:8081/render
callback_url = http://localhost:3000/
```
> PhantomJS is deprecated since Grafana v6.4 and will be removed in a future release. Please migrate to Grafana image renderer plugin or remote rendering service.
5. Restart Grafana.
[PhantomJS](https://phantomjs.org/) have been the only supported and default image renderer since Grafana v2.x and is shipped with Grafana.
## PhantomJS
PhantomJS binaries are included for Linux (x64), Windows (x64) and Darwin (x64). For Linux you should ensure that any required libraries, e.g. libfontconfig1, are available.
> PhantomJS is deprecated since Grafana v6.4 and will be removed in a future release. Please migrate to the Grafana Image Renderer plugin or remote rendering service.
Please note that PhantomJS binaries are not included for ARM. To support this you will need to ensure that a phantomjs binary is available under tools/phantomjs/phantomjs.
## Alerting and render limits
Alert notifications can include images, but rendering many images at the same time can overload the server where the renderer is running. For instructions of how to configure this, see [concurrent_render_limit]({{< relref "../installation/configuration/#concurrent_render_limit" >}}).
## Troubleshooting
## Troubleshoot image rendering
Enable debug log messages for rendering in the Grafana configuration file and inspect the Grafana server log.
@@ -147,19 +130,19 @@ error while loading shared libraries: libX11.so.6: cannot open shared object fil
```
In general you can use the [`ldd`](https://en.wikipedia.org/wiki/Ldd_(Unix)) utility to figure out what shared libraries
are missing/not installed in your system:
are not installed in your system:
```bash
$ cd <grafana-image-render plugin directiry>
$ ldd chrome-linux/chrome
linux-vdso.so.1 (0x00007fff1bf65000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2047945000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2047924000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f204791a000)
libX11.so.6 => not found
libX11-xcb.so.1 => not found
libxcb.so.1 => not found
libXcomposite.so.1 => not found
cd <grafana-image-render plugin directory>
ldd chrome-linux/chrome
linux-vdso.so.1 (0x00007fff1bf65000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2047945000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2047924000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f204791a000)
libX11.so.6 => not found
libX11-xcb.so.1 => not found
libxcb.so.1 => not found
libXcomposite.so.1 => not found
...
```
@@ -173,23 +156,43 @@ libx11-6 libx11-xcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3
**Centos:**
On a minimal Centos install the following dependencies have been confirmed as needed for the image rendering to function.
On a minimal Centos install the following dependencies have been confirmed as needed for the image rendering to function:
```bash
libXcomposite libXdamage libXtst cups libXScrnSaver pango atk adwaita-cursor-theme adwaita-icon-theme at at-spi2-atk at-spi2-core cairo-gobject colord-libs dconf desktop-file-utils ed emacs-filesystem gdk-pixbuf2 glib-networking gnutls gsettings-desktop-schemas gtk-update-icon-cache gtk3 hicolor-icon-theme jasper-libs json-glib libappindicator-gtk3 libdbusmenu libdbusmenu-gtk3 libepoxy liberation-fonts liberation-narrow-fonts liberation-sans-fonts liberation-serif-fonts libgusb libindicator-gtk3 libmodman libproxy libsoup libwayland-cursor libwayland-egl libxkbcommon m4 mailx nettle patch psmisc redhat-lsb-core redhat-lsb-submod-security rest spax time trousers xdg-utils xkeyboard-config
```
#### Using custom Chrome/Chromium
### Certificate signed by internal certificate authorities
In many cases Grafana, runs on internal servers and uses certificates that have not been signed by a CA ([Certificate Authority](https://en.wikipedia.org/wiki/Certificate_authority)) known to Chrome, and therefore cannot be validated. Chrome internally uses NSS ([Network Security Services](https://en.wikipedia.org/wiki/Network_Security_Services)) for cryptogtraphic operations such as the validation of certificates.
If you are using the Grafana Image Renderer with a Grafana server that uses a certificate signed by such a custom CA (for example a company-internal CA), rendering images will fail and you will see messages like this in the Grafana log:
```
t=2019-12-04T12:39:22+0000 lvl=error msg="Render request failed" logger=rendering error=map[] url="https://192.168.106.101:3443/d-solo/zxDJxNaZk/graphite-metrics?orgId=1&refresh=1m&from=1575438321300&to=1575459921300&var-Host=master1&panelId=4&width=1000&height=500&tz=Europe%2FBerlin&render=1" timestamp=0001-01-01T00:00:00.000Z
t=2019-12-04T12:39:22+0000 lvl=error msg="Rendering failed." logger=context userId=1 orgId=1 uname=admin error="Rendering failed: Error: net::ERR_CERT_AUTHORITY_INVALID at https://192.168.106.101:3443/d-solo/zxDJxNaZk/graphite-metrics?orgId=1&refresh=1m&from=1575438321300&to=1575459921300&var-Host=master1&panelId=4&width=1000&height=500&tz=Europe%2FBerlin&render=1"
t=2019-12-04T12:39:22+0000 lvl=error msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/render/d-solo/zxDJxNaZk/graphite-metrics status=500 remote_addr=192.168.106.101 time_ms=310 size=1722 referer="https://grafana.xxx-xxx/d/zxDJxNaZk/graphite-metrics?orgId=1&refresh=1m"
```
(The severity-level `error` in the above messages might be misspelled with a single `r`)
If this happens, then you have to add the certificate to the trust store. If you have the certificate file for the internal root CA in the file `internal-root-ca.crt.pem`, then use these commands to create a user specific NSS trust store for the Grafana user (`grafana` for the purpose of this example) and execute the following steps:
```[root@server ~]# [ -d /usr/share/grafana/.pki/nssdb ] || mkdir -p /usr/share/grafana/.pki/nssdb
[root@merver ~]# certutil -d sql:/usr/share/grafana/.pki/nssdb -A -n internal-root-ca -t C -i /etc/pki/tls/certs/internal-root-ca.crt.pem
[root@server ~]# chown -R grafana: /usr/share/grafana/.pki/nssdb
```
### Custom Chrome/Chromium
As a last resort, if you already have [Chrome](https://www.google.com/chrome/) or [Chromium](https://www.chromium.org/)
installed on your system you can configure [Grafana Image renderer plugin](#grafana-image-renderer-plugin) to use this
installed on your system, then you can configure [Grafana Image renderer plugin](#grafana-image-renderer-plugin) to use this
instead of the pre-packaged version of Chromium.
> Please note that this is not recommended since you may encounter problems if the installed version of Chrome/Chromium is not
> is compatible with the [Grafana Image renderer plugin](#grafana-image-renderer-plugin).
> Please note that this is not recommended, since you may encounter problems if the installed version of Chrome/Chromium is not
> compatible with the [Grafana Image renderer plugin](#grafana-image-renderer-plugin).
To override the path to the Chrome/Chromium executable you can set an environment variable and make sure that
it's available for the Grafana process, e.g.
To override the path to the Chrome/Chromium executable, set an environment variable and make sure that it's available for the Grafana process. For example:
```bash
export GF_RENDERER_PLUGIN_CHROME_BIN="/usr/bin/chromium-browser"

View File

@@ -253,9 +253,9 @@ Note: The JSON definition in the input field when using `Copy JSON to Clipboard`
{{< docs-imagebox img="/img/docs/v51/provisioning_cannot_save_dashboard.png" max-width="500px" class="docs-image--no-shadow" >}}
### Reusable Dashboard Urls
### Reusable Dashboard URLs
If the dashboard in the json file contains an [uid](/reference/dashboard/#json-fields), Grafana will force insert/update on that uid. This allows you to migrate dashboards betweens Grafana instances and provisioning Grafana from configuration without breaking the urls given since the new dashboard url uses the uid as identifier.
If the dashboard in the json file contains an [uid](/reference/dashboard/#json-fields), Grafana will force insert/update on that uid. This allows you to migrate dashboards betweens Grafana instances and provisioning Grafana from configuration without breaking the URLs given since the new dashboard URL uses the uid as identifier.
When Grafana starts, it will update/insert all dashboards available in the configured folders. If you modify the file, the dashboard will also be updated.
By default Grafana will delete dashboards in the database if the file is removed. You can disable this behavior using the `disableDeletion` setting.
@@ -270,7 +270,7 @@ Alert Notification Channels can be provisioned by adding one or more yaml config
Each config file can contain the following top-level fields:
- `notifiers`, a list of alert notifications that will be added or updated during start up. If the notification channel already exists, Grafana will update it to match the configuration file.
- `delete_notifiers`, a list of alert notifications to be deleted before before inserting/updating those in the `notifiers` list.
- `delete_notifiers`, a list of alert notifications to be deleted before inserting/updating those in the `notifiers` list.
Provisioning looks up alert notifications by uid, and will update any existing notification with the provided uid.
@@ -351,7 +351,9 @@ The following sections detail the supported settings for each alert notification
| icon_emoji |
| icon_url |
| uploadImage |
| mention |
| mentionUsers |
| mentionGroups |
| mentionChannel |
| token |
#### Alert notification `victorops`

View File

@@ -11,9 +11,7 @@ weight = 2
# Metrics from the alert engine
> Alerting is only available in Grafana v4.0 and above.
The alert engine publishes some internal metrics about itself. You can read more about how Grafana publishes [internal metrics](/installation/configuration/#metrics).
The alert engine publishes some internal metrics about itself. You can read more about how Grafana publishes [internal metrics]({{< relref "../administration/metrics/" >}}).
Description | Type | Metric name
---------- | ----------- | ----------

View File

@@ -75,27 +75,29 @@ able to access the image.
{{< imgbox max-width="40%" img="/img/docs/v4/slack_notification.png" caption="Alerting Slack Notification" >}}
To set up slack you need to configure an incoming webhook url at slack. You can follow their guide on how
to do that [here](https://api.slack.com/incoming-webhooks). If you want to include screenshots of the firing alerts
in the Slack messages you have to configure either the [external image destination](#external-image-store) in Grafana,
or a bot integration via Slack Apps. Follow Slack's guide to set up a bot integration and use the token provided
(https://api.slack.com/bot-users), which starts with "xoxb".
To set up Slack, you need to configure an incoming Slack webhook URL. You can follow
[their guide](https://api.slack.com/incoming-webhooks) on how to do that. If you want to include screenshots of the
firing alerts in the Slack messages you have to configure either the [external image destination](#external-image-store)
in Grafana, or a bot integration via Slack Apps. Follow Slack's guide to set up a bot integration and use the token
provided (https://api.slack.com/bot-users), which starts with "xoxb".
Setting | Description
---------- | -----------
Url | Slack incoming webhook url.
Url | Slack incoming webhook URL.
Username | Set the username for the bot's message.
Recipient | Allows you to override the Slack recipient.
Recipient | Allows you to override the Slack recipient. You must either provide a channel Slack ID, a user Slack ID, a username reference (@&lt;user&gt;, all lowercase, no whitespace), or a channel reference (#&lt;channel&gt;, all lowercase, no whitespace).
Icon emoji | Provide an emoji to use as the icon for the bot's message. Ex :smile:
Icon URL | Provide a url to an image to use as the icon for the bot's message.
Mention | make it possible to include a mention in the Slack notification sent by Grafana. Ex @here or @channel
Icon URL | Provide a URL to an image to use as the icon for the bot's message.
Mention Users | Optionally mention one or more users in the Slack notification sent by Grafana. You have to refer to users, comma-separated, via their corresponding Slack IDs (which you can find by clicking the overflow button on each user's Slack profile).
Mention Groups | Optionally mention one or more groups in the Slack notification sent by Grafana. You have to refer to groups, comma-separated, via their corresponding Slack IDs (which you can get from each group's Slack profile URL).
Mention Channel | Optionally mention either all channel members or just active ones.
Token | If provided, Grafana will upload the generated image via Slack's file.upload API method, not the external image destination.
If you are using the token for a slack bot, then you have to invite the bot to the channel you want to send notifications and add the channel to the recipient field.
### PagerDuty
To set up PagerDuty, all you have to do is to provide an API key.
To set up PagerDuty, all you have to do is to provide an integration key.
Setting | Description
---------- | -----------
@@ -103,6 +105,8 @@ Integration Key | Integration key for PagerDuty.
Severity | Level for dynamic notifications, default is `critical`
Auto resolve incidents | Resolve incidents in PagerDuty once the alert goes back to ok
**Note:** The tags `Class`, `Group`, and `Component` have special meaning in the [Pagerduty Common Event Format - PD-CEF](https://support.pagerduty.com/docs/pd-cef). If an alert panel defines these tag keys they will be transposed to the root of the event sent to Pagerduty. This means they will be available within the Pagerduty UI and Filtering tools.
### Webhook
The webhook notification is a simple way to send information about a state change over HTTP to a custom endpoint.
@@ -132,7 +136,8 @@ Example json body:
"tag name":"tag value"
},
"title":"[Alerting] Panel Title alert"
}```
}
```
- **state** - The possible values for alert state are: `ok`, `paused`, `alerting`, `pending`, `no_data`.
@@ -188,7 +193,7 @@ Kafka | `kafka` | yes, external only | no
Line | `line` | yes, external only | no
Microsoft Teams | `teams` | yes, external only | no
OpsGenie | `opsgenie` | yes, external only | yes
Pagerduty | `pagerduty` | yes, external only | no
Pagerduty | `pagerduty` | yes, external only | yes
Prometheus Alertmanager | `prometheus-alertmanager` | yes, external only | yes
Pushover | `pushover` | yes | no
Sensu | `sensu` | yes, external only | no
@@ -201,7 +206,8 @@ Webhook | `webhook` | yes, external only | yes
# Enable images in notifications {#external-image-store}
Grafana can render the panel associated with the alert rule as a PNG image and include that in the notification. Read more about the requirements and how to configure image rendering [here]({{< relref "../administration/image_rendering/" >}}).
Grafana can render the panel associated with the alert rule as a PNG image and include that in the notification. Read more about the requirements and how to configure
[image rendering]({{< relref "../administration/image_rendering/" >}}).
Most Notification Channels require that this image be publicly accessible (Slack and PagerDuty for example). In order to include images in alert notifications, Grafana can upload the image to an image store. It currently supports
Amazon S3, Webdav, Google Cloud Storage and Azure Blob Storage. So to set that up you need to configure the [external image uploader]({{< relref "../installation/configuration/#external-image-storage" >}}) in your grafana-server ini config file.
@@ -223,4 +229,4 @@ It currently supports only the Prometheus Alertmanager notifier.
# Configure the link back to Grafana from alert notifications
All alert notifications contain a link back to the triggered alert in the Grafana instance.
This url is based on the [domain]({{< relref "../installation/configuration/#domain" >}}) setting in Grafana.
This URL is based on the [domain]({{< relref "../installation/configuration/#domain" >}}) setting in Grafana.

View File

@@ -11,15 +11,11 @@ weight = 1
# Alerting Engine and Rules Guide
> Alerting is only available in Grafana v4.0 and above.
## Introduction
{{< imgbox max-width="40%" img="/img/docs/v4/drag_handles_gif.gif" caption="Alerting overview" >}}
Alerting in Grafana allows you to attach rules to your dashboard panels. When you save the dashboard
Grafana will extract the alert rules into a separate alert rule storage and schedule them for evaluation.
{{< imgbox max-width="40%" img="/img/docs/v4/drag_handles_gif.gif" caption="Alerting overview" >}}
In the alert tab of the graph panel you can configure how often the alert rule should be evaluated
and the conditions that need to be met for the alert to change state and trigger its
[notifications]({{< relref "notifications.md" >}}).
@@ -28,11 +24,9 @@ and the conditions that need to be met for the alert to change state and trigger
The alert rules are evaluated in the Grafana backend in a scheduler and query execution engine that is part
of core Grafana. Only some data sources are supported right now. They include `Graphite`, `Prometheus`, `InfluxDB`, `Elasticsearch`,
`Stackdriver`, `Cloudwatch`, `Azure Monitor`, `MySQL`, `PostgreSQL`, `MSSQL`, `OpenTSDB`, `Oracle` and `Azure Data Explorer`.
`Stackdriver`, `Cloudwatch`, `Azure Monitor`, `MySQL`, `PostgreSQL`, `MSSQL`, `OpenTSDB`, `Oracle`, and `Azure Data Explorer`.
> Alerting support for Azure Monitor is only available in Grafana v6.0 and above.
### Clustering
## Clustering
Currently alerting supports a limited form of high availability. Since v4.2.0 of Grafana, alert notifications are deduped when running multiple servers. This means all alerts are executed on every server but no duplicate alert notifications are sent due to the deduping logic. Proper load balancing of alerts will be introduced in the future.
@@ -67,7 +61,6 @@ Below you can see an example timeline of an alert using the `For` setting. At ~1
Currently the only condition type that exists is a `Query` condition that allows you to
specify a query letter, time range and an aggregation function.
### Query condition example
```sql

View File

@@ -0,0 +1,140 @@
+++
title = "Azure AD OAuth2 authentication"
description = "Grafana Azure AD OAuth Guide "
keywords = ["grafana", "configuration", "documentation", "oauth"]
type = "docs"
[menu.docs]
name = "Azure AD"
identifier = "azuread_oauth2"
parent = "authentication"
weight = 3
+++
# Azure AD OAuth2 authentication
> Only available in Grafana v6.7+
The Azure AD authentication provides the possibility to use an Azure Active Directory tenant as an identity provider for Grafana. By using Azure AD Application Roles it is also possible to assign Users and Groups to Grafana roles from the Azure Portal.
## Create the Azure AD application
To enable the Azure AD OAuth2 you must register your application with Azure AD.
1. Log in to [Azure Portal](https://portal.azure.com) and click **Azure Active Directory** in the side menu.
1. Click **App Registrations** and add a new application registration:
- Name: Grafana
- Application type: Web app / API
- Sign-on URL: `https://<grafana domain>/login/azuread`
1. Click the name of the new application to open the application details page.
1. Click **Endpoints**.
- Note down the **OAuth 2.0 authorization endpoint (v2)**, this will be the auth url.
- Note down the **OAuth 2.0 token endpoint (v2)**, this will be the token url.
1. Close the Endpoints page to come back to the application details page.
1. Note down the "Application ID", this will be the OAuth client id.
1. Click **Certificates & secrets** and add a new entry under Client secrets.
- Description: Grafana OAuth
- Expires: Never
1. Click **Add** then copy the key value, this will be the OAuth client secret.
1. Click **Manifest**.
- Add definitions for the required Application Roles for Grafana (Viewer, Editor, Admin). Without this configuration all users will be assigned to the Viewer role.
- Every role has to have a unique id. On Linux this can be created with `uuidgen` for instance.
```json
"appRoles": [
{
"allowedMemberTypes": [
"User"
],
"description": "Grafana admin Users",
"displayName": "Grafana Admin",
"id": "SOME_UNIQUE_ID",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "Admin"
},
{
"allowedMemberTypes": [
"User"
],
"description": "Grafana read only Users",
"displayName": "Grafana Viewer",
"id": "SOME_UNIQUE_ID",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "Viewer"
},
{
"allowedMemberTypes": [
"User"
],
"description": "Grafana Editor Users",
"displayName": "Grafana Editor",
"id": "SOME_UNIQUE_ID",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "Editor"
}
],
```
1. Click Overview and then on **Managed application in local directory** to show the Enterprise Application details.
1. Click on **Users and groups** and add Users/Groups to the Grafana roles by using **Add User**.
## Enable Azure AD Oauth in Grafana
1. Add the following to the [Grafana configuration file]({{< relref "../installation/configuration.md#config-file-locations" >}}):
```ini
[auth.azuread]
name = Azure AD
enabled = true
allow_sign_up = true
client_id = APPLICATION_ID
client_secret = CLIENT_SECRET
scopes = openid email profile
auth_url = https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/authorize
token_url = https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/token
allowed_domains =
allowed_groups =
```
> Note: Ensure that the [root_url]({{< relref "../installation/configuration/#root-url" >}}) in Grafana is set in your Azure Application Reply URLs (App -> Settings -> Reply URLs)
### Configure allowed groups and domains
To limit access to authenticated users that are members of one or more groups, set `allowed_groups`
to a comma- or space-separated list of group Object Ids. Object Id for a specific group can be found on the Azure portal: go to Azure Active Directory -> Groups. For instance, if you want to
only give access to members of the group `example` which has Id `8bab1c86-8fba-33e5-2089-1d1c80ec267d`, set
```ini
allowed_groups = 8bab1c86-8fba-33e5-2089-1d1c80ec267d
```
The `allowed_domains` option limits access to the users belonging to the specific domains. Domains should be separated by space or comma.
```ini
allowed_domains = mycompany.com mycompany.org
```
### Team Sync (Enterprise only)
> Only available in Grafana Enterprise v6.7+
With Team Sync you can map your Azure AD groups to teams in Grafana so that your users will automatically be added to
the correct teams.
Azure AD groups can be referenced by group Object Id, like `8bab1c86-8fba-33e5-2089-1d1c80ec267d`.
[Learn more about Team Sync]({{< relref "team-sync.md" >}})

View File

@@ -10,51 +10,8 @@ parent = "authentication"
weight = 3
+++
# Enhanced LDAP Integration
# Enhanced LDAP integration
> Enhanced LDAP Integration is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../enterprise" >}}).
The enhanced LDAP integration adds additional functionality on top of the existing {LDAP integration]({{< relref "ldap.md" >}}).
The enhanced LDAP integration adds additional functionality on top of the [existing LDAP integration]({{< relref "ldap.md" >}}).
## LDAP Group Synchronization for Teams
{{< docs-imagebox img="/img/docs/enterprise/team_members_ldap.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" >}}
With the enhanced LDAP integration it's possible to setup synchronization between LDAP groups and teams. This enables LDAP users which are members
of certain LDAP groups to automatically be added/removed as members to certain teams in Grafana. Currently the synchronization will only happen every
time a user logs in, unless Grafana 6.3 (or later) is used with active background synchronization enabled.
Grafana keeps track of all synchronized users in teams and you can see which users have been synchronized from LDAP in the team members list, see `LDAP` label in screenshot.
This mechanism allows Grafana to remove an existing synchronized user from a team when its LDAP group membership changes. This mechanism also enables you to manually add
a user as member of a team and it will not be removed when the user signs in. This gives you flexibility to combine LDAP group memberships and Grafana team memberships.
[Learn more about Team Sync]({{< relref "team-sync.md">}})
<div class="clearfix"></div>
## Active LDAP Synchronization
> Only available in Grafana Enterprise v6.3+
In the open source version of Grafana, user data from LDAP will be synchronized only during the login process when authenticating using LDAP.
With this feature you can configure Grafana to actively sync users with LDAP server(s) in the background. Role and team membership will be updated, removed users will be disabled and logged out. Only users that have logged into Grafana at least once will be synchronized.
```bash
[auth.ldap]
...
# You can use the Cron syntax or several predefined schedulers -
# @yearly (or @annually) | Run once a year, midnight, Jan. 1st | 0 0 0 1 1 *
# @monthly | Run once a month, midnight, first of month | 0 0 0 1 * *
# @weekly | Run once a week, midnight between Sat/Sun | 0 0 0 * * 0
# @daily (or @midnight) | Run once a day, midnight | 0 0 0 * * *
# @hourly | Run once an hour, beginning of hour | 0 0 * * * *
sync_cron = "0 0 1 * * *" # This is default value (At 1 am every day)
# This cron expression format uses 6 space-separated fields (including seconds), for example
# sync_cron = "* */10 * * * *"
# This will run the LDAP Synchronization every 10th minute, which is also the minimal interval between the grafana sync times i.e. you cannot set it for every 9th minute
# You can also disable active LDAP synchronization
active_sync_enabled = true # enabled by default
```
> Enhanced LDAP integration is only available in Grafana Enterprise. For more information, refer to [Enhanced LDAP integration]({{< relref "../enterprise/enhanced_ldap.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise" >}}).

View File

@@ -50,7 +50,7 @@ Grafana will also attempt to do role mapping through OAuth as described below.
> Only available in Grafana v6.5+.
Check for the presence of an role using the [JMESPath](http://jmespath.org/examples.html) specified via the `role_attribute_path` configuration option. The JSON used for the path lookup is the HTTP response obtained from querying the UserInfo endpoint specified via the `api_url` configuration option. The result after evaluating the `role_attribute_path` JMESPath expression needs to be a valid Grafana role, i.e. `Viewer`, `Editor` or `Admin`.
Check for the presence of a role using the [JMESPath](http://jmespath.org/examples.html) specified via the `role_attribute_path` configuration option. The JSON used for the path lookup is the HTTP response obtained from querying the UserInfo endpoint specified via the `api_url` configuration option. The result after evaluating the `role_attribute_path` JMESPath expression needs to be a valid Grafana role, i.e. `Viewer`, `Editor` or `Admin`.
See [JMESPath examples](#jmespath-examples) for more information.
@@ -105,7 +105,7 @@ allowed_organizations =
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.
Your OneLogin Domain will match the URL you use to access OneLogin.
Configure Grafana as follows:
@@ -223,7 +223,7 @@ allowed_organizations =
## JMESPath examples
To ease configuring a proper JMESPath expression you can test/evaluate expression with a custom payload at http://jmespath.org/.
To ease configuration of a proper JMESPath expression, you can test/evaluate expressions with custom payloads at http://jmespath.org/.
### Role mapping

View File

@@ -16,7 +16,7 @@ To enable the GitHub OAuth2 you must register your application with GitHub. GitH
## Configure GitHub OAuth application
You need to create a GitHub OAuth application (you find this under the GitHub
You need to create a GitHub OAuth application (you will find this under the GitHub
settings page). When you create the application you will need to specify
a callback URL. Specify this as callback:

View File

@@ -12,7 +12,7 @@ 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.
To enable GitLab OAuth2 you must register the application in GitLab. GitLab will generate a client ID and secret key for you to use.
## Create GitLab OAuth keys
@@ -73,7 +73,7 @@ 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
You can limit access to only members of a given group or list of
groups by setting the `allowed_groups` option.
### allowed_groups
@@ -125,5 +125,4 @@ the correct teams.
Your GitLab groups can be referenced in the same way as `allowed_groups`, like `example` or `foo/bar`.
[Learn more about Team Sync]({{< relref "enhanced_ldap.md" >}})
[Learn more about Team Sync]({{< relref "team-sync.md" >}})

View File

@@ -18,8 +18,8 @@ To enable the Google OAuth2 you must register your application with Google. Goog
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
1. Go to https://console.developers.google.com/apis/credentials.
2. Click **Create Credentials**, then click **OAuth Client ID** in the drop-down menu
3. Enter the following:
- Application Type: Web Application
- Name: Grafana

View File

@@ -16,6 +16,8 @@ weight = 2
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.
> [Enhanced LDAP authentication]({{< relref "../enterprise/enhanced_ldap.md" >}}) is available in [Grafana Enterprise]({{< relref "../enterprise" >}}).
## Supported LDAP Servers
Grafana uses a [third-party LDAP library](https://github.com/go-ldap/ldap) under the hood that supports basic LDAP v3 functionality.
@@ -189,16 +191,27 @@ Setting | Required | Description | Default
Users with nested/recursive group membership must have an LDAP server that supports `LDAP_MATCHING_RULE_IN_CHAIN`
and configure `group_search_filter` in a way that it returns the groups the submitted username is a member of.
To configure `group_search_filter`:
* You can set `group_search_base_dns` to specify where the matching groups are defined.
* If you do not use `group_search_base_dns`, then the previously defined `search_base_dns` is used.
**Active Directory example:**
Active Directory groups store the Distinguished Names (DNs) of members, so your filter will need to know the DN for the user based only on the submitted username.
Multiple DN templates can be searched by combining filters with the LDAP OR-operator. Examples:
Multiple DN templates can be searched by combining filters with the LDAP OR-operator. Two examples:
```bash
group_search_filter = "(member:1.2.840.113556.1.4.1941:=%s)"
group_search_base_dns = ["DC=mycorp,DC=mytld"]
group_search_filter_user_attribute = "dn"
```
```bash
group_search_filter = "(member:1.2.840.113556.1.4.1941:=CN=%s,[user container/OU])"
group_search_filter = "(|(member:1.2.840.113556.1.4.1941:=CN=%s,[user container/OU])(member:1.2.840.113556.1.4.1941:=CN=%s,[another user container/OU]))"
group_search_filter_user_attribute = "cn"
```
For more information on AD searches see [Microsoft's Search Filter Syntax](https://docs.microsoft.com/en-us/windows/desktop/adsi/search-filter-syntax) documentation.
For troubleshooting, by changing `member_of` in `[servers.attributes]` to "dn" it will show you more accurate group memberships when [debug is enabled](#troubleshooting).

View File

@@ -128,7 +128,7 @@ oauth_auto_login = 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.
Set the option detailed below to true to hide sign-out menu link. Useful if you use an auth proxy.
```bash
[auth]

View File

@@ -10,169 +10,8 @@ parent = "authentication"
weight = 5
+++
# SAML Authentication
# SAML authentication
> SAML Authentication integration is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../enterprise" >}}).
The SAML authentication integration allows your Grafana users to log in by using an external SAML Identity Provider (IdP). To enable this, Grafana becomes a Service Provider (SP) in the authentication flow, interacting with the IdP to exchange user information.
> Only available in Grafana v6.3+
The SAML authentication integration allows your Grafana users to log in by
using an external SAML Identity Provider (IdP). To enable this, Grafana becomes
a Service Provider (SP) in the authentication flow, interacting with the IdP to
exchange user information.
## Supported SAML
The SAML single-sign-on (SSO) standard is varied and flexible. Our implementation contains the subset of features needed to provide a smooth authentication experience into Grafana.
> Should you encounter any problems with our implementation, please don't hesitate to contact us.
At the moment of writing, Grafana supports:
1. From the Service Provider (SP) to the Identity Provider (IdP)
- `HTTP-POST` binding
- `HTTP-Redirect` binding
2. From the Identity Provider (IdP) to the Service Provider (SP)
- `HTTP-POST` binding
3. In terms of security, we currently support signed and encrypted Assertions. However, signed or encrypted requests are not supported.
4. In terms of initiation, only SP-initiated requests are supported. There's no support for IdP-initiated request.
## Set up SAML Authentication
To use the SAML integration, you need to enable SAML in the [main config file]({{< relref "../installation/configuration.md" >}}).
```bash
[auth.saml]
# Defaults to false. If true, the feature is enabled
enabled = true
# Base64-encoded public X.509 certificate. Used to sign requests to the IdP
certificate =
# Path to the public X.509 certificate. Used to sign requests to the IdP
certificate_path =
# Base64-encoded private key. Used to decrypt assertions from the IdP
private_key =
# Path to the private key. Used to decrypt assertions from the IdP
private_key_path =
# Base64-encoded IdP SAML metadata XML. Used to verify and obtain binding locations from the IdP
idp_metadata =
# Path to the SAML metadata XML. Used to verify and obtain binding locations from the IdP
idp_metadata_path =
# URL to fetch SAML IdP metadata. Used to verify and obtain binding locations from the IdP
idp_metadata_url =
# Duration, since the IdP issued a response and the SP is allowed to process it. Defaults to 90 seconds
max_issue_delay =
# Duration, for how long the SP's metadata should be valid. Defaults to 48 hours
metadata_valid_duration =
# Friendly name or name of the attribute within the SAML assertion to use as the user's name
assertion_attribute_name = displayName
# Friendly name or name of the attribute within the SAML assertion to use as the user's login handle
assertion_attribute_login = mail
# Friendly name or name of the attribute within the SAML assertion to use as the user's email
assertion_attribute_email = mail
```
Important to note:
- like any other Grafana configuration, use of [environment variables for these options is supported]({{< relref "../installation/configuration.md#using-environment-variables" >}})
- only one form of configuration option is required. Using multiple forms, e.g. both `certificate` and `certificate_path` will result in an error
## Grafana Configuration
An example working configuration example looks like:
```bash
[auth.saml]
enabled = true
certificate_path = "/path/to/certificate.cert"
private_key_path = "/path/to/private_key.pem"
metadata_path = "/my/metadata.xml"
max_issue_delay = 90s
metadata_valid_duration = 48h
assertion_attribute_name = displayName
assertion_attribute_login = mail
assertion_attribute_email = mail
```
And here is a comprehensive list of the options:
| Setting | Required | Description | Default |
| ----------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------- | ------------- |
| `enabled` | No | Whenever SAML authentication is allowed | `false` |
| `certificate` or `certificate_path` | Yes | Base64-encoded string or Path for the SP X.509 certificate | |
| `private_key` or `private_key_path` | Yes | Base64-encoded string or Path for the SP private key | |
| `idp_metadata` or `idp_metadata_path` or `idp_metadata_url` | Yes | Base64-encoded string, Path or URL for the IdP SAML metadata XML | |
| `max_issue_delay` | No | Duration, since the IdP issued a response and the SP is allowed to process it | `90s` |
| `metadata_valid_duration` | No | Duration, for how long the SP's metadata should be valid | `48h` |
| `assertion_attribute_name` | No | Friendly name or name of the attribute within the SAML assertion to use as the user's name | `displayName` |
| `assertion_attribute_login` | No | Friendly name or name of the attribute within the SAML assertion to use as the user's login handle | `mail` |
| `assertion_attribute_email` | No | Friendly name or name of the attribute within the SAML assertion to use as the user's email | `mail` |
### Cert and Private Key
The SAML SSO standard uses asymmetric encryption to exchange information between the SP (Grafana) and the IdP. To perform such encryption, you need a public part and a private part. In this case, the X.509 certificate provides the public part, while the private key provides the private part.
Grafana supports two ways of specifying both the `certificate` and `private_key`. Without a suffix (e.g. `certificate=`), the configuration assumes you've supplied the base64-encoded file contents. However, if specified with the `_path` suffix (e.g. `certificate_path=`) Grafana will treat it as a file path and attempt to read the file from the file system.
### IdP Metadata
Expanding on the above, we'll also need the public part from our IdP for message verification. The SAML IdP metadata XML tells us where and how we should exchange the user information.
Currently, we support three ways of specifying the IdP metadata. Without a suffix `idp_metadata=` Grafana assumes base64-encoded XML file contents, with the `_path` suffix assumes a file path and attempts to read the file from the file system and with the `_url` suffix assumes an URL and attempts to load the metadata from the given location.
### Max Issue Delay
Prevention of SAML response replay attacks and internal clock skews between the SP (Grafana), and the IdP is covered. You can set a maximum amount of time between the IdP issuing a response and the SP (Grafana) processing it.
The configuration options is specified as a duration e.g. `max_issue_delay = 90s` or `max_issue_delay = 1h`
### Metadata valid duration
As an SP, our metadata is likely to expire at some point, e.g. due to a certificate rotation or change of location binding. Grafana allows you to specify for how long the metadata should be valid. Leveraging the standard's `validUntil` field, you can tell consumers until when your metadata is going to be valid. The duration is computed by adding the duration to the current time.
The configuration option is specified as a duration e.g. `metadata_valid_duration = 48h`
## Identity Provider (IdP) registration
For the SAML integration to work correctly, you need to make the IdP aware of the SP.
The integration provides two key endpoints as part of Grafana:
- The `/saml/metadata` endpoint. Which contains the SP's metadata. You can either download and upload it manually or make the IdP request it directly from the endpoint. Some providers name it Identifier or Entity ID.
- The `/saml/acs` endpoint. Which is intended to receive the ACS (Assertion Customer Service) callback. Some providers name it SSO URL or Reply URL.
## Assertion mapping
During the SAML SSO authentication flow, we receive the ACS (Assertion Customer Service) callback. The callback contains all the relevant information of the user under authentication embedded in the SAML response. Grafana parses the response to create (or update) the user within its internal database.
For Grafana to map the user information, it looks at the individual attributes within the assertion. You can think of these attributes as Key/Value pairs (although, they contain more information than that).
Grafana provides configuration options that let you modify which keys to look at for these values. The data we need to create the user in Grafana is Name, Login handle, and email.
An example is `assertion_attribute_name = "givenName"` where Grafana looks within the assertion for an attribute with a friendly name or name of `givenName`. Both, the friendly name (e.g. `givenName`) or the name (e.g. `urn:oid:2.5.4.42`) can be used interchangeably as the value for the configuration option.
## Troubleshooting
To troubleshoot and get more log info enable saml debug logging in the [main config file]({{< relref "../installation/configuration.md" >}}).
```bash
[log]
filters = saml.auth:debug
```
> SAML authentication integration is only available in Grafana Enterprise v6.3 or later. For more information, refer to [SAML authentication]({{< relref "../enterprise/saml.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise" >}}).

View File

@@ -10,38 +10,17 @@ parent = "authentication"
weight = 5
+++
# Team Sync
> Team Sync is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../enterprise" >}}).
{{< docs-imagebox img="/img/docs/enterprise/team_members_ldap.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" >}}
# Team sync
With the Team Sync it's possible to setup synchronization between your auth providers teams and teams in Grafana. This enables LDAP or GitHub OAuth users which are members
of certain teams/groups to automatically be added/removed as members to certain teams in Grafana. Currently the synchronization will only happen every
time a user logs in, unless LDAP is used together with active background synchronization that was added in Grafana 6.3.
{{< docs-imagebox img="/img/docs/enterprise/team_members_ldap.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" >}}
Grafana keeps track of all synchronized users in teams and you can see which users have been synchronized in the team members list, see `LDAP` label in screenshot.
This mechanism allows Grafana to remove an existing synchronized user from a team when its LDAP group membership (for example) changes. This mechanism also enables you to manually add
a user as member of a team and it will not be removed when the user signs in. This gives you flexibility to combine LDAP group memberships and Grafana team memberships.
This mechanism allows Grafana to remove an existing synchronized user from a team when its LDAP group membership (for example) changes. This mechanism also enables you to manually add a user as member of a team and it will not be removed when the user signs in. This gives you flexibility to combine LDAP group memberships and Grafana team memberships.
<div class="clearfix"></div>
### Enable synchronization for a team
{{< docs-imagebox img="/img/docs/enterprise/team_add_external_group.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" >}}
1. Navigate to Configuration / Teams.
2. Select a team.
3. Select the External group sync tab and click on the `Add group` button.
4. Insert the value of the group you want to sync with. This becomes what Grafana denominates as a `GroupID`.
- Using LDAP as an example, this is the LDAP distinguished name (DN) of LDAP group you want to synchronize with the team.
- Using Auth Proxy as an example, this is the value we receive as part of the custom `Groups` header.
5. Click on `Add group` button to save.
### Supported Providers
* [LDAP]({{< relref "enhanced_ldap.md#ldap-group-synchronization-for-teams" >}})
* [GitHub OAuth]({{< relref "github.md#team-sync-enterprise-only" >}})
* [Auth Proxy]({{< relref "auth-proxy.md#team-sync-enterprise-only">}})
> Team Sync is only available in Grafana Enterprise. For more information, refer to [Team sync]({{< relref "../enterprise/team-sync.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise" >}}).

View File

@@ -7,6 +7,3 @@ name = "Contribute"
identifier = "contribute"
weight = 20
+++
### Contribute info

View File

@@ -0,0 +1,48 @@
+++
title = "Developer resources"
description = "Resources for Grafana developers"
keywords = ["grafana", "documentation", "developers", "resources"]
type = "docs"
[menu.docs]
name = "Grafana resources"
identifier = "Developer resources"
weight = 30
+++
# Developer resources
This page lists resources for developers who want to contribute to the Grafana software ecosystem or build plugins for Grafana.
##
General resources
These resources are useful for all developers.
* [Contributing to Grafana](https://github.com/grafana/grafana/blob/master/CONTRIBUTING.md): Start here to learn how you can contribute your skills to make Grafana even better.
* [Developer guide](https://github.com/grafana/grafana/blob/master/contribute/developer-guide.md): A guide to help you get started developing Grafana software, includes instructions for how to configure Grafana for development.
* [Contributing to documentation](https://github.com/grafana/grafana/blob/master/contribute/documentation.md): A guide to help you contribute to Grafana documentation, includes links to beginner-friendly issues.
* [Architecture guides](https://github.com/grafana/grafana/tree/master/contribute/architecture): These guides explain Grafanas background architecture.
* [Create a pull request](https://github.com/grafana/grafana/blob/master/contribute/create-pull-request.md): A guide for new contributors about how to create your first Grafana pull request.
* [REST APIs](https://grafana.com/docs/grafana/latest/http_api/) allow you to interact programmatically with the Grafana backend.
## Best practices and style
Our [style guides](https://github.com/grafana/grafana/tree/master/contribute/style-guides) outline Grafana style for frontend, backend, documentation, and more, including best practices. Please read through them before you start editing or coding!
* [Backend style guide](https://github.com/grafana/grafana/blob/master/contribute/style-guides/backend.md) explains how we want to write Go code in the future.
* [Documentation style guide](https://github.com/grafana/grafana/blob/master/contribute/style-guides/documentation-style-guide.md) applies to all documentation created for Grafana products.
* [End to end test framework](https://github.com/grafana/grafana/blob/master/contribute/style-guides/e2e.md) provides guidance for Grafana e2e tests.
* [Frontend style guide](https://github.com/grafana/grafana/blob/master/contribute/style-guides/frontend.md) provides rules and guidance on developing in React for Grafana.
* [Redux framework](https://github.com/grafana/grafana/blob/master/contribute/style-guides/redux.md) explains how Grafana handles Redux boilerplate code.
* [Styling Grafana](https://github.com/grafana/grafana/blob/master/contribute/style-guides/styling.md) expands on styling React components with Emotion.
* [Theming Grafana](https://github.com/grafana/grafana/blob/master/contribute/style-guides/themes.md) explains how to use themes and ThemeContext in Grafana code.

View File

@@ -6,69 +6,73 @@ type = "docs"
[menu.docs]
name = "Grafana Enterprise"
identifier = "enterprise"
weight = 30
weight = 100
+++
# Grafana Enterprise
Grafana Enterprise is a commercial edition of Grafana that includes additional features not found in the open source
version.
Grafana Enterprise is a commercial edition of Grafana that includes additional features not found in the open source version.
Building on everything you already know and love about Grafana, Grafana Enterprise adds enterprise data sources,
advanced authentication options, more permission controls, 24x7x365 support, and training from the core Grafana team.
Building on everything you already know and love about Grafana, Grafana Enterprise adds enterprise data sources, advanced authentication options, more permission controls, 24x7x365 support, and training from the core Grafana team.
Grafana Enterprise includes all of the features found in the open source edition and more.
___
[Learn more about Grafana Enterprise.](https://grafana.com/enterprise)
### Enhanced LDAP Integration
## Enhanced security features
With Grafana Enterprise you can set up synchronization between LDAP Groups and Teams. [Learn More]({{< relref "../auth/enhanced_ldap.md" >}}).
### SAML Authentication
Enables your Grafana Enterprise users to authenticate with SAML. [Learn More]({{< relref "../auth/saml.md" >}}).
### Team Sync
Team Sync allows you to setup synchronization between teams in Grafana and teams in your auth provider so that your users automatically end up in the right team. [Learn More]({{< relref "../auth/team-sync.md" >}}).
Supported auth providers:
* [LDAP]({{< relref "../auth/enhanced_ldap.md#ldap-group-synchronization-for-teams" >}})
* [GitHub OAuth]({{< relref "../auth/github.md#team-sync-enterprise-only" >}})
* [Auth Proxy]({{< relref "../auth/auth-proxy.md#team-sync-enterprise-only">}})
Grafana Enterprise includes integrations with more ways to authenticate your users and enhanced authorization capabilities.
### Data source permissions
Data source permissions allow you to restrict query access to only specific Teams and Users. [Learn More]({{< relref "../permissions/datasource_permissions.md" >}}).
[Data source permissions]({{< relref "datasource_permissions.md" >}}) allow you to restrict query access to only specific teams and users.
### Reporting
### Enhanced LDAP integration
Reporting makes it possible to take any dashboard, generate a PDF report, and set up a schedule to have it delivered. [Learn More]({{< relref "../features/reporting.md" >}}).
With Grafana Enterprise [enhanced LDAP]({{< relref "enhanced_ldap.md" >}}), you can set up synchronization between LDAP groups and Grafana teams.
### Enterprise Plugins
### SAML authentication
With a Grafana Enterprise license you will get access to enterprise plugins, including:
[SAML authentication]({{< relref "saml.md" >}}) enables your Grafana Enterprise users to authenticate with SAML.
* [Splunk](https://grafana.com/plugins/grafana-splunk-datasource)
### Team sync
[Team sync]({{< relref "team-sync.md" >}}) allows you to set up synchronization between teams in Grafana and teams in your auth provider so that your users automatically end up in the right team.
Supported auth providers:
* [Auth Proxy]({{< relref "../auth/auth-proxy.md#team-sync-enterprise-only">}})
* [GitHub OAuth]({{< relref "../auth/github.md#team-sync-enterprise-only" >}})
* [GitLab OAuth]({{< relref "../auth/gitlab.md#team-sync-enterprise-only" >}})
* [LDAP]({{< relref "enhanced_ldap.md#ldap-group-synchronization-for-teams" >}})
## Reporting
[Reporting]({{< relref "reporting.md" >}}) allows you to take any dashboard, generate a PDF report, and set up a schedule to have it emailed to whoever you choose.
## White labeling
[White labeling]({{< relref "white-labeling.md" >}}) allows you to replace the Grafana brand and logo with your own corporate brand and logo. You can also change footer links to point to your custom resources.
## Enterprise plugins
With a Grafana Enterprise license, you get access to premium plugins, including:
* [Amazon Timestream](https://grafana.com/plugins/grafana-timestream-datasource)
* [AppDynamics](https://grafana.com/plugins/dlopes7-appdynamics-datasource)
* [DataDog](https://grafana.com/plugins/grafana-datadog-datasource)
* [Dynatrace](https://grafana.com/plugins/grafana-dynatrace-datasource)
* [New Relic](https://grafana.com/plugins/grafana-newrelic-datasource)
* [Amazon Timestream](https://grafana.com/plugins/grafana-timestream-datasource)
* [Oracle Database](https://grafana.com/plugins/grafana-oracle-datasource)
* [Splunk](https://grafana.com/plugins/grafana-splunk-datasource)
## Try Grafana Enterprise
You can learn more about Grafana Enterprise [here](https://grafana.com/enterprise). To purchase or obtain a trial license contact
the Grafana Labs [Sales Team](https://grafana.com/contact?about=support&topic=Grafana%20Enterprise).
To purchase or obtain a trial license contact the Grafana Labs [Sales Team](https://grafana.com/contact?about=support&topic=Grafana%20Enterprise).
## License file management
To download your Grafana Enterprise license log in to your [Grafana.com](https://grafana.com) account and go to your **Org
Profile**. In the side menu there is a section for Grafana Enterprise licenses. At the bottom of the license
details page there is **Download Token** link that will download the *license.jwt* file containing your license.
To download your Grafana Enterprise license log in to your [Grafana.com](https://grafana.com) account and go to your **Org Profile**. In the side menu there is a section for Grafana Enterprise licenses. At the bottom of the license details page there is **Download Token** link that will download the *license.jwt* file containing your license.
Place the *license.jwt* file in Grafana's data folder. This is usually located at `/var/lib/grafana/data` on Linux systems.
@@ -79,7 +83,4 @@ You can also configure a custom location for the license file via the ini settin
license_path = /company/secrets/license.jwt
```
This setting can also be set via ENV variable which is useful if you're running Grafana via docker and have a custom
volume where you have placed the license file. In this case set the ENV variable `GF_ENTERPRISE_LICENSE_PATH` to point
to the location of your license file.
This setting can also be set with an environment variable, which is useful if you're running Grafana with Docker and have a custom volume where you have placed the license file. In this case, set the environment variable `GF_ENTERPRISE_LICENSE_PATH` to point to the location of your license file.

View File

@@ -0,0 +1,66 @@
+++
title = "Data source permissions"
description = "Grafana Datasource Permissions Guide "
keywords = ["grafana", "configuration", "documentation", "datasource", "permissions", "users", "teams", "enterprise"]
type = "docs"
[menu.docs]
name = "Datasource"
identifier = "datasource-permissions"
parent = "enterprise"
weight = 200
+++
# Data source permissions
Data source permissions allow you to restrict access for users to query a data source. For each data source there is a permission page that allows you to enable permissions and restrict query permissions to specific **Users** and **Teams**.
> Only available in Grafana Enterprise.
## Enable data source permissions
{{< docs-imagebox img="/img/docs/enterprise/datasource_permissions_enable_still.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" animated-gif="/img/docs/enterprise/datasource_permissions_enable.gif" >}}
By default, data sources in an organization can be queried by any user in that organization. For example, a user with the `Viewer` role can issue any possible query to a data source, not just
queries that exist on dashboards they have access to.
When permissions are enabled for a data source in an organization, you restrict admin and query access for that data source to [admin users]({{< relref "../permissions/organization_roles/#admin-role" >}}) in that organization.
**Enable permissions for a data source:**
1. Navigate to **Configuration > Data Sources**.
2. Select the data source you want to enable permissions for.
3. On the Permissions tab, click **Enable**.
<div class="clearfix"></div>
## Allow users and teams to query a data source
{{< docs-imagebox img="/img/docs/enterprise/datasource_permissions_add_still.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" animated-gif="/img/docs/enterprise/datasource_permissions_add.gif" >}}
After you have enabled permissions for a data source you can assign query permissions to users and teams which will allow access to query the data source.
**Assign query permission to users and teams:**
1. Navigate to **Configuration > Data Sources**.
2. Select the data source you want to assign query permissions for.
3. On the Permissions tab, click **Add Permission**.
4. Select **Team** or **User**.
5. Select the entity you want to allow query access and then click **Save**.
<div class="clearfix"></div>
## Disable data source permissions
{{< docs-imagebox img="/img/docs/enterprise/datasource_permissions_disable_still.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" animated-gif="/img/docs/enterprise/datasource_permissions_disable.gif" >}}
If you have enabled permissions for a data source and want to return data source permissions to the default, then you can disable permissions with a click of a button.
Note that *all* existing permissions created for the data source will be deleted.
**Disable permissions for a data source:**
1. Navigate to **Configuration > Data Sources**.
2. Select the data source you want to disable permissions for.
3. On the Permissions tab, click **Disable Permissions**.
<div class="clearfix"></div>

View File

@@ -0,0 +1,63 @@
+++
title = "Enhanced LDAP Integration"
description = "Grafana Enhanced LDAP Integration Guide "
keywords = ["grafana", "configuration", "documentation", "ldap", "active directory", "enterprise"]
type = "docs"
[menu.docs]
name = "Enhanced LDAP"
identifier = "enhanced-ldap"
parent = "enterprise"
weight = 300
+++
# Enhanced LDAP integration
The enhanced LDAP integration adds additional functionality on top of the [LDAP integration]({{< relref "../auth/ldap.md" >}}) available in the open source edition of Grafana.
> Enhanced LDAP integration is only available in Grafana Enterprise.
## LDAP group synchronization for teams
{{< docs-imagebox img="/img/docs/enterprise/team_members_ldap.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" >}}
With enhanced LDAP integration, you can set up synchronization between LDAP groups and teams. This enables LDAP users that are members
of certain LDAP groups to automatically be added or removed as members to certain teams in Grafana.
Grafana keeps track of all synchronized users in teams, and you can see which users have been synchronized from LDAP in the team members list, see `LDAP` label in screenshot.
This mechanism allows Grafana to remove an existing synchronized user from a team when its LDAP group membership changes. This mechanism also allows you to manually add
a user as member of a team, and it will not be removed when the user signs in. This gives you flexibility to combine LDAP group memberships and Grafana team memberships.
[Learn more about team sync.]({{< relref "team-sync.md">}})
<div class="clearfix"></div>
## Active LDAP synchronization
In the open source version of Grafana, user data from LDAP is synchronized only during the login process when authenticating using LDAP.
With active LDAP synchronization, available in Grafana Enterprise v6.3+, you can configure Grafana to actively sync users with LDAP servers in the background. Only users that have logged into Grafana at least once are synchronized.
Users with updated role and team membership will need to refresh the page to get access to the new features.
Removed users are automatically logged out and their account disabled. These accounts are displayed in the Server Admin > Users page with a `disabled` label. Disabled users keep their custom permissions on dashboards, folders, and data sources, so if you add them back in your LDAP database, they have access to the application with the same custom permissions as before.
```bash
[auth.ldap]
...
# You can use the Cron syntax or several predefined schedulers -
# @yearly (or @annually) | Run once a year, midnight, Jan. 1st | 0 0 0 1 1 *
# @monthly | Run once a month, midnight, first of month | 0 0 0 1 * *
# @weekly | Run once a week, midnight between Sat/Sun | 0 0 0 * * 0
# @daily (or @midnight) | Run once a day, midnight | 0 0 0 * * *
# @hourly | Run once an hour, beginning of hour | 0 0 * * * *
sync_cron = "0 0 1 * * *" # This is default value (At 1 am every day)
# This cron expression format uses 6 space-separated fields (including seconds), for example
# sync_cron = "* */10 * * * *"
# This will run the LDAP Synchronization every 10th minute, which is also the minimal interval between the Grafana sync times i.e. you cannot set it for every 9th minute
# You can also disable active LDAP synchronization
active_sync_enabled = true # enabled by default
```
Single bind configuration (as in the [Single bind example]({{< relref "../auth/ldap.md#single-bind-example">}})) is not supported with active LDAP synchronization because Grafana needs user information to perform LDAP searches.

View File

@@ -0,0 +1,54 @@
+++
title = "License Expiration"
description = ""
keywords = ["grafana", "licensing"]
type = "docs"
[menu.docs]
parent = "enterprise"
weight = 8
+++
# License expiration
If your license has expired most of Grafana keeps working as normal. Some enterprise functionality stops or runs with reduced functionality and Grafana displays a banner informing the users that Grafana is running on an expired license. Your Grafana admin needs to upload a new license file to restore full functionality.
> Replace your license as soon as possible. Running Grafana Enterprise with an expired license is unsupported and can lead to unexpected consequences.
## Update your license
1. Locate your current `license.jwt` file. In a standard installation it is stored inside Grafana's data directory, which on a typical Linux installation is in `/var/lib/grafana/data`. This location might be overridden in the ini file [Configuration](https://grafana.com/docs/grafana/latest/installation/configuration/)
```
[enterprise]
license_path = /path/to/your/license.jwt
```
The configuration file's location may also be overridden by the `GF_ENTERPRISE_LICENSE_PATH` environment variable.
2. Log in to your [Grafana.com](https://grafana.com/login) user and make sure you're in the correct organization in the dropdown at the top of the page.
3. Under the **Grafana Enterprise** section in the menu bar to the left, choose licenses and download the currently valid license with which you want to run Grafana. If you cannot see a valid license on Grafana.com, please contact your account manager at Grafana Labs to renew your subscription.
4. Replace the current `license.jwt`-file with the one you've just downloaded.
5. Restart Grafana.
## Data source permissions
Your current data source permissions will keep working as expected, but you'll be unable to add new data source permissions until the license has been renewed.
## LDAP authentication
* LDAP synchronization is not affected by an expired license.
* Enhanced LDAP debugging is unavailable.
## SAML authentication
SAML authentication is not affected by an expired license.
## Reporting
* You're unable to configure new reports or generate previews.
* Scheduled reports are not generated or sent.
## Enterprise plugins
Enterprise plugins might stop working.
## White labeling
The white labeling feature is turned off, meaning that any white labeling options will not have any effect.

View File

@@ -0,0 +1,63 @@
+++
title = "Reporting"
description = ""
keywords = ["grafana", "reporting"]
type = "docs"
aliases = ["/docs/grafana/latest/administration/reports"]
[menu.docs]
parent = "enterprise"
weight = 400
+++
# Reporting
Reporting allows you to automatically generate PDFs from any of your dashboards and have Grafana email them to interested parties on a schedule.
> Only available in Grafana Enterprise v6.4+.
{{< docs-imagebox img="/img/docs/enterprise/reports_list.png" max-width="500px" class="docs-image--no-shadow" >}}
Any changes you make to a dashboard used in a report are reflected the next time the report is sent. For example, if you change the time range in the dashboard, then the time range in the report changes as well.
## Requirements
* SMTP must be configured for reports to be sent. Refer to [SMTP]({{< relref "../installation/configuration.md#smtp" >}}) in [Configuration]({{< relref "../installation/configuration.md" >}}) for more information.
* The Image Renderer plugin must be installed or the remote rendering service must be set up. Refer to [Image rendering]({{< relref "../administration/image_rendering.md" >}}) for more information.
## Create or update a report
Currently only Organization Admins can create reports.
1. Click on the reports icon in the side menu. The Reports tab allow you to view, create, and update your reports.
1. Enter report information. All fields are required unless otherwise indicated.
* **Name -** Name of the report as you want it to appear in the Reports list.
* **Choose dashboard -** Select the dashboard to generate the report from.
* **Recipients -** Enter the emails of the people or teams that you want to receive the report.
* **Reply to -** (optional) The address that will appear in the **Reply to** field of the email.
* **Custom message -** (optional) Message body in the email with the report.
1. **Preview** the report to make sure it appears as you expect. Update if necessary.
1. Enter scheduling information. Options vary depending on the frequency you select.
1. **Save** the report.
{{< docs-imagebox img="/img/docs/enterprise/reports_create_new.png" max-width="500px" class="docs-image--no-shadow" >}}
## Rendering configuration
When Grafana generates a report, it will render each panel separately and then put them together in a PDF file. You can configure the per-panel rendering request timeout and the maximum number of concurrent calls to the rendering service. These options are available in the [configuration]({{< relref "../installation/configuration.md">}}) file.
```ini
[reporting]
# Set timeout for each panel rendering request
rendering_timeout = 10s
# Set maximum number of concurrent calls to the rendering service
concurrent_render_limit = 10
```
## Troubleshoot reporting
To troubleshoot and get more log information, enable debug logging in the configuration file. Refer to [Configuration]({{< relref "../installation/configuration.md#filters" >}}) for more information.
```bash
[log]
filters = saml.auth:debug
```

View File

@@ -0,0 +1,134 @@
+++
title = "SAML Authentication"
description = "Grafana SAML Authentication"
keywords = ["grafana", "saml", "documentation", "saml-auth"]
aliases = ["/docs/grafana/latest/auth/saml/"]
type = "docs"
[menu.docs]
name = "SAML"
parent = "authentication"
weight = 500
+++
# SAML authentication
SAML authentication integration allows your Grafana users to log in by using an external SAML Identity Provider (IdP). To enable this, Grafana becomes a Service Provider (SP) in the authentication flow, interacting with the IdP to exchange user information.
The SAML single-sign-on (SSO) standard is varied and flexible. Our implementation contains the subset of features needed to provide a smooth authentication experience into Grafana.
> Only available in Grafana Enterprise v6.3+. If you encounter any problems with our implementation, please don't hesitate to contact us.
## Supported SAML
Grafana supports the following SAML integrations.
* From the Service Provider (SP) to the Identity Provider (IdP):
- `HTTP-POST` binding
- `HTTP-Redirect` binding
* From the Identity Provider (IdP) to the Service Provider (SP):
- `HTTP-POST` binding
In terms of security:
* Grafana supports signed and encrypted assertions.
* Grafana does not support signed or encrypted requests.
In terms of initiation:
* Grafana supports SP-initiated requests.
* Grafana does not support IdP-initiated request.
## Set up SAML authentication
The table below describes all SAML configuration options. Continue reading below for details on specific options. Like any other Grafana configuration, you can apply these options as [environment variables]({{< relref "../installation/configuration.md#configure-with-environment-variables" >}}).
| Setting | Required | Description | Default |
| ----------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------- | ------------- |
| `enabled` | No | Whether SAML authentication is allowed | `false` |
| `certificate` or `certificate_path` | Yes | Base64-encoded string or Path for the SP X.509 certificate | |
| `private_key` or `private_key_path` | Yes | Base64-encoded string or Path for the SP private key | |
| `idp_metadata`, `idp_metadata_path`, or `idp_metadata_url` | Yes | Base64-encoded string, Path or URL for the IdP SAML metadata XML | |
| `max_issue_delay` | No | Duration, since the IdP issued a response and the SP is allowed to process it | `90s` |
| `metadata_valid_duration` | No | Duration, for how long the SP metadata is valid | `48h` |
| `assertion_attribute_name` | No | Friendly name or name of the attribute within the SAML assertion to use as the user name | `displayName` |
| `assertion_attribute_login` | No | Friendly name or name of the attribute within the SAML assertion to use as the user login handle | `mail` |
| `assertion_attribute_email` | No | Friendly name or name of the attribute within the SAML assertion to use as the user email | `mail` |
### Enable SAML authentication
To use the SAML integration, in the `auth.saml` section of in the Grafana custom configuration file, set `enabled` to `true`.
Refer to [Configuration]({{< relref "../installation/configuration.md" >}}) for more information about configuring Grafana.
### Certificate and private key
The SAML SSO standard uses asymmetric encryption to exchange information between the SP (Grafana) and the IdP. To perform such encryption, you need a public part and a private part. In this case, the X.509 certificate provides the public part, while the private key provides the private part.
Grafana supports two ways of specifying both the `certificate` and `private_key`.
* Without a suffix (`certificate` or `private_key`), the configuration assumes you've supplied the base64-encoded file contents.
* With the `_path` suffix (`certificate_path` or `private_key_path`), then Grafana treats the value entered as a file path and attempt to read the file from the file system.
You can only use one form of each configuration option. Using multiple forms, such as both `certificate` and `certificate_path`, results in an error.
### IdP metadata
You also need to define the public part of the IdP for message verification. The SAML IdP metadata XML defines where and how Grafana exchanges user information.
Grafana supports three ways of specifying the IdP metadata.
* Without a suffix `idp_metadata`, Grafana assumes base64-encoded XML file contents.
* With the `_path` suffix, Grafana assumes a file path and attempts to read the file from the file system.
* With the `_url` suffix, Grafana assumes a URL and attempts to load the metadata from the given location.
### Maximum issue delay
Prevents SAML response replay attacks and internal clock skews between the SP (Grafana) and the IdP. You can set a maximum amount of time between the IdP issuing a response and the SP (Grafana) processing it.
The configuration options is specified as a duration, such as `max_issue_delay = 90s` or `max_issue_delay = 1h`.
### Metadata valid duration
SP metadata is likely to expire at some point, perhaps due to a certificate rotation or change of location binding. Grafana allows you to specify for how long the metadata should be valid. Leveraging the `validUntil` field, you can tell consumers until when your metadata is going to be valid. The duration is computed by adding the duration to the current time.
The configuration option is specified as a duration, such as `metadata_valid_duration = 48h`.
### Identity provider (IdP) registration
For the SAML integration to work correctly, you need to make the IdP aware of the SP.
The integration provides two key endpoints as part of Grafana:
* The `/saml/metadata` endpoint, which contains the SP metadata. You can either download and upload it manually, or youmake the IdP request it directly from the endpoint. Some providers name it Identifier or Entity ID.
* The `/saml/acs` endpoint, which is intended to receive the ACS (Assertion Customer Service) callback. Some providers name it SSO URL or Reply URL.
### Assertion mapping
During the SAML SSO authentication flow, Grafana receives the ACS callback. The callback contains all the relevant information of the user under authentication embedded in the SAML response. Grafana parses the response to create (or update) the user within its internal database.
For Grafana to map the user information, it looks at the individual attributes within the assertion. You can think of these attributes as Key/Value pairs (although, they contain more information than that).
Grafana provides configuration options that let you modify which keys to look at for these values. The data we need to create the user in Grafana is Name, Login handle, and email.
An example is `assertion_attribute_name = "givenName"` where Grafana looks within the assertion for an attribute with a friendly name or name of `givenName`. Both, the friendly name (e.g. `givenName`) or the name (e.g. `urn:oid:2.5.4.42`) can be used interchangeably as the value for the configuration option.
## Example SAML configuration
```bash
[auth.saml]
enabled = true
certificate_path = "/path/to/certificate.cert"
private_key_path = "/path/to/private_key.pem"
metadata_path = "/my/metadata.xml"
max_issue_delay = 90s
metadata_valid_duration = 48h
assertion_attribute_name = displayName
assertion_attribute_login = mail
assertion_attribute_email = mail
```
## Troubleshoot SAML authentication
To troubleshoot and get more log information, enable SAML debug logging in the configuration file. Refer to [Configuration]({{< relref "../installation/configuration.md#filters" >}}) for more information.
```bash
[log]
filters = saml.auth:debug
```

View File

@@ -0,0 +1,51 @@
+++
title = "Team sync"
description = "Grafana Team Sync"
keywords = ["grafana", "auth", "documentation"]
aliases = ["/docs/grafana/latest/auth/saml/"]
type = "docs"
[menu.docs]
name = "Team sync"
parent = "enterprise"
weight = 600
+++
# Team sync
{{< docs-imagebox img="/img/docs/enterprise/team_members_ldap.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" >}}
Team sync lets you set up synchronization between your auth providers teams and teams in Grafana. This enables LDAP or GitHub OAuth users who are members
of certain teams or groups to automatically be added or removed as members of certain teams in Grafana.
> Only available in Grafana Enterprise.
Grafana keeps track of all synchronized users in teams, and you can see which users have been synchronized in the team members list, see `LDAP` label in screenshot.
This mechanism allows Grafana to remove an existing synchronized user from a team when its group membership changes. This mechanism also enables you to manually add a user as member of a team, and it will not be removed when the user signs in. This gives you flexibility to combine LDAP group memberships and Grafana team memberships.
> Currently the synchronization only happens when a user logs in, unless LDAP is used with the active background synchronization that was added in Grafana 6.3.
<div class="clearfix"></div>
## Synchronize a Grafana team with an external group
If you have already grouped some users into a team, then you can synchronize that team with an external group.
{{< docs-imagebox img="/img/docs/enterprise/team_add_external_group.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" >}}
1. In Grafana, navigate to **Configuration > Teams**.
1. Select a team.
1. On the External group sync tab, and click **Add group**.
1. Insert the value of the group you want to sync with. This becomes the Grafana `GroupID`.
Examples:
- For LDAP, this is the LDAP distinguished name (DN) of LDAP group you want to synchronize with the team.
- For Auth Proxy, this is the value we receive as part of the custom `Groups` header.
1. Click `Add group` to save.
## Supported providers
* [Auth Proxy]({{< relref "../auth/auth-proxy.md#team-sync-enterprise-only">}})
* [GitHub OAuth]({{< relref "../auth/github.md#team-sync-enterprise-only" >}})
* [GitLab OAuth]({{< relref "../auth/gitlab.md#team-sync-enterprise-only" >}})
* [LDAP]({{< relref "enhanced_ldap.md#ldap-group-synchronization-for-teams" >}})

View File

@@ -0,0 +1,77 @@
+++
title = "White-labeling"
description = "White-labeling"
keywords = ["grafana", "white-labeling", "enterprise"]
aliases = ["/docs/grafana/latest/enterprise/white-labeling/"]
type = "docs"
[menu.docs]
name = "White-labeling"
parent = "enterprise"
weight = 700
+++
# White labeling
White labeling allows you to replace the Grafana brand and logo with your own corporate brand and logo.
> Only available in Grafana Enterprise v6.6+.
Grafana Enterprise has white labeling options in the `grafana.ini` file. As with all configuration options, you can also be set set them with environment variables.
You can change the following elements:
- Application title
- Login background
- Login logo
- Side menu top logo
- Footer and help menu links
- Fav icon (shown in browser tab)
> You will have to host your logo and other images used by the white labeling feature separately. Make sure Grafana can access the URL where the assets are stored.
{{< docs-imagebox img="/img/docs/v66/whitelabeling_1.png" max-width="800px" caption="White labeling example" >}}
The configuration file in Grafana Enterprise contains the following options. Each option is defined in the file. For more information about configuring Grafana, refer to [Configuration]({{< relref "../installation/configuration.md">}}).
```ini
# Enterprise only
[white_labeling]
# Set to your company name to override application title
;app_title =
# Set to complete URL to override login logo
;login_logo =
# Set to complete css background expression to override login background
# example: login_background = url(http://www.bhmpics.com/wallpapers/starfield-1920x1080.jpg)
;login_background =
# Set to complete URL to override menu logo
;menu_logo =
# Set to complete URL to override fav icon (icon shown in browser tab)
;fav_icon =
# Set to complete URL to override apple/ios icon
;apple_touch_icon =
```
Below is an example for how to replace the default footer and help links with two custom links.
```ini
footer_links = support guides
footer_links_support_text = Support
footer_links_support_url = http://your.support.site
footer_links_guides_text = Guides
footer_links_guides_url = http://your.guides.site
```
Here is the same example using environment variables instead of the custom.ini or grafana.ini file.
```
GF_WHITE_LABELING_FOOTER_LINKS=support guides
GF_WHITE_LABELING_FOOTER_LINKS_SUPPORT_TEXT=Support
GF_WHITE_LABELING_FOOTER_LINKS_SUPPORT_URL=http://your.support.site
GF_WHITE_LABELING_FOOTER_LINKS_GUIDES_TEXT=Guides
GF_WHITE_LABELING_FOOTER_LINKS_GUIDES_URL=http://your.guides.site
```

View File

@@ -1,6 +1,6 @@
+++
title = "Beginner Guides"
description = "Beginner guides"
title = "Features"
description = "List of features"
type = "docs"
[menu.docs]
name = "Features"

View File

@@ -0,0 +1,64 @@
+++
title = "Dashboard overview"
type = "docs"
[menu.docs]
identifier = "dashboards"
parent = "features"
weight = 1
+++
# Dashboard overview
A *dashboard* is a set of one or more panels organized and arranged into one or more rows. Grafana ships with a variety of Panels. Grafana makes it easy to construct the right queries, and customize the display properties so that you can create the perfect dashboard for your need. Each panel can interact with data from any configured Grafana Data Source (currently Graphite, Prometheus, Elasticsearch, InfluxDB, OpenTSDB, MySQL, PostgreSQL, Microsoft SQL Server and AWS Cloudwatch).
## Dashboard UI
<img src="/img/docs/v50/dashboard_annotated.png" class="no-shadow" width="700px">
1. Zoom out time range
2. Time picker dropdown. Here you can access relative time range options, auto refresh options and set custom absolute time ranges.
3. Manual refresh button. Will cause all panels to refresh (fetch new data).
4. Dashboard panel. You edit panels by clicking the panel title.
5. Graph legend. You can change series colors, y-axis and series visibility directly from the legend.
## Dashboard header
Click the new Dashboard link on the right side of the Dashboard picker. You now have a blank Dashboard.
<img class="no-shadow" src="/img/docs/v50/top_nav_annotated.png" width="580px">
The image above shows you the top header for a Dashboard.
1. Side menubar toggle: This toggles the side menu, allowing you to focus on the data presented in the dashboard. The side menu provides access to features unrelated to a Dashboard such as Users, Organizations, and Data Sources.
2. Dashboard dropdown: This dropdown shows you which Dashboard you are currently viewing, and allows you to easily switch to a new Dashboard. From here you can also create a new Dashboard or folder, Import existing Dashboards, and manage Dashboard playlists.
3. Add Panel: Adds a new panel to the current Dashboard
4. Star Dashboard: Star (or unstar) the current Dashboard. Starred Dashboards will show up on your own Home Dashboard by default, and are a convenient way to mark Dashboards that you're interested in.
5. Share Dashboard: Share the current dashboard by creating a link or create a static Snapshot of it. Make sure the Dashboard is saved before sharing.
6. Save dashboard: The current Dashboard will be saved with the current Dashboard name.
7. Settings: Manage Dashboard settings and features such as Templating and Annotations.
## Manage dashboards
The time period for the dashboard can be controlled by the [Time range controls]({{< relref "../../reference/timerange.md" >}}) in the upper right of the dashboard.
Dashboards can use [templating]({{< relref "../../reference/templating.md" >}}) to make them more dynamic and interactive.
Dashboards can use [annotations]({{< relref "../../reference/annotations.md" >}}) to display event data across panels. This can help correlate the time series data in the panel with other events.
Dashboards can be [shared]({{< relref "../../reference/share_dashboard.md" >}}) easily in a variety of ways.
Dashboards can be tagged, and the dashboard picker provides quick, searchable access to all dashboards in a particular organization.
## Rows
A *row* is a logical divider within a dashboard. It is used to group panels together.
Rows are always 12 “units” wide. These units are automatically scaled dependent on the horizontal resolution of your browser. You can control the relative width of panels within a row by setting their specific width.
We use a unit abstraction so that Grafana looks great on all screens sizes.
> Note: With MaxDataPoint functionality, Grafana can show you the perfect number of data points, regardless of resolution or time range.
Collapse a row by clicking on the row title. If you save a dashboard with a row collapsed, then it saves in that state and does not load those graphs until you expand the row.
Use the [repeating rows]({{< relref "../../reference/templating.md#repeating-rows" >}}) functionality to dynamically create or remove entire rows, which can be filled with panels, based on the template variables selected.

View File

@@ -0,0 +1,29 @@
+++
title = "Add a data source"
type = "docs"
[menu.docs]
name = "Add a data source"
identifier = "add_data_source"
parent = "features"
weight = 2
+++
# Add a data source
Before you create your first dashboard, you need to add your data source. Following are the list of instructions to create one.
1. 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. Click on **Configuration** > **Data Sources** in the side menu and you'll be taken to the data sources page
where you can add add and edit data sources. You can also click the cog.
{{< docs-imagebox img="/img/docs/v52/sidemenu-datasource.png" max-width="250px" class="docs-image--no-shadow">}}
1. 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">}}
1. In the **Name** box, enter a name for this data source.
{{< docs-imagebox img="/img/docs/v52/datasource-settings.png" max-width="700px" class="docs-image--no-shadow">}}
1. In the **Type**, select the type of data source. See [Supported data sources]({{< relref "../../features/datasources/#supported-data-sources/" >}}) for more information and how to configure your data source.
1. Click **Save & Test**.

View File

@@ -274,6 +274,45 @@ There are also some Grafana variables that can be used in Azure Log Analytics qu
- `$__interval` - Grafana calculates the minimum time grain that can be used to group by time in queries. More details on how it works [here]({{< relref "../../reference/templating.md#interval-variables" >}}). It returns a time grain like `5m` or `1h` that can be used in the bin function. E.g. `summarize count() by bin(TimeGenerated, $__interval)`
### Templating with Variables for Azure Log Analytics
Any Log Analytics query that returns a list of values can be used in the `Query` field in the Variable edit view. There is also one Grafana function for Log Analytics that returns a list of workspaces.
Refer to the [Variables]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different
types of template variables.
| Name | Description |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| _workspaces()_ | Returns a list of workspaces for the default subscription. |
| _workspaces(12345678-aaaa-bbbb-cccc-123456789aaa)_ | Returns a list of workspaces for the specified subscription (the parameter can be quoted or unquoted). |
Example variable queries:
<!-- prettier-ignore-start -->
| Query | Description |
| --------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| _subscriptions()_ | Returns a list of Azure subscriptions |
| _workspaces()_ | Returns a list of workspaces for default subscription |
| _workspaces("12345678-aaaa-bbbb-cccc-123456789aaa")_ | Returns a list of workspaces for a specified subscription |
| _workspaces("$subscription")_ | With template variable for the subscription parameter |
| _workspace("myWorkspace").Heartbeat \| distinct Computer_ | Returns a list of Virtual Machines |
| _workspace("$workspace").Heartbeat \| distinct Computer_ | Returns a list of Virtual Machines with template variable |
| _workspace("$workspace").Perf \| distinct ObjectName_ | Returns a list of objects from the Perf table |
| _workspace("$workspace").Perf \| where ObjectName == "$object" \| distinct CounterName_ | Returns a list of metric names from the Perf table |
<!-- prettier-ignore-end -->
Example of a time series query using variables:
```
Perf
| where ObjectName == "$object" and CounterName == "$metric"
| where TimeGenerated >= $__timeFrom() and TimeGenerated <= $__timeTo()
| where $__contains(Computer, $computer)
| summarize avg(CounterValue) by bin(TimeGenerated, $__interval), Computer
| order by TimeGenerated asc
```
### Azure Log Analytics Alerting
Not implemented yet.

View File

@@ -146,6 +146,12 @@ As an example, if you want to apply arithmetic operations on a metric, you can d
Please note that in the case you use the expression field to reference another query, like `queryA * 2`, it will not be possible to create an alert rule based on that query.
### Period
A period is the length of time associated with a specific Amazon CloudWatch statistic. Periods are defined in numbers of seconds, and valid values for period are 1, 5, 10, 30, or any multiple of 60.
If the period field is left blank or set to `auto`, then it calculates automatically based on the time range. The formula used is `time range in seconds / 2000`, and then it snaps to the next higher value in an array of predefined periods `[60, 300, 900, 3600, 21600, 86400]`. By clicking `Show Query Preview` in the query editor, you can see what period Grafana used.
### Deep linking from Grafana panels to the CloudWatch console
> Only available in Grafana v6.5+.

View File

@@ -0,0 +1,22 @@
+++
title = "Data sources overview"
description = "Overview of data sources in Grafana"
keywords = ["grafana", "data sources"]
type = "docs"
[menu.docs]
name = "Data sources overview"
parent = "datasources"
weight = 1
+++
# Data sources
Grafana can visualize, explore, and alert on data from many different databases and cloud services. Each database or service type is accessed from a *data source*. Before you can create visualizations in Grafana, you must [add a data source]({{< relref "add-a-data-source.md" >}}).
Each data source has a specific query editor that is customized for the features and capabilities that the particular data source exposes. The query language and capabilities of each data source are obviously very different. You can combine data from multiple data sources into a single dashboard, but each panel is connected to a specific data source that belongs to a particular organization.
Use the query editor to build one or more queries in your time series database. The panel instantly updates, allowing you to effectively explore your data in real time and build a perfect query for that particular panel.
You can use [template variables]({{< relref "../../reference/templating.md" >}}) in the query editor within the queries themselves. This provides a powerful way to explore data dynamically based on the templating variables selected on the dashboard.
Grafana allows you to reference queries in the query editor by the row that theyre on. If you add a second query to graph, you can reference the first query by typing in #A. This provides an easy and convenient way to build compound queries.

View File

@@ -215,7 +215,7 @@ For InfluxDB, you need to enter a query like the one in the example above. The `
## Configure the data source with provisioning
You can now configure data sources using config files with Grafana's provisioning system. You can read more about how it works and all the settings you can set for data sources on the [provisioning docs page](/administration/provisioning/#datasources).
You can now configure data sources using config files with Grafana's provisioning system. You can read more about how it works and all the settings you can set for data sources on the [provisioning docs page]({{< relref "../../administration/provisioning/#datasources" >}}).
Here are some provisioning examples for this data source.

View File

@@ -111,7 +111,7 @@ Query: query_result(topk(5, sum(rate(http_requests_total[$__range])) by (instanc
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`:
Populate a variable with the instances having a certain state over the time range shown in the dashboard, using `$__range_s`:
```
Query: query_result(max_over_time(<metric>[${__range_s}s]) != <state>)

View File

@@ -131,6 +131,12 @@ It is also possible to choose fixed time intervals to group by, like `1h` or `1d
Group by resource or metric labels to reduce the number of time series and to aggregate the results by a group by. E.g. Group by instance_name to see an aggregated metric for a Compute instance.
#### Metadata labels
Resource metadata labels contains information to uniquely identify a resource in Google cloud. Metadata labels are only returned in the time series response if they're part of the **Group By** segment in the time series request. There's no API for retrieving metadata labels, so it's not possible to populate the group by dropdown with the metadata labels that are available for the selected service and metric. However, the **Group By** field dropdown comes with a pre-defined list of common system labels.
User labels cannot be pre-defined, but it's possible to enter them manually in the **Group By** field. If a metadata label, user label or system label is included in the **Group By** segment, then you can create filters based on it and expand its value on the **Alias** field.
### Alias Patterns
The Alias By field allows you to control the format of the legend keys. The default is to show the metric name and labels. This can be long and hard to read. Using the following patterns in the alias field, you can format the legend key the way you want it.
@@ -151,6 +157,8 @@ In the Group By dropdown, you can see a list of metric and resource labels for a
| ------------------------ | -------------------------------- | -------------------------------- | ---------------- |
| `{{metric.label.xxx}}` | returns the metric label value | `{{metric.label.instance_name}}` | `grafana-1-prod` |
| `{{resource.label.xxx}}` | returns the resource label value | `{{resource.label.zone}}` | `us-east1-b` |
| `{{metadata.system_labels.xxx}}` | returns the meta data system label value | `{{metadata.system_labels.name}}` | `grafana` |
| `{{metadata.user_labels.xxx}}` | returns the meta data user label value | `{{metadata.user_labels.tag}}` | `production` |
Example Alias By: `{{metric.type}} - {{metric.labels.instance_name}}`

View File

@@ -9,36 +9,43 @@ weight = 20
+++
# Grafana TestData
# Grafana TestData DB
The purpose of this data sources is to make it easier to create fake data for any panel.
Using `Grafana TestData` you can build your own time series and have any panel render it.
The purpose of this data source is to make it easier to create fake data for any panel.
Using `TestData DB` you can build your own time series and have any panel render it.
This make is much easier to verify functionally since the data can be shared very easily.
## Enable
`Grafana TestData` is not enabled by default. To enable it, first navigate to the Plugins section, found in your Grafana main menu. Click the Apps tabs in the Plugins section and select the Grafana TestData App. (Or navigate to http://your_grafana_instance/plugins/testdata/edit to go directly there). Finally click the enable button to enable.
The `TestData DB` data source is not enabled by default. To enable it:
1. In the **Configuration** menu (small gear on the left side of the screen, click **Data Sources**.
2. Click **Add Data Source**.
3. Search and click `TestData DB`.
4. Click **Save & Test** to enable it.
## Create mock data.
Once `Grafana TestData` is enabled you can use it as a data source in any metric panel.
Once `TestData DB` is enabled, you can use it as a data source in any metric panel.
![](/img/docs/v41/test_data_add.png)
## CSV
The comma separated values scenario is the most powerful one since it lets you create any kind of graph you like.
Once you provided the numbers `Grafana TestData` will distribute them evenly based on the time range of your query.
Once you provided the numbers, `TestData DB` distributes them evenly based on the time range of your query.
![](/img/docs/v41/test_data_csv_example.png)
## Dashboards
`Grafana TestData` also contains some dashboards with example. `/plugins/testdata/edit`
`TestData DB` also contains some dashboards with examples.
1. Click **Configuration** > **Data Sources** > **TestData DB** > **Dashboards**.
1. **Import** the **Simple Streaming Example** dashboard.
### Commit updates to the dashboards
If you want to submit a change to one of the current dashboards bundled with `Grafana TestData` you have to update the revision property.
To submit a change to one of the current dashboards bundled with `TestData DB`, update the revision property.
Otherwise the dashboard will not be updated automatically for other Grafana users.
## Using test data in issues

View File

@@ -84,7 +84,11 @@ Along with metrics, Explore allows you to investigate your logs with the followi
- [InfluxDB](../datasources/influxdb)
- [Elasticsearch](../datasources/elasticsearch)
### Deduping
### Visualization options
You can customize how logs are displayed and select which columns are shown.
#### Deduping
Log data can be very repetitive and Explore can help by hiding duplicate log lines. There are a few different deduplication algorithms that you can use:
@@ -92,18 +96,23 @@ Log data can be very repetitive and Explore can help by hiding duplicate log lin
* `numbers` Matches on the line after stripping out numbers (durations, IP addresses etc.).
* `signature` The most aggressive deduping - strips all letters and numbers, and matches on the remaining whitespace and punctuation.
### Timestamp and Local time
#### Time
There are some other check boxes under the logging graph apart from the Deduping options.
Shows or hides the time column. This is the timestamp associated with the log line as reported from the data source.
* Timestamp: shows/hides the Timestamp column
* Local time: shows/hides the Local time column
#### Unique labels
Shows or hides the unique labels column that includes only non-common labels. All common labels are displayed above.
#### Wrap lines
Set this to True if you want the display to use line wrapping. If set to False, it will result in horizontal scrolling.
### Labels and Parsed fields
Each log row has an extendable area with its labels and parsed fields, for more robust interaction. For all labels we have added the ability to filter for (positive filter) and filter out (negative filter) selected labels. Each field or label also has a stats icon to display ad-hoc statistics in relation to all displayed logs.
Each log row has an extendable area with its labels and parsed fields, for more robust interaction. For all labels we have added the ability to filter for (positive filter) and filter out (negative filter) selected labels. Each field or label also has a stats icon to display ad-hoc statistics in relation to all displayed logs.
### Loki-specific Features
### Loki-specific features
As mentioned, one of the log integrations is for the new open source log aggregation system from Grafana Labs - [Loki](https://github.com/grafana/loki). Loki is designed to be very cost effective, as it does not index the contents of the logs, but rather a set of labels for each log stream. The logs from Loki are queried in a similar way to querying with label selectors in Prometheus. It uses labels to group log streams which can be made to match up with your Prometheus labels. Read more about Grafana Loki [here](https://github.com/grafana/loki) or the Grafana Labs hosted variant: [Grafana Cloud Logs](https://grafana.com/loki).

View File

@@ -0,0 +1,124 @@
+++
title = "Navigation links"
description = ""
keywords = ["grafana", "linking", "create links", "link panels", "link dashboards", "navigate"]
type = "docs"
[menu.docs]
parent = "features"
weight = 9
+++
# Navigation links
You can use links to navigate between commonly used dashboards. Links let you create shortcuts to other dashboards, panels, and even external websites.
Grafana supports three types of links: Dashboard Links, Panel Links, and Data Links. They are all available from your dashboard.
{{< docs-imagebox img="/static/assets/img/blog/dashboard_links.png" max-width="800px" caption="Links Supported in Grafana" >}}
## Which link should you use?
Start by figuring out how you're currently navigating between dashboards. If you're often jumping between a set of dashboards and struggling to find the same context in each, links can help optimize your workflow.
The next step is to figure out which link type is right for your workflow. Even though all the link types in Grafana are used to create shortcuts to other dashboards or external websites, they work in different contexts.
- If the link relates to most if not all of the panels in the dashboard, use a *dashboard link*.
- If you want to drill down into specific panels, use a *panel link*.
- If you want to drill down into a specific series, or even a single measurement, use a *data link*.
## Dashboard links
When you create a dashboard link, you can include the time range and current template variables to directly jump to the same context in another dashboard. This way, you dont have to worry whether the person you send the link to is looking at the right data.
Dashboard links can also be used as shortcuts to external systems, such as submitting [a GitHub issue with the current dashboard name](https://github.com/grafana/grafana/issues/new?title=Dashboard%3A%20HTTP%20Requests).
To see an example of dashboard links in action, check out [this demo](https://play.grafana.org/d/rUpVRdamz/dashboard-links-with-variables?orgId=1).
Once you've added a dashboard link, it appears in the upper right corner of your dashboard.
### Add links to dashboards
Add a links to other dashboards at the top of your current dashboard.
1. While viewing the dashboard you want to link, click the gear at the top of the screen to open **Dashboard settings**.
1. Click **Links** and then click **Add Dashboard Link** or **New**.
1. In **Type**, select **dashboards**.
1. Select link options:
- **With tags** Enter tags to limit the linked dashboards to only the ones with the tags you enter. Otherwise, Grafana includes links to all other dashboards.
- **As dropdown** If you are linking to lots of dashboards, then you probably want to select this option and add an optional title to the dropdown. Otherwise, Grafana displays the dashboard links side by side across the top of your dashboard.
- **Time range** Select this option to include the dashboard time range in the link. When the user clicks the link, the linked dashboard opens with the indicated time range already set. **Example:** https://play.grafana.org/d/000000010/annotations?orgId=1&from=now-3h&to=now
- **Variable values** Select this option to include template variables currently used as query parameters in the link. When the user clicks the link, any matching templates in the linked dashboard are set to the values from the link. **Example:** https://play.grafana.org/d/000000074/alerting?var-app=backend&var-server=backend_01&var-server=backend_03&var-interval=1h
- **Open in new tab** Select this option if you want the dashboard link to open in a new tab or window.
1. Click **Add**.
### Add a link to a URL
Add a link to a URL at the top of your current dashboard. You can link to any available URL, including dashboards, panels, or external sites. You can even [control the time range](https://grafana.com/docs/grafana/latest/reference/timerange/#controlling-time-range-using-url) to ensure the user is zoomed in on the right data in Grafana.
1. While viewing the dashboard you want to link, click the gear at the top of the screen to open **Dashboard settings**.
1. Click **Links** and then click **Add Dashboard Link** or **New**.
1. In **Type**, select **link**.
1. Select link options:
- **Url** Enter the URL you want to link to. Depending on the target, you might want to include field values. **Example:** https://github.com/grafana/grafana/issues/new?title=Dashboard%3A%20HTTP%20Requests
- **Title** Enter the title you want the link to display.
- **Tooltip** Enter the tooltip you want the link to display when the user hovers their mouse over it.
- **Icon** Choose the icon you want displayed with the link.
- **Time range** Select this option to include the dashboard time range in the link. When the user clicks the link, the linked dashboard opens with the indicated time range already set. **Example:** https://play.grafana.org/d/000000010/annotations?orgId=1&from=now-3h&to=now
- **Variable values** Select this option to include template variables currently used as query parameters in the link. When the user clicks the link, any matching templates in the linked dashboard are set to the values from the link. **Example:** https://play.grafana.org/d/000000074/alerting?var-app=backend&var-server=backend_01&var-server=backend_03&var-interval=1h
- **Open in new tab** Select this option if you want the dashboard link to open in a new tab or window.
1. Click **Add**.
### Update a dashboard link
To change or update an existing dashboard link, follow this procedure.
1. In Dashboard Settings, on the Links tab, click the existing link that you want to edit.
1. Change the settings and then click **Update**.
### Delete a dashboard link
To delete an existing dashboard link, click the red **X** next to the existing link that you want to delete.
## Panel links
Each panel can have its own set of links that are shown in the upper left corner of the panel. You can link to any available URL, including dashboards, panels, or external sites. You can even [control the time range](https://grafana.com/docs/grafana/latest/reference/timerange/#controlling-time-range-using-url) to ensure the user is zoomed in on the right data in Grafana.
Click the icon on the top left corner of a panel to see available panel links. To see an example of panel links in action, check out [this demo](https://play.grafana.org/d/000000156/dashboard-with-panel-link?orgId=1).
### Add a panel link
1. Hover your cursor over the panel that you want to add a link to and then press `e`. Or click the dropdown arrow next to the panel title and then click **Edit**.
2. Open the **General** tab in the panel settings and then scroll down to the Panel links section.
3. Click **Add link**.
4. Enter a **Title**.
5. If you want the link to open in a new tab, then select **Open in a new tab**.
6. Enter the **URL** you want to link to.
You can even add one of the template variables that are available. Press Ctrl+Space in the **URL** field to see the available variables. By adding template variables to your panel ink, the link sends the user to the right context, with the relevant variables already set.
### Update or delete a panel link
On the panel settings General tab, in the Panel links section, find the panel link that you want to make changes to or delete. Make any necessary changes, or click the **X** to the right of the title to delete the link.
## Data links
Data links allow you to provide more granular context to your links. You can create links that include the series name or even the value under the cursor. For example, if your visualization showed four servers, you could add a data link to one or two of them.
Click directly on the panel to see the data link. It appears on the context menu under **Add annotation**.
To see an example of data links in action, check out [this demo](https://play.grafana.org/d/ZvPm55mWk/new-features-in-v6-3?orgId=1&fullscreen&panelId=27).
## Add a data link to a panel
Currently, data links are only supported in the Graph, Stat, Gauge, and Bar Gauge visualizations.
1. Hover your cursor over the panel that you want to add a link to and then press `e`. Or click the dropdown arrow next to the panel title and then click **Edit**.
1. Open the **Visualization** tab in the panel settings and then scroll down to the Data links section.
1. Click **Add link**.
1. Enter a **Title**.
1. If you want the link to open in a new tab, then select **Open in a new tab**.
1. Enter the **URL** you want to link to.
You can even add one of the template variables that are available. Press Ctrl+Space in the **URL** field to see the available variables. By adding template variables to your panel ink, the link sends the user to the right context, with the relevant variables already set.
### Update or delete a panel link
On the panel settings General tab, in the Panel links section, find the panel link that you want to make changes to or delete. Make any necessary changes, or click the **X** to the right of the title to delete the link.

View File

@@ -0,0 +1,60 @@
+++
draft = "false"
date = "2020-02-19"
title = "Bar gauge panel"
description = "Bar gauge panel docs"
keywords = ["grafana", "enter", "keywords", "here"]
type = "docs"
+++
# Bar gauge panel
{{< docs-imagebox img="/img/docs/v66/bar_gauge_cover.png" max-width="1025px" caption="Stat panel" >}}
This panel can show one or more bar gauges depending on how many series, rows or columns your query returns. The
thresholds control the bar & value color.
## Display options
* Show
* `Calculation` - Show a calculated value like min or max based on all rows.
* `All values` - Show a separate stat for every row.
* Calc
* Specify calculation / reducer function. Since this panel is designed to only show a single value Grafana needs to
know how to reduce a fields many values to a single value.
* Orientation
* `Horizontal` - The bar will stretch horizontally from left to right.
* `Vertical` - The bar will stretch vertically from top to bottom.
* Mode
* `Gradient` - The threshold levels define a gradient.
* `Retro LCD` - The gauge is split up in small cells that are lit or unlit.
* `Basic` - Single color based on the matching threshold.
Retro LCD example:
{{< docs-imagebox img="/img/docs/v66/bar_gauge_lcd.png" max-width="1025px" caption="Stat panel" >}}
### Field
* `Title` - When multiple stats are shown this field controls the title in each stat. By default this is the series name
and field name. You can use expressions like `${__series.name}` or `${__field.name}` to use only series name or field
name in title or `${__cell_2}` to refer to other fields (2 being field/column with index 2).
* `Min` - The minimum value, leave blank for auto calculation based on all series & fields. Used by Graph to set y-axis min.
* `Max` - The maximum value, leave blank for auto calculation based on all series & fields. Used by Graph to set y-axis max.
* `Decimals` - Number of decimals to render value with. Leave empty for Grafana to automatically figure out the best
number of decimals to use.
### Thresholds
Define thresholds that will set the color of either the value or the background depending on your `Color` display option. The
thresholds are automatically sorted from lowest value to highest. The `Base` value represents minus infinity.
### Value mappings
Map a number or a range of numbers to a text value.
### Data links
Data links allow you add dynamic URL links to your visualizations, [read more on data links]({{< relref "../../reference/datalinks.md" >}}).

View File

@@ -0,0 +1,50 @@
+++
draft = "false"
date = "2020-02-19"
title = "Gauge panel"
description = "Gauge panel docs"
keywords = ["grafana", "enter", "keywords", "here"]
type = "docs"
+++
# Gauge panel
{{< docs-imagebox img="/img/docs/v66/gauge_panel_cover.png" max-width="1025px" caption="Stat panel" >}}
The Gauge is a single value panel that can repeat a gauge for every series, column or row.
## Display options
* Show
* `Calculation` - Show a calculated value like min or max based on all rows.
* `All values` - Show a separate stat for every row.
* Calc
* Specify calculation / reducer function. Since this panel is designed to only show a single value Grafana needs to
know how to reduce a fields many values to a single value.
* Labels - Controls if thresholds values are shown.
* Markers - Controls if a thresholds band is shown outside the inner gauge value band.
## Field
* `Title` - When multiple stats are shown this field controls the title in each stat. By default this is the series name
and field name. You can use expressions like `${__series.name}` or `${__field.name}` to use only series name or field
name in title or `${__cell_2}` to refer to other fields (2 being field/column with index 2).
* `Min` - The minimum value, leave blank for auto calculation based on all series & fields. Used by Graph to set y-axis min.
* `Max` - The maximum value, leave blank for auto calculation based on all series & fields. Used by Graph to set y-axis max.
* `Decimals` - Number of decimals to render value with. Leave empty for Grafana to automatically figure out the best
number of decimals to use.
### Thresholds
Define thresholds that will set the color of either the value or the background depending on your `Color` display option. The
thresholds are automatically sorted from lowerst value to highest. The `Base` value represents minus infinity.
### Value mappings
Map a number or a range of numbers to a text value.
### Data links
Data links allow you add dynamic URL links to your visualizations, [read more on data links]({{< relref "../../reference/datalinks.md" >}}).

View File

@@ -189,62 +189,9 @@ The time range tab allows you to override the dashboard time range and specify a
Either through a relative from now time option or through a timeshift.
Panel time overrides and timeshift are described in more detail [here]({{< relref "../../reference/timerange.md#panel-time-overrides-timeshift" >}}).
### Data link
### Data links
> Only available in Grafana v6.3+.
{{< docs-imagebox img="/img/docs/v66/datalinks_graph.png" max-width="1025px" caption="Data links" >}}
Data link allows adding dynamic links to the visualization. Those links can link to either other dashboard or to an external URL.
Data links allow you add dynamic URL links to your visualizations, [read more on data links]({{< relref "../../reference/datalinks.md" >}}).
{{< docs-imagebox img="/img/docs/data_link.png" max-width= "800px" >}}
Data link is defined by title, url and a setting whether or not it should be opened in a new window.
**Title** is a human readable label for the link that will be displayed in the UI. The link itself is accessible in the graph's context menu when user **clicks on a single data point**:
{{< docs-imagebox img="/img/docs/data_link_tooltip.png" max-width= "800px" >}}
**URL** field allows the URL configuration for a given link. Apart from regular query params it also supports built-in variables and dashboard variables that you can choose from
available suggestions:
{{< docs-imagebox img="/img/docs/data_link_typeahead.png" max-width= "800px" >}}
#### Built-in variables
> These variables changed in 6.4 so if you have an older version of Grafana please use the version picker to select
docs for an older version of Grafana.
``__url_time_range`` - current dashboard's time range (i.e. ``?from=now-6h&to=now``)
``__from`` - current dashboard's time range from value
``__to`` - current dashboard's time range to value
#### Series variables
Series specific variables are available under ``__series`` namespace:
``__series.name`` - series name to the URL
``__series.labels.<LABEL>`` - label's value to the URL. If your label contains dots use ``__series.labels["<LABEL>"]`` syntax
#### Field variables
Field specific variables are available under ``__field`` namespace:
``__field.name`` - field name to the URL
#### Value variables
Value specific variables are available under ``__value`` namespace:
``__value.time`` - value's timestamp (Unix ms epoch) to the URL (i.e. ``?time=1560268814105``)
``__value.raw`` - raw value
``__value.numeric`` - numeric representation of a value
``__value.text`` - text representation of a value
``__value.calc`` - calculation name if the value is result of calculation
#### Template variables
When linking to another dashboard that uses template variables, you can use ``var-myvar=${myvar}`` syntax (where ``myvar`` is a name of template variable)
to use current dashboard's variable value. If you want to add all of the current dashboard's variables to the URL use ``__all_variables`` variable.

View File

@@ -28,12 +28,11 @@ Note that you can scroll inside the panel in case the datasource returns more li
To limit the number of lines rendered, you can use the queries-wide **Max data points** setting. If it is not set, the datasource will usually enforce a limit.
## Visualization Options
## Visualization options
### Columns
1. **Time**: Show/hide the time column. This is the timestamp associated with the log line as reported from the datasource.
1. **Time**: Show/hide the time column. This is the timestamp associated with the log line as reported from the data source.
2. **Order**: Set to **Ascending** to show the oldest log lines first.
3. **Wrap lines**: The wrapped-line option is set as a default, unwrapped setting results in horizontal scrolling.
4. **Unique labels**: Show/hide the unique labels column which includes only non-common labels.
<div class="clearfix"></div>

View File

@@ -0,0 +1,46 @@
+++
title = "Panel overview"
keywords = ["grafana", "panel", "documentation", "guide"]
type = "docs"
[menu.docs]
name = "Panels"
parent = "panels"
weight = 1
+++
# Panel overview
The *panel* is the basic visualization building block in Grafana. Each panel has a Query Editor specific to the data source selected in the panel. The query editor allows you to extract the perfect visualization to display on the panel.
There are a wide variety of styling and formatting options for each panel. Panels can be dragged and dropped and rearranged on the Dashboard. They can also be resized.
Panels like the [Graph]({{< relref "graph.md" >}}) panel allow you to graph as many metrics and series as you want. Other panels like [Singlestat]({{< relref "singlestat.md" >}}) require a reduction of a single query into a single number.
Panels can be made more dynamic with [Dashboard Templating]({{< relref "../../reference/templating.md" >}}) variable strings within the panel configuration. The template can include queries to your data source configured in the Query Editor.
Panels can be [shared]({{< relref "../../reference/share_panel.md" >}}) easily in a variety of ways.
## Adding and editing graphs and panels
![](/img/docs/v45/metrics_tab.png)
1. You add panels by clicking the Add panel icon on the top menu.
1. To edit the graph you click on the graph title to open the panel menu, then `Edit`.
1. This should take you to the `Metrics` tab. In this tab you should see the editor for your default data source.
When you click the `Metrics` tab, you are presented with a Query Editor that is specific to the Panel Data Source. Use the Query Editor to build your queries and Grafana will visualize them in real time.
## Move panels
You can drag and drop panels by clicking and holding the panel title, then dragging it to its new location. You can also easily resize panels by clicking the (-) and (+) icons.
![](/img/docs/animated_gifs/drag_drop.gif)
## Tips and shortcuts
* Click the graph title and in the dropdown menu quickly change span or duplicate the panel.
* Click the Save icon in the menu to save the dashboard with a new name.
* Click the Save icon in the menu and then advanced to export the dashboard to json file, or set it as your default dashboard.
* Click the colored icon in the legend to select series color.
* Click series name in the legend to hide series.
* Ctrl/Shift/Meta + click legend name to hide other series.

View File

@@ -66,19 +66,6 @@ Sparklines are a great way of seeing the historical data related to the summary
> ***Pro-tip:*** Reduce the opacity on fill colors for nice looking panels.
### Gauge
Gauges gives a clear picture of how high a value is in it's context. It's a great way to see if a value is close to the thresholds. The gauge uses the colors set in the color options.
{{< docs-imagebox img="/img/docs/v45/singlestat-gauge-options.png" max-width="500px" class="docs-image--right docs-image--no-shadow">}}
1. **Show**: The show checkbox will toggle whether the gauge is shown in the panel. When unselected, only the Singlestat value will appear.
2. **Min/Max**: This sets the start and end point for the gauge.
3. **Threshold Labels**: Check if you want to show the threshold labels. Thresholds are set in the color options.
4. **Threshold Markers**: Check if you want to have a second meter showing the thresholds.
<div class="clearfix"></div>
### Value/Range to text mapping
{{< docs-imagebox img="/img/docs/v45/singlestat-value-mapping.png" class="docs-image--right docs-image--no-shadow">}}
@@ -106,3 +93,9 @@ To fix your singlestat panel:
- Do you have one query?
- Solution: This likely means your query is returning multiple series. You will want to reduce this down to a single series. This can be accomplished in many ways, depending on your data source. Some common practices include summing the series, averaging or any number of other functions. Consult the documentation for your data source for additional information.
### Gauge
The Gauge feature in this panel is deprecated, please use the new [Gauge panel]({{< relref
"../../features/panels/gauge.md" >}}) instead.

View File

@@ -0,0 +1,79 @@
+++
draft = "false"
date = "2020-02-19"
title = "Stat panel"
description = "Stat panel documentation"
keywords = ["grafana", "docs", "stat panel"]
type = "docs"
+++
# Stat panel
{{< docs-imagebox img="/img/docs/v66/stat_panel_dark3.png" max-width="1025px" caption="Stat panel" >}}
The stat panel is designed to show a big single stat values with an optional graph sparkline. You can control
background or value color using thresholds.
## Display options
* Show
* `Calculation` - Show a calculated value like min or max based on all rows.
* `All values` - Show a separate stat for every row.
* Calc
* Specify calculation / reducer function. Since this panel is designed to only show a single value Grafana needs to
know how to reduce a fields many values to a single value.
* Orientation
* If your query returns multiple series or you have set **Show** to `All values` then the visualization will repeat for every series or row. This orientation option will control in what direction it will repeat.
* Color
* `Value` - Color the value and graph area only.
* `Background` - Color the background.
** Graph
* `None` - Disable the graph / sparkline
* `Area graph` - Show area graph below value. This requires that your query returns a time column.
** Justify
* `Auto` - If only a single value is shown (no repeat) the value is centered. If multiple series or rows the value is
* left aligned.
* `Center` - Force center alignment.
### Auto layout
The panel will try to auto adjust layout depending on width & height. The graph will also hide if the panel becomes
to small.
Example of stacked layout where graph is automatically hidden due to each stat being too small:
{{< docs-imagebox img="/img/docs/v66/stat_panel_stacked.png" max-width="405px" caption="Stat panel" >}}
### Color mode
Example of value color mode:
{{< docs-imagebox img="/img/docs/v66/stat_panel_dark4.png" max-width="900px" caption="Stat panel" >}}
### Field
* `Title` - When multiple stats are shown this field controls the title in each stat. By default this is the series name
and field name. You can use expressions like `${__series.name}` or `${__field.name}` to use only series name or field
name in title or `${__cell_2}` to refer to other fields (2 being field/column with index 2).
* `Min` - The minimum value, leave blank for auto calculation based on all series & fields. Used by graph/sparkline
* (when enabled) to set y-axis min.
* `Max` - The maximum value, leave blank for auto calculation based on all series & fields. Used by graph/sparkline
* (when enabled) to set y-axis max.
* `Decimals` - Number of decimals to render value with. Leave empty for Grafana to automatically figure out the best
number of decimals to use.
### Thresholds
Define thresholds that will set the color of either the value or the background depending on your `Color` display option. The
thresholds are automatically sorted from lowerst value to highest. The `Base` value represents minus infinity.
### Value mappings
Map a number or a range of numbers to a text value.
### Data links
Data links allow you add dynamic URL links to your visualizations, [read more on data links]({{< relref "../../reference/datalinks.md" >}}).

View File

@@ -11,44 +11,8 @@ weight = 8
# Reporting
> Reporting is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../enterprise" >}}).
> Only available in Grafana v6.4+
Reporting allows you to generate PDFs from any of your Dashboards and have them sent out to interested parties on a schedule.
Reporting allows you to generate PDFs from any of your dashboards and have them sent out to interested parties on a schedule.
{{< docs-imagebox img="/img/docs/enterprise/reports_list.png" max-width="500px" class="docs-image--no-shadow" >}}
## Dashboard as a Report
With Reports there are a few things to keep in mind, most importantly, any changes you make to the Dashboard used in a report will be reflected in the report. If you change the time range in the Dashboard the time range will be the same in the report as well.
## Setup
> SMTP must be configured for reports to be sent
### Rendering
> Reporting requires the [rendering plugin]({{< relref "../administration/image_rendering.md#grafana-image-renderer-plugin" >}}).
Reporting with the built-in image rendering is not supported. We recommend installing the image renderer plugin.
## Usage
{{< docs-imagebox img="/img/docs/enterprise/reports_create_new.png" max-width="500px" class="docs-image--no-shadow" >}}
Currently only Organisation Admins can create reports. To get to report click on the reports icon in the side menu. This will allow you to list, create and update your reports.
| Setting | Description |
| --------------|------------------------------------------------------------------ |
| Name | name of the Report |
| Dashboard | what dashboard to generate the report from |
| Recipients | emails of the people who will receive this report |
| ReplyTo | your email address, so that the recipient can respond |
| Message | message body in the email with the report |
| Schedule | how often do you want the report generated and sent |
## Debugging errors
If you have problems with the reporting feature you can enable debug logging by switching the logger to debug (`filters = report:debug`). Learn more about making configuration changes [here]({{< relref "../installation/configuration.md#filters" >}}).
> Reporting is only available in Grafana Enterprise, v6.4 or later. For more information, refer to [Reporting]({{< relref "../enterprise/reporting.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise" >}}).

View File

@@ -1,5 +1,5 @@
+++
title = "Keyboard Shortcuts"
title = "Keyboard shortcuts"
type = "docs"
[menu.docs]
parent = "features"
@@ -8,46 +8,11 @@ weight = 7
# Keyboard shortcuts
{{< docs-imagebox img="/img/docs/v50/shortcuts.png" max-width="20rem" class="docs-image--right" >}}
Grafana has a number of keyboard shortcuts available. Press Shift + `?` on your keyboard to display all keyboard shortcuts available in your version of Grafana.
Grafana v4 introduces a number of really powerful keyboard shortcuts. You can now focus a panel
by hovering over it with your mouse. With a panel focused you can simple hit `e` to toggle panel
edit mode, or `v` to toggle fullscreen mode. `p` `r` removes the panel. `p` `s` opens share
modal.
**Popular shortcuts:**
Hit `?` on your keyboard to open the shortcuts help modal.
### Global
- `g` `h` Go to Home Dashboard
- `g` `p` Go to Profile
- `s` `o` Open search
- `s` `s` Open search with starred filter
- `s` `t` Open search in tags view
- `esc` Exit edit/setting views
### Dashboard
- `mod+s` Save dashboard
- `mod+h` Hide row controls
- `d` `r` Refresh all panels
- `d` `s` Dashboard settings
- `d` `v` Toggle in-active / view mode
- `d` `k` Toggle kiosk mode (hides top nav)
- `d` `E` Expand all rows
- `d` `C` Collapse all rows
- `mod+o` Toggle shared graph crosshair
### Focused Panel
- `e` Toggle panel edit view
- `v` Toggle panel fullscreen view
- `p` `s` Open Panel Share Modal
- `p` `d` Duplicate Panel
- `p` `r` Remove Panel
### Time Range
- `t` `z` Zoom out time range
- `t` Move time range back
- `t` Move time range forward
mod = Ctrl on Windows or Linux and Cmd key on macOS
* Ctrl+S saves the current dashboard.
* Ctrl+F opens the dashboard finder / search.
* Ctrl+H hides all controls (good for tv displays).
* Press Escape to exit graph when in fullscreen or edit mode.

View File

@@ -1,95 +0,0 @@
+++
title = "Basic Concepts"
description = "Grafana intro and concept guide"
keywords = ["grafana", "intro", "guide", "concepts"]
type = "docs"
[menu.docs]
name = "Basic concepts"
identifier = "basic_concepts"
parent = "guides"
weight = 2
+++
# Basic concepts
This document is an introduction to basic concepts in Grafana. Use it as a starting point to get familiar with core Grafana features.
## Dashboard
The *dashboard* is where it all comes together. A dashboard is a set of one or more panels organized and arranged into one or more rows.
The time period for the dashboard can be controlled by the [Time range controls]({{< relref "../reference/timerange.md" >}}) in the upper right of the dashboard.
Dashboards can use [templating]({{< relref "../reference/templating.md" >}}) to make them more dynamic and interactive.
Dashboards can use [annotations]({{< relref "../reference/annotations.md" >}}) to display event data across panels. This can help correlate the time series data in the panel with other events.
Dashboards can be [shared]({{< relref "../reference/share_dashboard.md" >}}) easily in a variety of ways.
Dashboards can be tagged, and the dashboard picker provides quick, searchable access to all dashboards in a particular organization.
## Data source
Grafana can visualize, explore, and alert on data from many different databases and cloud services. Each database or service type is accessed from a *data source*.
Each data source has a specific query editor that is customized for the features and capabilities that the particular data source exposes. The query language and capabilities of each data source are obviously very different. You can combine data from multiple data sources into a single dashboard, but each panel is connected to a specific data source that belongs to a particular organization.
Refer to the [Data sources section]({{< relref "../features/datasources" >}}) for a list of data sources that Grafana officially supports.
## Organization
Grafana supports multiple *organizations* in order to support a wide variety of deployment models, including using a single Grafana instance to provide service to multiple potentially untrusted organizations.
In most cases, Grafana is deployed with a single organization.
Each organization can have one or more data sources.
All dashboards are owned by a particular organization.
> Note: Most metric databases do not provide per-user series authentication. This means that organization data sources and dashboards are available to all users in a particular organization.
Refer to [Organization roles]({{< relref "../permissions/organization_roles.md" >}}) for more information.
## Panel
The *panel* is the basic visualization building block in Grafana. Each panel has a Query Editor specific to the data source selected in the panel. The query editor allows you to extract the perfect visualization to display on the panel.
There are a wide variety of styling and formatting options for each panel. Panels can be dragged and dropped and rearranged on the Dashboard. They can also be resized.
Panels like the [Graph]({{< relref "../features/panels/graph.md" >}}) panel allow you to graph as many metrics and series as you want. Other panels like [Singlestat]({{< relref "../features/panels/singlestat.md" >}}) require a reduction of a single query into a single number.
Panels can be made more dynamic with [Dashboard Templating]({{< relref "../reference/templating.md" >}}) variable strings within the panel configuration. The template can include queries to your data source configured in the Query Editor.
Panels can be [shared]({{< relref "../reference/share_panel.md" >}}) easily in a variety of ways.
## Query editor
The *query editor* exposes capabilities of your data source and allows you to query the metrics that it contains.
Use the query editor to build one or more queries in your time series database. The panel instantly updates, allowing you to effectively explore your data in real time and build a perfect query for that particular panel.
You can use [template variables]({{< relref "../reference/templating.md" >}}) in the query editor within the queries themselves. This provides a powerful way to explore data dynamically based on the templating variables selected on the dashboard.
Grafana allows you to reference queries in the query editor by the row that theyre on. If you add a second query to graph, you can reference the first query by typing in #A. This provides an easy and convenient way to build compound queries.
## Row
A *row* is a logical divider within a dashboard. It is used to group panels together.
Rows are always 12 “units” wide. These units are automatically scaled dependent on the horizontal resolution of your browser. You can control the relative width of panels within a row by setting their specific width.
We use a unit abstraction so that Grafana looks great on all screens sizes.
> Note: With MaxDataPoint functionality, Grafana can show you the perfect number of data points, regardless of resolution or time range.
Collapse a row by clicking on the row title. If you save a dashboard with a row collapsed, then it saves in that state and does not load those graphs until you expand the row.
Use the [repeating rows]({{< relref "../reference/templating.md#repeating-rows" >}}) functionality to dynamically create or remove entire rows, which can be filled with panels, based on the template variables selected.
## User
A *user* is a named account in Grafana. A user can belong to one or more organizations and can be assigned different levels of privileges through roles.
Grafana supports a wide variety of internal and external ways for users to authenticate themselves. These include from its own integrated database, from an external SQL server, or from an external LDAP server.
Refer to the [Permissions overview](docs\sources\permissions\overview.md) for information about roles and permissions.

View File

@@ -1,114 +1,61 @@
+++
title = "Getting Started"
description = "Getting started with Grafana guide"
title = "Getting started"
description = "Guide for getting started with Grafana"
keywords = ["grafana", "intro", "guide", "started"]
type = "docs"
aliases = ["/docs/grafana/latest/guides/gettingstarted"]
[menu.docs]
name = "Getting Started"
name = "Getting started"
identifier = "getting_started_guide"
parent = "guides"
weight = 1
weight = 100
+++
# Getting started
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]({{< relref "../installation/" >}}).
This guide will help you get started and acquainted with Grafana. To learn more about Grafana in general, refer to [What is Grafana?]({{< relref "what-is-grafana.md" >}}).
## Logging in for the first time
## Install Grafana
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]({{< relref "../installation/configuration/#http-port" >}}).
This step varies according to your computer operating system. Refer to the instructions for your OS in the [Installation]({{< relref "../installation/_index.md" >}}) section for instructions.
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.
## Log in for the first time
1. Open your web browser and go to http://localhost:3000/. `3000` is the default HTTP port that Grafana listens to if you havent configured a different port.
1. On the login page, type `admin` for the username and password.
1. Change your password.
## How to add a data source
> **Note:** We strongly encourage you to follow Grafana best practices and change the default administrator password. Don't forget to record your credentials!
{{< docs-imagebox img="/img/docs/v52/sidemenu-datasource.png" max-width="250px" class="docs-image--right docs-image--no-shadow">}}
## Create a dashboard
Before you create your first dashboard you need to add your data source.
1. Click **New dashboard**.
1. Click **Add Query**. Grafana creates a basic graph panel with the Random Walk scenario.
1. Save your dashboard. Click the **Save dashboard** icon in the top corner of the screen.
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.
Congratulations, you have gotten started with Grafana! You have a dashboard and are displaying results. Feel free to experiment with what you have built, continue on to add another data source, or explore [Next steps](#next-steps).
## Next steps
Click Add data source and you will come to the settings page of your new data source.
Different user types will have different interests. Some suggestions are listed below, or refer to [What is Grafana?]({{< relref "what-is-grafana.md" >}}) for a general overview of Grafana features.
{{< docs-imagebox img="/img/docs/v52/add-datasource.png" max-width="700px" class="docs-image--no-shadow">}}
### All users
First, give the data source a Name and then select which Type of data source you'll want to create, see [Supported data sources]({{< relref "../features/datasources/#supported-data-sources/" >}}) for more information and how to configure your data source.
All users might want to learn about:
* [Panels]({{< relref "../features/panels/panels.md" >}})
* [Dashboards]({{< relref "../features/dashboard/dashboards.md" >}})
* [Data sources]({{< relref "../features/datasources/data-sources.md" >}}) and [Add a data source]({{< relref "../features/datasources/add-a-data-source.md" >}})
* [Keyboard shortcuts]({{< relref "../features/shortcuts.md" >}})
* [Explore workflow]({{< relref "../features/explore/index.md" >}})
* [Plugins](https://grafana.com/grafana/plugins?orderBy=weight&direction=asc)
{{< docs-imagebox img="/img/docs/v52/datasource-settings.png" max-width="700px" class="docs-image--no-shadow">}}
### Admins
After you have configured your data source you are ready to save and test.
## Beginner guides
Watch the 10min [beginners guide to building dashboards](https://www.youtube.com/watch?v=sKNZMtoSHN4&index=7&list=PLDGkOdUX1Ujo3wHw9-z5Vo12YLqXRjzg2) to get a quick intro to setting up Dashboards and Panels.
## Basic concepts
Read the [Basic Concepts]({{< relref "basic_concepts" >}}) document to get a crash course in key Grafana concepts.
### Top header
Let's start with creating a new Dashboard. You can find the new Dashboard link on the right side of the Dashboard picker. You now have a blank Dashboard.
<img class="no-shadow" src="/img/docs/v50/top_nav_annotated.png" width="580px">
The image above shows you the top header for a Dashboard.
1. Side menubar toggle: This toggles the side menu, allowing you to focus on the data presented in the dashboard. The side menu provides access to features unrelated to a Dashboard such as Users, Organizations, and Data Sources.
2. Dashboard dropdown: This dropdown shows you which Dashboard you are currently viewing, and allows you to easily switch to a new Dashboard. From here you can also create a new Dashboard or folder, Import existing Dashboards, and manage Dashboard playlists.
3. Add Panel: Adds a new panel to the current Dashboard
4. Star Dashboard: Star (or unstar) the current Dashboard. Starred Dashboards will show up on your own Home Dashboard by default, and are a convenient way to mark Dashboards that you're interested in.
5. Share Dashboard: Share the current dashboard by creating a link or create a static Snapshot of it. Make sure the Dashboard is saved before sharing.
6. Save dashboard: The current Dashboard will be saved with the current Dashboard name.
7. Settings: Manage Dashboard settings and features such as Templating and Annotations.
## Dashboards, panels, the building blocks of Grafana...
Dashboards are at the core of what Grafana is all about. Dashboards are composed of individual Panels arranged on a grid. Grafana ships with a variety of Panels. Grafana makes it easy to construct the right queries, and customize the display properties so that you can create the perfect Dashboard for your need. Each Panel can interact with data from any configured Grafana Data Source (currently Graphite, Prometheus, Elasticsearch, InfluxDB, OpenTSDB, MySQL, PostgreSQL, Microsoft SQL Server and AWS Cloudwatch). The [Basic Concepts]({{< relref "basic_concepts" >}}) guide explores these key ideas in detail.
<img src="/img/docs/v50/dashboard_annotated.png" class="no-shadow" width="700px">
1. Zoom out time range
2. Time picker dropdown. Here you can access relative time range options, auto refresh options and set custom absolute time ranges.
3. Manual refresh button. Will cause all panels to refresh (fetch new data).
4. Dashboard panel. You edit panels by clicking the panel title.
5. Graph legend. You can change series colors, y-axis and series visibility directly from the legend.
## Adding and editing graphs and panels
![](/img/docs/v45/metrics_tab.png)
1. You add panels by clicking the Add panel icon on the top menu.
2. To edit the graph you click on the graph title to open the panel menu, then `Edit`.
3. This should take you to the `Metrics` tab. In this tab you should see the editor for your default data source.
When you click the `Metrics` tab, you are presented with a Query Editor that is specific to the Panel Data Source. Use the Query Editor to build your queries and Grafana will visualize them in real time.
## Drag-and-Drop panels
You can Drag-and-Drop Panels by simply clicking and holding the Panel title, and drag it to its new location. You can also easily resize panels by clicking the (-) and (+) icons.
![](/img/docs/animated_gifs/drag_drop.gif)
## Tips and shortcuts
* Click the graph title and in the dropdown menu quickly change span or duplicate the panel.
* Click the Save icon in the menu to save the dashboard with a new name
* Click the Save icon in the menu and then advanced to export the dashboard to json file, or set it as your default dashboard.
* Click the colored icon in the legend to select series color
* Click series name in the legend to hide series
* Ctrl/Shift/Meta + Click legend name to hide other series
## Grafana loves the keyboard
* Ctrl+S Saves the current dashboard
* Ctrl+F Opens the dashboard finder / search
* Ctrl+H Hides all controls (good for tv displays)
* Hit Escape to exit graph when in fullscreen or edit mode
Administrators might want to learn about:
* [Grafana configuration]({{< relref "../installation/configuration.md" >}})
* [Authentication]({{< relref "../auth/overview.md" >}})
* [User permissions and roles]({{< relref "../permissions/overview.md" >}})
* [Provisioning]({{< relref "../administration/provisioning.md" >}})
* [Grafana CLI]({{< relref "../administration/cli.md" >}})

View File

@@ -7,7 +7,7 @@ type = "docs"
name = "Glossary"
identifier = "glossary"
parent = "guides"
weight = 4
weight = 400
+++
# Glossary

View File

@@ -7,7 +7,7 @@ type = "docs"
name = "Time series"
identifier = "time_series"
parent = "guides"
weight = 3
weight = 300
+++
# Introduction to time series
@@ -24,7 +24,7 @@ Temperature data like this is one example of what we call a *time series*—a se
Tables are useful when you want to identify individual measurements but make it difficult to see the big picture. A more common visualization for time series is the _graph_, which instead places each measurement along a time axis. Visual representations like the graph make it easier to discover patterns and features of the data that otherwise would be difficult to see.
<img src="/img/docs/example_graph.png" />
{{< docs-imagebox img="/img/docs/example_graph.png" class="docs-image--no-shadow" max-width="850px" >}}
Temperature data like the one in the example, is far from the only example of a time series. Other examples of time series are:

View File

@@ -0,0 +1,93 @@
+++
title = "What is Grafana?"
description = "Overview of Grafana and features"
keywords = ["grafana", "intro", "guide", "started"]
type = "docs"
[menu.docs]
name = "What is Grafana?"
identifier = "what_is_grafana"
parent = "guides"
weight = 200
+++
# What is Grafana?
This topic provides a high-level look at Grafana, the Grafana process, and Grafana features. It's a good place to start if you want to learn more about Grafana software. To jump right in, refer to [Getting started]({{< relref "getting_started.md" >}}).
Grafana is open source visualization and analytics software. It allows you to query, visualize, alert on, and explore your metrics no matter where they are stored. In plain English, it provides you with tools to turn your time-series database (TSDB) data into beautiful graphs and visualizations.
After creating a dashboard like you do in [Getting started]({{< relref "getting_started.md" >}}), there are many possible things you might do next. It all depends on your needs and your use case.
For example, if you want to view weather data and statistics about your smart home, then you might create a playlist. If you are the administrator for a corporation and are managing Grafana for multiple teams, then you might need to set up provisioning and authentication.
The following sections provide an overview of things you might want to do with your Grafana database and links so you can learn more. For more guidance and ideas, check out the [Grafana Community forums](https://community.grafana.com/).
## Explore metrics and logs
Explore your data through ad-hoc queries and dynamic drilldown. Split view and compare different time ranges, queries and data sources side by side.
Refer to [Explore]({{< relref "../features/explore/index.md" >}}) for more information.
## Alerts
If you're using Grafana alerting, then you can have alerts sent through a number of different [alert notifiers]({{< relref "../alerting/notifications.md" >}}), including PagerDuty, SMS, email, VictorOps, OpsGenie, or Slack.
Alert hooks allow you to create different notifiers with a bit of code if you prefer some other channels of communication. Visually define [alert rules]({{< relref "../alerting/rules.md" >}}) for your most important metrics.
## Annotations
Annotate graphs with rich events from different data sources. Hover over events to see the full event metadata and tags.
This feature, which shows up as a graph marker in Grafana, is useful for correlating data in case something goes wrong. You can create the annotations manually—just control-click on a graph and input some text—or you can fetch data from any data source.
Refer to [Annotations]({{< relref "../reference/annotations.md" >}}) for more information.
## Dashboard variables
[Template variables]({{< relref "../reference/templating.md" >}}) allow you to create dashboards that can be reused for lots of different use cases. Values aren't hard-coded with these templates, so for instance, if you have a production server and a test server, you can use the same dashboard for both.
Templating allows you to drill down into your data, say, from all data to North America data, down to Texas data, and beyond. You can also share these dashboards across teams within your organization—or if you create a great dashboard template for a popular data source, you can contribute it to the whole community to customize and use.
## Configure Grafana
If you're a Grafana administrator, then you'll want to thoroughly familiarize yourself with [Grafana configuration options]({{< relref "../installation/configuration.md" >}}) and the [Grafana CLI]({{< relref "../administration/cli.md" >}}).
Configuration covers both config files and environment variables. You can set up default ports, logging levels, email IP addresses, security, and more.
## Import dashboards and plugins
Discover hundreds of [dashboards](https://grafana.com/grafana/dashboards) and [plugins](https://grafana.com/grafana/plugins) in the official library. Thanks to the passion and momentum of community members, new ones are added every week.
## Authentication
Grafana supports different authentication methods, such as LDAP and OAuth, and allows you to map users to organizations. Refer to the [User authentication overview]({{< relref "../auth/overview.md" >}}) for more information.
In Grafana Enterprise, you can also map users to teams: If your company has its own authentication system, Grafana allows you to map the teams in your internal systems to teams in Grafana. That way, you can automatically give people access to the dashboards designated for their teams.
Refer to [Grafana Enterprise]({{< relref "../enterprise/_index.md" >}}) for more information.
## Provisioning
While it's easy to click, drag, and drop to create a single dashboard, power users in need of many dashboards will want to automate the setup with a script. You can script anything in Grafana.
For example, if you're spinning up a new Kubernetes cluster, you can also spin up a Grafana automatically with a script that would have the right server, IP address, and data sources preset and locked in so users cannot change them. It's also a way of getting control over a lot of dashboards.
Refer to [Provisioning]({{< relref "../administration/provisioning.md" >}}) for more information.
## Permissions
When organizations have one Grafana and multiple teams, they often want the ability to both keep things separate and share dashboards. You can create a team of users and then set [permissions]({{< relref "../permissions/overview.md" >}}) on folders, dashboards, and down to the [data source level]({{< relref "../enterprise/datasource_permissions.md" >}}) if you're using [Grafana Enterprise]({{< relref "../enterprise/_index.md" >}}).
## Grafana Cloud
Grafana Cloud is a highly available, fast, fully managed OpenSaaS logging and metrics platform. Everything you love about Grafana, but Grafana Labs hosts it for you and handles all the headaches.
[Learn more about Grafana Cloud.](https://grafana.com/cloud/)
## Grafana Enterprise
[Grafana Enterprise]({{< relref "../enterprise/_index.md" >}}) is a commercial edition of Grafana that includes additional features not found in the open source version.
Building on everything you already know and love about Grafana, Grafana Enterprise adds enterprise data sources, advanced authentication options, more permission controls, 24x7x365 support, and training from the core Grafana team.
[Learn more about Grafana Enterprise](https://grafana.com/enterprise). To purchase Enterprise or obtain a trial license, contact the Grafana Labs [Sales Team](https://grafana.com/contact?about=support&topic=Grafana%20Enterprise).

View File

@@ -1,7 +1,7 @@
+++
title = "What's New in Grafana v2.1"
title = "What's new in Grafana v2.1"
description = "Feature and improvement highlights for Grafana v2.1"
keywords = ["grafana", "new", "documentation", "2.1"]
keywords = ["grafana", "new", "documentation", "2.1", "release notes"]
type = "docs"
+++

View File

@@ -1,7 +1,7 @@
+++
title = "What's New in Grafana v2.5"
title = "What's new in Grafana v2.5"
description = "Feature and improvement highlights for Grafana v2.5"
keywords = ["grafana", "new", "documentation", "2.5"]
keywords = ["grafana", "new", "documentation", "2.5", "release notes"]
type = "docs"
+++
@@ -103,4 +103,3 @@ view the [CHANGELOG.md](https://github.com/grafana/grafana/blob/master/CHANGELOG
- - -
### <a href="https://grafana.com/get">Download Grafana 2.5 now</a>

View File

@@ -1,7 +1,7 @@
+++
title = "What's New in Grafana v2.6"
title = "What's new in Grafana v2.6"
description = "Feature and improvement highlights for Grafana v2.6"
keywords = ["grafana", "new", "documentation", "2.6"]
keywords = ["grafana", "new", "documentation", "2.6", "release notes"]
type = "docs"
+++
@@ -122,4 +122,3 @@ view the [CHANGELOG.md](https://github.com/grafana/grafana/blob/master/CHANGELOG
- - -
<a href="http://grafana.org/download">Download Grafana 2.6 now</a>

View File

@@ -1,11 +1,11 @@
+++
title = "What's New in Grafana v2.0"
title = "What's new in Grafana v2.0"
description = "Feature and improvement highlights for Grafana v2.0"
keywords = ["grafana", "new", "documentation", "2.0"]
keywords = ["grafana", "new", "documentation", "2.0", "release notes"]
type = "docs"
+++
# What's New in Grafana v2.0
# What's new in Grafana v2.0
Grafana 2.0 represents months of work by the Grafana team and the community. We are pleased to be able to
release the Grafana 2.0 beta. This is a guide that describes some of changes and new features that can
@@ -173,5 +173,3 @@ Grafana now supports server-side PNG rendering. From the Panel share dialog you
> **Note** This requires that your Data Source is accessible from your Grafana instance.
![](/img/docs/v2/share_dialog_image_highlight.jpg)

View File

@@ -1,7 +1,7 @@
+++
title = "What's New in Grafana v3.1"
title = "What's new in Grafana v3.1"
description = "Feature and improvement highlights for Grafana v3.1"
keywords = ["grafana", "new", "documentation", "3.1"]
keywords = ["grafana", "new", "documentation", "3.1", "release notes"]
type = "docs"
[menu.docs]
name = "Version 3.1"
@@ -10,7 +10,7 @@ parent = "whatsnew"
weight = 5
+++
# What's New in Grafana v3.1
# What's new in Grafana v3.1
## Dashboard Export and Import
@@ -32,7 +32,7 @@ Here you can change the name of the dashboard and also pick what data sources yo
## Discover Dashboards
On [Grafana.com](https://grafana.com) you can now browse and search for dashboards. We have already added a few but more are being uploaded every day. To import a dashboard just copy the dashboard url and head back to Grafana, then Dashboard Search -> Import -> Paste Grafana.com Dashboard URL.
On [Grafana.com](https://grafana.com) you can now browse and search for dashboards. We have already added a few but more are being uploaded every day. To import a dashboard just copy the dashboard URL and head back to Grafana, then Dashboard Search -> Import -> Paste Grafana.com Dashboard URL.
<img src="/img/docs/v31/gnet_dashboards_list.png">
@@ -40,9 +40,9 @@ On [Grafana.com](https://grafana.com) you can now browse and search for dashboar
We added a new template variable named constant that makes it easier to share and export dashboard that have custom prefixes.
## Dashboard Urls
## Dashboard URLs
Having current time range and template variable value always sync with the URL makes it possible to always copy your current Grafana url to share with a colleague without having to use the Share modal.
Having current time range and template variable value always sync with the URL makes it possible to always copy your current Grafana URL to share with a colleague without having to use the Share modal.
## Internal metrics
@@ -59,6 +59,4 @@ Switched logging framework to log15 to enable key value per logging and filterin
## CHANGELOG
For a detailed list and link to github issues for everything included
in the 3.1 release please view the [CHANGELOG.md](https://github.com/grafana/grafana/blob/master/CHANGELOG.md)
file.
For a detailed list and link to github issues for everything included in the 3.1 release please view the [CHANGELOG.md](https://github.com/grafana/grafana/blob/master/CHANGELOG.md) file.

View File

@@ -1,7 +1,7 @@
+++
title = "What's New in Grafana v3.0"
title = "What's new in Grafana v3.0"
description = "Feature and improvement highlights for Grafana v3.0"
keywords = ["grafana", "new", "documentation", "3.0"]
keywords = ["grafana", "new", "documentation", "3.0", "release notes"]
type = "docs"
[menu.docs]
name = "Version 3.0"
@@ -10,7 +10,7 @@ parent = "whatsnew"
weight = 6
+++
# What's New in Grafana v3.0
# What's new in Grafana v3.0
## Commercial Support
@@ -65,7 +65,6 @@ Grafana.net will officially launch along with the stable version of
Grafana 3.0, but go to <a href=https://grafana.com> and check out the preview
and sign up for an account</a> in the meantime.
## grafana-cli
Grafana 3.0 comes with a new command line tool called grafana-cli. You
@@ -225,5 +224,4 @@ Check out the full list of plugins on [Grafana.com](https://grafana.com/plugins)
For a detailed list and link to github issues for everything included
in the 3.0 release please view the
[CHANGELOG.md](https://github.com/grafana/grafana/blob/master/CHANGELOG.md)
file.
[CHANGELOG.md](https://github.com/grafana/grafana/blob/master/CHANGELOG.md) file.

View File

@@ -1,7 +1,7 @@
+++
title = "What's New in Grafana v4.1"
title = "What's new in Grafana v4.1"
description = "Feature and improvement highlights for Grafana v4.1"
keywords = ["grafana", "new", "documentation", "4.1.0"]
keywords = ["grafana", "new", "documentation", "4.1.0", "release notes"]
type = "docs"
[menu.docs]
name = "Version 4.1"
@@ -10,7 +10,6 @@ parent = "whatsnew"
weight = 3
+++
## What's new in Grafana v4.1
- **Graph**: Support for shared tooltip on all graphs as you hover over one graph. [#1578](https://github.com/grafana/grafana/pull/1578), [#6274](https://github.com/grafana/grafana/pull/6274)
- **Victorops**: Add VictorOps notification integration [#6411](https://github.com/grafana/grafana/issues/6411), thx [@ichekrygin](https://github.com/ichekrygin)
@@ -42,7 +41,6 @@ You can set a help text in the general tab on any panel. The help text is using
Panels with a help text available have a little indicator in the top left corner. You can show the help text by hovering the icon.
<div class="clearfix"></div>
### Easier Cloudwatch configuration
{{< imgbox max-width="60%" img="/img/docs/v41/cloudwatch_settings.png" caption="Cloudwatch configuration" >}}

View File

@@ -1,7 +1,7 @@
+++
title = "What's New in Grafana v4.2"
title = "What's new in Grafana v4.2"
description = "Feature and improvement highlights for Grafana v4.2"
keywords = ["grafana", "new", "documentation", "4.2.0"]
keywords = ["grafana", "new", "documentation", "4.2.0", "release notes"]
type = "docs"
[menu.docs]
name = "Version 4.2"

View File

@@ -1,7 +1,7 @@
+++
title = "What's New in Grafana v4.3"
title = "What's new in Grafana v4.3"
description = "Feature and improvement highlights for Grafana v4.3"
keywords = ["grafana", "new", "documentation", "4.3.0"]
keywords = ["grafana", "new", "documentation", "4.3.0", "release notes"]
type = "docs"
[menu.docs]
name = "Version 4.3"
@@ -10,7 +10,7 @@ parent = "whatsnew"
weight = -2
+++
## What's New in Grafana v4.3
## What's new in Grafana v4.3
Grafana v4.3 Beta is now [available for download](https://grafana.com/grafana/download/4.3.0-beta1).
@@ -102,4 +102,3 @@ Head to the [v4.3 download page](https://grafana.com/grafana/download) for downl
## Thanks
A big thanks to all the Grafana users who contribute by submitting PRs, bug reports, helping out on our [community site](https://community.grafana.com/) and providing feedback!

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