* Graphite: Fix graphite tag value dropdowns not rendering (#25889)
(cherry picked from commit 75d8853aac)
* Bump version to 7.0.5
* Datasource: Make sure data proxy timeout applies to HTTP client (#25865)
For backend data sources executing in the backend (not through data proxy) make
sure that the timeout applies to cached HTTP client.
Fixes#25863
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
(cherry picked from commit 460b01f1fe)
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
This ensures that the X-Grafana-User header can be trusted.
If the configuration enabled the setting of this header, the
server can now trust that X-Grafana-User is set/unset by Grafana.
Before this, an anonymous user could simply set the X-Grafana-User
header themselves (using the developer tool for example)
(cherry picked from commit 034abaa73a)
* Update Bitcoin Currency to use proper symbol, add mBTC and μBTC
* Apply suggestions from code review
Co-authored-by: Marcus Andersson <systemvetaren@gmail.com>
* Revert Bitcoin to use '฿'
Co-authored-by: Marcus Andersson <systemvetaren@gmail.com>
(cherry picked from commit d3c57ac251)
* Fix dense y-axis labels in heatmap using tsbuckets
This change emulates the non-tsbuckets Y-axis tick count by making
the y-axis label formatter treat a dense set as a sparse set.
fixes#11342
* have d3 do the work
* Update public/app/plugins/panel/heatmap/rendering.ts
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
(cherry picked from commit b15a401efa)
* Table: Custom date formating via custom unit
* FieldConfig: Changed so that shouldApply is not called for overrides and added unit test
* Updated
(cherry picked from commit 6fe9982ff0)
* added tests to verify flow.
* refactoring picker reducer.
* made all the tests green.
* removed console.log's
* fixed toggle all and making sure the correct values are set on picker open.
* added more tets.
* refactored and added table tests.
* fixed so we select values from selectedValues instead of options.
* fixed so you can navigate and select even after you have filtered a variable.
* adding tests to verify flows when toggling by highlight.
* fixed so enter always selects value before closing.
* improved the code for tags.
(cherry picked from commit 13787294c6)
Fixes so that ini-sections containing hyphen is replaced with
underscore. Fixes an issue with backend plugin settings.
Ref grafana/grafana-image-renderer#147
(cherry picked from commit 34d5ffa562)
* Chore: updates Explore result processor to sort dataframes based on their refId so results are displayed in a correct order
* Chore: adds types to Explore ResultProcessor getTableResult DataFrames
(cherry picked from commit 9d04dfe41a)
* make sure that we can handle the empty data scenario in the gauge.
* reverted Guague.tsx and set default values on no data.
(cherry picked from commit f795a1577c)
Previously the add button on the postgres UI would break after the first usage. This was due to the button not being fully reset after use.
(cherry picked from commit 231a32c4a3)
* add some padding to accommodate for vertical scrollbar
* use theme spacing
* Move padding to inner div and make it use actual scrollbar width
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
(cherry picked from commit 0da72131b9)
* Chore: updates add label to query method in prometheus datasource to fix loki label insert
* Chore: adds addLabelToQuery test covering differences between adding label to loki vs non-loki queries
* Chore: adds an additional comment to addLabelToQuery
* Chore: renames isLokiDatasource to hasNoMetrics in addLabelToQuery
(cherry picked from commit 60e7b63c33)
* Fetch SLOs on SLO service change
* Prevent querying for SLOs if SLO service is empty
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
(cherry picked from commit a1ee62877e)
* Chore: refactors LogRowContextProvider to get rid of unnecessary array dimensions
* Chore: removes unnecessary array dimensions from LogRowContextProvider test
* Chore: changes LogRowContextProvider test to use jest mock
* Chore: updates LogRowContextProvider test
* Chore: removes unnecessary wrapper variable in LogRowContextProvider test
(cherry picked from commit 8c1307e704)
* First pass solution
* Refactor solution
* Add test coverage, update tests
* Fix behaviour for multiple labels, add test for this
* Add recordin rules to devenv prometheus
* Update devenv/prometheus2 instead of devenv/prometheus
* Add newlines
* Fix label matching if labels include comma, add test coverage
* Refactor
* Refactor, simplify
(cherry picked from commit 4d18bda2e1)
* TablePanel: Fix JSON tooltip positioning (#24420)
* Fix block element and overflow
* Width not needed
* Add to styles file
(cherry picked from commit f714357fbf)
* Minor UI touches (#24371)
* Justify to alignment in stat
* No stats label in inspect
* Use sentence case in panel names
* typos
* typo
* Typo
* Query -> query options
* prettier
* Transformer -> transform data
* Do not show deprecated plugins in the viz picker
* Update viz picker layout
(cherry picked from commit 63d25944c4)
* Reporting: tzdata is needed for reporting (#24422)
(cherry picked from commit de8c1b9ad7)
* Storybook: Position panel to right (#24429)
(cherry picked from commit 8257633b1d)
* Chore: move dataFramesReceived event to @grafana/data (#24443)
(cherry picked from commit 7e6ac12b9a)
* Explore: Revert QueryRows refactor (#24444)
While query fields should not rely on getting unmounted when the data source changes (and instead react to that change in e.g. componentDidUpdate()), query fields other than PromQueryField still rely on this.
(cherry picked from commit 221042c293)
* Logs: Clicking "Load more" from context overlay doesn't expand log row (#24299)
Closes#24184
(cherry picked from commit 35c097e475)
* Datasource/CloudWatch: Add data links to CloudWatch logs for deep linking to AWS (#24334)
* Datasource/CloudWatch: Fix encoding of CloudWatch Logs deep link URL
* Adds data links to cloudwatch logs responses for deep linking to aws console
* Implements PR feedback
(cherry picked from commit a655aa1ca8)
* OldTable: Make old table options align & look better (#24485)
(cherry picked from commit e333d61b97)
* Buttons: Use text color (#24439)
(cherry picked from commit c671fdbbf8)
* StatPanels: Hide calc option if all values is selected (#24416)
(cherry picked from commit 352f22042c)
* grafana/toolkit: Support paging in cherrypick task (#24402)
* Support paging in cherrypick task
* Update packages/grafana-toolkit/src/cli/tasks/cherrypick.ts
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Update packages/grafana-toolkit/src/cli/tasks/cherrypick.ts
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Do not cherry pick closed PRs
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
(cherry picked from commit c5fc18ac02)
* Reduce Transform: sort order is preserved as entered by user (#24494)
(cherry picked from commit e341d4b26f)
* TimeZone: added e2e tests for the custom time zone support. (#24442)
(cherry picked from commit a521a39ebf)
* CloudWatch/Logs: Add error message when log groups are not selected (#24361)
* Add error message
* Fix empty check
(cherry picked from commit d385045d16)
* CloudWatch/Log: Fix field autocomplete suggestions inside function (#24406)
* Fix autocomplete inside function
* Remove debug log
* Add comment and return type
(cherry picked from commit b16202acc2)
* Editor: No default suggestion selected (#24479)
* QueryField: No default suggestion selected
It's been a long-standing issue that careless typing lead to unwanted
tab completion insertions. With this change the completion item list no
longer selects the first item by default. The user has to actively click
ArrowDown to select the first one.
* Added type export
* Remove width limit of typeahead list
(cherry picked from commit 34f61934a1)
* TablePanel: Fixed persisting column resize time series fields (#24505)
(cherry picked from commit f13a15ae48)
* PluginsList: Remove unused panel options (#24501)
* Remove unused panel options
* satisfy ts
(cherry picked from commit 2e69b86990)
* CloudWatch/Logs: Language provider refactor and test (#24425)
(cherry picked from commit 876011d931)
* Datasource/CloudWatch: Usability improvements (#24447)
* Datasource/CloudWatch: Improve handling of long-running queries
* Datasource/CloudWatch: Make order of dataframe fields consistent
(cherry picked from commit c26374b0b2)
* CloudWatch/Logs: Fix suggestions of fields after comma (#24520)
(cherry picked from commit 2d29997bda)
* GraphLegend: Only display scrollbar if necessary (#24527)
(cherry picked from commit cb74bc6828)
* CloudWatch/Logs: Fix fields not being refetched when log group changed (#24529)
(cherry picked from commit 55533d12fd)
* Datasource/CloudWatch: Switch to metrics mode, logs API, when choosing stats query from cheatsheet (#24398)
* Datasource/CloudWatch: Switch to metrics mode, logs API, when choosing stats query from cheatsheet
(cherry picked from commit ae7f0aeb7a)
* azuremonitor: Deep linking from Log Analytic queries to the Azure Portal (#24417)
* azuremonitor: add gzipped and base64 encoded query to metadata
for Azure Log Analytic query responses
* azure monitor: add fields to metadata for log analytics
* azuremonitor: correction to text in query editor
* azuremonitor: adds subscription id to result metadata
* azuremonitor: build deep link url for Log Analytics
Most of the information needed for building the url
comes from the backend. The workspace friendly name
and the resource group that the workspace belongs
to are fetched in a separate API call. This call is
cached otherwise there would be a workspaces call
per query on the dashboard.
* docs: azure log analytics deep linking
* Apply suggestions from code review
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* docs: fixing review comments for azure monitor
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
(cherry picked from commit 67ed579647)
* Datasource/CloudWatch: Results of CloudWatch Logs stats queries are now grouped (#24396)
* Datasource/CloudWatch: Results of CloudWatch Logs stats queries are now grouped
(cherry picked from commit db91961405)
* PanelEditor: Fixed issue changing a panel from transparent back to normal (#24483)
* PanelModel: Fixed issues with persisting some changes
* Fixed other issues
(cherry picked from commit 5caf7f59e6)
* LabelsToFields: avoid MutableDataFrame (#24493)
(cherry picked from commit c8d3d15292)
* Prometheus: Show results of instant queries only in table (#24508)
* Show results of instant queries only in table, remove them from graph
* Update table model
(cherry picked from commit 143a26769b)
* PanelEditor: Fix so defaults is selected when datasource can't be found. (#24526)
(cherry picked from commit cb4266bae0)
* Graphite: makes query annotations work again (#24556)
(cherry picked from commit 7992f8bfbc)
* azuremonitor: limit macro regex to known macros (#24528)
(cherry picked from commit 64046e9a27)
* TimePicker: fixed so you can enter a relative range in the time picker without being converted to absolute range (#24534)
* fixed so you can enter a relative date in the time range form.
* did some small adjustments to make sure proper value is stored.
(cherry picked from commit 28f54bc2f7)
* Admin Settings: makes long settings line break (#24559)
(cherry picked from commit 74ddfe07a2)
* Update light variable theme for dropdown (#24566)
(cherry picked from commit 67dab0b767)
* UI spelling: use US form of visualization (#24558)
(cherry picked from commit bffa0fa4f6)
* e2e: adds verify release (#24568)
(cherry picked from commit 7d800e7318)
* Search: Save folder expanded state (#24496)
* Search: Save folder expanded state
* Search: Remember expanded state on search close
(cherry picked from commit 0396b220a3)
* Data sources: Don't fail if URL doesn't specify protocol (#24497)
(cherry picked from commit 164242f5fd)
* Security: Tag value sanitization fix in OpenTSDB data source (#24539)
Adds HTML sanitization to the tag value of the OpenTSDB datasource.
Fixes#24537
(cherry picked from commit 125ba95686)
* Field: UI & Code consistency Title -> Display name (#24507)
* Field: Change getFieldTitle to getFieldDisplayNamne and change the NAME of the title field config from Title to Display name
* Review feedback
* fixed unit tests
* Rename fieldConfig.title to displayName
* Fixed tests
* Added migration
* Renamed getFrameDisplayTitle to getFrameDisplayName
(cherry picked from commit 8de10a8b9f)
* Do not set insertText if the same as label (#24581)
(cherry picked from commit 20f0ee2f22)
* Plugins: Fix manifest verification (#24573)
(cherry picked from commit 892f9f789c)
* Search: Safari UI fixes (#24567)
* Search: Add height: 100% to page containers
* Search: Reset TagOption display to block
* Search: Add title to result list
* Search: Use flex-basis vs height
* Search: Remove IconButton
* Search: Do not shrink select options
* Search: Fix hasEditPermissionInFolders
* Search: Update tests
* Search: Fix prop
* Remove select wrapper class
* Update snapshot
(cherry picked from commit 15ac76a47b)
* OrgUsersTable: Fix width when there are long cells in table (#24533)
* Set width for cells and text overflow
* Add title and update snapshot
(cherry picked from commit 0c1f1dd8fd)
* Loki: Allow multiple derived fields with the same name (#24437)
(cherry picked from commit a50cb6aa1f)
* Datasource/CloudWatch: Fixes various autocomplete issues (#24583)
(cherry picked from commit c1919944ea)
* CircleCI: Update grabpl to 0.4.5 in order to include manifest with GEL (#24577)
* CircleCI: Update grabpl to 0.4.5
* GEL: Upgrade version
(cherry picked from commit 824eb94efe)
* CloudWatch/Logs: Make stats hint show consistently (#24392)
(cherry picked from commit 5feef22034)
* Table: fixes Cannot read property subRows of null (#24578)
(cherry picked from commit 2d19c046f2)
* TimePicker: some fixes and polish after testing feedback (#24585)
* make sure we render the delaynow value from dashboard to the time picker settings.
* Added the time zone in the tooltip.
(cherry picked from commit cab066f8ce)
* Onboarding: New getting started panel (#23826)
* image and card component
* change height of getting started panel
* progress
* setup basic step
* advanced steps
* step forward and backward
* do checks
* fix button size
* minor styling on butttons
* add correct links
* save tutorial click in localstorage
* types and gradients
* fix gradients
* use spacing variable
* lots of responsiveness
* add links to help
* Getting started work
* redo according to split panel design
* minor touch ups
* new background images
* split up docs card to different hrefs
* welcome bar touch ups
* hide icon on small screens
* transparent false on welcome banner
* fix urls
* source tag in welcome urls
* move images to panel dir, removed unused images
* Nicer loading message
* make the cards look nicer on wide screens
* append utm tag on render instead
* replace width with margin
* new background image for light
* remove target on a element
* removing buttonselect, add tag to href
* more polishing
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
(cherry picked from commit 36fa54a288)
* Chore: Fix strict null errors on getting started (#24605)
* fix strict nulls
* fix typings
(cherry picked from commit 1848900070)
* CircleCI: Upgrade grabpl in order to fix package publishing (#24609)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
(cherry picked from commit 03940c8471)
* Fix Safari Icon alignment (#24610)
(cherry picked from commit 04c75265b5)
* Transformations: Make transform dropdowns not cropped (#24615)
(cherry picked from commit 9e24c0944f)
* Inspect: Allow showing data without transformations and field config is applied (#24314)
* Inspect: Should not subscribe to transformed data
* PQR- allow controll whether or not field overrides and transformations should be applied
* UI for inspector data options
* fix
* Null check fix
* Update public/app/features/dashboard/components/Inspector/InspectDataTab.tsx
* Update public/app/features/dashboard/components/Inspector/InspectDataTab.tsx
* Apply transformations by default
* Update panel inspect docs
* Fix apply overrides
* Apply time formatting in panel inspect
* fix ts
* Post review update
* Update docs/sources/panels/inspect-panel.md
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* lazy numbering
* fix ts
* Renames
* Renames 2
* Layout update
* Run shared request without field config
* Minor details
* fix ts
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
(cherry picked from commit f23ecc40b4)
* Transformers: fix binary operation (#24604)
* check the display name
* remove unchanged line
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
(cherry picked from commit 97e2837d7c)
* SharedPreferences: fixes so UI Theme can be set back to Default (#24628)
(cherry picked from commit cd9cbe5e16)
* Datasource/CloudWatch: Prevents hidden dataframe fields from displaying in tables (#24580)
* Datasource/CloudWatch: Prevents hidden dataframe fields from displaying in tables
(cherry picked from commit 277aee8642)
* Datasource/CloudWatch: Correctly interpolate variables in CloudWatch Logs queries (#24619)
Closes#24603
(cherry picked from commit bfd337dd00)
* Explore: Fix rendering of react query editors (#24593)
* Fix rendering of react query editors
* Refactor solution for improved readability
* Update
* Add test coverage
* Refactor
(cherry picked from commit 285ea7595d)
* CloudWatch: Don't assume that errors are awserr.Error instances (#24641)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
(cherry picked from commit 8e5a3a578a)
* Zipkin: Fix error when span contains remoteEndpoint (#24524)
(cherry picked from commit 0f964c0214)
* Templating: fixes so Textbox variables get value from url (#24623)
(cherry picked from commit 622246d56d)
* Templating: fixes filtering options with more than 1000 entries (#24614)
* Templating: fixes filtering options with more then 1000 entries
* Chore: reduces strict null errors by 2
(cherry picked from commit 083a2ce220)
* PanelEdit: Make sure side pane is displayed with tabs by default (#24636)
* Make sure side pane is displayed with tabs by default
* Update e2e tests for
(cherry picked from commit f769ed035d)
* @grafana/ui: Update RadioButtonGroup documentation (#23143)
* Add "When to use" info to RadioButtonGroup.mdx
* Clarify more clearly when to use 'Select' instead
* Update RadioButtonGroup.mdx
Add line explaining why we want select for more than four options instead of a radio button group
* Update RadioButtonGroup.mdx
remove part about when elements are triggering changes.
Co-authored-by: Tobias Skarhed <tobias.skarhed@gmail.com>
(cherry picked from commit f1386c7892)
* Search: Fix select item pressing enter 404 (#24634)
* Remove appSubUrl for navigation
* stripBaseFromUrl
* Remove unused imports
(cherry picked from commit 37a2ac20c3)
* @grafana/ui: Buttons documentation (#23144)
* Add info: when to use which and how to mix buttons
* Update description for Button.mdx
- add note about scenario without primary action
- add note about secondary button being the default
* Refine docs info for secondary and destructive
Co-authored-by: Tobias Skarhed <tobias.skarhed@gmail.com>
(cherry picked from commit 54a90166a5)
* Datasource Config: adds back correct styles for autofill fields (#24671)
(cherry picked from commit 9481b7bcf2)
* Changelog and Readme: Update packages to beta and add Select breaking change (#24670)
(cherry picked from commit 85ae144a87)
* Orgs: Add future deprecation notice (#24502)
* Orgs: Fist draft of orgs deprecation infobox
* adds warning about potentially deprecating orgs (#24512)
* Updates
* Fixed ts issue
Co-authored-by: Carl Bergquist <carl@grafana.com>
(cherry picked from commit 2f22781cd8)
* Provisioning: Use proxy as default access mode in provisioning (#24669)
fixes#24591fixes#19501
(cherry picked from commit 7610d5717a)
* Fallback to process.cwd() when PWD is not present (#24677)
Fixes#24582 - Error running yarn dev command
(cherry picked from commit 660f2b4e99)
* SaveDashboard: Allow editing provisioned dashboard JSON and add confirmation when JSON is copied to dashboard (#24680)
(cherry picked from commit cfac591234)
* Units: adds scale symbol for currencies with suffixed symbol (#24678)
(cherry picked from commit 51509bb2ff)
* CloudWatch/Logs: Fix panic on multiple aggregations queries (#24683)
(cherry picked from commit c60765a178)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Docs: Updated instructions on screens for Dashboard Import (#24584)
* change text and image links
* Review feedback
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* uppercase JSON
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
(cherry picked from commit abfa1b5d74)
* CloudWatch: Unify look of query mode select between dashboard and explore (#24648)
(cherry picked from commit e754bcdcf9)
* Datasources: fixes async mount errors (#24579)
* Chore: updates Elasticsearch DataLinks test async wrapper mount
* Chore: updates Loki DervidedFields test async wrapper mount
* Chore: fixes typecheck issues
* Chore: small strict-null fix
(cherry picked from commit e11504dcd2)
* Editor: New line on Enter, run query on Shift+Enter (#24654)
* Editor: New line on Enter, run query on Shift+Enter
- default Enter behavior on query editor fields should be a new line
- special behavior should require a special key: running a query is now
done on Shift-Enter
- Plugins order had to be changed because when typeahead is shown, Enter
is accepting the suggestion
* Run with ctrl-enter, hint in query placeholder
* Fix Kusto field behavior for Enter
* Fix Kusto field behavior for default suggestion
(cherry picked from commit 01bbcf4eea)
* Add deprecation note about the unofficial first version of backend plugins (#24675)
(cherry picked from commit 0c8ee5b2c9)
* CloudWatch/Logs: Fix autocomplete after by keyword (#24644)
(cherry picked from commit 2b9cc8ba30)
* TablePanel: Do not include angular options in options when switching from angular panel (#24684)
(cherry picked from commit c59f5436c0)
* Datasources: fix pre styles (#24687)
(cherry picked from commit 7fbed90b89)
* @grafana/ui: Checkbox docs (#23141)
* Add "When to use" info to Checkbox.mdx
Added info about how checkboxes generally work and when to use another component instead.
* Replaced words with proper component names
* Update Checkbox.mdx
Elaborate on explanations. Add examples for how to use checkboxes the user-friendliest way.
* Apply suggestions from code review
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Co-authored-by: Tobias Skarhed <tobias.skarhed@gmail.com>
Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
(cherry picked from commit 405145fdd3)
* Logs: Fix total bytes process calculation (#24691)
- log stats for Loki are per query
- this change tracks the query stats by refId, preventing the summing of
the same stats across multiple series of the same response.
(cherry picked from commit 25e1238022)
* Strict null fixes: updates return type of getMessageFromError, fixes QueryOperationAction props (#24690)
* Chore: updates getMessageFromError return type
* Chore: updates the position of incorrectly placed bang operator
* Chore: updates typing on dropdown typeahead directive
* Chore: updates QueryOperationAction props to require title
* Revert "Chore: updates QueryOperationAction props to require title"
(cherry picked from commit ee12f5e742)
* Docs: Panel inspector release highlights (#24686)
* Add Panel inspector highlight
* Update CHANGELOG.md
* Update CHANGELOG.md
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
(cherry picked from commit e4cbeb5cb3)
* Explore: fixes loading more logs in logs context view (#24135)
(cherry picked from commit d3a8f6d026)
* Datasource/CloudWatch: Handle invalidation of log groups when switching datasources (#24703)
(cherry picked from commit 1b29d3460e)
* PanelInspect: Make header names reflect the field name in the exported CSV file (#24624)
* fix header names and filename
* use panel title as filename
* add frame argument
* escaping double quotes
* wrapping header name in quotes
* Fix replace
* Add test for csv double quotes escaping
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
(cherry picked from commit bf1e5aa16c)
* CloudWatch/Logs: Fix query error when results are sparse (#24702)
(cherry picked from commit bc8c05137b)
* Datasource/CloudWatch: Allows a user to search for log groups that aren't there initially (#24695)
Closes#24554
(cherry picked from commit 0e8638ec92)
* Transform: fixes so we match the field based on the proper name. (#24659)
* fixes so we match the transformer based on name properly.
* changed the signature on the FieldMatcher.
* introduced a names option so you can filter in name specificly.
* changed so the matcher UI uses the new options format.
* moved the exported functions together.
* changing editors a bit.
* made the filter by name work with both regex and name filtering.
* fixed failing tests and make sure we always parse regex the same way.
* removed unused code.
* simplified to make the existing field overrides still working.
* fixed issue reported by hugo.
* added tests for the name matcher.
* added tests for filter by name.
* added more tests.
(cherry picked from commit 96f26cbd5b)
* Fix: changing so we are using date/time values in UTC during test. (#24707)
(cherry picked from commit 98d5633601)
* Docs: generated a 7.0 version of the packages reference docs. (#24708)
* fixes so we match the transformer based on name properly.
* changed the signature on the FieldMatcher.
* introduced a names option so you can filter in name specificly.
* changed so the matcher UI uses the new options format.
* moved the exported functions together.
* changing editors a bit.
* made the filter by name work with both regex and name filtering.
* fixed failing tests and make sure we always parse regex the same way.
* removed unused code.
* simplified to make the existing field overrides still working.
* fixed issue reported by hugo.
* added tests for the name matcher.
* added tests for filter by name.
* added more tests.
* generated new version of the packages docs.
* fixed spelling error.
* regenerated the docs.
(cherry picked from commit 6a0abf895e)
* Query: do not require datasource name and id (#24718)
(cherry picked from commit b73d237bf8)
* Metrictank: Fixed updated schema and dedupe strategy (#24685)
* Metrictank: Fixed updated schema and dedupe strategy
* revert schema change
* fix
(cherry picked from commit 7fcf2615e1)
* Release 7.0.0
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* CircleCI: Upgrade build pipeline tool
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Co-authored-by: Leonard Gram <leo@xlson.com>
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
Co-authored-by: Andreas Opferkuch <andreas.opferkuch@gmail.com>
Co-authored-by: kay delaney <45561153+kaydelaney@users.noreply.github.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Peter Holmberg <peterholmberg@users.noreply.github.com>
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
Co-authored-by: David <david.kaltschmidt@gmail.com>
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com>
Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>
Co-authored-by: Rotem Reiss <reiss.r@gmail.com>
Co-authored-by: Agnès Toulet <35176601+AgnesToulet@users.noreply.github.com>
Co-authored-by: Jess <53754871+jessover9000@users.noreply.github.com>
Co-authored-by: Carl Bergquist <carl@grafana.com>
Co-authored-by: Lukas Siatka <lukasz.siatka@grafana.com>
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Chore: adds timeEpochNs to LogRowModel in @grafana/data
* Chore: updates explore utils ResultProcessor getLogsResult and explore utils tests
* Chore: updates core/logs_model to include nanoseconds
* Chore: updates LogRowModel sorting key from milliseconds to nanoseconds and adds timeEpochNs to tests
* Chore: adds timeEpochNs to LogRowModel mock in Explore LiveLogs test
* Chore: fixes logs model timeEpochNs padding
* Chore: updates timeEpochNs padding in tests
* Chore: updates LogRowModel mocks
* Chore: changes isLoki to datasourceId
* Chore: adds hasFieldWithNameAndType method to FieldCache in grafana-data dataframe
* Chore: changes timeEpochNs from number to string as it can overflow Number.MAX_SAFE_INTEGER
* Chore: updates LogRowModel sorting to use milliseconds and nanoseconds
* Chore: removes datasourceId from logSeriesToLogsModel method
* Chore: updates ResultProcessor tests to include nanosecond-level precision log rows sorting
* Prometheus: Add metadata for summary metrics
- summary metrics don't have metadata available from the metadata API,
so Grafana can help and just add it
- given a summary metric `foo`, we add metadata info for `foo_sum` and
`foo_count`
- with tests
* Update public/app/plugins/datasource/prometheus/language_utils.ts
Co-authored-by: gotjosh <josue@grafana.com>
Co-authored-by: gotjosh <josue@grafana.com>
* added timezone override information.
* added usp.
* added some code comments.
* added more documentation of the date and time functionality.
* Update docs/sources/reference/timerange.md
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* some small adjustments.
* fixed comments according to feedback.
* Update packages/grafana-data/src/datetime/parser.ts
* Update packages/grafana-data/src/datetime/parser.ts
* Update packages/grafana-data/src/datetime/parser.ts
* fixed final feedback.
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* common title handling
* show labels
* update comment
* Update changelog for v7.0.0-beta1 (#24007)
Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-Authored-By: Andrej Ocenas <mr.ocenas@gmail.com>
Co-Authored-By: Hugo Häggmark <hugo.haggmark@grafana.com>
Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
* verify-repo-update: Fix Dockerfile.deb (#24030)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* CircleCI: Upgrade build pipeline tool (#24021)
* CircleCI: Upgrade build pipeline tool
* Devenv: ignore enterprise (#24037)
* Add header icon to Add data source page (#24033)
* latest.json: Update testing version (#24038)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Fix login page redirected from password reset (#24032)
* Storybook: Rewrite stories to CSF (#23989)
* ColorPicker to CSF format
* Convert stories to CSF
* Do not export ClipboardButton
* Update ConfirmButton
* Remove unused imports
* Fix feedback
* changelog enterprise 7.0.0-beta1 (#24039)
* CircleCI: Bump grafana/build-container revision (#24043)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Changelog: Updates changelog with more feature details (#24040)
* Changelog: Updates changelog with more feature details
* spell fix
* spell fix
* Updates
* Readme update
* Updates
* Select: fixes so component loses focus on selecting value or pressing outside of input. (#24008)
* changed the value container to a class component to get it to work with focus (maybe something with context?).
* added e2e tests to verify that the select focus is working as it should.
* fixed according to feedback.
* updated snapshot.
* Devenv: add remote renderer to grafana (#24050)
* NewPanelEditor: minor UI twekas (#24042)
* Forward ref for tabs, use html props
* Inspect: add inspect label to drawer title
* Add tooltips to sidebar pane tabs, copy changes
* Remove unused import
* Place tooltips over tabs
* Inspector: dont show transformations select if there is only one data frame
* Review
* Changelog: Add a breaking change (#24051)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* CircleCI: Unpin grafana/docs-base (#24054)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Search: close overlay on Esc press (#24003)
* Search: Close on Esc
* Search: Increase bottom padding for the last item in section
* Search: Move closing search to keybindingsSrv
* Search: Fix folder view
* Search: Do not move folders if already in folder
* Docs: Adds deprecation notice to changelog and docs for scripted dashboards (#24060)
* Update CHANGELOG.md (#24047)
Fix typo
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
* Documentation: Alternative Team Sync Wording (#23960)
* Alternative wording for team sync docs
Signed-off-by: Joe Elliott <number101010@gmail.com>
* Update docs/sources/auth/team-sync.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Fix misspell issues (#23905)
* Fix misspell issues
See,
$ golangci-lint run --timeout 10m --disable-all -E misspell ./...
Signed-off-by: Mario Trangoni <mjtrangoni@gmail.com>
* Fix codespell issues
See,
$ codespell -S './.git*' -L 'uint,thru,pres,unknwon,serie,referer,uptodate,durationm'
Signed-off-by: Mario Trangoni <mjtrangoni@gmail.com>
* ci please?
* non-empty commit - ci?
* Trigger build
Co-authored-by: bergquist <carl.bergquist@gmail.com>
Co-authored-by: Kyle Brandt <kyle@grafana.com>
* fix compile error
* better series display
* better display
* now with prometheus and loki
* a few more tests
* Improvements and tests
* thinking
* More advanced and smart default title generation
* Another fix
* Progress but dam this will be hard
* Reverting the time series Value field name change
* revert revert going in circles
* add a field state object
* Use state title when converting back to legacy format
* Improved the join (series to columsn) transformer
* Got tests running again
* Rewrite of seriesToColums that simplifies and fixing tests
* Fixed the tricky problem of multiple time field when not used in join
* Prometheus: Restoring prometheus formatting
* Graphite: Disable Grafana's series naming
* fixed imports
* Fixed tests and made rename transform change title instead
* Fixing more tests
* fix more tests
* fixed import issue
* Fixed more circular dependencies
* Renamed to getFieldTitle
* More rename
* Review feedback
* Fix for showing field title in calculate field transformer
* fieldOverride: Make it clear that state title after applying defaults & overrides
* Fixed ts issue
* Update packages/grafana-ui/src/components/TransformersUI/OrganizeFieldsTransformerEditor.tsx
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
Co-authored-by: Leonard Gram <leo@xlson.com>
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>
Co-authored-by: Richard Hartmann <RichiH@users.noreply.github.com>
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
Co-authored-by: Joe Elliott <joe.elliott@grafana.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Mario Trangoni <mario@mariotrangoni.de>
Co-authored-by: bergquist <carl.bergquist@gmail.com>
Co-authored-by: Kyle Brandt <kyle@grafana.com>
* Correcting one of the usage in documentation
* Correcting usage of a word
* Correcting usage of a word in docs
* Correcting same word in 2 more occurrences
* Correcting a word in docs
* Correcting a word in docs
* Update docs/sources/variables/advanced-variable-format-options.md
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Incorporated reviewer's suggestion in other occurrences
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
- the stats label changed in the original PR, so the custom key did no
longer work, this change fixes it and the total bytes processed show up
in the explore logs meta data
* Search: Do not set items if no results returned
* Search: Simplify canSave logic
* Search: Add initialLoading state
* Search: Add itemsFetching state to folder
* Search: Fix props and tests
* Search: Fix strict null check
* Chore: removed regex from LokiQuery
* Chore: removes parseQuery from Loki datasource
* Chore: removes regex param from format query in lokiStreamsToDataframes in Loki result transformer
* Chore: updates formatQuery and removes parseQuery from Loki query utils
* Chore: removes highlighter test with unsupported syntax from Loki query utils
* fixed a couple of bad links.
* adjusted so we use the correct type of links.
* cleaning up links regarding edit/viewing panels.
* fixing edit link.
* reverted back to panelId for the image urls.
* reverted back.
* remvoed the editPanel: null since it is obsolete.
* Moved files
Moved files from guides folder into getting-started folder, added aliases, added Intro to histograms topic
* Updated links
* Update intro-histograms.md
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
* Prometheus: Add off switch for metric/label name lookup
This will help users with amounts of metric name
data that is too much for a browser to handle.
Autocomplete will be disabled and metrics chooser hidden,
since obviously both rely on this data.
Fixes#22702
* Use onUpdateDatasourceJsonDataOptionChecked
... from `@grafana/data`. Refactor naming to faciliate its
use and stick with prop names as passed down from
`ConfigEditor`.
PLUS:
- Rephrase switch label, add a tooltip and reduce the
size of the to what "Custom query parameters" originally
was.
- Change `languageProvider` type in `PromQueryField`.
* Put language provider back in
Functions and history still work, even when metrics
lookup gets disabled.
Also: Rewording of setting.
* Display a message when lookup got disabled manually
* Call property for setting disableMetricsLookup
* Show disabled metrics chooser instead of warning
* first things
* extract dropdown to component
* sanitize links and titles
* fix import
* remove console log and move typings
* SAML Role and Team sync (open source part) (#23391)
* SAML: add default params for role and team sync
* SAML: add org_mapping option
* SAML: support allowed_organizations option
* Chore: expose RedirectWithError from HTTPServer
* Chore: return RedirectResponse (fix superfluous response.writeheader message)
* HTTPServer: expose ValidateRedirectTo() and CookieOptionsFromCfg()
* Config: move SAML section to the enterprise
* Forms migration: Change password (#23623)
* Migrate ChangePassword
* Add validation
* FieldOverrides: UI updates (#23630)
* UI improvements for field overrides
* Update tests
* Fix missing key
* Fix e2e
* docs/sources/features/datasources/graphite.md: Fix typos
* Inspect: Transformers (#23598)
* WIP: Inspect transformers
* Updated
* Transformations working in inspect drawer and series to columns working as normal transformation
* Minor name change
* Updated
* Updated
* Fix: fixes crash with dataFrameIndex out of bounds
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
* Search: migrate manage dashboards (#23530)
* Search: add search wrapper
* Search: add DashboardSearch.tsx
* Search: enable search
* Search: update types
* Search: useReducer for saving search results
* Search: use default query
* Search: add toggle custom action
* Search: add onQueryChange
* Search: debounce search
* Search: pas dispatch as a prop
* Search: add tag filter
* Search: Fix types
* Search: revert changes
* Search: close overlay on esc
* Search: enable tag filtering
* Search: clear query
* Search: add autofocus to search field
* Search: Rename close to closeSearch
* Search: Add no results message
* Search: Add loading state
* Search: Remove Select from Forms namespace
* Remove Add selectedIndex
* Remove Add getFlattenedSections
* Remove Enable selecting items
* Search: add hasId
* Search: preselect first item
* Search: Add utils tests
* Search: Fix moving selection down
* Search: Add findSelected
* Search: Add type to section
* Search: Handle Enter key press on item highlight
* Search: Move reducer et al. to separate files
* Search: Remove redundant render check
* Search: Close overlay on Esc and ArrowLeft press
* Search: Add close button
* Search: Document utils
* Search: use Icon for remove icon
* Search: Add DashboardSearch.test.tsx
* Search: Move test data to a separate file
* Search: Finalise DashboardSearch.test.tsx
* Add search reducer tests
* Search: Add search results loading indicator
* Search: Remove inline function
* Search: Do not mutate item
* Search: Tweak utils
* Search: Do not clear query on tag clear
* Search: Fix folder:current search
* Search: Fix results scroll
* Search: Update tests
* Search: Close overlay on cog icon click
* Add mobile styles for close button
* Search: Use CustomScrollbar
* Search: Memoize TagList.tsx
* Search: Fix type errors
* Search: More strictNullChecks fixes
* Search: Add ManageDashboards.tsx
* Search: Add mergeReducers
* Search: Use mergeReducers
* Search: remove default state from reducers
* Search: Fix recent and starred icons
* Search: Enable search
* Search: Add markup
* Search: Separate manageDashboardsReducer
* Search: Add DashboardActions.tsx
* Use new Select for TagFilter
* Search: Use TagFilter for search filters
* Search: Use TagList
* Search: Add toggleSection
* Search: Add more actions
* Search add manageDashboards.test.ts
* Search: Add getCheckedUids
* Search: Add modify and toggle checked actions
* Search: Update tests
* Search: Update component template
* Search: Enable section toggle
* Search: Derive canMove and canDelete
* Search: Handle delete items
* Search: Fix tests
* Search: Enable toggle items
* Search: Add confirm modal subtitle
* Search: Use theme vars
* Search: Add getCheckedDashboardsUids
* Search: Add MoveToFolderModal
* Search: Enable moving dashboards
* Search: Fix strict null checks errors
* Search: Fix strict null checks errors[2]
* Search: Enable filters
* Search: Add useSearchQuery.ts
* Search: Toggle items when toggling all
* Search: Update useSearchQuery to accept custom params
* Search: Add useSearchQuery to dashboard search
* Search: use SearchField for manage dashboards
* Search: Remove event param from query change
* Search: Add base search hooks
* Search: refactor useSearch to accept reducer
* Search: use useDashboardSearch hook
* Search: Fix useSearchQuery params
* Search: Enable folder search
* Search: Update tests
* Search: Pass the props to manage-dashboards
* Search: Add search filters margin
* Search: Remove search-field-wrapper class and hide logic for it
* Search: Adjust SearchField styles
* Search: Move search-results-container inside SearchResults
* Search: Fix type errors
* Search: Add EmptyListCTA
* Search: Update move message
* Search: Cleanup
* Search: Add todo
* Search: Fix action type
* Search: Use React wrapper vs FolderDashboardsCtrl and DashboardListCtrl
* Search: DashboardList => DashboardListPage
* Search: Remove ManageDashboards from angular_wrappers
* Minor style tweaks
* Search: Use LinkButton
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* PanelEditorTabs: adds counter to Query, Alert and Transform (#23645)
* Transformers: changes reduce transformer (#23611)
* Transformers: changes reduce transformer
* Refactor: fixes lenght of frame
* Minor tweaks and polish
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Docs: Grafana internal metrics update (#23448)
* Update metrics.md
* Updated metrics.md and configuration.md
* Added links to data sources
* Update metrics.md
* Update docs/sources/administration/metrics.md
Co-Authored-By: Carl Bergquist <carl@grafana.com>
Co-authored-by: Carl Bergquist <carl@grafana.com>
Co-authored-by: bergquist <carl.bergquist@gmail.com>
* Remove temporary NewPanelEditorContext (#23652)
* Toolkit: Update slim debian image for e2e testing (#23629)
* Because alpine uses musl instead of libc, the e2e/cypress was not compatible
So:
- Created new VM based on debian-slim
- Could also be used as a build VM
Fixes:
- ginstall issue with merge somewhere.
- Trimmed down the alpine VM since we don't need the extra libraries for cypress
* Fix: Don't need cp on debian
Fix: Don't use /bin/sh on debian. Only for alpine. Use /bin/bash on debian
Fix: Missing dependencies to e2e tests
* Tweaks and comments for ci-improvements, stability, and readibility (#23658)
* Tweaks and comments for ci-improvements, stability, and readibility
- Made naming more obvious and intuitive
- CI supports grafana e2e plus more granular design
(side effect that it takes slightly longer, but negligable)
- disable strict e2e errors through environment variable
- Added tools for linting and for building plugin-ci
* feedback from stevev - remove version. Causes problems
* Overrides: Show option group counters for options that represent collections (#23655)
* NewPanelEdit: Minor edit mode fixes (#23666)
* Minor edit mode fixes
* Updated
* NewPanelEditor: Save dashboard from edit mode now works, and other fixes (#23668)
* QueryEditors: include error when no data is returned (#23632)
* toDataFrame: detect field properties using in rather than hasOwnProperty (#23673)
* Bundled Plugins: fix build issues with DirectInput (#23640)
* pass query error
* and the root
* not optional
* building bundled plugin
* missing file
* remove other branch
* fix prettier
* Docs: Update README.md (#23660)
* Docs: Update documentation-style-guide.md (#23659)
Added Divio link
* Dashboard: Add fields in DashboardMeta (#23647)
* Fix: grafana/ui imports (#23680)
* Prometheus: Fixed error in PromLink
* Prometheus: Fixed error in PromLink, fixed ts issue
* FieldOverride: Support data links via field overrides (#23590)
* Move xss and sanitize packages to grafana-data
* Move text, url and location utils to grafana-data
* Move grafana config types to grafana-data
* Move field display value proxy to grafana-data
* Fix
* Move data links built in vars to grafana-data
* Attach links supplier to when applying field overrides
* Prep tests
* Use links suppliers attached via field overrides
* locationUtil dependencies type
* Move sanitize-url declaration to grafana-data
* Revert "Move sanitize-url declaration to grafana-data"
This reverts commit 11db9f5e55.
* Fix typo
* fix ts vol1
* Remove import from runtime in data.... Make TS happy at the same time ;)
* Lovely TS, please shut up
* Lovely TS, please shut up vol2
* fix tests
* Fixes
* minor refactor
* Attach get links to FieldDisplayValue for seamless usage
* Update packages/grafana-data/src/field/fieldOverrides.ts
* Make storybook build
* NewPanelEdit: Improvements to angular panels and other fixes (#23678)
* Removed old editor components
* Angular panel improvements
* Progress
* Updated tests
* Simple persistence for angular panel option state
* Improving graph edit experiance
* Improving series overrides
* updated e2e test
* Regstry: refactoring
* Table: Improvements to column resizing, style and alignment (#23663)
* Table: Fixed to column alignment
* testing table state reducer
* Styles starting to work
* Persisting column resize now works
* Trying to fix Table storybook stories
* Minor updates
* fixed ts issue
* Table: Support duplicate field names, and use data frame directly instead of copying data and other improvements (#23681)
* Poc at use data frame directly
* working ok
* Table improvements
* Alertmanager: Basic auth should not be required (#23691)
* Storybook: Small fixes (#23692)
* Fix getLogLevelFromKey when non-string supplied (#23654)
* Fix failing master (#23702)
* Store: Error handling for setObject (#23650)
* Error handling for setObject to store
* Update public/app/core/store.ts
Co-Authored-By: kay delaney <45561153+kaydelaney@users.noreply.github.com>
* Update public/app/features/explore/RichHistory/RichHistory.tsx
Co-Authored-By: kay delaney <45561153+kaydelaney@users.noreply.github.com>
* Move setState outside of try-catch block
Co-authored-by: kay delaney <45561153+kaydelaney@users.noreply.github.com>
* Drawer: align component style with PanelInspector (#23694)
* Drawer: add subtitle, expandable button and refactor style
* Drawer: update header style and z-index
* Drawer: refactor Drawer component and PanelInspector
* PanelInspector: add expandable
* Drawer: update stories with new props
* Inspector: rename InspectHeader -> InspectSubtitle
* Inspector: fix tabs spacing
* Drawer: remove z-index
* Update public/app/features/dashboard/components/Inspector/InspectSubtitle.tsx
Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>
* Drawer: apply PR feedbacks
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Provisioning: Allows specifying uid for datasource and use that in derived fields (#23585)
* Add uid to datasource
* Fix uid passing when provisioning
* Better error handling and Uid column type change
* Fix test and strict null error counts
* Add backend tests
* Add tests
* Fix strict null checks
* Update test
* Improve tests
* Update pkg/services/sqlstore/datasource.go
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
* Variable rename
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Refactor search (#23550)
Co-Authored-By: Arve Knudsen <arve.knudsen@grafana.com>
Co-Authored-By: Leonard Gram <leonard.gram@grafana.com>
* Search: Toggle Search based on search query (#23648)
* Search: Toggle Search based on search query
* Search: Fix types and closed search param
* Search: Remove appEvents from SearchWrapper
* Search: Reset folder on close
Co-Authored-By: Alexander Zobnin <alexanderzobnin@gmail.com>
* Search: Disable reloadOnSearch for manage dashboards urls
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
* Search: Fix title search null pointer (#23705)
* Add ServerlessDatabaseCapacity to AWS/RDS metrics (#23635)
* Dashboard: Add failsafe for slug generation (#23709)
* Transformers: calculate a new field based on the row values (#23675)
* TableCell: show JSON rather than [object Object] (#23683)
* NewPanelEditor: Move visualisation picker to the sidebar pane (#23696)
* Move visualisation picker to the sidebar pane
* Remove vis tab from bottom pane
* Visualisation to panel type title
* docs/sources/features/dashboard/dashboards.md: Improve language
* docs/sources/installation/configuration.md: Improve language
* docs/sources/administration/metrics.md: Improve language
* CSS: Various css bug fixes (Safari fix for graph panels and more) (#23704)
* CSS: Various css bug fixes
* Updated
* InputDatasource: Fixed prettier errors (#23679)
* InputDatasource: Fixed prettier errors
* Fixed prettier config in toolkit to make it consistent with grafana core prettier config
* Docs: run the api-extractor on master to update docs (#23726)
* regenerated packages docs.
* fixed spelling issues.
* fixed spelling issues.
* Input: Width prop (#23615)
* Add width property
* Remove unused import
* Spelling mistake
* Add width to interface
* Make width optional
* Remove size
* Update snapshot
* Remove size from places
* Add size prop for button
* Update width
* Update snapshots
* Docs: Datasource uid docs (#23700)
* @grafana/ui: Fix login icon (#23732)
* Fix sign in button
* Fix modal button in button
* Dashboard: Update tests for testing fallback support (#23730)
* Form migrations: Final components to LegacyForms (#23707)
* FormField to LegacyForms
* FormLabel to InlineFormLabel
* Move SecretFormField to LeagcyForms
* NewPanelEditor: UI update of add panel widget (#23715)
* Small update proposal to add panel widget
* Fix smoketest
* Minor tweaks
* update snaps god damn it
* Tracing: Add some error handling to JaegerQueryField (#23599)
* docs/sources/plugins/developing/datasources.md: Improve language
* Search: raise service init prio (#23740)
* Remove file (#23741)
* Backend plugins: Renderer v2 plugin (#23625)
grafana-plugin-model is legacy and is replaced by new backend
plugins SDK and architecture. Renderer is not part of SDK and
we want to keep it that way for now since it's highly unlikely there
will be more than one kind of renderer plugin.
So this PR adds support for renderer plugin v2.
Also adds support sending a Device Scale Factor parameter to the
plugin v2 remote rendering service and by that replaces #22474.
Adds support sending a Headers parameter to the plugin v2 and
remote rendering service which for now only include
Accect-Language header (the user locale in browser when using
Grafana), ref grafana/grafana-image-renderer#45.
Fixes health check json details response.
Adds image renderer plugin configuration settings in defaults.ini
and sample.ini.
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
* UI: Adds option to limit number of visible selected options for Select component (#23722)
* UI: Adds option to limit number of visible selected options to Select component
* Prettier: Add prettier config that imports prettier from toolkit (#23729)
* TextArea: Fixed default height (#23743)
* Image Rendering: Make it work using serve_from_sub_path configured (#23706)
Make rendering work when using serve_from_sub_path and not have rendering.renderer_url configured.
Fixes#21925
* docs/sources/tutorials/ha_setup.md: Fix typo
* Docs: Grammatical correction in documentation (#23752)
* Tracing: Change color palette. (#23656)
* Docs: Minor typo fix in documentation (#23745)
* TablePanel: avoid toArray for memoizedData (#23744)
* DevEnv: Revert to clean stale assets (#23742)
* Dashboard import: Bug fixes (#23591)
* clear dashboard on unmount
* fix menu z-index, folderpicker width
* fix issue with saving dashboard in another folder
* use foldermodel instead of selectablevalue
* using z-index from theme
* updated names
* update snapshot
* remove size from folderpicker
* use connectWithCleanup
* update snapshot
* docs/sources/features/explore/index.md: Fix language
* Docker: Fix root docker file build (#23772)
Fixes#23754
* Search: Load folder page (#23768)
* Drawer: update z-index to show tooltips (#23770)
* DataSourceProxy: Handle URL parsing error (#23731)
* pluginproxy: Handle URL parsing error
* pkg/api: Validate data source URLs
* pkg/api: Return 400 for URL validation error
* Dockerfile: Copy in the tools directory, to fix build (#23773)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* E2E: Fixed e2e test issue due to change in testdata scenario change logic (#23774)
* VizRepeater: fixed issue with resolved auto orientation passed back from VizRepeater (#23767)
* VizRepeater: fixed issue with resolved auto orientation passed back from VizRepeater
* Updated variable name
* Transformers: adds labels as columns transformer (#23703)
* Transformers: adds labels as columns transformer
* Refactor: adds support for same timestamps with different labels
* Refactor: adds basic transform ui
* Refactor: adds sorted result
* Refactor: renames transformer
* Transformations: Improve UI and add some love to filter by name (#23751)
* Change filterByName options to accept arrays instead of strings
* Improve transformations UI
* Minor updates
* Minor UI changes
* Review
* Datasource/Loki: Remove code dealing with legacy Loki endpoints (#23437)
* Docs: Move Postgres version warning and remove details (#23782)
* docs/sources/installation/upgrading.md: Fix language
* UI: add InfoBox component (#23701)
* UI: inherit LinkButton props from ButtonHTMLAttributes
* Chore: fix implicit any
* UI: add InfoBox component
* UI: fix InfoBox border color
* Chore: use new style for defining stories
* Chore: InfoBox refactor
* Chore: inherit className attribute from HTMLDivElement
* Select: Fixed z-index issue (#23786)
* Forms migration: LayoutSelector (#23790)
* Buttons: Center text in buttons (#23789)
* Buttons: Center buttons
* Updated size of transformation button
* removed snapshot
* Transformations: Make sidebar subscribe to panel's query runner (#23785)
* Make panel edit sidebar options use lates data from panel query runner
* Update select's z-index
* Review
* Logs: Add href to internal link (#23757)
* PanelEditor: stores option group collapse state (#23781)
* PanelEditor: stores option group collapse state
* Refactor: adds props to OptionsGroup instead
* Docs: Correcting a reference link in documentation (#23747)
* Correcting a reference link in documentation
* Changed link as relative path, as asked by reviewer
* Search add sorting picker (#23746)
* Search: Extend search_srv with getSortOptions
* Search: Enable sorting
* Search: Fullwidth search
* Search: Add SortPicker
* Search: Add useSearchLayout
* Search: Update sort query
* Search: Refactor items rendering
* Search: Add sort to manage dashboards
* Search: Add sort icon
* Search: Mock getSortOptions
* Search: Fix Select sizes
* Search: Move SortPicker to Select
* Grafana-UI: Add ActionRow.tsx
* Grafana-UI: Use ActionRow in dashboard search
* Grafana-UI: Update ActionRow styles
* Search: Update tests
* Search: enable clearing TagFilter
* Search: Move getSortOptions outside of component
* Search: Fix import
* Search: Limit container width
* Search: Replace SearchField's clear text with icon
* Search: Fix section items query #23792
* Search: Add icons for layout switch
* Search: Remove layout switch for folder page
* Search: Fix strict null errors (#23804)
* Transformations: debug mode tweaks (#23802)
* Transformations: UI tweaks, filter by name regex validation (#23800)
* Add validation to filter by name regex, minor layout tweaks
* Use cards uin for non configured transformations
* UI Docs: ColorPicker component group (#23366)
* Create .mdx for ColorPicker component group
Describes the building blocks of the component and how they work together.
* Rename ColorPicker.mdx to ColorPicker.story.mdx
* Update packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.mdx
Clean up tags
Co-Authored-By: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
* Update packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.mdx
Co-Authored-By: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
* Explore: Fix split functionality (#23801)
* Fix splitting functionality, remove passing of parameters from button
* Format comment
* Security: Fix annotation popup XSS vulnerability (#23813)
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Typeahead: Fix z-index (#23809)
* Plugins: show signing status on datasources and plugins (#23542)
* show signing status
* show signing status
* Progress on signed badge style
* Progress on signing status look and updated card background
* Updates
* Transforms card tweak
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* CircleCI: Upgrade shellcheck to v0.7.1 and pin version (#23815)
* CircleCI: Upgrade shellcheck to v0.7.1 and pin version
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Table: Add default cell link style and tooltip to data links in table (#23818)
* TablePanel: Fix XSS issue in header column rename (#23816)
* prevent xss
* added escaping on tooltip.
* Rebase done
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* Rendering: makes sure IsAvailable can be used during init of other services (#23817)
* Rendering: makes sure service knows if it is configured after Init()
* Rendering: refactor
* Transformations: Organise fields transformer fixes & detailing (#23812)
* Transformers: Organise fields transformer detailing
* Table header cell - fix text overflowing columns
* Backend: Remove Go vendor folder (#23796)
* CHANGELOG.md: Update (#23831)
* CHANGELOG.md: Update
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Update latest.json (#23833)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Backend Plugins: (breaking change) Add PluginContext (#23788)
* breaking change for newer backend plugins
* use exported protobuf converters and sdk types to reduce duplicate code
* uses grafana-plugin-sdk-go@v0.54.0
* NewPanelEditor: don't break when plugin is skipDataQuery (#23836)
* Tracing: Remove feature flag (#23834)
* Logs: Derived fields link design update (#23695)
* Toolkit: fixes for security and publishing (#23749)
* Fixes and security patches:
1. Always keep the source directory, just don't package the source
2. Do not publish the SSH key for common plugin tasks.
Changed to environment variable
* env variable renamed.
* Re-added the src remove
* touch config.yml for rebuild
* NewDataSourcePage: Restore signature badge lost in merge (#23832)
* NewPanelEditor: bring back queries not being run on editmode navigation (#23837)
* Docs: URL update to Relref to repair broken links (#23783)
* NewPanelEditor: Panel edit tweaks (#22415)
* NewPanelEditor: Alternative edit layout
* Fixed full height issue
* panel-edit-tabs experiment
* minor tweaks
* PanelEditor: Minor tweaks
* Docs: URL update to Relref to repair broken links
Rewrote URL references in the text for the Administration guide
and older Whats New page to repair broken links, and change
to the Relref format to build the website with Hugo.
Closes#22378
* Remove stale file, caught in this
branch and PR from my Fork. contribute/style-guides/markdown-style-guide.md
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* e2e: adds inspect drawer tests (#23823)
* Explore: Create basic E2E test
* Feature: adds e2e tests for panel inspector
* Refactor: adds ts-ignore because of type checking errors
* Refactor: changes after PR comments and updates snapshot
* Refactor: adds typings back for IScope
* Refactor: changes after PR comments
Co-authored-by: Andreas Opferkuch <andreas.opferkuch@gmail.com>
* Form migrations: Teams and alert list (#23810)
* Basic migration
* Update test
* Fix feedback
* Forms migration: Data/Panel link editor (#23778)
* DataLink input to new form styles
* Make Angular work with inline editor
* Remove onRemove and desiableRemove
* Remove DataLinksEditor
* Change order of inputs
* Enable syntax highlight
* Fix datalinks for Elastic
* Fix PromQuery cascader when selected option has no children (#23835)
* Adding debug line to search ldap. (#23824)
* Search/virtualize list (#23710)
* Search: Add FixedSizeList for result items
* Search: Move SectionHeader to a separate file
* Search: Add useListHeight hook
* Search: Fix horizontal scrollbar
* Search: Remove custom scrollbar
* Search: Do not fetch dashboard folder on route change
* Search: Update tests
* Search: Remove extra checkbox renders
* Search: Move wrapper ref outside search results
* Search: Fix param type
* Search: Fix merge conflicts
* Search: Virtualize dashboard list
* Search: Update layout
* Search: Pass wrapper to search results
* Search: Update dashboard redirect
* Search: Remove unused css
* Search: Revert config
* Search: Use AutoSizer
* Search: Remove redundant appEvents call
* Search: Use List layout in folder view
* Transformations: Simple fix for labels to fields problem with time series field names (#23828)
* Simple fix for labels to fields transform problem
* Added unit test
* dsproxy: adds support for url params for plugin routes (#23503)
* dsproxy: adds support for url params for plugin routes
* docs: fixes after review
* pluginproxy: rename Params to URLParams
* Update pkg/plugins/app_plugin.go
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
* Apply suggestions from code review
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
* pluginproxy: rename struct
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Alerting: Handle image renderer unavailable when edit notifiers (#23711)
If no image renderer available/installed when adding a new alert notification
channel will set Include image to false per default, otherwise true as before.
If no image renderer available/installed when adding/edit alert notification
channel will show an informational message that you need to install the
Grafana Image Renderer plugin for Grafana to be able to render an image.
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Alerting: Upload error image when image renderer unavailable (#23713)
When Include image is enabled for an alert notification channel, but there's
no image renderer available/installed when sending notification an error
image will be uploaded/attached explaining that you need to install the
Grafana Image Renderer plugin.
Ref #13802
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
* Metriktank: Linage UI updates (#23848)
* e2e: adds e2e for panel edit (#23849)
* Explore: Create basic E2E test
* Feature: adds e2e tests for panel inspector
* Refactor: adds ts-ignore because of type checking errors
* Refactor: changes after PR comments and updates snapshot
* Refactor: adds typings back for IScope
* e2e: adds e2e for panel edit
Co-authored-by: Andreas Opferkuch <andreas.opferkuch@gmail.com>
* CloudWatch: Prefer webIdentity over EC2 role also when assuming a role (#23807)
Same as #23452 but for assumed roles.
When using service accounts (webIdentity) on EKS in combination
with assuming roles in other AWS accounts Grafana needs to retrieve
the service account credentials first and then needs to assume the
configured role.
* Devenv: fix prometheus scrape ips (#23850)
* Devenv: fix prometheus scrape ips
* Devenv: fix grafana in devenv reference
* Devenv: fixes prom random data reference
* Docker: Upgrade to Ubuntu 20.04 in Dockerfiles (#23852)
* Chore: Upgrade to Ubuntu 20.04
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* PanelEditor: Fixed switch tabs (#23859)
* Grafana-UI: Extend Layout props (#23771)
* Grafana-UI: Extend Layout props
* Grafana-UI: Merge container styles
* Search: Fix prop types
* Grafana-UI: remove className prop
* Dashboard: Handle no renderer available in panel share dialog (#23856)
Show a message when sharing dashboard panel on the Link tab and
there's no renderer available/installed.
Ref #13802
* Storybook sorting (#23857)
* Resort Icon.story.tsx into Docs Overview category
* Make CallToActionCard.story.tsx internal
* Move ThemeColors to Docs Overview category
* Move Tag.story.tsx to Forms category
* Move TagList.story.tsx to Forms category
Co-authored-by: Clarity-89 <homes89@ukr.net>
* Tracing: Zipkin datasource (#23829)
* Search: cleanup old Angular files (#23860)
* Search: Remove wrapperRef
* Search: Remove angular search files
* Search: Unify search types
* Search: Remove redundant hideHeader prop
* Search: Remove app/types/search.ts
* Search: Update imports
* Search: Fix type errors
* Migration: Alerting - notifications list (#22548)
* Handle empty list
* Connect to redux
* Finish migration
* Remove comments
* Remove old files
* Remove console log
* Remove old import
* Forgot to add the new button
* Fix href
* Fix feedback
* Rich history: Fix create url and run query & style updates (#23627)
* Styling updates
* Create getQueryFromDisplayText method for Jaeger, Loki, Prometheus
* Fix createLink and runQuery methods for all datasources
* Update test
* Update Select from Legacy to current
* Update filtering
* Update public/app/core/utils/richHistory.test.ts
* Fix strictnullcheck errors
* Remove getQueryFromDisplayText method, as not needed
* Update saving of full query and use displayText for formatting
* Update tests
* Refactor create data query
* Remove parsing, store object instead
* Fix formatting error
* Remove object checking, transform everything to DataQuery
* Remove console.log
* Rename migrate function, add datasourceName as a useEffect dependency
* Fix z-index, move query
* Packages: Bundle plugins (#23787)
* Add manifest for external plugins
* CircleCI: Build internal plug-ins
* CircleCI: Package internal and external plug-ins
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Search: Improving search look and feel (#23854)
* Search: Improving search look and feel
* Fixed issue with tag filter beeing cramped and wrapping tags
* Minor tag polish
* fixed type
* adds template for backend datasource (#23864)
* Zipkin: Add method to display query text (#23870)
* Docs: Add version note about Stackdriver SLO queries (#23844)
Ref #22917
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Revert rc-slider dependency update, add z-index to tooltip (#23873)
* Search: Improvements to design (#23874)
* Search: updated design
* Fixed z-index
* Fixes
* Minor pixel push
* NewPanelEditor: Make variables wrap and small layout refactor (#23862)
* NewPanelEditor: Make variables wrap and small layout refactor
* review fix
* Singlestat: Adds migration button and logic to migrate singlestat to stat panel (#23845)
* Singlestat: Migration button to migrate to new stat panel
* updated test
* ManageDashboards: Fixes and improvements (#23879)
* ManageDashboards: Fixes and improvements
* Fixed tests
* Fixed issue with item height and margin
* RadioButtons: Updates design and no longer full width in panel edit (#23883)
* Migration: Admin org edit page (#23866)
* Start migration
* Migrate admin org edit page
* NewPanelEditor: adjust panel menu items (#23888)
* Minor grammatical correction (#23885)
* Minor change for better readability (#23884)
* NewPanelEditor: increase sidebar min width, value mappings radio no longer full width (#23889)
* Docs: Plugin docs for Dataframes (#23483)
Co-authored-by: Carl Bergquist <carl@grafana.com>
Co-authored-by: bergquist <carl.bergquist@gmail.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Marcus Olsson <accounts+github@marcus.se.net>
* PanelPlugin: add deprecation notice to setEditor method (#23895)
* Datasource/Cloudwatch: Adds support for Cloudwatch Logs (#23566)
* Datasource/Cloudwatch: Adds support for Cloudwatch Logs
* Fix rebase leftover
* Use jsurl for AWS url serialization
* WIP: Temporary workaround for CLIQ metrics
* Only allow up to 20 log groups to be selected
* WIP additional changes
* More changes based on feedback
* More changes based on PR feedback
* Fix strict null errors
* Docs: Edit prometheus data source doc (#23760)
* Update prometheus.md
* Editing
* Update prometheus.md
* Update add-a-data-source.md
* Update prometheus.md
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
* Search: Minor tweak to placeholder color
* Minor grammatical correction (#23898)
* Docs: Add doc comments for PanelPlugin (#23896)
* Fix grammatical errors in documentation (#23900)
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
* grafana/toolkit: Do not suggest Angular panel anymore, add note about Grafana tutorials (#23902)
* NewPanelEditor: vis picker UI update (#23894)
* Fix storybook
* Add deprecated/alpha badge to panels in viz picker, fix long title display
* Move getFocusCss to mixins
* Updated hover/active state of vis picker item
* try fixing e2e
* Add removed label for e2e to be happy happy happy
* Search: Fix expanded folder icon (#23903)
* QueryTab: Design updates (#23906)
* WIP: first stage
* Another take
* argghhh
* Updated
* My brain is mush
* Minor progress
* Progres
* Starting to work
* Fixes
* fixed e2e
* Chore: show grafana labs not project (#23913)
* DashboardSave: fix save dashboard when changes are detected (#23909)
* e2e: creates a separate package for selectors (#23858)
* Initial commit
* Chore: fixes after merge
* Chore: removes todos
* Chore: uncomment test
* Chore: adds missing externals to rollup config
* Refactor: selectors is master for everything
* Docs: updates Docs
* Chore: adds e2e-selectors to publish
* Angular/Forms migration: Orgs list (#23821)
* Create new components
* Fix async issues
* Remove comments
* Update public/app/features/admin/AdminOrgsTable.tsx
* Update public/app/features/admin/AdminListOrgsPage.tsx
* Update public/app/features/admin/AdminListOrgsPage.tsx
* Remove angular code
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Fix strict nulls (#23931)
* azuremonitor: fix for app insights azure china url (#23877)
* DashNav: refactor action buttons and custom content (#23868)
* DashNav: refactor action buttons and custom content
* DashNav: remove code duplication
* DashNav: fix custom element display
* DashNav: fix strictNullChecks
* docs/sources/features/datasources/testdata.md: Fix language
* Icon: Update sigin icon (#23933)
* NewPanelEditor: Fix visualisation list badge verflow (#23936)
* Search/fix folder sort (#23893)
* Search: Move layout to query reducer/hook
* Search: Refactor search_srv
* Search: Fix types
* Search: Move extra layout/sort logic to reducer
* Search: Fix Select min-width
* Search: Fix filter by starred
* Search: Update tests
* Search: Simplify query return
* Search: Set width to auto on HorizontalGroup
* Search: Fix tests
* Fix build-container (#23942)
* Search: Replace search implementation (#23855)
* Rendering: Add metrics (#23827)
* Rendering: base metrics
* Rendering: rendering_queue_size metric
* Chore: fix linter error
* Rendering metrics: refactoring
* Apply suggestions from code review
Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Rendering metrics: handle DeadlineExceeded errors
* Rendering metrics: don't measure canceled request time
* Rendering metrics: revert deleting summary for canceled requests
* Update pkg/services/rendering/rendering.go
Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Rendering: return ErrTimeout if context deadline exceeded
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* docs/sources/features/datasources/prometheus.md: Fix language
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* docs/sources/features/datasources/opentsdb.md: Language improvements
* docs/sources/features/datasources/mysql.md: Improve language
* DateTime: adding support to select preferred timezone for presentation of date and time values. (#23586)
* added moment timezone package.
* added a qnd way of selecting timezone.
* added a first draft to display how it can be used.
* fixed failing tests.
* made moment.local to be in utc when running tests.
* added tests to verify that the timeZone support works as expected.
* Fixed so we use the formatter in the graph context menu.
* changed so we will format d3 according to timeZone.
* changed from class base to function based for easier consumption.
* fixed so tests got green.
* renamed to make it shorter.
* fixed formatting in logRow.
* removed unused value.
* added time formatter to flot.
* fixed failing tests.
* changed so history will use the formatting with support for timezone.
* added todo.
* added so we append the correct abbrivation behind time.
* added time zone abbrevation in timepicker.
* adding timezone in rangeutil tool.
* will use timezone when formatting range.
* changed so we use new functions to format date so timezone is respected.
* wip - dashboard settings.
* changed so the time picker settings is in react.
* added force update.
* wip to get the react graph to work.
* fixed formatting and parsing on the timepicker.
* updated snap to be correct.
* fixed so we format values properly in time picker.
* make sure we pass timezone on all the proper places.
* fixed so we use correct timeZone in explore.
* fixed failing tests.
* fixed so we always parse from local to selected timezone.
* removed unused variable.
* reverted back.
* trying to fix issue with directive.
* fixed issue.
* fixed strict null errors.
* fixed so we still can select default.
* make sure we reads the time zone from getTimezone
* Disable emitDataRequest from explore (#23926)
* NewPanelEditor: fix wrong path to time regions template causing panel editor to bug (#23946)
* Storybook: Add intro and reorganize (#23924)
* Update Intro
* Reorganize stories
* Hide panel for ThemeColors
* Update packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.mdx
Co-Authored-By: Alex Khomenko <Clarity-89@users.noreply.github.com>
* Update intro
* Hide panel on Icon story
* Update README
* Add link
Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>
* Search: Adds search to main nav and removes open search click on dashboard name (#23943)
* Search: Adds search to main nav and removes open search click on dashboard name
* Updated snapshots
* Fixed strict null errors
* Fixed type issue
* Dashboard: Enforce min dashboard refresh interval to 5 seconds per default (#23929)
Fixes#22493
* Build: adding support to rollup *.json files to include moment-timezone data. (#23951)
* Image Rendering: New setting to control render request concurrency (#23950)
Fixes#23806
Co-Authored-By: Torkel Ödegaard <torkel@grafana.com>
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
* PanelEditor: Fixed issue with PanelModel change plugin type (#23949)
* azuremonitor: port azure log analytics query function to the backend (#23839)
* azuremonitor: add support for log analytics macros
Also adds tests for the kql macros
* azuremonitor: backend implementation for Log Analytics
* azuremonitor: remove gzip header from plugin route
The Go net/http library adds an accept encoding header
for gzip automatically.
https://golang.org/src/net/http/transport.go\#L2454
So no need to specify it manually
* azuremonitor: parses log analytics time series
* azuremonitor: support for table data for Log Analytics
* azuremonitor: for log analytics switch to calling the API...
...from the backend for time series and table queries.
* azuremonitor: fix missing err check
* azuremonitor: support Azure China, Azure Gov...
for log analytics on the backend.
* azuremonitor: review fixes
* azuremonitor: rename test files folder to testdata
To follow Go conventions for test data in tests
* azuremonitor: review fixes
* azuremonitor: better error message for http requests
* azuremonitor: fix for load workspaces on config page
* azuremonitor: strict null check fixes
Co-authored-by: bergquist <carl.bergquist@gmail.com>
* Update data frame concept doc (#23921)
* Update data frame concept doc
* Fix typo
* Fix typo
* Fix Dockerfile* (#23954)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Search/ui issues (#23945)
* Search: Move layout to query reducer/hook
* Search: Move extra layout/sort logic to reducer
* Search: Tweak action row spacing
* Search: Update TagOption
* Search: Remove duplicate function
* Search: Add Clear tags button
* Search: Align checkbox
* Search: Add TagFilter.displayName
* Search: Update default placeholder
* Search: Return all dashboards for list view
* Search: Apply custom line-height to ActionRow checkbox
* MaxDataPoints: Now used in interval calculation for all data sources (#23915)
* MaxDataPoints: Now enabled for all
* Updates to code and test
* Moved the panel query inspector
* PaneQueryRunner: Simplify logic and only take in maxDataPoints not width
* Make sidemenu header accept onClick events (#23957)
* backend_plugins: duration support in Frame (#23962)
sdk v0.57.0
go mod tidy
* PanelEditor: fixes save/apply for undefined props in restoreModel (#23939)
* PanelEditor: fixes save/apply for undefined props in restoreModel
* Refactor: changes after PR comments
* Refactor: changes sourcePanel refresh strategy
* Added unit tests and minor refactoring of method, starting with cleanup, then setting properties from model
* Update public/app/features/dashboard/state/PanelModel.test.ts
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* docs: adds provisioning config example (#23940)
* Docs: Minor correction in documentation (#23899)
* Minor correction in documentation
* Refactoring the previous change
* Docs: Add DescribeAlarmHistory to minimal IAM policy (#23965)
DescribeAlarmHistory is used in the annotations query.
* Image rendering: Fix missing icon on plugins list (#23958)
Fixes#23189
* Dashboard: Handle min refresh interval when importing dashboard (#23959)
If refresh interval is lower than minimum refresh interval
when importing dashboard, use the minimum refresh interval
instead of returning error.
Fixes#23099
* Docs: Multiple changes to make document easier to read (#23842)
* multiple changes to make document easier to read
* Update docs/sources/features/datasources/loki.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Update docs/sources/features/datasources/loki.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Update docs/sources/features/datasources/loki.md
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
* Update docs/sources/features/datasources/loki.md
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Docs: Suggesting multiple changes for better readability (#23843)
* Suggesting multiple changes for better readability
* Update docs/sources/features/datasources/mssql.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Update docs/sources/features/datasources/mssql.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Update docs/sources/features/datasources/mssql.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Docs: Mark macro examples as code (#23932)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Docs: Add DescribeAlarms to minimal IAM policy (#23968)
DescribeAlarmHistory is used in the prefix matching of the annotations query
* Panels: Update panel logos (#23964)
* Various 7.0 UI tweaks (#23972)
* Set min height of panel pane to 200px
* Disable badge on viz picker when item is in disabled in search results
* Fix UserProfile inputs width
* Remove select caret in user admin permissions editor
* fix 23911
* Explore: Fix query rows styles (#23973)
* CloudWatch: Remove cloud watch flag (#23974)
* TestData/Graph: load arrow and zoom to data range (#23764)
* Docs: Fix building of docs (#23923)
* Docs: Fix building of docs
* CircleCI: Fixate grafana/docs-base image revision in job for building docs
* Docs: enable packages reference docs for 7-beta (#23953)
* added packages reference menu item.
* removed the draft flag.
* Updated docs by running script.
* AlertTab: some ui updates (#23971)
* updated the alerting tab.
* changed so we use a confirm button.
* removed uncommeneted import.
* Change to secondary buttons
Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>
* trying to fix issue with panel of undefined.
* Fix prettier
* Update public/app/features/alerting/AlertTab.tsx
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Docs: Query history 7.0 updates (#23955)
* Update docs about query history
* 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>
* Metrictank: Fix meta inspector consolidator field names (#23838)
to match https://github.com/grafana/metrictank/pull/1798
* Chore: Update Grafana version (#23985)
* Update Grafana version
* fix after merge
* merge conflicts
* migration script and new icons in editor
* revert migration, use iconmap lookup
* add tooltip
* cleanup after merge
* revert
* remove angular dashboard links and related components
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Co-authored-by: Mohit Nain <Mohit_Nain@infosys.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Carl Bergquist <carl@grafana.com>
Co-authored-by: bergquist <carl.bergquist@gmail.com>
Co-authored-by: Stephanie Closson <srclosson@gmail.com>
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Agnès Toulet <35176601+AgnesToulet@users.noreply.github.com>
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
Co-authored-by: kay delaney <45561153+kaydelaney@users.noreply.github.com>
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
Co-authored-by: Emil Tullstedt <sakjur@gmail.com>
Co-authored-by: Arve Knudsen <arve.knudsen@grafana.com>
Co-authored-by: Leonard Gram <leonard.gram@grafana.com>
Co-authored-by: Jack Stevenson <jackstevenson@users.noreply.github.com>
Co-authored-by: Amal <56926487+amalkurup89@users.noreply.github.com>
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
Co-authored-by: Leonard Gram <leo@xlson.com>
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-authored-by: Jess <53754871+jessover9000@users.noreply.github.com>
Co-authored-by: Kyle Brandt <kyle@grafana.com>
Co-authored-by: Joseph Robinson <josephremail@gmail.com>
Co-authored-by: Andreas Opferkuch <andreas.opferkuch@gmail.com>
Co-authored-by: Omar Nahhas Sanchez <omar@innovativerealities.com>
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
Co-authored-by: Johannes Brück <6677058+bruecktech@users.noreply.github.com>
Co-authored-by: Clarity-89 <homes89@ukr.net>
Co-authored-by: tmarszal <tmarszal@gmail.com>
Co-authored-by: Marcus Olsson <accounts+github@marcus.se.net>
Co-authored-by: Sofia Papagiannaki <papagian@users.noreply.github.com>
Co-authored-by: Jon Gyllenswärd <jon.gyllensward@grafana.com>
Co-authored-by: Jan Garaj <jan.garaj@gmail.com>
Co-authored-by: Dieter Plaetinck <dieter@grafana.com>
* Loki: Show loki datasource stats in panel inspector
- puts the loki query result stats into the query results meta stat API
of Grafana, this allows the display of all backend loki stats in the
panel inspector in the dashboards
- added a hack to also display one of those values in Explore as a meta
label using the dataframe meta `custom` mechanims to point to a single
stat entry for each series which is then added together to show total
bytes processed across all query row results (this should be changed for
7.1 to make full use of the panel inspector in Explore)
* Fix test
* nicer stats labels for loki stats with units
* Chore: upgrades Cypress to 4.5.0
* Refactor: splits up huge it into several
* Refactor: prevent flakiness
* Refactor: updates yarn.lock
* Refactor: changes after PR comments
* Refactor: uses e2e.flows instead of import
* extract out the field creation parts
* extract out the field creation parts
* three math modes
* better timeseries support
* TestData/Graph: load arrow and zoom to data range (#23764)
* Docs: Fix building of docs (#23923)
* Docs: Fix building of docs
* CircleCI: Fixate grafana/docs-base image revision in job for building docs
* Docs: enable packages reference docs for 7-beta (#23953)
* added packages reference menu item.
* removed the draft flag.
* Updated docs by running script.
* AlertTab: some ui updates (#23971)
* updated the alerting tab.
* changed so we use a confirm button.
* removed uncommeneted import.
* Change to secondary buttons
Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>
* trying to fix issue with panel of undefined.
* Fix prettier
* Update public/app/features/alerting/AlertTab.tsx
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Docs: Query history 7.0 updates (#23955)
* Update docs about query history
* 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>
* Metrictank: Fix meta inspector consolidator field names (#23838)
to match https://github.com/grafana/metrictank/pull/1798
* Chore: Update Grafana version (#23985)
* Update Grafana version
* Docs: What's new in 7.0 placeholder (#23987)
* Docs: What's new in 7.0 placeholder
* Updated makefile
* Search: minor fixes (#23984)
* Search: Use folder id as key when present
* Search: Do not render modals if not open
* Enterprise: List 7.0 features (#23956)
* CircleCI: Fix triggering of jobs for releases (#23999)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Fix pagination of issues/PR's in changelog generator (#23997)
Fix pagination of issues/PR's in changelog generator
* Search: Convert time pickers to CSF (#24002)
* updated docs for reporting (#23733)
* updated docs
* peering comments
* Added info about what version test mails requires
* Tracing: Fix view bounds after trace change (#23994)
* Docs: fix image link (#24011)
* Update whats new (#24012)
* Chore: Put what's new and release notes URLs in package.json (#24006)
* Put what's new and release notes URLs in package.json
* Upgrade build pipeline tool
* Update changelog for v7.0.0-beta1 (#24007)
Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-Authored-By: Andrej Ocenas <mr.ocenas@gmail.com>
Co-Authored-By: Hugo Häggmark <hugo.haggmark@grafana.com>
Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
* verify-repo-update: Fix Dockerfile.deb (#24030)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* CircleCI: Upgrade build pipeline tool (#24021)
* CircleCI: Upgrade build pipeline tool
* Devenv: ignore enterprise (#24037)
* Add header icon to Add data source page (#24033)
* latest.json: Update testing version (#24038)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Fix login page redirected from password reset (#24032)
* Storybook: Rewrite stories to CSF (#23989)
* ColorPicker to CSF format
* Convert stories to CSF
* Do not export ClipboardButton
* Update ConfirmButton
* Remove unused imports
* Fix feedback
* changelog enterprise 7.0.0-beta1 (#24039)
* CircleCI: Bump grafana/build-container revision (#24043)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Changelog: Updates changelog with more feature details (#24040)
* Changelog: Updates changelog with more feature details
* spell fix
* spell fix
* Updates
* Readme update
* Updates
* Select: fixes so component loses focus on selecting value or pressing outside of input. (#24008)
* changed the value container to a class component to get it to work with focus (maybe something with context?).
* added e2e tests to verify that the select focus is working as it should.
* fixed according to feedback.
* updated snapshot.
* Devenv: add remote renderer to grafana (#24050)
* NewPanelEditor: minor UI twekas (#24042)
* Forward ref for tabs, use html props
* Inspect: add inspect label to drawer title
* Add tooltips to sidebar pane tabs, copy changes
* Remove unused import
* Place tooltips over tabs
* Inspector: dont show transformations select if there is only one data frame
* Review
* Changelog: Add a breaking change (#24051)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* CircleCI: Unpin grafana/docs-base (#24054)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Search: close overlay on Esc press (#24003)
* Search: Close on Esc
* Search: Increase bottom padding for the last item in section
* Search: Move closing search to keybindingsSrv
* Search: Fix folder view
* Search: Do not move folders if already in folder
* Docs: Adds deprecation notice to changelog and docs for scripted dashboards (#24060)
* Update CHANGELOG.md (#24047)
Fix typo
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
* Documentation: Alternative Team Sync Wording (#23960)
* Alternative wording for team sync docs
Signed-off-by: Joe Elliott <number101010@gmail.com>
* Update docs/sources/auth/team-sync.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Fix misspell issues (#23905)
* Fix misspell issues
See,
$ golangci-lint run --timeout 10m --disable-all -E misspell ./...
Signed-off-by: Mario Trangoni <mjtrangoni@gmail.com>
* Fix codespell issues
See,
$ codespell -S './.git*' -L 'uint,thru,pres,unknwon,serie,referer,uptodate,durationm'
Signed-off-by: Mario Trangoni <mjtrangoni@gmail.com>
* ci please?
* non-empty commit - ci?
* Trigger build
Co-authored-by: bergquist <carl.bergquist@gmail.com>
Co-authored-by: Kyle Brandt <kyle@grafana.com>
* more tests
* remove FieldConfig setting
* merged binary and reduce
* improve tests
* update options after values change
* Minor refactoring and polish to UI
* Minor fixes
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Dieter Plaetinck <dieter@grafana.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>
Co-authored-by: Emil Tullstedt <sakjur@gmail.com>
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-authored-by: Jon Gyllenswärd <jon.gyllensward@grafana.com>
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
Co-authored-by: Leonard Gram <leo@xlson.com>
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
Co-authored-by: Richard Hartmann <RichiH@users.noreply.github.com>
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
Co-authored-by: Joe Elliott <joe.elliott@grafana.com>
Co-authored-by: Mario Trangoni <mario@mariotrangoni.de>
Co-authored-by: bergquist <carl.bergquist@gmail.com>
Co-authored-by: Kyle Brandt <kyle@grafana.com>
... in `componentDidUpdate`, not just `componentDidMount`.
Also unify query field behavior of Explore with Dashboard - when the
data source changes, it doesn't unmount but instead refreshes its
metrics.
Fixes#23162
* only show cache timeout if enabled in datasource
* move conditional
* Update public/app/features/dashboard/panel_editor/QueryOptions.tsx
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Moved templating.md
Moved file to a different folder, added alias information, updated menu.yaml
* Split out advanced variable format options from templating.md
* Reworked Advanced variable format options
* Update templating.md
* Moved global variables to another topic
* Moved template files
* Update global-variables.md
* Update global-variables.md
* Update templates-and-variables.md
* made new repeating panels and rows topic
* updated links and menu
* Update advanced-variable-format-options.md
* Update repeat-panels-or-rows.md
* Update menu.yaml
* Update prometheus.md
* Applied Daniel's edits
* Convert Spinner to CSF
* Convert TableInputCSV to CSF
* Convert ToggleButtonGroup to CSF
* Convert ValueMappingsEditor to CSF
* Convert useDelayedSwitch to CSF
* Convert ClipboardButton to CSF
* Convert CallToActionCard to CSF
* Convert BarGauge to CSF
* Convert DataSourceHttpSettings to CSF
* Convert ConfirmModal to CSF
* Convert FormField to CSF
* Convert Input to CSF
* Convert ButtonSelect to CSF
* Removed unused import from ButtonSelect story
* Convert InfoTooltip to CSF
* Convert List to CSF
* Convert QueryField to CSF
* Convert RefreshPicker to CSF
* Convert SecretFormField to CSF
* Convert ClipboardButton to CSF
* Convert CallToActionCard to CSF
* Convert BarGauge to CSF
* Convert DataSourceHttpSettings to CSF
* Convert ConfirmModal to CSF
* Convert FormField to CSF
* Fix: Show results of instant queries in Explore tables
* Add PreferredVisualisationType to meta
* Implement visualisation exception for Prometheus
* Implement visualisation exception for Elastic
* Search: Close on Esc
* Search: Increase bottom padding for the last item in section
* Search: Move closing search to keybindingsSrv
* Search: Fix folder view
* Search: Do not move folders if already in folder
* Forward ref for tabs, use html props
* Inspect: add inspect label to drawer title
* Add tooltips to sidebar pane tabs, copy changes
* Remove unused import
* Place tooltips over tabs
* Inspector: dont show transformations select if there is only one data frame
* Review
* changed the value container to a class component to get it to work with focus (maybe something with context?).
* added e2e tests to verify that the select focus is working as it should.
* fixed according to feedback.
* updated snapshot.
* updated the alerting tab.
* changed so we use a confirm button.
* removed uncommeneted import.
* Change to secondary buttons
Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>
* trying to fix issue with panel of undefined.
* Fix prettier
* Update public/app/features/alerting/AlertTab.tsx
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Set min height of panel pane to 200px
* Disable badge on viz picker when item is in disabled in search results
* Fix UserProfile inputs width
* Remove select caret in user admin permissions editor
* fix 23911
If refresh interval is lower than minimum refresh interval
when importing dashboard, use the minimum refresh interval
instead of returning error.
Fixes#23099
* PanelEditor: fixes save/apply for undefined props in restoreModel
* Refactor: changes after PR comments
* Refactor: changes sourcePanel refresh strategy
* Added unit tests and minor refactoring of method, starting with cleanup, then setting properties from model
* Update public/app/features/dashboard/state/PanelModel.test.ts
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* MaxDataPoints: Now enabled for all
* Updates to code and test
* Moved the panel query inspector
* PaneQueryRunner: Simplify logic and only take in maxDataPoints not width
* azuremonitor: add support for log analytics macros
Also adds tests for the kql macros
* azuremonitor: backend implementation for Log Analytics
* azuremonitor: remove gzip header from plugin route
The Go net/http library adds an accept encoding header
for gzip automatically.
https://golang.org/src/net/http/transport.go\#L2454
So no need to specify it manually
* azuremonitor: parses log analytics time series
* azuremonitor: support for table data for Log Analytics
* azuremonitor: for log analytics switch to calling the API...
...from the backend for time series and table queries.
* azuremonitor: fix missing err check
* azuremonitor: support Azure China, Azure Gov...
for log analytics on the backend.
* azuremonitor: review fixes
* azuremonitor: rename test files folder to testdata
To follow Go conventions for test data in tests
* azuremonitor: review fixes
* azuremonitor: better error message for http requests
* azuremonitor: fix for load workspaces on config page
* azuremonitor: strict null check fixes
Co-authored-by: bergquist <carl.bergquist@gmail.com>
* added moment timezone package.
* added a qnd way of selecting timezone.
* added a first draft to display how it can be used.
* fixed failing tests.
* made moment.local to be in utc when running tests.
* added tests to verify that the timeZone support works as expected.
* Fixed so we use the formatter in the graph context menu.
* changed so we will format d3 according to timeZone.
* changed from class base to function based for easier consumption.
* fixed so tests got green.
* renamed to make it shorter.
* fixed formatting in logRow.
* removed unused value.
* added time formatter to flot.
* fixed failing tests.
* changed so history will use the formatting with support for timezone.
* added todo.
* added so we append the correct abbrivation behind time.
* added time zone abbrevation in timepicker.
* adding timezone in rangeutil tool.
* will use timezone when formatting range.
* changed so we use new functions to format date so timezone is respected.
* wip - dashboard settings.
* changed so the time picker settings is in react.
* added force update.
* wip to get the react graph to work.
* fixed formatting and parsing on the timepicker.
* updated snap to be correct.
* fixed so we format values properly in time picker.
* make sure we pass timezone on all the proper places.
* fixed so we use correct timeZone in explore.
* fixed failing tests.
* fixed so we always parse from local to selected timezone.
* removed unused variable.
* reverted back.
* trying to fix issue with directive.
* fixed issue.
* fixed strict null errors.
* fixed so we still can select default.
* make sure we reads the time zone from getTimezone
* Fix storybook
* Add deprecated/alpha badge to panels in viz picker, fix long title display
* Move getFocusCss to mixins
* Updated hover/active state of vis picker item
* try fixing e2e
* Add removed label for e2e to be happy happy happy
* Datasource/Cloudwatch: Adds support for Cloudwatch Logs
* Fix rebase leftover
* Use jsurl for AWS url serialization
* WIP: Temporary workaround for CLIQ metrics
* Only allow up to 20 log groups to be selected
* WIP additional changes
* More changes based on feedback
* More changes based on PR feedback
* Fix strict null errors
* Resort Icon.story.tsx into Docs Overview category
* Make CallToActionCard.story.tsx internal
* Move ThemeColors to Docs Overview category
* Move Tag.story.tsx to Forms category
* Move TagList.story.tsx to Forms category
Co-authored-by: Clarity-89 <homes89@ukr.net>
Same as #23452 but for assumed roles.
When using service accounts (webIdentity) on EKS in combination
with assuming roles in other AWS accounts Grafana needs to retrieve
the service account credentials first and then needs to assume the
configured role.
* Explore: Create basic E2E test
* Feature: adds e2e tests for panel inspector
* Refactor: adds ts-ignore because of type checking errors
* Refactor: changes after PR comments and updates snapshot
* Refactor: adds typings back for IScope
* e2e: adds e2e for panel edit
Co-authored-by: Andreas Opferkuch <andreas.opferkuch@gmail.com>
When Include image is enabled for an alert notification channel, but there's
no image renderer available/installed when sending notification an error
image will be uploaded/attached explaining that you need to install the
Grafana Image Renderer plugin.
Ref #13802
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
If no image renderer available/installed when adding a new alert notification
channel will set Include image to false per default, otherwise true as before.
If no image renderer available/installed when adding/edit alert notification
channel will show an informational message that you need to install the
Grafana Image Renderer plugin for Grafana to be able to render an image.
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* DataLink input to new form styles
* Make Angular work with inline editor
* Remove onRemove and desiableRemove
* Remove DataLinksEditor
* Change order of inputs
* Enable syntax highlight
* Fix datalinks for Elastic
* Explore: Create basic E2E test
* Feature: adds e2e tests for panel inspector
* Refactor: adds ts-ignore because of type checking errors
* Refactor: changes after PR comments and updates snapshot
* Refactor: adds typings back for IScope
* Refactor: changes after PR comments
Co-authored-by: Andreas Opferkuch <andreas.opferkuch@gmail.com>
* NewPanelEditor: Panel edit tweaks (#22415)
* NewPanelEditor: Alternative edit layout
* Fixed full height issue
* panel-edit-tabs experiment
* minor tweaks
* PanelEditor: Minor tweaks
* Docs: URL update to Relref to repair broken links
Rewrote URL references in the text for the Administration guide
and older Whats New page to repair broken links, and change
to the Relref format to build the website with Hugo.
Closes#22378
* Remove stale file, caught in this
branch and PR from my Fork. contribute/style-guides/markdown-style-guide.md
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Fixes and security patches:
1. Always keep the source directory, just don't package the source
2. Do not publish the SSH key for common plugin tasks.
Changed to environment variable
* env variable renamed.
* Re-added the src remove
* touch config.yml for rebuild
* show signing status
* show signing status
* Progress on signed badge style
* Progress on signing status look and updated card background
* Updates
* Transforms card tweak
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Create .mdx for ColorPicker component group
Describes the building blocks of the component and how they work together.
* Rename ColorPicker.mdx to ColorPicker.story.mdx
* Update packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.mdx
Clean up tags
Co-Authored-By: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
* Update packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.mdx
Co-Authored-By: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
* Transformers: adds labels as columns transformer
* Refactor: adds support for same timestamps with different labels
* Refactor: adds basic transform ui
* Refactor: adds sorted result
* Refactor: renames transformer
* clear dashboard on unmount
* fix menu z-index, folderpicker width
* fix issue with saving dashboard in another folder
* use foldermodel instead of selectablevalue
* using z-index from theme
* updated names
* update snapshot
* remove size from folderpicker
* use connectWithCleanup
* update snapshot
grafana-plugin-model is legacy and is replaced by new backend
plugins SDK and architecture. Renderer is not part of SDK and
we want to keep it that way for now since it's highly unlikely there
will be more than one kind of renderer plugin.
So this PR adds support for renderer plugin v2.
Also adds support sending a Device Scale Factor parameter to the
plugin v2 remote rendering service and by that replaces #22474.
Adds support sending a Headers parameter to the plugin v2 and
remote rendering service which for now only include
Accect-Language header (the user locale in browser when using
Grafana), ref grafana/grafana-image-renderer#45.
Fixes health check json details response.
Adds image renderer plugin configuration settings in defaults.ini
and sample.ini.
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
* Search: Toggle Search based on search query
* Search: Fix types and closed search param
* Search: Remove appEvents from SearchWrapper
* Search: Reset folder on close
Co-Authored-By: Alexander Zobnin <alexanderzobnin@gmail.com>
* Search: Disable reloadOnSearch for manage dashboards urls
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
* Table: Fixed to column alignment
* testing table state reducer
* Styles starting to work
* Persisting column resize now works
* Trying to fix Table storybook stories
* Minor updates
* fixed ts issue
* Table: Support duplicate field names, and use data frame directly instead of copying data and other improvements (#23681)
* Poc at use data frame directly
* working ok
* Table improvements
* Move xss and sanitize packages to grafana-data
* Move text, url and location utils to grafana-data
* Move grafana config types to grafana-data
* Move field display value proxy to grafana-data
* Fix
* Move data links built in vars to grafana-data
* Attach links supplier to when applying field overrides
* Prep tests
* Use links suppliers attached via field overrides
* locationUtil dependencies type
* Move sanitize-url declaration to grafana-data
* Revert "Move sanitize-url declaration to grafana-data"
This reverts commit 11db9f5e55.
* Fix typo
* fix ts vol1
* Remove import from runtime in data.... Make TS happy at the same time ;)
* Lovely TS, please shut up
* Lovely TS, please shut up vol2
* fix tests
* Fixes
* minor refactor
* Attach get links to FieldDisplayValue for seamless usage
* Update packages/grafana-data/src/field/fieldOverrides.ts
* Make storybook build
* Tweaks and comments for ci-improvements, stability, and readibility
- Made naming more obvious and intuitive
- CI supports grafana e2e plus more granular design
(side effect that it takes slightly longer, but negligable)
- disable strict e2e errors through environment variable
- Added tools for linting and for building plugin-ci
* feedback from stevev - remove version. Causes problems
* Because alpine uses musl instead of libc, the e2e/cypress was not compatible
So:
- Created new VM based on debian-slim
- Could also be used as a build VM
Fixes:
- ginstall issue with merge somewhere.
- Trimmed down the alpine VM since we don't need the extra libraries for cypress
* Fix: Don't need cp on debian
Fix: Don't use /bin/sh on debian. Only for alpine. Use /bin/bash on debian
Fix: Missing dependencies to e2e tests
* WIP: Inspect transformers
* Updated
* Transformations working in inspect drawer and series to columns working as normal transformation
* Minor name change
* Updated
* Updated
* Fix: fixes crash with dataFrameIndex out of bounds
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
* add a table picker
* move picker to the top
* add missing change
* Removed overflow from panel-content so dropdown menus can extend a panel, moved the select to the bottom
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
So:
- Created new VM based on debian-slim
- Could also be used as a build VM
Fixes:
- ginstall issue with merge somewhere.
- Trimmed down the alpine VM since we don't need the extra libraries for cypress
Removes all references and usage of PhantomJS #23375.
Remove direct link rendered image e2e smoke test for now.
Docker: Fix installing chrome in ubuntu custom docker image.
Improve handling of image renderer not available/installed #23593.
Add PhantomJS breaking change and upgrading notes.
Use grabpl v0.2.10.
Closes#13802
Co-authored-by: Kyle Brandt <kyle@grafana.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
The last three sections of this document are not rendered on https://grafana.com/docs/grafana/latest/alerting/notifications
It seems like in all other instances (other .md docs of this project), level one headers are only used at the top of the page, so I assume using level two headers will make them show. Level two headers do also match the overall structure of the documentation.
* move Panel JSON to inspector
* move Panel JSON to inspector
* update test
* use stats display options
* move query inspector to inspector
* open inspector from the queries section
* subscribe to results
* subscribe to results
* open the right tab
* apply review feedback
* update menus (inspect tabs)
* Dashboard: extend dashnav to add custom content (#23433)
* Dashlist: Fixed dashlist broken in edit mode (#23426)
* Chore: Fix bunch of strict null error to fix master CI (#23443)
* Fix bunch of null error
* Fix failing test
* Another test fix
* Docs: Add SQL region annotation examples (#23268)
Add region annotation examples for SQL data sources in docs.
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Docs: Update contributing doc to install node@12. (#23450)
* NewPanelEdit: Minor style and description tweaks, AND PanelQueryRunner & autoMinMax (#23445)
* NewPanelEdit: Minor style and description tweaks
* Removed the worst snapshot of all time
* ReactTable: adds color text to field options (#23427)
* Feature: adds text color field config
* Refactor: created an extension point
* Refactor: uses HOC for extension instead
* Fix: fixes background styling from affecting cells without display.color
* Chore: export OptionsUIRegistryBuilder on grafana/data (#23444)
* export the ui registry
* add to utils index also
* DataLinks: Do not full page reload data links links (#23429)
* Templating: Fix global variable "__org.id" (#23362)
* Fixed global variable __org.id value
* correct orgId value
* reverted the change as variables moved to new file
* Chore: reduce null check errors to 788 (currently over 798) (#23449)
* Fixed ts errors so build will succeed
* Update packages/grafana-data/src/types/graph.ts
Co-Authored-By: Ryan McKinley <ryantxu@gmail.com>
* Feedback from code review
* Leaving out trivial typing's
* Fix error with color being undefined now.
* fix test with timezone issue
* Fixed test
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Cloudwatch: prefer webIdentity over EC2 role (#23452)
* Plugins: add a signature status flag (#23420)
* Progress
* fixed button
* Final touches
* now works from edit mode
* fix layout
* show raw objects
* move query inspector buttons to the bottom
* update snapshot
* Updated design
* Made full page reload work
* Fixed minor style issue
* Updated
* More fixes
* Removed unused imports
* Updated
* Moved to data tab out to seperate component
* fixed ts issue
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Agnès Toulet <35176601+AgnesToulet@users.noreply.github.com>
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
Co-authored-by: Alexandre de Verteuil <alexandre@grafana.com>
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
Co-authored-by: Vikky Omkar <vikkyomkar@gmail.com>
Co-authored-by: Stephanie Closson <srclosson@gmail.com>
Co-authored-by: Dário Nascimento <dfrnascimento@gmail.com>
* Add integration with Jeager
Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split.
Modifies build so that this branch docker images are pushed to docker hub
Add a traceui dir with docker-compose and provision files for demoing.:wq
* Enable docker logger plugin to send logs to loki
* Add placeholder zipkin datasource
* Fixed rebase issues, added enhanceDataFrame to non-legacy code path
* Trace selector for jaeger query field
* Fix logs default mode for Loki
* Fix loading jaeger query field services on split
* Updated grafana image in traceui/compose file
* Fix prettier error
* Hide behind feature flag, clean up unused code.
* Fix tests
* Fix tests
* Cleanup code and review feedback
* Remove traceui directory
* Remove circle build changes
* Fix feature toggles object
* Fix merge issues
* Add trace ui in Explore
* WIP
* WIP
* WIP
* Make jaeger datasource return trace data instead of link
* Allow js in jest tests
* Return data from Jaeger datasource
* Take yarn.lock from master
* Fix missing component
* Update yarn lock
* Fix some ts and lint errors
* Fix merge
* Fix type errors
* Make tests pass again
* Add tests
* Fix es5 compatibility
* Add header with minimap
* Fix sizing issue due to column resizer handle
* Fix issues with sizing, search functionality, duplicate react, tests
* Refactor TraceView component, fix tests
* Fix type errors
* Add dark theme styling
* Add tests for hooks
* More color changes
* Fix tests to deal with additional theme wrappers.
* Add memoization
* Fix duplicate identifier
Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
* Allow API to assign new user to a specific organization
* Add defer block to test
* Add API tests and return 400 instead of 500 for bad orgId
* Minor test improvements
* Fixed so we dont miss the deep default options.
* removed console log.
* remove check of feature toggle and assuming that the new variables are the default ones.
* removed e2e statement about used featuretoggles.
* added comments for the angular loader.
* added code documentation for backendSrv.
* docs for datasource_srv.
* added some more docs.
* added documentation for the locationsrv.
* started to add docs for echo srv.
* added docs for meta srv.2
* added docs for analytics.
* draft documentation of the DataSourceWithBackend.
* added docs for last files.
* fixed all warnigns in api-extractor.
* fixed some typos and captializations.
* replaced run
* consolidated dist and toolkit
* Solved a few more issues
1. Need to explicitly copy circleci config to dist
so that it's published
2. Detect build directory, and use "local" or "linked"
mode for local builds.
* Reverted change used only for testing
* grafana-toolkit.js always required now. Copy to dist
* removed grafana-toolkit.dist.js, no longer required
* feedback from code review
* Code review comments 2.
Enables adding a section `plugin.<plugin id>` and key/value to
Grafana configuration file which will be converted and sent
as environment variables to the backend plugin.
Also sends some additional environment variables, Grafana
version (GF_VERSION), Grafana edition (GF_EDITION) and
enterprise license path (GF_ENTERPRISE_LICENSE_PATH).
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
Fixes#21515,
* Hangouts: fixes notifications for alerts with empty message
* Update pkg/services/alerting/notifiers/googlechat.go
Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Add integration with Jeager
Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split.
Modifies build so that this branch docker images are pushed to docker hub
Add a traceui dir with docker-compose and provision files for demoing.:wq
* Enable docker logger plugin to send logs to loki
* Add placeholder zipkin datasource
* Fixed rebase issues, added enhanceDataFrame to non-legacy code path
* Trace selector for jaeger query field
* Fix logs default mode for Loki
* Fix loading jaeger query field services on split
* Updated grafana image in traceui/compose file
* Fix prettier error
* Hide behind feature flag, clean up unused code.
* Fix tests
* Fix tests
* Cleanup code and review feedback
* Remove traceui directory
* Remove circle build changes
* Fix feature toggles object
* Fix merge issues
* Add trace ui in Explore
* WIP
* WIP
* WIP
* Make jaeger datasource return trace data instead of link
* Allow js in jest tests
* Return data from Jaeger datasource
* Take yarn.lock from master
* Fix missing component
* Update yarn lock
* Fix some ts and lint errors
* Fix merge
* Fix type errors
* Make tests pass again
* Add tests
* Fix es5 compatibility
* Add header with minimap
* Fix sizing issue due to column resizer handle
* Fix issues with sizing, search functionality, duplicate react, tests
* Refactor TraceView component, fix tests
* Fix type errors
* Add dark theme styling
* Add tests for hooks
* More color changes
* Fix tests to deal with additional theme wrappers.
Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
* Toolkit: Update plugin added
- To normalize an bring a plugins "managed" config up to date
* Added changes for filter only release
* changed name
* updated test for checking files in manifest
* New alpine based plugin ci image
- smaller, based on alpine (downloads in 7 to 10 seconds)
- Has updated gget that uses tar.gz
- Unpacks to /opt/grafana
- Compatible cp with toolkit
* needed build tools for go lint
* added built vm to test tool
* add circleci plugin config
* added openssh to image
* fix for gget & renamed to ginstall
* Styles: Refactoring and tweaks to inline form styles
* Minor change
* Minor fix
* Updated snapshot
* tweaks
* minor tweak
* Updated modal style
* Updated snapshot
* Updated more snapshots
* IconButton: New component to share pointer, size & hover style for icon buttons
* Progress
* IconButton: new component
* Think I am done
* Updated snapshots
* Do not like the black button reverting that, and not the plus-circle changed to plus
* fixed test
* fixed e2e test
* Fixed ts issue
* Use single registry for transformations
* Fix transformations tests
* Added documentation comments and minor refactor
* Added documentation comments and minor refactor
Minor misunderstanding between me and Typescript. We should be good friends back now.
* Fix registry import
* Redux: Added config to redux development middlewares that checks for mutations and serializability
* Disable these middlewares, they are too slow
* Update public/app/store/configureStore.ts
* Update public/app/store/configureStore.ts
* Prettier fix
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Do not use pointer cursor on icon by default
* Allow items alignment in the HorizontalGroup layout
* Add util for rendering components based on their type (element or function)
* Components for rendering query and transformation rows in a unified way
* Apply new UI fo query and transformation rows
* Add some tests
* Minor fix for scroll area
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* First bar gauge panel option
* Update doc comments
* Minor changes
* progress
* Minor type updates
* Fixing typing errors
* Fix that TS!
* Bring satisfaction to that beast called typescript
* Prototype
* Remove import
* Experimenting with different named categories
* Experimenting with category naming
* Naming is very hard
* merge master
* Remove commented code
* Fix merge
* Categorise panel options into collapsible sections
* Remove categories from table panel
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Fixed ts errors so build will succeed
* Update packages/grafana-data/src/types/graph.ts
Co-Authored-By: Ryan McKinley <ryantxu@gmail.com>
* Feedback from code review
* Leaving out trivial typing's
* Fix error with color being undefined now.
* fix test with timezone issue
* Fixed test
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Feature: adds text color field config
* Refactor: created an extension point
* Refactor: uses HOC for extension instead
* Fix: fixes background styling from affecting cells without display.color
* Remove deprecated setDefault usages
* Add simple support for conditinal field config properties
* Use new API in NewsPanel
* Update tests
* Fix check
* Add integration with Jeager
Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split.
Modifies build so that this branch docker images are pushed to docker hub
Add a traceui dir with docker-compose and provision files for demoing.:wq
* Enable docker logger plugin to send logs to loki
* Add placeholder zipkin datasource
* Fixed rebase issues, added enhanceDataFrame to non-legacy code path
* Trace selector for jaeger query field
* Fix logs default mode for Loki
* Fix loading jaeger query field services on split
* Updated grafana image in traceui/compose file
* Fix prettier error
* Hide behind feature flag, clean up unused code.
* Fix tests
* Fix tests
* Cleanup code and review feedback
* Remove traceui directory
* Remove circle build changes
* Fix feature toggles object
* Fix merge issues
* Add trace ui in Explore
* WIP
* WIP
* WIP
* Make jaeger datasource return trace data instead of link
* Allow js in jest tests
* Return data from Jaeger datasource
* Take yarn.lock from master
* Fix missing component
* Update yarn lock
* Fix some ts and lint errors
* Fix merge
* Fix type errors
* Make tests pass again
* Add tests
* Fix es5 compatibility
* Add header with minimap
* Fix sizing issue due to column resizer handle
* Fix issues with sizing, search functionality, duplicate react, tests
* Refactor TraceView component, fix tests
* Fix type errors
* Add tests for hooks
Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
* Replicate SDK behaviour for WebIdentityRole
Fix#20473
* Use WebIdentityRole in s3 uploader as well
* Use consistent casing
* use WebIdentityRole to assume another role
Co-authored-by: eV <ev@7pr.xyz>
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and empty list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3: Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and empty list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Chore: Upgrade to Go 1.14
* Chore: Bump version of grafana/grafana-ci-deploy Docker image
* Chore: Fix/bump version of grafana/build-container Docker image
* CircleCI: Upgrade build Docker images
* BackendPlugin: (wip) change response format
goes with https://github.com/grafana/grafana-plugin-sdk-go/pull/109
* fix error mapping in wrapper
* latest of my sdk branch
* latest of my sdk branch
* TransformWrapper fixes
* latest of sdk branch (removes extra meta)
* add metadata in wrappers
* also set error string
* sdk: v0.35.0
The fetch() API won't send cookies or other type of credentials unless
you set the credentials init option. Some datasources like Prometheus
and Elasticsearch have `withCredentials` option in Browser access mode,
but this option is not currently getting passed in the fetch() API.
Fixes#23338.
* Refactor: adds one form of column resize to React-Table
* Refactor: resizing works
* Refactor: adds onColumnResize
* Refactor: fixes so sorting is not invoked when resizing
* Refactor: fixes styles for resizer
* Refactor: removes callback call
* Refactor: changes after comments
* Refactor: updates code according to new api
* Improved styling
* fix
* Refactor: adds back resizable panel option and defaults to false
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Set field config defaults based on config registry
* Rename FIeldPropertyEditorItem to FieldConfigPopertyItem
* Remove console.log
* Simplify overrides persistence model and add support for nested properties in overrides
* Review updates
* Added draft on transformers to sort and hide fields.
* added structure for the UI.
* draft on sorting/filtering UI.
* simplified the datastructure a bit.
* added draft on drag and drop support.
* added some super simple styling. Nothing final still waiting for a proper design on this.
* updated lockfile after merge.
* changed so we use the new path for button.
* added one more test.
* Ignore feature toggle
* Moved editor to app
* Added top description
* Minor update
* Did some renaming and simplified the code a bit.
* fixed so we dont use capital naming on the transformer.
* changed to an vertical drag and drop design.
* added support to rename fields.
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
1. Typo in the default email address
2. Nested promises causing problems in some situations. Return a promise
and resolve in the outer function
3. If extension still have '.' in front remove it prior to matching.
* Lessons learned from using circle-ci
1. Make it clearer that GITHUB_TOKEN or GITHUB_ACCESS_TOKEN
are required for a release. Don't build without them.
2. Default gracefully to an reasonable email address.
(It does not have to actually exist, but the api needs it to publish)
* template for testing
* Wrote a basic test.
* Simple test
* Slight fix to brackets
* Code review changes
* Fix for test. Setup environment properly
* FieldConfig: Unifying standard and custom registry
* Adding path to option items to make id be prefixed for custom options
* Code updates progress
* Add docs back
* Fix TS
* ld overrides tests from ui to data
* Refactor - rename
* Gauge and table cleanup
* F-I-X e2e
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Show organization popup in alphabetical order
* GetUserOrgList: Sort organizations by name in API
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Theme: Updates old gf-form-styles
* Removed margin buttom
* updated
* updated
* This will take some time
* More style tweaks to both light and dark theme
* Minor change
* Tweaked table styles
* use dropdown
* keep padding the same
* keep padding the same
* Refactoring and moving to components
* Updated
* Alt names
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* FieldOverride: Fixed number override so that it return undefined for null/undefined values and not NaN
* Made process function be able to return undefined an null
* POC grid layout of gague.
* added a grid property that can be used to auto size the charts within a panel.
* fill the grid
* fix lint
* change default for stat panel
* avoid empty cells
* Moved to absolute positioning
* Fixed spacing
* Another fix
* Improve layout algorithm
* VizRepeater: Reverted back to so this is auto behavior for some panels
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Variables: turns on newVariables as default
* Chore: adds default templating state
* Some small refactorings to get the template_srv tests to get green when toggle is enabled by default.
* Refactor: adds getVariables dependency to DashboardModel
* Tests: fixes StackDriver tests
* Tests: updates snapshots
* Tests: updates snapshot for DashboardGrid.test.tsx
* Tests: fixes DashboardModel.test.ts
* fixed initDashboard tests.
* renamed variable.
* changed so we use the templating.list when running the migration work.
* changed so we always returns the variables in sorted order.
* Tests: fixed cloudwatch tests
* added so we set the global template variable props.
* Fixed tests and added moved logic to complete templateSrv variables.
* removed unneccesary updateIndex.
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* removing src dir on publish
* Moved from binary to native typescript
1. Moved to a native typescrpt github publish using the existing
github client.
2. Change dist.js to detect running in a linked environment.
Todo: Optimize docker image for build size.
* Optimized build of docker container
Much smaller. From 5.47 gb to 2.88
* Feedback from discussion with Ryan
- Added gget for getting grafana versions
- Added infrastructure for testing
- Uploaded new docker image
* Fixed typo... Not sure what happened there :)
* Added command to download canary
* small fix for displaying versions in help
* Removed --dev option
Should really just rename version to (ex: 1.2.0-dev)
* removing src dir on publish
* Moved from binary to native typescript
1. Moved to a native typescrpt github publish using the existing
github client.
2. Change dist.js to detect running in a linked environment.
Todo: Optimize docker image for build size.
* Optimized build of docker container
Much smaller. From 5.47 gb to 2.88
* Feedback from discussion with Ryan
- Added gget for getting grafana versions
- Added infrastructure for testing
- Uploaded new docker image
* Fixed typo... Not sure what happened there :)
* Added command to download canary
* small fix for displaying versions in help
* Removed --dev option
Should really just rename version to (ex: 1.2.0-dev)
* Utils: Use 's' as default for unit-less intervals
If the user specifies a string that is a unit-less number, it is
assumed that they meant seconds.
Fixes#22362
* Rephrase tooltip for better line break position
* Add integration with Jeager
Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split.
Modifies build so that this branch docker images are pushed to docker hub
Add a traceui dir with docker-compose and provision files for demoing.:wq
* Enable docker logger plugin to send logs to loki
* Add placeholder zipkin datasource
* Fixed rebase issues, added enhanceDataFrame to non-legacy code path
* Trace selector for jaeger query field
* Fix logs default mode for Loki
* Fix loading jaeger query field services on split
* Updated grafana image in traceui/compose file
* Fix prettier error
* Hide behind feature flag, clean up unused code.
* Fix tests
* Fix tests
* Cleanup code and review feedback
* Remove traceui directory
* Remove circle build changes
* Fix feature toggles object
* Fix merge issues
* Add trace ui in Explore
* WIP
* WIP
* WIP
* Make jaeger datasource return trace data instead of link
* Allow js in jest tests
* Return data from Jaeger datasource
* Take yarn.lock from master
* Fix missing component
* Update yarn lock
* Fix some ts and lint errors
* Fix merge
* Fix type errors
* Make tests pass again
* Add tests
* Fix es5 compatibility
Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
* Changed location for Current Org:
Current Org: was below the current Org, I changed it so you can deside what looks correct.
I also put an "." after Org, since it is a shorting
* removed an empty line
* Update snapshot
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Export other components as Legacy
* More Select Legacy
* Add namespacing to more files
* Export new elements
* Move Legacy Select folder
* Let's not forget the scss file
* Move new Select folder
* Move new Select from Forms namespace
* Little oopsie
* Fix errors
* Fix merge issues
* Fixed issue with multi value.
* Made some refactorings after feedback from Torkel and Hugo.
* minor refactorings.
* changed so we don't make the current value to array if multi is false.
* added snapshot to contain v23.
* Fixed so we always use the correct type when setting value for multi/non-multi.
* added some more tests.
* added tests.
* some small adjustments after feedback
* Forms for UserProfile
* Migrate to new Form styles
* Add remove icon
* Remove unused import
* Update public/app/features/admin/UserOrgs.tsx
* Remove comment
* Remove icon and add text
* Make every ButtonGroup unique - regardless of values
* Remove visual glitch etc.
* Fic failing typecheck
* Add "some" typesafety to panel options/field config APIs
* Allow selected common field config properties config, allow option defaults config via fluent API
* Update packages/grafana-data/src/panel/PanelPlugin.ts
Co-Authored-By: Ryan McKinley <ryantxu@gmail.com>
* Add defaults support for custom field config
* Enable defaults setting for standard and custom field configs
* Remove setFieldConfigDefaults from PanelPlugin API and replace it with useStandardFieldConfig
* Update API for standard field config defaults
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
* first things
* introduce headers and moving buttons
* adding reducer and action for gcom dashboard
* action working
* continue building on import form
* change dashboard title
* add prop to not render a label
* first things
* introduce headers and moving buttons
* adding reducer and action for gcom dashboard
* action working
* continue building on import form
* change dashboard title
* add prop to not render a label
* import form layout
* break out form to component
* add actions and reader for file upload
* fix upload issue
* modified data types to handle both gcom and file upload
* import dashboard json
* save dashboard
* start change uid
* change dashboard uid
* fix spacing and date format
* fix import from json
* handle uid and title change
* revert change in panelinspect
* redo fileupload component
* after review
* redo forms to use Forms functionality
* first attempt on async validation
* use ternary on uid input
* removed unused actions, fixed async validation on form
* post form if invalid, break out form to component
* sync file with master
* fix after merge
* nits
* export formapi type
* redo page to use forms validation
* fix inputs and validation
* readd post
* add guards on data source and constants
* type checks and strict nulls
* strict nulls
* validate onchange and fix import button when valid
* shorten validate call
* reexport OnSubmit type
* add comment for overwrite useEffect
* move validation functions to util
* fix button imports
* remove angular import
* move title and uid validation
* Text change
made it more understandable that this is a search field
* Made "New Folder"-button green
Since New Dashboard was green I thought New Folder; Import also would be green. Green seems to be the color for creating new items
* Update playlist_search.html
* change search text
* wrong link
* Update playlist.md
* Update manage_dashboards.html
* Update manage_dashboards.html
* replaced Filter
* replaced Filter
* replaced Filter
* replaced filter
* changed text for placeholder
* Update UsersActionBar.tsx
* Update UserListAdminPage.tsx
* update snapshots
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Cookie : Increase duration to avoid error
When using oauth2 authentication with multifactor, the 60s delay may be too short
* Introduce new setting for OAuth state cookie max age
Co-authored-by: Sofia Papagiannaki <sofia@grafana.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Refactor: adds first naive implemenation of join by field name
* Chore: changes after PR comments
* Refactor: fixes labels and adds support for multiple columns
* StatPanels: Refactoring DisplayValueOptions and renaming
* added return
* Progress
* Updated
* Made radio groups full width by default in panel options
* Fixed ts issue
* Updated
* Added remaining options
* Removed unused type
* Updated snapshot
* Renamed to ReduceDataOptions
* First bar gauge panel option
* Update doc comments
* Minor changes
* progress
* Fixing typing errors
* Minor type updates
* Fix that TS!
* Bring satisfaction to that beast called typescript
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* wip: add slo support
* Export DataSourcePlugin
* wip: break out metric query editor into its own component
* wip: refactor frontend - keep SLO and Metric query in differnt objects
* wip - load services and slos
* Fix broken test
* Add interactive slo expression builder
* Change order of dropdowns
* Refactoring backend model. slo unit testing in progress
* Unit test migration and SLOs
* Cleanup SLO editor
* Simplify alias by component
* Support alias by for slos
* Support slos in variable queries
* Fix broken last query error
* Update Help section to include SLO aliases
* streamline datasource resource cache
* Break out api specific stuff in datasource to its own file
* Move get projects call to frontend
* Refactor api caching
* Unit test api service
* Fix lint go issue
* Fix typescript strict errors
* Fix test datasource
* Use budget fraction selector instead of budget
* Reset SLO when service is changed
* Handle error in case resource call returned no data
* Show real SLI display name
* Use unsafe prefix on will mount hook
* Store goal in query model since it will be used as soon as graph panel supports adding a threshold
* Add comment to describe why componentWillMount is used
* Interpolate sloid
* Break out SLO aggregation into its own func
* Also test group bys for metricquery test
* Remove not used type fields
* Remove annoying stackdriver prefix from error message
* Default view param to FULL
* Add part about SLO query builder in docs
* Use new images
* Fixes after feedback
* Add one more group by test
* Make stackdriver types internal
* Update docs/sources/features/datasources/stackdriver.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Update docs/sources/features/datasources/stackdriver.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Update docs/sources/features/datasources/stackdriver.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Updates after PR feedback
* add test for when no alias by defined
* fix infinite loop when newVariables feature flag is on
onChange being called in componentDidUpdate produces an
infinite loop when using the new React template variable
implementation.
Also fixes a spelling mistake
* implements feedback for documentation changes
* more doc changes
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
* Registry of standard option editors
* Move override processors to grafana data
* API for declaratively creating field config/panel options
* Enable declarative API in PanelPlugin for options and field config
* Use new api in react table panel
* Add color and unit picker to option registries
* Add some docs and tests
* Fix tests
because id is never defined on notification object, the condition 'n.id === an.id' is equal to 'undefined === undefined' which is always true.
that code is responsible for the situation when you delete one endpoint and it removes all of them.
* Minor changes
* Fixtures path is now relative to the project directory
* URL support module now has individual exports
* Scenario context timing issues resolved
... caused by being ran synchronously, instead of as part of Cypress' asynchronous queue.
* Scenario context API now supports multiple keys per function call
* addDataSource flow accepts a config argument
… and optionally checks datasource health status
* Added readProvisions command
* Added addPanel flow
* Add integration with Jeager
Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split.
Modifies build so that this branch docker images are pushed to docker hub
Add a traceui dir with docker-compose and provision files for demoing.:wq
* Enable docker logger plugin to send logs to loki
* Add placeholder zipkin datasource
* Fixed rebase issues, added enhanceDataFrame to non-legacy code path
* Trace selector for jaeger query field
* Fix logs default mode for Loki
* Fix loading jaeger query field services on split
* Updated grafana image in traceui/compose file
* Fix prettier error
* Hide behind feature flag, clean up unused code.
* Fix tests
* Fix tests
* Cleanup code and review feedback
* Remove traceui directory
* Remove circle build changes
* Fix feature toggles object
* Fix merge issues
* Fix some null errors
* Fix test after strict null changes
* Review feedback fixes
* Fix toggle name
Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
* BackendSrv: Added config to response
* QueryInspector: Removing config from showing up
* Replace config with request and make it be the unmodified params sent in
* Fixing issue 16090 where Grafana uses illegal characters in requests to Prometheus
* Rebase with Grafana and Merge branch 'master' of https://github.com/BhartiAgrawalNvidia/grafana into fix-16090
# Conflicts:
# public/app/plugins/datasource/prometheus/language_provider.ts
* Rebase with Grafana and Merge branch 'master' of https://github.com/BhartiAgrawalNvidia/grafana into fix-16090
# Conflicts:
# public/app/plugins/datasource/prometheus/language_provider.ts
* Use querystring to escape the url
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* CircleCI: Run golangci-lint in two batches
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* CircleCI: Fix typo
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Chore: adds fallback value to time series class
* Chore: changes fallback value from null to empty string in FilterInput component
* Update public/app/core/time_series2.ts
Co-Authored-By: Hugo Häggmark <hugo.haggmark@grafana.com>
* Chore: updates || to ?? operators
Co-authored-by: Lukas Siatka <lukasz.siatka@grafana.com>
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
* Add Tag component
* Add Tag story
* Add TagList
* Group Tab and TabList
* Fix typechecks
* Remove Meta
* Use forwardRef for the Tag
* Add actions instead of console.log
* Add previews
* Theme: Updates the theme to align panel & page background colors
* Updated dashboard settings view to be similar to new panel edit
* Updated themes
* Added shadow
* Updates generated files
* Minor fix to inspect drawer
* Clean up old dashboard setttings stuff
* Polish to search
* Updated truth image
* Minor tweaks to dropdown menu
* Updates and alignments between inspect drawer and explore rich history
* removed unused variables
* Minor tweak to light page header bg
Casually drops 2.0 in a couple of places in the docs so that a reader looking for information about supported SAML version can find it. Since SAML hasn't had any releases since 2005, we don't have to make a big deal out of it.
* Refactor: moves all the newVariables part to features/variables directory
* Feature: adds datasource type
* Tests: adds reducer tests
* Tests: covers data source actions with tests
* Chore: reduces strict null errors
* boilerplate that will be replaced by real code.
* added old editor template.
* added initial version of ad hoc editor.
* added working (apart from add) version of the editor.
* Added placeholder for picker.
* Have a working UI. Need to connect it so we refresh the variables on changes.
* variable should be updated now.
* removed console.log
* made the url work.
* cleaned up the adapter.
* added possiblity to create filter directly from table.
* moved infotext from general reducer to extended value of adhoc.
* fixed strict null errors.
* fixed strict null errors.
* fixed issue where remove was displayed before being added.
* fixed issue with fragment key.
* changed so template_src is using the redux variables.
* minor refactorings.
* moved adhoc picker to adhoc variable.
* adding tests for reducer and fixed bug.
* added tests or urlparser.
* added tests for ad hoc actions.
* added more tests.
* added more tests.
* fixed strict null error.
* fixed copy n pase error.
* added utilit for getting new variable index.
* removed console.log
* added location to reducerTester type and created a module type for it.
* changed so we only have one builder pattern.
* fixed tests to use static expected values.
* fixed strict errors.
* fixed more strict errors.
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
* Refactor value mappings UI to work better with new panel edit
* TS fix
* Experimenting with tabs in the sidebar
* Small refactor and added Panel general settings
* Merge fixes
* fix fieldOptions being used instead of fieldConfig
* Added icons to tabs (testing)
* Only 3 tabs i think, panel specific options need ot exist in first tab, some style tweaks
* Moved title and no value up
* Updated
* Render panel options in Options tab and add old options styles hack to display those vertically
* Basic settings to Panel settings
* Make nullcheck pass
* Snaps bump
* Fix standard configs not update
* Organise sidebar better, add tmp NewPanelEditorContext to hide duplicate legacy options
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Apply field overrides in PanelChrome
* Move applyFieldOverrides to panel query runner
* Review updates
* Make sure overrides are applied back on souce panel when exiting the new edit mode
* TS ignores in est
* Make field display work in viz repeater
* Review updates
* Review and test updates
* Change the way overrides and trransformations are retrieved in PQR
* Add fieldConfig property to PanelModel
* Dashboard migration v1
* Use field config when exiting new panel edit mode
* Gauge - use fieldConfig from panel model
* FieldDisplayOptions - don's extend FieldConfigSource
* Fix fieldDisplay ts
* StatPanel updated
* Stat panel defaults applied
* Table2 panel options update
* React graph updates
* BarGauge updated
* PieChart, Gauge, BarGauge and Stat updates
* PieChart - remove field config defaults from options
* FieldDisplayEditor - remove unused methos
* PanelModel - remove debugger
* Remove fieldConfig from field options when migrating dashboard
* Update data links migrations
* Update fieldDisaplay tests to respect new fieldConfig
* Update dashboard schema version in snapshots
* Fix BarGaugePanel test
* Rebase fixes
* Add onFieldConfigChange to PanelProps type
* Update shared single stat migration
* Pass PanelModel instead of options only for panel type change handler [breaking]
* Renames
* Don't mutate panel options
* Migrations update
* Remove obsolete snap
* Minor updates after review
* Fix null checks
* Temporarily (until we decide to switch to new pane edit) bring back old aditors
* Temporarily rename ValueMappingEditor and MappingRow to Legacy*
* Migrations update
* Updae setFieldConfigDefaults API
* Update the way field config defaults are applied
* Use standard field config for gauge, bar gauge and stat panels
* refactoring
* Revert dashboard fieldOptions migrations as those are handled by single stat migrator
* Fix ts in tests
* Strict null fix and some minor fixes
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* 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>
* 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>
* Update export-pdf.md
Minor edits and one question.
* Update docs/sources/enterprise/export-pdf.md
Co-Authored-By: Alexander Zobnin <alexanderzobnin@gmail.com>
* Update export-pdf.md
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
data.Frame (that can be series) are converted to as tsdb.TimeSeriesSlice - so new backend plugins can be shimmed into existing alerting
use sdk v0.31.0
* AlertNotifications: Translate notifications IDs to UIDs in alert Rule builder
* Avoid shadowing errors, raise validation error on non-existing notification id
* create a cache for notification Uids to minimize db overhead
* add cache usage test
* avoid caching empty notification Uids
* isolate db in alert notificationUid caching tests
* WIP: Rollup indiator progress
* Progress
* Progress, can now open inspector with right tab
* changed type and made inspect
* Showing stats
* Progress
* Progress
* Getting ready for v1
* Added option and fixed some strict nulls
* Updated
* Fixed test
* 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.
* 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
* Feature: adds onTimeRangeUpdated to newVariables
* Refactor: removes VariableWithRefresh and unused func
* Refactor: adds console output when something throws as well
* Hide plugins list from viewers
* Made /api/plugins only return core plugins for users with viewer role
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Apply field overrides in PanelChrome
* Move applyFieldOverrides to panel query runner
* Review updates
* Make sure overrides are applied back on souce panel when exiting the new edit mode
* TS ignores in est
* Make field display work in viz repeater
* Review updates
* Review and test updates
* Change the way overrides and trransformations are retrieved in PQR
* Minor updates after review
* Fix null checks
* Start adding admin users list page to redux/react.
* removed unused code.
* added pagination.
* changed so we use the new form styles.
* added tooltip.
* using tagbadge for authlabels.
* remove unused code.
* removed old code.
* Fixed the last feedback on PR.
* Refactor: moves all the newVariables part to features/variables directory
* Feature: adds datasource type
* Tests: adds reducer tests
* Tests: covers data source actions with tests
* Chore: reduces strict null errors
* Explore: turns off actions execution on blur for Loki
* Explore: turns off actions execution on blur for Prometheus
* Explore: updates snapshots for Loki & Prometheus after turning off onBlur
* 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.
* Docs: export dashboard as PDF
* Update docs/sources/enterprise/_index.md
Co-Authored-By: Leonard Gram <leo@xlson.com>
Co-authored-by: Leonard Gram <leo@xlson.com>
.PHONY:alldeps-godeps-jsdepsbuild-gobuild-serverbuild-clibuild-jsbuildbuild-docker-devbuild-docker-fulllint-gogosecrevivegolangci-lintgo-vettest-gotest-jstestrunrun-frontendcleandevenvdevenv-downrevive-alertingprotobuf help
@@ -15,6 +15,15 @@ Grafana allows you to query, visualize, alert on and understand your metrics no
- **Alerting:** Visually define alert rules for your most important metrics. Grafana will continuously evaluate and send notifications to systems like Slack, PagerDuty, VictorOps, OpsGenie.
- **Mixed Data Sources:** Mix different data sources in the same graph! You can specify a data source on a per-query basis. This works for even custom datasources.
### Grafana 7.0 and GrafanaCONline
- Grafana 7.0 Beta is [available for download](https://grafana.com/grafana/download).
- Read [what's is new](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v7-0/).
Want to learn more about Grafana 7 and more? Sign up for our online conference!
@@ -20,8 +20,6 @@ Upgrading Go or Node.js requires making changes in many different files. See bel
The Grafana project uses [Go modules](https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more) to manage dependencies on external packages. This requires a working Go environment with version 1.11 or greater installed.
All dependencies are vendored in the `vendor/` directory.
_Note:_ Since most developers of Grafana still use the `GOPATH` we need to specify `GO111MODULE=on` to make `go mod` and `got get` work as intended. If you have setup Grafana outside of the `GOPATH` on your machine you can skip `GO111MODULE=on` when running the commands below.
To add or update a new dependency, use the `go get` command:
@@ -35,16 +33,14 @@ GO111MODULE=on go get example.com/some/module/pkg
GO111MODULE=on go get example.com/some/module/pkg@vX.Y.Z
```
Tidy up the `go.mod` and `go.sum` files and copy the new/updated dependency to the `vendor/` directory:
Tidy up the `go.mod` and `go.sum` files:
```bash
# The GO111MODULE variable can be omitted when the code isn't located in GOPATH.
GO111MODULE=on go mod tidy
GO111MODULE=on go mod vendor
```
You have to commit the changes to `go.mod`,`go.sum` and the `vendor/` directory before submitting the pull request.
You have to commit the changes to `go.mod` and`go.sum` before submitting the pull request.
# 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.
# 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 5 seconds.
# 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=
min_refresh_interval=5s
# Path to the default home dashboard. If this value is empty, then Grafana uses StaticRootPath + "dashboards/home.json"
# If the remote HTTP image renderer service runs on a different server than the Grafana server you may have to configure this to a URL where Grafana is reachable, e.g. http://grafana.domain/.
callback_url=
# Concurrent render request limit affects when the /render HTTP endpoint is used. Rendering many images at the same time can overload the server,
# which this setting can help protect against by only allowing a certain amount of concurrent requests.
concurrent_render_request_limit=30
[panels]
# here for to support old env variables, can remove after a few months
# This enables data proxy logging, default is false
;logging = false
# How long the data proxy should wait before timing out default is 30 (seconds)
# How long the data proxy waits before timing out, default is 30 seconds.
# This setting also applies to core backend HTTP data sources where query requests use an HTTP client with timeout set.
;timeout = 30
# If enabled and user is not anonymous, data proxy will add X-Grafana-User header with username into the request, default is false.
@@ -229,9 +230,12 @@
# 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.
# 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 5 seconds.
# 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 =
;min_refresh_interval = 5s
# Path to the default home dashboard. If this value is empty, then Grafana uses StaticRootPath + "dashboards/home.json"
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
# SMTP startTLS policy (defaults to 'OpportunisticStartTLS')
;startTLS_policy = NoStartTLS
[emails]
;welcome_email_on_sign_up = false
@@ -696,6 +679,9 @@
;server_url =
# If the remote HTTP image renderer service runs on a different server than the Grafana server you may have to configure this to a URL where Grafana is reachable, e.g. http://grafana.domain/.
;callback_url =
# Concurrent render request limit affects when the /render HTTP endpoint is used. Rendering many images at the same time can overload the server,
# which this setting can help protect against by only allowing a certain amount of concurrent requests.
;concurrent_render_request_limit = 30
[panels]
# If set to true Grafana will allow script tags in text panels. Not recommended as it enable XSS vulnerabilities.
@@ -704,6 +690,68 @@
[plugins]
;enable_alpha = false
;app_tls_skip_verify_insecure = false
# Enter a comma-separated list of plugin identifiers to identify plugins that are allowed to be loaded even if they lack a valid signature.
@@ -4,7 +4,6 @@ This guide helps you get started developing Grafana.
Before you begin, you might want to read [How to contribute to Grafana as a junior dev](https://medium.com/@ivanahuckova/how-to-contribute-to-grafana-as-junior-dev-c01fe3064502) by [Ivana Huckova](https://medium.com/@ivanahuckova).
## Dependencies
Make sure you have the following dependencies installed before setting up your developer environment:
@@ -21,7 +20,7 @@ We recommend using [Homebrew](https://brew.sh/) for installing any missing depen
```
brew install git
brew install go
brew install node
brew install node@12
npm install -g yarn
```
@@ -52,7 +51,7 @@ After the command has finished, we can start building our source code:
yarn start
```
Once `yarn start` has built the assets, it will continue to do so whenever any of the files change. This means you don't have to manually build the assets whenever every time you change the code.
Once `yarn start` has built the assets, it will continue to do so whenever any of the files change. This means you don't have to manually build the assets every time you change the code.
Next, we'll build the web server that will serve the frontend assets we just built.
@@ -98,29 +97,35 @@ go test -v ./pkg/...
### Run end-to-end tests
The end to end tests in Grafana use [Cypress](https://www.cypress.io/) to run automated scripts in a headless Chromium browser. Read more about our [e2e framework](/contribute/style-guides/e2e.md).
The end to end tests in Grafana use [Cypress](https://www.cypress.io/) to run automated scripts in a headless Chromium browser. Read more about our [e2e framework](/contribute/style-guides/e2e.md).
To run the tests:
```
yarn e2e-tests
yarn e2e
```
By default, the end-to-end tests assumes Grafana is available on `localhost:3000`. To use a specific URL, set the `BASE_URL` environment variable:
By default, the end-to-end tests starts a Grafana instance listening on `localhost:3001`. To use a specific URL, set the `BASE_URL` environment variable:
```
BASE_URL=http://localhost:3333 yarn e2e-tests
BASE_URL=http://localhost:3333 yarn e2e
```
To follow the tests in the browser while they're running, use the `yarn e2e-tests:debug` instead.
To follow the tests in the browser while they're running, use the `yarn e2e:debug`.
```
yarn e2e-tests:debug
yarn e2e:debug
```
If you want to pick a test first, use the `yarn e2e:dev`, to pick a test and follow the test in the browser while it runs.
```
yarn e2e:dev
```
## Configure Grafana for development
The default configuration, `grafana.ini`, is located in the `conf` directory.
The default configuration, `grafana.ini`, is located in the `conf` directory.
To override the default configuration, create a `custom.ini` file in the `conf` directory. You only need to add the options you wish to override.
@@ -130,7 +135,6 @@ Enable the development mode, by adding the following line in your `custom.ini`:
app_mode = development
```
### Add data sources
By now, you should be able to build and test a change you've made to the Grafana source code. In most cases, you need to add at least one data source to verify the change.
@@ -172,7 +176,7 @@ The resulting image will be tagged as grafana/grafana:dev.
1. Build the frontend: `go run build.go build-frontend`.
1. Build the Docker image: `make build-docker-dev`.
**Note:** If you are using Docker for macOS, be sure to set the memory limit to be larger than 2 GiB. Otherwise `grunt build` may fail. The memory limit settings are available under **Docker Desktop** -> **Preferences** -> **Advanced**.
**Note:** If you are using Docker for macOS, be sure to set the memory limit to be larger than 2 GiB. Otherwise,`grunt build` may fail. The memory limit settings are available under **Docker Desktop** -> **Preferences** -> **Advanced**.
## Troubleshooting
@@ -180,7 +184,7 @@ Are you having issues with setting up your environment? Here are some tips that
### Too many open files when running `make run`
Depending on your environment, you may have to increase the maximum number of open files allowed.
Depending on your environment, you may have to increase the maximum number of open files allowed. For the rest of this section, we will assume you are on a Unix like OS (e.g. Linux/MacOS), where you can control the maximum number of open files through the [ulimit](https://ss64.com/bash/ulimit.html) shell command.
To see how many open files are allowed, run:
@@ -200,7 +204,28 @@ The number of files needed may be different on your environment. To determine th
find ./conf ./pkg ./public/views | wc -l
```
Another alternative is to limit the files being watched. The directories that are watched for changes are listed in the `.bra.toml` file in the root directory.
Another alternative is to limit the files being watched. The directories that are watched for changes are listed in the `.bra.toml` file in the root directory.
To retain your `ulimit` configuration, i.e. so it will be remembered for future sessions, you need to commit it to your command line shell initialization file. Which file this will be depends on the shell you are using, here are some examples:
* zsh -> ~/.zshrc
* bash -> ~/.bashrc
Commit your ulimit configuration to your shell initialization file as follows ($LIMIT being your chosen limit and $INIT_FILE being the initialization file for your shell):
```
echo ulimit -S -n $LIMIT >> $INIT_FILE
```
Your command shell should read the initialization file in question every time it gets started, and apply your `ulimit` command.
For some people, typically using the bash shell, ulimit fails with an error similar to the following:
```
ulimit: open files: cannot modify limit: Operation not permitted
```
If that happens to you, chances are you've already set a lower limit and your shell won't let you set a higher one. Try looking in your shell initalization files (~/.bashrc typically), if there's already a ulimit command that you can tweak.
@@ -4,6 +4,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).
The [Divio documentation system](https://documentation.divio.com/) site is also a good resource.
## 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.
@@ -31,6 +33,7 @@ The following sections provide general guidelines on topics specific to Grafana
- Use: The panel opens. Grafana opens the panel.
* Do not use an ampersand (&) as an abbreviation for "and."
- **Exceptions:** If an ampersand is used in the Grafana UI, then match the UI.
* Avoid using internal slang and jargon in technical documentation.
Grafana products has some words, abbreviations, and slang particular to this discourse community.
Grafana products has some words, abbreviations, and terms particular to the Grafana discourse community.
#### checkout, check out
@@ -139,6 +142,14 @@ Two words, not one
* Correct, but passive voice: Your list of active alarms is displayed.
* Incorrect: The list of active alarms displays.
#### drawer
Do not use. This is developer jargon that refers to a UI panel. Refer to the panel or feature by its proper name.
#### intro, introduction
"Introduction" is the preferred word. Use "intro" if there are space constraints (like on the side menu) or you are specifically trying for a less formal, more conversational tone.
Now that we added the `aria-label` we suddenly get more information about this particular field. It's an input field that represents a username, but there it's still not really signaling that it's part of an e2e test.
The next step is to create a `Page` representation in our e2e test framework to glue the test with the real implementation using the `pageFactory` function. For that function we can supply a `url` and `selectors` like in the example below:
```typescript
export const Login = pageFactory({
url: '/login', // used when called from Login.visit()
selectors: {
username: 'Username input field', // used when called from Login.username().type('Hello World')
},
});
export const Login = {
url: "/login", // used when called from Login.visit()
username: "Username input field", // used when called from Login.username().type('Hello World')
};
```
The next step is to add the `Login` page to the exported const `Pages` in `packages/grafana-e2e/src/pages/index.ts` so that it appears when we type `e2e.pages` in our IDE.
The next step is to add the `Login` page to the exported const `Pages` in `packages/grafana-e2e-selectors/src/selectors/pages.ts` so that it appears when we type `e2e.pages` in our IDE.
```ecmascript 6
export const Pages = {
Login,
@@ -49,17 +82,21 @@ export const Pages = {
};
```
Now that we have a `Page` called `Login` in our `Pages` const we can use that to add a selector in our html like shown below and now this really signals to future developers that it is part of an e2e test.
The last step in our example is to use our `Login` page as part of a test. The `pageFactory` function we used before gives us two things:
The last step in our example is to use our `Login` page as part of a test.
- The `url` property is used whenever we call the `visit` function and is equivalent to the Cypress function [cy.visit()](https://docs.cypress.io/api/commands/visit.html#Syntax).
> Best practice after calling `visit` is to always call `should` on a selector to prevent flaky tests when you try to access an element that isn't ready. For more information, refer to [Commands vs. assertions](https://docs.cypress.io/guides/core-concepts/retry-ability.html#Commands-vs-assertions).
- Any defined selector in the `selectors` property can be accessed from the `Login` page by invoking it. This is equivalent to the result of the Cypress function [cy.get(...)](https://docs.cypress.io/api/commands/get.html#Syntax).
> Best practice after calling `visit` is to always call `should` on a selector to prevent flaky tests when you try to access an element that isn't ready. For more information, refer to [Commands vs. assertions](https://docs.cypress.io/guides/core-concepts/retry-ability.html#Commands-vs-assertions).
- Any defined selector can be accessed from the `Login` page by invoking it. This is equivalent to the result of the Cypress function [cy.get(...)](https://docs.cypress.io/api/commands/get.html#Syntax).
```ecmascript 6
describe('Login test', () => {
it('Should pass', () => {
@@ -73,6 +110,7 @@ describe('Login test', () => {
```
## Advanced example
Let's take a look at an example that uses the same `selector` for multiple items in a list for instance. In this example app we have a list of data sources that we want to click on during an e2e test.
```jsx harmony
@@ -80,36 +118,35 @@ Let's take a look at an example that uses the same `selector` for multiple items
Just as before in the basic example we'll start by creating a page abstraction using the `pageFactory` function:
```typescript
export const DataSources = pageFactory({
export const DataSources = {
url: '/datasources',
selectors: {
dataSources: (dataSourceName: string) => `Data source list item ${dataSourceName}`,
},
});
```
dataSources: (dataSourceName: string) => `Data source list item ${dataSourceName}`,
};
````
You might have noticed that instead of a simple `string` as the `selector`, we're using a `function` that takes a string parameter as an argument and returns a formatted string using the argument.
Just as before we need to add the `DataSources` page to the exported const `Pages` in `packages/grafana-e2e/src/pages/index.ts`.
Just as before we need to add the `DataSources` page to the exported const `Pages` in `packages/grafana-e2e-selectors/src/selectors/pages.ts`.
The next step is to use the `dataSources` selector function as in our example below:
@@ -119,6 +156,7 @@ The next step is to use the `dataSources` selector function as in our example be
```
When this list is rendered with the data sources with names `A`, `B`, `C` the resulting html would become:
```jsx harmony
<div class="card-item-name" aria-label="Data source list item A">
A
@@ -134,7 +172,9 @@ When this list is rendered with the data sources with names `A`, `B`, `C` the re
```
Now we can write our test. The one thing that differs from the `Basic example` is that we pass in which data source we want to click on as an argument to the selector function:
> Best practice after calling `visit` is to always call `should` on a selector to prevent flaky tests when you try to access an element that isn't ready. For more information, refer to [Commands vs. assertions](https://docs.cypress.io/guides/core-concepts/retry-ability.html#Commands-vs-assertions).
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.
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:
_SASS styles are deprecated. Please migrate to Emotion whenever you need to modify SASS styles._
### Typing
In general, you should let Typescript infer the types so that there's no need to explicitly define type for each variable.
There are some exceptions to this:
```typescript
// Typescript needs to know type of arrays or objects otherwise it would infer it as array of any
// bad
conststringArray=[];
// good
conststringArray: string[]=[];
```
Specify function return types explicitly in new code. This improves readability by being able to tell what a function returns just by looking at the signature. It also prevents errors when a function's return type is broader than expected by the author.
> Note: We don't have linting for this enabled because of lots of old code that needs to be fixed first.
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`.
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`. If a story should be internal, not visible in production, name the file `SomeComponent.story.internal.tsx`.
### Writing stories
@@ -101,7 +101,10 @@ import { MyComponent } from "./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:
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. Two things are required for this to work:
- The file needs to be named `*.story.mdx`
- A `Meta` tag must exist that says where in the hierarchy the component lives. It can look like this:
@@ -26,7 +26,7 @@ In the case of a long task, then you probably won't need any headings except for
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.
1. Write steps that contain one action, possibly two related actions, such as copy and paste a thing or save and quit 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.
@@ -36,5 +36,14 @@ make devenv sources=influxdb,prometheus2,elastic5
Some of the blocks support dynamic change of the image version used in the Docker file. The signature looks like this:
```bash
make devenv sources=postgres,openldap postgres_version=9.2
make devenv sources=postgres,openldap,grafanapostgres_version=9.2grafana_version=6.7.0-beta1
```
### Notes per block
#### Grafana
The grafana block is pre-configured with the dev-datasources and dashboards.
#### Jaeger
Jaeger block runs both Jaeger and Loki container. Loki container sends traces to Jaeger and also logs its own logs into itself so it is possible to setup derived field for traceID from Loki to Jaeger. You need to install a docker plugin for the self logging to work, without it the container won't start. See https://github.com/grafana/loki/tree/master/cmd/docker-driver#plugin-installation for installation instructions.
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'
`--configOverrides` is a command line argument that acts like an environmental variable override.
For example, you can use it to redirect logging to another file (maybe to log plugin installs in a service like Hosted Grafana) or when resetting the admin password and you have non-default values for some important config value (like where the database is located).
For example, you can use it to redirect logging to another file (maybe to log plugin installations in a service like Hosted Grafana) or when resetting the admin password and you have non-default values for some important config value (like where the database is located).
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 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.
While an image is being rendered, the PNGimage is temporarily written to the file system. When the image is rendered, the PNG image is temporarily written to the `png` folder in the Grafana `data` folder.
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.
@@ -108,7 +108,7 @@ The following example describes how to build and run the remote HTTP rendering s
## PhantomJS
> 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.
> Starting from Grafana v7.0.0, all PhantomJS support has been removed. Please use the Grafana Image Renderer plugin or remote rendering service.
### 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.
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:
Grafana collects some metrics about itself internally. Currently, Grafana supports pushing metrics to Graphite or exposing them to be scraped by Prometheus.
Grafana collects some metrics about itself internally. Grafana supports pushing metrics to Graphite or exposing them to be scraped by Prometheus.
To emit internal metrics you have to enable the option under the [metrics] section in your [grafana.ini](http://docs.grafana.org/installation/configuration/#enabled-6) config file. If you want to push metrics to Graphite, you must also configure the [metrics.graphite](http://docs.grafana.org/installation/configuration/#metrics-graphite) section.
For more information about configuration options related to Grafana metrics, refer to [metrics]({{< relref "../installation/configuration/#metrics" >}}) and [metrics.graphite]({{< relref "../installation/configuration/#metrics-graphite" >}}) in [Configuration]({{< relref "../installation/configuration.md" >}}).
## Available metrics
When enabled, Grafana exposes a number of metrics, including:
* Active Grafana instances
* Number of dashboards, users, and playlists
* HTTP status codes
* Requests by routing group
* Grafana active alerts
* Grafana performance
## Pull metrics from Grafana into Prometheus
These instructions assume you have already added Prometheus as a data source in Grafana.
1. Enable Prometheus to scrape metrics from Grafana. In your configuration file (`grafana.ini` or `custom.ini` depending on your operating system) remove the semicolon to enable the following configuration options:
```
# Metrics available at HTTP API Url /metrics
[metrics]
# Disable / Enable internal metrics
enabled = true
# Disable total stats (stat_totals_*) metrics to be generated
disable_total_stats = false
```
1. (optional) If you want to require authorization to view the metrics endpoint, then uncomment and set the following options:
```
basic_auth_username =
basic_auth_password =
```
1. Restart Grafana. Grafana now exposes metrics at http://localhost:3000/metrics.
1. Add the job to your prometheus.yml file.
Example:
```
- job_name: 'grafana_metrics'
scrape_interval: 15s
scrape_timeout: 5s
static_configs:
- targets: ['localhost:3000']
```
1. Restart Prometheus. Your new job should appear on the Targets tab.
1. In Grafana, hover your mouse over the **Configuration** (gear) icon on the left sidebar and then click **Data Sources**.
1. Select the **Prometheus** data source.
1. On the Dashboards tab, **Import** the Grafana metrics dashboard. All scraped Grafana metrics are available in the dashboard.
## View Grafana metrics in Graphite
These instructions assume you have already added Graphite as a data source in Grafana.
1. Enable sending metrics to Graphite. In your configuration file (`grafana.ini` or `custom.ini` depending on your operating system) remove the semicolon to enable the following configuration options:
```
# Metrics available at HTTP API Url /metrics
[metrics]
# Disable / Enable internal metrics
enabled = true
# Disable total stats (stat_totals_*) metrics to be generated
disable_total_stats = false
```
1. Enable [metrics.graphite] options:
```
# Send internal metrics to Graphite
[metrics.graphite]
# Enable by setting the address setting (ex localhost:2003)
address = <hostname or ip>:<port#>
prefix = prod.grafana.%(instance_name)s.
```
1. Restart Grafana. Grafana now exposes metrics at http://localhost:3000/metrics and sends them to the Graphite location you specified.
@@ -51,7 +51,7 @@ If you have a literal `$` in your value and want to avoid interpolation, `$$` ca
## Configuration Management Tools
Currently we do not provide any scripts/manifests for configuring Grafana. Rather than spending time learning and creating scripts/manifests for each tool, we think our time is better spent making Grafana easier to provision. Therefore, we heavily relay on the expertise of the community.
Currently we do not provide any scripts/manifests for configuring Grafana. Rather than spending time learning and creating scripts/manifests for each tool, we think our time is better spent making Grafana easier to provision. Therefore, we heavily rely on the expertise of the community.
Tool | Project
-----|------------
@@ -93,6 +93,8 @@ datasources:
access:proxy
# <int> org id. will default to orgId 1 if not specified
orgId:1
# <string> custom UID which can be used to reference this datasource in other parts of the configuration, if not specified will be generated automatically
uid:my_unique_uid
# <string> url
url:http://localhost:8080
# <string> Deprecated, use secureJsonData.password
@@ -160,6 +162,9 @@ Since not all datasources have the same configuration settings we only have the
It's possible to manage dashboards in Grafana by adding one or more yaml config files in the [`provisioning/dashboards`](/installation/configuration/#provisioning) directory. Each config file can contain a list of `dashboards providers` that will load dashboards into Grafana from the local filesystem.
It's possible to manage dashboards in Grafana by adding one or more yaml config files in the [`provisioning/dashboards`]({{< relref "../installation/configuration.md" >}}) directory. Each config file can contain a list of `dashboards providers` that will load dashboards into Grafana from the local filesystem.
The dashboard provider config file looks somewhat like this:
@@ -240,9 +245,9 @@ When Grafana starts, it will update/insert all dashboards available in the confi
It's possible to make changes to a provisioned dashboard in the Grafana UI. However, it is not possible to automatically save the changes back to the provisioning source.
If `allowUiUpdates` is set to `true` and you make changes to a provisioned dashboard, you can `Save` the dashboard then changes will be persisted to the Grafana database.
> **Note.**
> **Note:**
> If a provisioned dashboard is saved from the UI and then later updated from the source, the dashboard stored in the database will always be overwritten. The `version` property in the JSON file will not affect this, even if it is lower than the existing dashboard.
>
>
> If a provisioned dashboard is saved from the UI and the source is removed, the dashboard stored in the database will be deleted unless the configuration option `disableDeletion` is set to true.
If `allowUiUpdates` is configured to `false`, you are not able to make changes to a provisioned dashboard. When you click `Save`, Grafana brings up a *Cannot save provisioned dashboard* dialog. The screenshot below illustrates this behavior.
@@ -250,7 +255,7 @@ If `allowUiUpdates` is configured to `false`, you are not able to make changes t
Grafana offers options to export the JSON definition of a dashboard. Either `Copy JSON to Clipboard` or `Save JSON to file` can help you synchronize your dashboard changes back to the provisioning source.
Note: The JSON definition in the input field when using `Copy JSON to Clipboard` or `Save JSON to file` will have the `id` field automatically removed to aid the provisioning workflow.
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.
**Note:** The tags `Severity`, `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, then they are transposed to the root of the event sent to Pagerduty. This means they will be available within the Pagerduty UI and Filtering tools. A Severity tag set on an alert overrides the global Severity set on the notification channel if it's a valid level.
# Enable images in notifications {#external-image-store}
## 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
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
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.
Be aware that some notifiers requires public access to the image to be able to include it in the notification. So make sure to enable public access to the images. If you're using local image uploader, your Grafana instance need to be accessible by the internet.
Be aware that some notifiers require public access to the image to be able to include it in the notification. So make sure to enable public access to the images. If you're using local image uploader, your Grafana instance need to be accessible by the internet.
Notification services which need public image access are marked as 'external only'.
# Use alert rule tags in notifications {#alert-rule-tags}
## Use alert rule tags in notifications {#alert-rule-tags}
> Only available in Grafana v6.3+.
@@ -226,7 +230,7 @@ It currently supports only the Prometheus Alertmanager notifier.
This is an optional feature. You can get notifications without using alert rule tags.
# Configure the link back to Grafana from alert notifications
## 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.
You'll need to ensure that you've [enabled group attributes](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-fed-group-claims#configure-the-azure-ad-application-registration-for-group-attributes) in your Azure AD Application Registration manifest file (Azure Portal -> Azure Active Directory -> Application Registrations -> Select Application -> Manifest)
```json
"groupMembershipClaims": "ApplicationGroup"
```
The `allowed_domains` option limits access to the users belonging to the specific domains. Domains should be separated by space or comma.
@@ -54,24 +54,6 @@ Check for the presence of a role using the [JMESPath](http://jmespath.org/exampl
See [JMESPath examples](#jmespath-examples) for more information.
## Set up OAuth2 with Okta
First set up Grafana as an OpenId client "webapplication" in Okta. Then set the Base URIs to `https://<grafana domain>/` and set the Login redirect URIs to `https://<grafana domain>/login/generic_oauth`.
Finally set up the generic oauth module like this:
> Note: It's important to ensure that the [root_url]({{< relref "../installation/configuration/#root-url" >}}) in Grafana is set in your Azure Application Reply URLs (App -> Settings -> Reply URLs)
## Set up OAuth2 with Centrify
1. Create a new Custom OpenID Connect application configuration in the Centrify dashboard.
The Okta authentication allows your Grafana users to log in by using an external Okta authorization server.
## Create an Okta application
Before you can sign a user in, you need to create an Okta application from the Okta Developer Console.
1. Log in to the [Okta portal](https://login.okta.com/).
1. Go to Admin and then select **Developer Console**.
1. Select **Applications**, then **Add Application**.
1. Pick **Web** as the platform.
1. Enter a name for your application (or leave the default value).
1. Add the **Base URI** of your application, such as https://grafana.example.com.
1. Enter values for the **Login redirect URI**. Use **Base URI** and append it with `/login/okta`, for example: https://grafana.example.com/login/okta.
1. Click **Done** to finish creating the Okta application.
## Enable Okta Oauth in Grafana
1. Add the following to the [Grafana configuration file]({{< relref "../installation/configuration.md#config-file-locations" >}}):
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 Okta groups.
```ini
allowed_groups=Developers, Admins
```
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
```
### Map roles
Grafana can attempt to do role mapping through Okta OAuth. In order to achieve this, Grafana checks for the presence of a role using the [JMESPath](http://jmespath.org/examples.html) specified via the `role_attribute_path` configuration option.
Grafana uses JSON obtained from querying the `/userinfo` endpoint for the path lookup. The result after evaluating the `role_attribute_path` JMESPath expression needs to be a valid Grafana role, i.e. `Viewer`, `Editor` or `Admin`. Refer to [Organization roles]({{< relref "../permissions/organization_roles.md" >}}) for more information about roles and permissions in Grafana.
Read about how to [add custom claims](https://developer.okta.com/docs/guides/customize-tokens-returned-from-okta/add-custom-claim/) to the user info in Okta. Also, check Generic OAuth page for [JMESPath examples]({{< relref "generic-oauth.md/#jmespath-examples" >}}).
### Team Sync (Enterprise only)
Map your Okta groups to teams in Grafana so that your users will automatically be added to
the correct teams.
Okta groups can be referenced by group name, like `Admins`.
[Learn more about Team Sync]({{< relref "../enterprise/team-sync.md" >}})
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
With Team Sync, you can setup synchronization between your auth provider's 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.
@@ -23,4 +23,4 @@ This mechanism allows Grafana to remove an existing synchronized user from a tea
<div class="clearfix"></div>
> 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" >}}).
> 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" >}}).
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 Grafana’s 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.
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 Grafana’s 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.
Grafana has a proxy feature that proxies all data requests through the Grafana backend. The main benefit of using the proxy is secure handling of credentials when authenticating against an external/third-party API. The Grafana proxy also adds [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) headers to the proxied requests.
The proxy supports:
- [authentication with HTTP Headers]({{< relref "#api-key-http-header-authentication" >}}).
- [token authentication]({{< relref "#how-token-authentication-works" >}}) and can automatically renew a token for the user when the token expires.
## How the proxy works
The user saves the API key/password on the plugin config page and it is encrypted (using the `secureJsonData` feature) and saved in the Grafana database. When a request from the data source is made, the Grafana proxy will:
1. Intercept the original request sent from the data source plugin.
1. Load the `secureJsonData` data from the database and decrypt the API key or password on the Grafana backend.
1. If using token authentication, carry out authentication and generate an OAuth token that will be added as an `Authorization` HTTP header to the requests (or alternatively it will add a HTTP header with the API key).
1. Renew the token if it has expired.
1. After adding CORS headers and authorization headers, forward the request to the external API.
This means that users that access the data source config page cannot access the API key or password after they have saved it the first time and that no secret keys are sent in plain text through the browser where they can be spied on.
For backend authentication to work, the external/third-party API must either have an OAuth endpoint or that the API accepts an API key as a HTTP header for authentication.
## Encrypting sensitive data
When a user saves a password or secret with your data source plugin's Config page, then you can save data in an encrypted blob in the Grafana database called `secureJsonData`. Any data saved in the blob is encrypted by Grafana and can only be decrypted by the Grafana server on the backend. This means once a password is saved, no sensitive data is sent to the browser. If the password is saved in the `jsonData` blob or the `password` field then it is unencrypted and anyone with Admin access (with the help of Chrome Developer Tools) can read it.
This is an example of using the `secureJsonData` blob to save a property called `password` in a html input:
A plugin route describes where the intercepted request should be forwarded to and how to authenticate for the external API. You can define multiple routes that can match multiple external API endpoints.
You specify routes in the `plugin.json` file for your data source plugin. [Here is an example](https://github.com/grafana/azure-monitor-datasource/blob/d74c82145c0a4af07a7e96cc8dde231bfd449bd9/src/plugin.json#L30-L95) with lots of routes (though most plugins will just have one route).
When you build your URL to the third-party API in your data source class, the URL should start with the text specified in the path field for a route. The proxy will strip out the path text and replace it with the value in the URL field.
### Simple plugin route example
- If my code makes a call to URL `azuremonitor/foo/bar` with this code:
```js
this.backendSrv.datasourceRequest({
url: url,
method: "GET",
});
```
- and the plugin has this route:
```json
"routes": [{
"path": "azuremonitor",
"method": "GET",
"url": "https://management.azure.com"
}]
```
- then the Grafana proxy will transform the URL from the original request into `https://management.azure.com/foo/bar`
- finally, it will add CORS headers and forward the request to the new URL. This example does not do any authentication.
The `method` parameter is optional. It can be set to a specific HTTP verb to provide more fine-grained control. For example you might have two plugin routes, one for GET requests and one for POST requests.
### Dynamic routes
When using routes, you can also reference a variable stored in JsonData or SecureJsonData which is interpolated (replacing the variable text with a value) when the data source makes a request to the proxy. These are variables that were entered by the user on the data source configuration page and saved in the Grafana database.
In this example, the value for `dynamicUrl` comes from the JsonData blob and the api key's value is set from the SecureJsonData blob. The `urlParams` field is for query string parameters for HTTP GET requests.
- `JsonData.dynamicUrl` has the value `http://example.com/api`
- `SecureJsonData.apiKey` has the value `secretKey`
a call to the URL: `custom/api/v5/some/path`
will be proxied to the following URL: `http://example.com/api/some/path?apiKey=secretKey`
An app using this feature can be found [here](https://github.com/grafana/kentik-app).
## API key/HTTP header authentication
Some third-party API's accept a HTTP Header for authentication. The [example](https://github.com/grafana/azure-monitor-datasource/blob/d74c82145c0a4af07a7e96cc8dde231bfd449bd9/src/plugin.json#L91-L93) below has a `headers` section that defines the name of the HTTP Header that the API expects and it uses the `SecureJSONData` blob to fetch an encrypted API key. The Grafana server proxy will decrypt the key, add the `X-API-Key` header to the request and forward it to the third-party API.
This interpolates in data from both `jsonData` and `secureJsonData` to generate the token request to the third-party API. It is common for tokens to have a short expiry period (30 minutes). The Grafana proxy automatically renews the token if it has expired.
## Always restart the Grafana server after route changes
The plugin.json files are only loaded when the Grafana server starts so when a route is added or changed then the Grafana server has to be restarted for the changes to take effect.
Grafana added support for plugins in Grafana 3.0 and this enabled the Grafana community to create panel plugins and data source plugins. It was wildly successful and has made Grafana much more useful as you can integrate it with anything and do any type of custom visualization that you want. However, these plugin hooks are on the frontend only and we also want to provide hooks into the Grafana backend to allow the community to extend and improve Grafana in new ways.
Once Grafana introduced the alerting feature, external data source plugins needed a backend component for the Grafana server to execute queries for evaluating alert rules (as the alerting engine cannot call frontend JavaScript code). So the obvious first backend plugin type is the **Datasource backend plugin** and it is a new component for an existing data source plugin. This new plugin type will enable alerting for external data source plugins but can also be used for achieving different goals such as query caching, request proxying, custom authentication methods, and more.
## Grafana's Backend Plugin System
The backend plugin feature is implemented with the [HashiCorp plugin system](https://github.com/hashicorp/go-plugin) which is a Go plugin system over RPC. Grafana server launches each plugin as a subprocess and communicates with it over RPC. This approach has a number of benefits:
- Plugins can't crash your grafana process: a panic in a plugin doesn't panic the server.
- Plugins are easy to develop: just write a Go application and `go build` (or use any other language which supports gRPC).
- Plugins can be relatively secure: The plugin only has access to the interfaces and args given to it, not to the entire memory space of the process.
## Data source plugin interface
The plugin interface is very simple and described as a Go interface type in [Grafana](https://github.com/grafana/grafana/blob/6724aaeff9a332dc73b4ee0f8abe0621f7253142/pkg/tsdb/query_endpoint.go#L10-L12) and as a general [RPC service](https://github.com/grafana/grafana-plugin-model/blob/84176c64269d8060f99e750ee8aba6f062753336/datasource.proto#L96-L98) in the corresponding `.proto` (protocol buffer file):
Thus, a datasource plugin should only implement the `Query()` method.
## Introduction to building a backend component for a plugin
The [Simple JSON backend](https://github.com/grafana/simple-json-backend-datasource) data source is a good example of writing a simple backend plugin in Go. Let's take a look at some key points.
### Metadata
The plugin needs to know it has a backend component, this is done in the `plugin.json` file by setting two fields: `backend` and `executable`. If you want to enable alerting for your data source, set the `alerting` field to `true` as well.
```json
{
"id":"grafana-simple-json-backend-datasource",
"name":"Simple Json backend",
"type":"datasource",
"metrics":true,
"annotations":true,
"backend":true,
"alerting":true,
"executable":"simple-json-plugin",
...
}
```
`executable` should be the the the first part of the binary filename. The actual binary filename has 3 possible endings:
- \_linux_amd64
- \_darwin_amd64
- \_windows_amd64.exe
When Grafana loads the plugin binary, it uses the executable field plus the current OS (Grafana knows which OS it is running on) to load in the correct version of the plugin. So in Simple JSON the executable field is `simple-json-plugin` and the 3 binaries are named:
-`simple-json-plugin_darwin_amd64`
-`simple-json-plugin_linux_amd64`
-`simple-json-plugin_windows_amd64.exe`
The resulting plugin directory will look like this:
```text
simple-json-backend-datasource/
|-- dist/
| |-- partials/
| |-- module.js
| |-- plugin.json
| |-- simple-json-plugin_linux_amd64
| |-- simple-json-plugin_darwin_amd64
| |-- simple-json-plugin_windows_amd64.exe
...
```
### Plugin code
A `pkg/` directory contains three `.go` files:
-`plugin.go` - an entry point of the plugin. This file would be very similar for your data source - you just need to change some details like the plugin name etc.
-`datasource.go` - contains `Query()` method implementation and other plugin logic.
-`models.go` - types for request and response specific to your data source.
The data source type is declared in [`datasource.go`](https://github.com/grafana/simple-json-backend-datasource/blob/7927ff0db60c3402dbf954a454f19d7230e18deb/pkg/datasource.go#L21-L24):
```go
packagemain
import(
plugin"github.com/hashicorp/go-plugin"
)
typeJsonDatasourcestruct{
plugin.NetRPCUnsupportedPlugin
}
```
The only requirement for the plugin type is that it should extend `plugin.NetRPCUnsupportedPlugin`. You can include more fields into your struct if you want to add some data source-specific features, like logging, cache etc:
```go
typeJsonDatasourcestruct{
plugin.NetRPCUnsupportedPlugin
loggerhclog.Logger
}
```
The main method you should implement is the [`Query()`](https://github.com/grafana/simple-json-backend-datasource/blob/7927ff0db60c3402dbf954a454f19d7230e18deb/pkg/datasource.go#L26):
In order to call this method from the [frontend part of your data source](https://github.com/grafana/simple-json-backend-datasource/blob/7927ff0db60c3402dbf954a454f19d7230e18deb/src/datasource.ts#L116), use the `/api/tsdb/query` endpoint:
```js
classSimpleJSONDatasource{
...
doTsdbRequest(options){
consttsdbRequest={
from:options.range.from.valueOf().toString(),
to:options.range.to.valueOf().toString(),
queries:options.targets,
};
returnthis.backendSrv.datasourceRequest({
url:'/api/tsdb/query',
method:'POST',
data:tsdbRequest
});
}
}
```
This endpoint gets data in the following format (see [pkg/api/metrics.go](https://github.com/grafana/grafana/blob/7b63913dc1d79da07f0329cf19dc4c2704ec488f/pkg/api/metrics.go#L16) and [pkg/api/dtos/models.go](https://github.com/grafana/grafana/blob/7b63913dc1d79da07f0329cf19dc4c2704ec488f/pkg/api/dtos/models.go#L43-L47)):
```js
{
from:"1555324640782",// Optional, time range from
to:"1555328240782",// Optional, time range to
queries:[
{
datasourceId:42,// Required
refId:"A",// Optional, default is "A"
maxDataPoints:100,// Optional, default is 100
intervalMs:1000,// Optional, default is 1000
myFieldFoo:"bar",// Any other fields,
myFieldBar:"baz",// defined by user
...
},
...
]
}
```
There is only one query function but it is possible to move all your queries to the backend. In order to achieve this, you could add a kind of `queryType` field to your query model and check this type in the backend code. The Stackdriver and Cloudwatch core plugins have examples of supporting multiple types of queries if you need/want to do this:
Go types for the query response can be found in Grafana tsdb models ([pkg/tsdb/models.go](https://github.com/grafana/grafana/blob/7b63913dc1d79da07f0329cf19dc4c2704ec488f/pkg/tsdb/models.go#L22-L34)) or in the corresponding protocol buffer file ([datasource.proto](https://github.com/grafana/grafana-plugin-model/blob/84176c64269d8060f99e750ee8aba6f062753336/datasource.proto#L26-L36))
```protobuf
// datasource.proto
messageDatasourceResponse{
repeatedQueryResultresults=1;
}
messageQueryResult{
stringerror=1;
stringrefId=2;
stringmetaJson=3;
repeatedTimeSeriesseries=4;
repeatedTabletables=5;
}
```
```go
// pkg/tsdb/models.go
typeResponsestruct{
Resultsmap[string]*QueryResult`json:"results"`
Messagestring`json:"message,omitempty"`
}
typeQueryResultstruct{
Errorerror`json:"-"`
ErrorStringstring`json:"error,omitempty"`
RefIdstring`json:"refId"`
Meta*simplejson.Json`json:"meta,omitempty"`
SeriesTimeSeriesSlice`json:"series"`
Tables[]*Table`json:"tables"`
}
```
The resulting JSON response which the frontend will receive looks like this:
```js
results:{
A:{
refId:"A",
series:[
{name:"series_1",points:[...]},
{name:"series_2",points:[...]},
...
],
tables:null,
// Request metadata (any arbitrary JSON).
// Optional, empty field will be omitted.
meta:{},
// Error message. Optional, empty field will be omitted.
error:"Request failed",
}
}
```
### Logging
Logs from the plugin will be automatically sent to the Grafana server and will appear in its log flow. Grafana server reads logs from the plugin's `stderr` stream, so with the standard `log` package you have to set output to `os.Stderr` first:
```go
funcmain(){
log.SetOutput(os.Stderr)
log.Println("from plugin!")
...
}
```
Another option for logging - using [go-hclog](https://github.com/hashicorp/go-hclog) package:
Grafana supports a variety of different data sources, each with its own data model. To make this possible, Grafana consolidates the query results from each of these data sources into one unified data structure called a _data frame_.
The data frame structure is a concept that's borrowed from data analysis tools like the [R programming language](https://www.r-project.org), and [Pandas](https://pandas.pydata.org/).
> Data frames are available in Grafana 7.0+, and replaced the Time series and Table structures with a more generic data structure that can support a wider range of data types.
This document gives an overview of the data frame structure, and of how data is handled within Grafana.
## The data frame
A data frame is a columnar-oriented table structure, which means it stores data by column and not by row. To understand what this means, let’s look at the TypeScript definition used by Grafana:
```ts
interfaceDataFrame{
name?: string;
// reference to query that create the frame
refId?: string;
fields:[]Field;
}
```
In essence, a data frame is a collection of _fields_, where each field corresponds to a column. Each field, in turn, consists of a collection of values, along with meta information, such as the data type of those values.
```ts
interfaceField{
name: string;
// Prometheus like Labels / Tags
labels?: Record<string,string>;
// For example string, number, time (or more specific primitives in the backend)
type:FieldType;
// Array of values all of the same type
values: Vector<T>;
// Optional display data for the field (e.g. unit, name over-ride, etc)
config: FieldConfig;
}
```
Let's look an example. The table below demonstrates a data frame with two fields, _time_ and _temperature_.
| time | temperature |
|---------------------|-------------|
| 2020-01-02 03:04:00 | 45.0 |
| 2020-01-02 03:05:00 | 47.0 |
| 2020-01-02 03:06:00 | 48.0 |
Each field has three values, and each value in a field must share the same type. In this case, all values in the time field are timestamps, and all values in the temperature field are numbers.
One restriction on data frames is that all fields in the frame must be of the same length to be a valid data frame.
### Field configuration
Each field in a data frame contains optional information about the values in the field, such as units, scaling, and so on.
By adding field configurations to a data frame, Grafana can configure visualizations automatically. For example, you could configure Grafana to automatically set the unit provided by the data source.
## Transformations
Along with the type information, field configs enables _data transformations_ within Grafana.
A data transformation is any function that accepts a data frame as input, and returns another data frame as output. By using data frames in your plugin, you get a range of transformations for free.
## Data frames as time series
A data frame with at least one time field is considered a _time series_.
For more information on time series, refer to our [Introduction to time series](https://grafana.com/docs/grafana/latest/guides/timeseries/).
### Wide format
When a collection of time series share the same _time index_—the time fields in each time series are identical—they can be stored together, in a _wide_ format. By reusing the time field, we can reduce the amount of data being sent to the browser.
In this example, the `cpu` usage from each host share the time index, so we can store them in the same data frame.
However, if the two time series don't share the same time values, they are represented as two distinct data frames.
```text
Name: cpu
Dimensions: 2 fields by 2 rows
+---------------------+-----------------+
| Name: time | Name: cpu |
| Labels: | Labels: host=a |
| Type: []time.Time | Type: []float64 |
+---------------------+-----------------+
| 2020-01-02 03:04:00 | 3 |
| 2020-01-02 03:05:00 | 6 |
+---------------------+-----------------+
Name: cpu
Dimensions: 2 fields by 2 rows
+---------------------+-----------------+
| Name: time | Name: cpu |
| Labels: | Labels: host=b |
| Type: []time.Time | Type: []float64 |
+---------------------+-----------------+
| 2020-01-02 03:04:01 | 4 |
| 2020-01-02 03:05:01 | 7 |
+---------------------+-----------------+
```
The wide format can typically be used when multiple time series are collected by the same process. In this case, every measurement is made at the same interval and will therefore share the same time values.
### Long format
Some data sources return data in a _long_ format (also called _narrow_ format). This is common format returned by, for example, SQL databases.
In long format, string values are represented as separate fields rather than as labels. As a result, a data form in long form may have duplicated time values.
Grafana can detect and convert data frames in long format into wide format.
> Note: Long format is currently only supported in the backend: [Grafana Issue #22219](https://github.com/grafana/grafana/issues/22219).
For example, the following data frame in long format:
This section contains links to technical reference and implementations of data frames.
### Apache Arrow
The data frame structure is inspired by, and uses the [Apache Arrow Project](https://arrow.apache.org/). Javascript Data frames use Arrow Tables as the underlying structure, and the backend Go code serializes its Frames in Arrow Tables for transmission.
### Javascript
The Javascript implementation of data frames is in the [`/src/dataframe` folder](https://github.com/grafana/grafana/tree/master/packages/grafana-data/src/dataframe) and [`/src/types/dataframe.ts`](https://github.com/grafana/grafana/blob/master/packages/grafana-data/src/types/dataFrame.ts) of the [`@grafana/data` package](https://github.com/grafana/grafana/tree/master/packages/grafana-data).
### Go
For documentation on the Go implementation of data frames, refer to the [github.com/grafana/grafana-plugin-sdk-go/data package](https://pkg.go.dev/github.com/grafana/grafana-plugin-sdk-go/data?tab=doc).
> **Note**: Since Grafana 7.0, writing plugins using Angular is no longer recommended. If you're looking to build a new plugin, refer to [Plugins]({{< relref "../_index.md" >}}).
You can extend Grafana by writing your own plugins and then share them with other users in [our plugin repository](https://grafana.com/plugins).
Grafana already has a strong community of contributors and plugin developers. By making it easier to develop and install plugins with resources such as this guide, we hope that the community can grow even stronger and develop new plugins that we would never think about.
## Short version
1. [Set up Grafana](https://github.com/grafana/grafana/blob/master/contribute/developer-guide.md)
2. Clone an example plugin into ```/var/lib/grafana/plugins``` or `data/plugins` (relative to grafana git repo if you're running development version from source dir)
3. Use one of our example plugins as a starting point
Example plugins
- ["Hello World" panel using Angular](https://github.com/grafana/simple-angular-panel)
- ["Hello World" panel using React](https://github.com/grafana/simple-react-panel)
- [Simple json data source](https://github.com/grafana/simple-json-datasource)
Since everything turns into JavaScript, it's up to you to choose which language you want. That said, it's probably a good idea to choose es6 or TypeScript, because we use es6 classes in Grafana. So it's easier to get inspiration from the Grafana repo if you choose one of those languages.
## Buildscript
You can use any build system that supports systemjs. All the built content should end up in a folder named ```dist``` and be committed to the repository. By committing the dist folder, the person who installs your plugin does not have to run any build script. All of our example plugins have a build script configured.
## Keep your plugin up to date
New versions of Grafana can sometimes cause plugins to break. Check out our [PLUGIN_DEV.md](https://github.com/grafana/grafana/blob/master/PLUGIN_DEV.md) doc for changes in
Grafana that can impact your plugin.
## Metadata
See the [coding styleguide]({{< relref "style-guide.md" >}}) for details on the metadata.
## module.(js|ts)
This is the entry point for every plugin. This is the place where you should export
your plugin implementation. Depending on what kind of plugin you are developing you
will be expected to export different things. You can find what's expected for [datasource]({{< relref "data-sources.md" >}}), [panels]({{< relref "panels.md" >}})
and [apps]({{< relref "apps.md" >}}) plugins in the documentation.
The Grafana SDK is quite small so far and can be found here:
- [SDK file in Grafana](https://github.com/grafana/grafana/blob/master/public/app/plugins/sdk.ts)
The SDK contains three different plugin classes: PanelCtrl, MetricsPanelCtrl and QueryCtrl. For plugins of the panel type, the module.js file should export one of these. There are some extra classes for [data sources]({{< relref "data-sources.md" >}}).
Example:
```javascript
import {ClockCtrl} from './clock_ctrl';
export {
ClockCtrl as PanelCtrl
};
```
The module class is also where css for the dark and light themes is imported:
There are three ways that you can start developing a Grafana plugin.
1. Set up a Grafana development environment. [(described here)](https://github.com/grafana/grafana/blob/master/contribute/developer-guide.md) and place your plugin in the ```data/plugins``` folder.
2. Install Grafana and place your plugin in the plugins directory which is set in your [config file](/installation/configuration). By default this is `/var/lib/grafana/plugins` on Linux systems.
3. Place your plugin directory anywhere you like and specify it grafana.ini.
We encourage people to set up the full Grafana environment so that you can get inspiration from the rest of the Grafana code base.
When Grafana starts, it scans the plugin folders and mounts every folder that contains a plugin.json file unless
the folder contains a subfolder named dist. In that case, Grafana mounts the dist folder instead.
This makes it possible to have both built and src content in the same plugin Git repo.
## Grafana Events
There are a number of Grafana events that a plugin can hook into:
- `init-edit-mode` can be used to add tabs when editing a panel
- `panel-teardown` can be used for clean up
- `data-received` is an event in that is triggered on data refresh and can be hooked into
- `data-snapshot-load` is an event triggered to load data when in snapshot mode.
- `data-error` is used to handle errors on dashboard refresh.
If a panel receives data and hooks into the `data-received` event then it should handle snapshot mode too. Otherwise the panel will not work if saved as a snapshot. [Getting Plugins to work in Snapshot Mode]({{< relref "snapshot-mode.md" >}}) describes how to add support for this.
## Examples
We have three different examples that you can fork/download to get started developing your Grafana plugin.
- [simple-json-datasource](https://github.com/grafana/simple-json-datasource) (small data source plugin for querying json data from backends)
App plugins are a new kind of grafana plugin that can bundle data source and panel plugins within one package. It also enable the plugin author to create custom pages within grafana. The custom pages enable the plugin author to include things like documentation, signup forms or controlling other services using HTTP requests.
App plugins are a Grafana plugin that can bundle data source and panel plugins within one package. They also enable the plugin author to create custom pages within Grafana. The custom pages enable the plugin author to include things like documentation, sign-up forms, or to control other services with HTTP requests.
Data source and panel plugins will show up like normal plugins. The app pages will be available in the main menu.
@@ -56,4 +53,3 @@ If possible a link to a dashboard or custom page should be shown after enabling
> Our goal is not to have a very extensive documentation but rather have actual
> code that people can look at. An example implementation of an app can be found
> in this [example app repo](https://github.com/grafana/simple-app-plugin)
To interact with the rest of grafana the plugins module file can export 4 different components.
- Datasource (Required)
- QueryCtrl (Required)
- ConfigCtrl (Required)
- AnnotationsQueryCtrl
## Plugin json
There are two data source specific settings for the plugin.json
```json
"metrics":true,
"annotations":false,
```
These settings indicate what kind of data the plugin can deliver. At least one of them has to be true.
## Data source
The javascript object that communicates with the database and transforms data to times series.
The Data source should contain the following functions:
```javascript
query(options)// used by panels to get data
testDatasource()// used by data source configuration page to make sure the connection is working
annotationQuery(options)// used by dashboards to get annotations
metricFindQuery(options)// used by query editor to get metric suggestions.
```
### testDatasource
When a user clicks on the *Save & Test* button when adding a new data source, the details are first saved to the database and then the `testDatasource` function that is defined in your data source plugin will be called. It is recommended that this function makes a query to the data source that will also test that the authentication details are correct. This is so the data source is correctly configured when the user tries to write a query in a new dashboard.
### Query
Request object passed to datasource.query function:
There are two different kinds of results for data sources:
time series and table. Time series is the most common format and is supported by all data sources and panels. Table format is only supported by the InfluxDB data source and table panel. But we might see more of this in the future.
Time series response from datasource.query.
An array of:
```json
[
{
"target":"upper_75",
"datapoints":[
[622,1450754160000],
[365,1450754220000]
]
},
{
"target":"upper_90",
"datapoints":[
[861,1450754160000],
[767,1450754220000]
]
}
]
```
Table response from datasource.query.
An array of:
```json
[
{
"columns":[
{
"text":"Time",
"type":"time",
"sort":true,
"desc":true,
},
{
"text":"mean",
},
{
"text":"sum",
}
],
"rows":[
[
1457425380000,
null,
null
],
[
1457425370000,
1002.76215352,
1002.76215352
],
],
"type":"table"
}
]
```
### Annotation Query
Request object passed to datasource.annotationQuery function:
"name":"annotation name",//should match the annotation name in grafana
"enabled":true,
"datasource":"generic datasource"
},
"title":"Cluster outage",
"time":1457075272576,
"text":"Joe causes brain split",
"tags":["joe","cluster","failure"]
}
]
```
## QueryCtrl
A JavaScript class that will be instantiated and treated as an Angular controller when the user edits metrics in a panel. This class has to inherit from the `app/plugins/sdk.QueryCtrl` class.
Requires a static template or `templateUrl` variable which will be rendered as the view for this controller.
## ConfigCtrl
A JavaScript class that will be instantiated and treated as an Angular controller when a user tries to edit or create a new data source of this type.
Requires a static template or `templateUrl` variable which will be rendered as the view for this controller.
## AnnotationsQueryCtrl
A JavaScript class that will be instantiated and treated as an Angular controller when the user chooses this type of data source in the templating menu in the dashboard.
Requires a static template or `templateUrl` variable which will be rendered as the view for this controller. The fields that are bound to this controller are then sent to the Database objects annotationQuery function.
Most plugins allow users to customize the behavior by changing settings on an editor tab. These setting fields are saved in the dashboard json.
@@ -19,10 +16,10 @@ We define fields to be saved in Grafana by creating values on the panel object o
{
"id": 4,
"title": "Clock",
...
...
"rows": [
{
...
...
"panels": [
{
"bgColor": "rgb(132, 151, 130)",
@@ -59,7 +56,7 @@ If you want your users to be able to change these panel values then you need to
## Editor Mode
Editor mode is when a user clicks Edit on a panel. Every panel has a general tab where you change the title and width and some panels have more inbuilt tabs like the Metrics tab or Time Range tab. A panel plugin can add its own tab(s) so that a user can customize the panel.
Editor mode is when a user clicks Edit on a panel. Every panel has a general tab where you change the title and width and some panels have more inbuilt tabs like the Metrics tab or Time Range tab. A panel plugin can add its own tab(s) so that a user can customize the panel.
Grafana conventions mean all you need to do is to hook up an Angular template with input fields and Grafana will automatically save the values to the dashboard json and load them on dashboard load.
Panels are the main building blocks of dashboards.
## Panel development
### Scrolling
The grafana dashboard framework controls the panel height. To enable a scrollbar within the panel the PanelCtrl needs to set the scrollable static variable:
```javascript
exportclassMyPanelCtrlextendsPanelCtrl{
staticscrollable=true;
...
```
In this case, make sure the template has a single `<div>...</div>` root. The plugin loader will modify that element adding a scrollbar.
The Grafana team reviews all plugins that are published on Grafana.com. There are two areas we review, the metadata for the plugin and the plugin functionality.
## Metadata
The plugin metadata consists of a `plugin.json` file and the README.md file. The `plugin.json` file is used by Grafana to load the plugin, and the README.md file is shown in the plugins section of Grafana and the plugins section of https://grafana.com.
### README.md
The README.md file is shown on the plugins page in Grafana and the plugin page on Grafana.com. There are some differences between the GitHub markdown and the markdown allowed in Grafana/Grafana.com:
- Cannot contain inline HTML.
- Any image links should be absolute links. For example: https://raw.githubusercontent.com/grafana/azure-monitor-datasource/master/dist/img/grafana_cloud_install.png
The README should:
- describe the purpose of the plugin.
- contain steps on how to get started.
### Plugin.json
The `plugin.json` file is the same concept as the `package.json` file for an npm package. When the Grafana server starts it will scan the plugin folders (all folders in the data/plugins subfolder) and load every folder that contains a `plugin.json` file unless the folder contains a subfolder named `dist`. In that case, the Grafana server will load the `dist` folder instead.
A minimal `plugin.json` file:
```json
{
"type":"panel",
"name":"Clock",
"id":"yourorg-clock-panel",
"info":{
"description":"Clock panel for grafana",
"author":{
"name":"Author Name",
"url":"http://yourwebsite.com"
},
"keywords":["clock","panel"],
"version":"1.0.0",
"updated":"2018-03-24"
},
"dependencies":{
"grafanaVersion":"3.x.x",
"plugins":[]
}
}
```
- The convention for the plugin id is **[grafana.com username/org]-[plugin name]-[datasource|app|panel]** and it has to be unique. The org **cannot** be `grafana` unless it is a plugin created by the Grafana core team.
Examples:
- raintank-worldping-app
- ryantxu-ajax-panel
- alexanderzobnin-zabbix-app
- hawkular-datasource
- The `type` field should be either `datasource``app` or `panel`.
- The `version` field should be in the form: x.x.x e.g. `1.0.0` or `0.4.1`.
The full file format for the `plugin.json` file is described [here](http://docs.grafana.org/plugins/developing/plugin.json/).
## Plugin Language
JavaScript, TypeScript, ES6 (or any other language) are all fine as long as the contents of the `dist` subdirectory are transpiled to JavaScript (ES5).
## File and Directory Structure Conventions
Here is a typical directory structure for a plugin.
```bash
johnnyb-awesome-datasource
|-- dist
|-- src
||-- img
|||-- logo.svg
||-- partials
|||-- annotations.editor.html
|||-- config.html
|||-- query.editor.html
||-- datasource.js
||-- module.js
||-- plugin.json
||-- query_ctrl.js
|-- Gruntfile.js
|-- LICENSE
|-- package.json
|-- README.md
```
Most JavaScript projects have a build step. The generated JavaScript should be placed in the `dist` directory and the source code in the `src` directory. We recommend that the plugin.json file be placed in the src directory and then copied over to the dist directory when building. The `README.md` can be placed in the root or in the dist directory.
Directories:
-`src/` contains plugin source files.
-`src/partials` contains html templates.
-`src/img` contains plugin logos and other images.
-`dist/` contains built content.
## HTML and CSS
For the HTML on editor tabs, we recommend using the inbuilt Grafana styles rather than defining your own. This makes plugins feel like a more natural part of Grafana. If done correctly, the html will also be responsive and adapt to smaller screens. The `gf-form` css classes should be used for labels and inputs.
Below is a minimal example of an editor row with one form group and two fields, a dropdown and a text input:
<selectclass="input-small gf-form-input"ng-model="ctrl.panel.mySelectProperty"ng-options="t for t in ['option1', 'option2', 'option3']"ng-change="ctrl.onSelectChange()"></select>
<inputtype="text"class="input-small gf-form-input width-10"ng-model="ctrl.panel.myProperty"ng-change="ctrl.onFieldChange()"placeholder="suggestion for user"ng-model-onblur/>
</div>
</div>
</div>
</div>
```
Use the `width-x` and `max-width-x` classes to control the width of your labels and input fields. Try to get labels and input fields to line up neatly by having the same width for all the labels in a group and the same width for all inputs in a group if possible.
## Data Sources
A basic guide for data sources can be found [here](http://docs.grafana.org/plugins/developing/datasources/).
### Config Page Guidelines
- It should be as easy as possible for a user to configure a URL. If the data source is using the `datasource-http-settings` component, it should use the `suggest-url` attribute to suggest the default URL or a URL that is similar to what it should be (especially important if the URL refers to a REST endpoint that is not common knowledge for most users e.g. `https://yourserver:4000/api/custom-endpoint`).
```html
<datasource-http-settings
current="ctrl.current"
suggest-url="http://localhost:8080">
</datasource-http-settings>
```
- The `testDatasource` function should make a query to the data source that will also test that the authentication details are correct. This is so the data source is correctly configured when the user tries to write a query in a new dashboard.
#### Password Security
If possible, any passwords or secrets should be be saved in the `secureJsonData` blob. To encrypt sensitive data, the Grafana server's proxy feature must be used. The Grafana server has support for token authentication (OAuth) and HTTP Header authentication. If the calls have to be sent directly from the browser to a third-party API, this will not be possible and sensitive data will not be encrypted.
Read more here about how [authentication for data sources]({{< relref "../authentication.md" >}}) works.
If using the proxy feature, the Config page should use the `secureJsonData` blob like this:
Each query editor is unique and can have a unique style. It should be adapted to what the users of the data source are used to.
- Should use the Grafana CSS `gf-form` classes.
- Should be neat and tidy. Labels and fields in columns should be aligned and should be the same width if possible.
- The data source should be able to handle when a user toggles a query (by clicking on the eye icon) and not execute the query. This is done by checking the `hide` property - an [example](https://github.com/grafana/grafana/blob/e75840737e81f70b6d169df21eca86a624d4bdc4/public/app/plugins/datasource/postgres/datasource.ts#L73).
- Should not execute queries if fields in the Query Editor are empty and the query will throw an exception (defensive programming).
- Should handle errors. There are two main ways to do this:
- use the notification system in Grafana to show a toaster popup with the error message. Example [here](https://github.com/alexanderzobnin/grafana-zabbix/blob/fdbbba2fb03f5f2a4b3b0715415e09d5a4cf6cde/src/panel-triggers/triggers_panel_ctrl.js#L467-L471).
- provide an error notification in the query editor like the MySQL/Postgres data sources do. Example code in the `query_ctrl` [here](https://github.com/grafana/azure-monitor-datasource/blob/b184d077f082a69f962120ef0d1f8296a0d46f03/src/query_ctrl.ts#L36-L51) and in the [html](https://github.com/grafana/azure-monitor-datasource/blob/b184d077f082a69f962120ef0d1f8296a0d46f03/src/partials/query.editor.html#L190-L193).
{{< imgbox img="/img/docs/Grafana-snapshot-example.png" caption="A dashboard using snapshot data and not live data." >}}
Grafana has this great feature where you can [save a snapshot of your dashboard](http://docs.grafana.org/reference/sharing/). Instead of sending a screenshot of a dashboard to someone, you can send them a working, interactive Grafana dashboard with the snapshot data embedded inside it. The snapshot can be saved on your Grafana server and is available to all your co-workers. Raintank also hosts a [snapshot server](http://snapshot.raintank.io/) if you want to send the snapshot to someone who does not have access to your Grafana server.
Grafana has this great feature where you can [save a snapshot of your dashboard]({{< relref "../../../reference/share_dashboard.md" >}}). Instead of sending a screenshot of a dashboard to someone, you can send them a working, interactive Grafana dashboard with the snapshot data embedded inside it. The snapshot can be saved on your Grafana server and is available to all your co-workers. Raintank also hosts a [snapshot server](http://snapshot.raintank.io/) if you want to send the snapshot to someone who does not have access to your Grafana server.
{{< imgbox img="/img/docs/animated_gifs/snapshots.gif" caption="Selecting a snapshot" >}}
This guide has two parts. The first part describes the metadata and the second part is a styleguide for HTML/CSS and JavaScript in Grafana plugins and applies if you are using ES6 in your plugin. If using TypeScript then the [Angular TypeScript styleguide](https://angular.io/styleguide) is recommended.
## Metadata
The plugin metadata consists of a plugin.json file and the README.md file. These two files are used by Grafana and Grafana.com.
### Plugin.json (mandatory)
The plugin.json file is the same concept as the package.json file for an npm package. When Grafana starts it will scan the plugin folders and mount every folder that contains a plugin.json file unless the folder contains a subfolder named `dist`. In that case grafana will mount the `dist` folder instead.
The most important fields are the first three, especially the id. The convention for the plugin id is **[github username/org]-[plugin name]-[datasource|app|panel]** and it has to be unique.
Examples:
```bash
raintank-worldping-app
grafana-simple-json-datasource
grafana-piechart-panel
mtanda-histogram-panel
```
The full file format for plugin.json is described [here]({{< relref "metadata.md" >}}).
Minimal plugin.json:
```javascript
{
"type":"panel",
"name":"Clock",
"id":"yourorg-clock-panel",
"info":{
"description":"Clock panel for grafana",
"author":{
"name":"Grafana Labs",
"url":"https://grafana.com"
},
"keywords":["clock","panel"],
"version":"1.0.0",
"updated":"2015-03-24"
},
"dependencies":{
"grafanaVersion":"3.x.x",
"plugins":[]
}
}
```
### README.md
The README.md file is rendered both in the grafana.com plugins page, and within the Grafana application. The only difference from how GitHub renders markdown is that html is not allowed.
## File and Directory Structure Conventions
Here is a typical directory structure for a plugin.
```bash
johnnyb-awesome-datasource
|-- dist
|-- spec
||-- datasource_spec.js
||-- query_ctrl_spec.js
||-- test-main.js
|-- src
||-- img
|||-- logo.svg
||-- partials
|||-- annotations.editor.html
|||-- config.html
|||-- query.editor.html
||-- datasource.js
||-- module.js
||-- plugin.json
||-- query_ctrl.js
|-- Gruntfile.js
|-- LICENSE
|-- package.json
|-- README.md
```
Most JavaScript projects have a build step and most Grafana plugins are built using Babel and ES6. The generated JavaScript should be placed in the `dist` directory and the source code in the `src` directory. We recommend that the plugin.json file be placed in the src directory and then copied over to the dist directory when building. The `README.md` can be placed in the root or in the dist directory.
Directories:
-`src/` contains plugin source files.
-`src/partials` contains html templates.
-`src/img` contains plugin logos and other images.
-`spec/` contains tests (optional).
-`dist/` contains built content.
## HTML and CSS
For the HTML on editor tabs, we recommend using the inbuilt Grafana styles rather than defining your own. This makes plugins feel like a more natural part of Grafana. If done correctly, the html will also be responsive and adapt to smaller screens. The `gf-form` css classes should be used for labels and inputs.
Below is a minimal example of an editor row with one form group and two fields, a dropdown and a text input:
<selectclass="input-small gf-form-input"ng-model="ctrl.panel.mySelectProperty"ng-options="t for t in ['option1', 'option2', 'option3']"ng-change="ctrl.onSelectChange()"></select>
<inputtype="text"class="input-small gf-form-input width-10"ng-model="ctrl.panel.myProperty"ng-change="ctrl.onFieldChange()"placeholder="suggestion for user"ng-model-onblur/>
</div>
</div>
</div>
</div>
```
Use the `width-x` and `max-width-x` classes to control the width of your labels and input fields. Try to get labels and input fields to line up neatly by having the same width for all the labels in a group and the same width for all inputs in a group if possible.
## Build Scripts
Our recommendation is to use whatever you usually use - Grunt, Gulp or npm scripts. Most plugins seems to use Grunt so that is probably the easiest to get started with if you do not have a preferred build system. The only requirement is that it supports systemjs which is required by Grafana to load plugins.
## Linting
We recommend that you use a linter for your JavaScript. For ES6, the standard linter is [eslint](http://eslint.org/). Rules for linting are described in an .eslintrc that is placed in the root directory. [Here is an example](https://github.com/grafana/worldmap-panel/blob/master/.eslintrc) of linting rules in a plugin.
### ES6 features
1. Use `const` if a variable is not going to be reassigned.
2. Prefer to use `let` instead `var` ([Exploring ES6](http://exploringjs.com/es6/ch_core-features.html#_from-var-to-letconst))
3. Use arrow functions, which don’t shadow `this` ([Exploring ES6](http://exploringjs.com/es6/ch_core-features.html#_from-function-expressions-to-arrow-functions)):
```js
testDatasource() {
return this.getServerStatus()
.then(status => {
return this.doSomething(status);
})
}
```
better than
```js
testDatasource() {
var self = this;
return this.getServerStatus()
.then(function(status) {
return self.doSomething(status);
})
}
```
4. Use native _Promise_ object:
```js
metricFindQuery(query) {
if (!query) {
return Promise.resolve([]);
}
}
```
better than
```js
metricFindQuery(query) {
if (!query) {
return this.$q.when([]);
}
}
```
5. If using Lodash, then be consistent and prefer that to the native ES6 array functions.
The plugin.json file is mandatory for all plugins. When Grafana starts it will scan the plugin folders and mount every folder that contains a plugin.json file unless the folder contains a subfolder named `dist`. In that case grafana will mount the `dist` folder instead.
[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.
## Export dashboard as PDF
[Export dashboard as PDF]({{< relref "export-pdf.md" >}}) allows you to export a dashboard as a PDF document.
## 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.
## Usage insights
[Usage insights]({{< relref "usage-insights.md" >}}) allow you to understand how your Grafana instance is used. You can see who is looking at a dashboard, how often a dashboard is seen, and which dashboards are prone to errors. You'll also be able to discover what are the least and the most used dashboards.
## Enterprise plugins
With a Grafana Enterprise license, you get access to premium plugins, including:
@@ -64,6 +72,7 @@ With a Grafana Enterprise license, you get access to premium plugins, including:
Scheduled reports can be sent on a weekly, daily, or hourly basis. You may also disable scheduling for when you either want to pause a report or send it via the API.
All scheduling indicates when the reporting service will start rendering the dashboard. It can take a few minutes to render a dashboard with a lot of panels.
#### Hourly
Hourly reports are generated once per hour. All fields are required.
* **At minute -** The number of minutes after full hour when the report should be generated.
* **Time zone -** Time zone to determine the offset of the full hour. Does not currently change the time in the rendered report.
#### Daily
Daily reports are generated once per day. All fields are required.
* **Time -** Time of day in 24 hours format when the report should be sent.
* **Time zone -** Time zone for the **Time** field.
#### Weekly
Weekly reports are generated once per week. All fields are required.
* **Day -** Weekday which the report should be sent on.
* **Time -** Time of day in 24 hours format when the report should be sent.
* **Time zone -** Time zone for the **Time** field.
#### Never
> Only available in Grafana Enterprise v7.0+.
Reports which are scheduled to never be sent have no parameter and will not be sent to the scheduler. They may be manually generated from the **Send test email** prompt or via the API.
### Send test mail
> Only available in Grafana Enterprise v7.0+.
1. In the report, click **Send test mail**.
1. In the Email field, enter the email address or addresses that you want to test, separated by semicolon.
If you want to use email addresses from the report, then select the **Use emails from report** check box.
1. Click **Send**.
The last saved version of the report will be sent to selected emails. You can use this to verify emails are working and to make sure the report is generated and displayed as you expect.
You can send reports programmatically with the [send report]({{< relref "../http_api/reporting.md#send-report" >}}) endpoint in the [HTTP APIs]({{< relref "../http_api" >}}).
## 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.
When generating reports, each panel renders separately before being collected in a PDF. The perpanel rendering timeout and number of concurrently rendered panels can be configured.
To modify the panels' clarity you can set a scale factor for the rendered images. A higher scale factor is more legible but will increase the file size of the generated PDF.
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
concurrent_render_limit=4
# Set the scale factor for rendering images. 2 is enough for monitor resolutions
# 4 would be better for printed material. Setting a higher value affects performance and memory
image_scale_factor=2
```
## Report time range
Reports use the saved time range of the dashboard. Changing the time range of the report is done by saving a modified time range to the dashboard.
The page header of the report displays the time range for the dashboard's data queries. Dashboards set to use the browser's time zone will use the time zone on the Grafana server.
If the time zone is set differently between your Grafana server and its remote image renderer, then the time ranges in the report might be different between the page header and the time axes in the panels. We advise always setting the time zone to UTC for dashboards when using a remote renderer to avoid this.
## 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.
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.
SAML authentication integration allows your Grafana users to log in by using an external SAML 2.0 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.
@@ -20,7 +20,7 @@ The SAML single-sign-on (SSO) standard is varied and flexible. Our implementatio
## Supported SAML
Grafana supports the following SAML integrations.
Grafana supports the following SAML 2.0 bindings:
* From the Service Provider (SP) to the Identity Provider (IdP):
-`HTTP-POST` binding
@@ -65,7 +65,7 @@ The SAML SSO standard uses asymmetric encryption to exchange information between
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.
* With the `_path` suffix (`certificate_path` or `private_key_path`), then Grafana treats the value entered as a file path and attempts 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.
Usage insights allow you to have a better understanding of how your Grafana instance is used. The collected data are the number of:
- Dashboard views (aggregated and per user)
- Data source errors
- Data source queries
> Only available in Grafana Enterprise v7.0+.
## Presence indicator
The presence indicator is visible to all signed-in users on all dashboards. It shows the avatars of users who interacted with the dashboard recently (last 10 minutes by default). You can see the user's name by hovering your cursor over the user's avatar. The avatars come from [Gravatar](https://gravatar.com) based on the user's email.
When more users are active on a dashboard than can fit in the presence indicator section, click on the `+X` icon that opens [dashboard insights]({{< relref "#dashboard-insights" >}}) to see more details about recent user activity.
@@ -16,7 +16,7 @@ White labeling allows you to replace the Grafana brand and logo with your own co
> 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.
Grafana Enterprise has white labeling options in the `grafana.ini` file. As with all configuration options, you can also set them with environment variables.
You can change the following elements:
@@ -26,6 +26,9 @@ You can change the following elements:
- Side menu top logo
- Footer and help menu links
- Fav icon (shown in browser tab)
- Login title (will not appear if a login logo is set, Grafana v7.0+)
- Login subtitle (will not appear if a login logo is set, Grafana v7.0+)
- Login box background (Grafana v7.0+)
> 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.
@@ -39,13 +42,22 @@ The configuration file in Grafana Enterprise contains the following options. Eac
# Set to your company name to override application title
;app_title =
# Set to main title on the login page (Will not appear if a login logo is set)
;login_title =
# Set to login subtitle (Will not appear if a login logo is set)
;login_subtitle =
# Set to complete URL to override login logo
;login_logo =
# Set to complete css background expression to override login background
# Set to complete CSS background expression to override login background
@@ -18,7 +18,7 @@ A *dashboard* is a set of one or more panels organized and arranged into one or
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.
4. Dashboard panel. Click the panel title to edit panels.
5. Graph legend. You can change series colors, y-axis and series visibility directly from the legend.
## Dashboard header
@@ -30,7 +30,7 @@ Click the new Dashboard link on the right side of the Dashboard picker. You now
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.
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.
@@ -41,7 +41,7 @@ The image above shows you the top header for a Dashboard.
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 [templating]({{< relref "../../variables/templates-and-variables.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.
@@ -61,4 +61,4 @@ We use a unit abstraction so that Grafana looks great on all screens sizes.
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.
Use the [repeating rows]({{< relref "../../variables/templates-and-variables.md#repeating-rows" >}}) functionality to dynamically create or remove entire rows, which can be filled with panels, based on the template variables selected.
You can use links to navigate between commonly-used dashboards or to connect others to your visualizations. 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="/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 don’t 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 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.
Before you create your first dashboard, you need to add your data source. Following are the list of instructions to create one.
> Only users with the Admin role can add data sources.
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.
where you can add and edit data sources. You can also click the cog.
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. 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 settings.
@@ -79,7 +79,7 @@ In the query editor for a panel, after choosing your Azure Monitor data source,
The query editor will change depending on which one you pick. Azure Monitor is the default.
## Querying the Azure Monitor Service
## Querying the Azure Monitor service
The Azure Monitor service provides metrics for all the Azure services that you have running. It helps you understand how your applications on Azure are performing and to proactively find issues affecting your applications.
@@ -93,7 +93,7 @@ Examples of metrics that you can get from the service are:
### Formatting Legend Keys with Aliases for the Azure Monitor Service
### Formatting legend keys with aliases for Azure Monitor
The default legend formatting for the Azure Monitor API is:
@@ -106,7 +106,7 @@ Azure Monitor Examples:
-`dimension: {{dimensionvalue}}`
-`{{resourcegroup}} - {{resourcename}}`
### Alias Patterns for Azure Monitor
### Alias patterns for Azure Monitor
-`{{resourcegroup}}` = replaced with the value of the Resource Group
-`{{namespace}}` = replaced with the value of the Namespace (e.g. Microsoft.Compute/virtualMachines)
@@ -115,9 +115,9 @@ Azure Monitor Examples:
-`{{dimensionname}}` = replaced with dimension key/label (e.g. blobtype)
-`{{dimensionvalue}}` = replaced with dimension value (e.g. BlockBlob)
### Templating with Variables for the Azure Monitor Service
### Templating with variables for Azure Monitor
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data being displayed in your dashboard.
Instead of hard-coding things like server, application and sensor name in your metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data being displayed in your dashboard.
Note that the Azure Monitor service does not support multiple values yet. If you want to visualize multiple time series (for example, metrics for server1 and server2) then you have to add multiple queries to able to view them on the same graph or in the same table.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different
Check out the [Templating]({{< relref "../../variables/templates-and-variables.md" >}}) documentation for an introduction to the templating feature and the different
types of template variables.
### Azure Monitor Metrics Whitelist
### Azure Monitor metrics whitelist
Not all metrics returned by the Azure Monitor API have values. The Grafana data source has a whitelist to only return metric names if it is possible they might have values. This whitelist is updated regularly as new services and metrics are added to the Azure cloud. You can find the current whitelist [here](https://github.com/grafana/grafana/blob/master/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/supported_namespaces.ts).
### Azure Monitor Alerting
### Azure Monitor alerting
Grafana alerting is supported for the Azure Monitor service. This is not Azure Alerts support. Read more about how alerting in Grafana works [here]({{< relref "../../alerting/rules.md" >}}).
@@ -163,7 +163,7 @@ Grafana alerting is supported for the Azure Monitor service. This is not Azure A
-`{{groupbyvalue}}` = replaced with the value of the group by
-`{{groupbyname}}` = replaced with the name/label of the group by
-`{{metric}}` = replaced with metric name (e.g. requests/count)
### Filter Expressions for Application Insights
### Filter expressions for Application Insights
The filter field takes an OData filter expression.
@@ -194,11 +194,11 @@ Examples:
-`client/city ne 'Boydton' and client/city ne 'Dublin'`
-`client/city eq 'Boydton' or client/city eq 'Dublin'`
### Templating with Variables for Application Insights
### Templating with variables for Application Insights
Use the one of the following queries in the `Query` field in the Variable edit view.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different
Check out the [Templating]({{< relref "../../variables/templates-and-variables.md" >}}) documentation for an introduction to the templating feature and the different
Grafana alerting is supported for Application Insights. This is not Azure Alerts support. Read more about how alerting in Grafana works [here]({{< relref "../../alerting/rules.md" >}}).
Queries are written in the new [Azure Log Analytics (or KustoDB) Query Language](https://docs.loganalytics.io/index). A Log Analytics Query can be formatted as Time Series data or as Table data.
@@ -246,7 +246,7 @@ If your credentials give you access to multiple subscriptions then choose the ap
To make writing queries easier there are several Grafana macros that can be used in the where clause of a query:
@@ -268,17 +268,70 @@ To make writing queries easier there are several Grafana macros that can be used
If using the `All` option, then check the `Include All Option` checkbox and in the `Custom all value` field type in the following value: `all`. If `$myVar` has value `all` then the macro will instead expand to `1 == 1`. For template variables with a lot of options, this will increase the query performance by not building a large where..in clause.
### Azure Log Analytics Builtin Variables
### Azure Log Analytics builtin variables
There are also some Grafana variables that can be used in Azure Log Analytics queries:
-`$__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)`
-`$__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 "../../variables/templates-and-variables.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)`
### Azure Log Analytics Alerting
### Templating with variables for Azure Log Analytics
Not implemented yet.
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.
### Writing Analytics Queries For the Application Insights Service
Refer to the [Variables]({{< relref "../../variables/templates-and-variables.md" >}}) documentation for an introduction to the templating feature and the different
| _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). |
Click on a time series in the panel to see a context menu with a link to `View in Azure Portal`. Clicking that link opens the Azure Log Analytics query editor in the Azure Portal and runs the query from the Grafana panel there.
If you're not currently logged in to the Azure Portal, then the link opens the login page. The provided link is valid for any account, but it only displays the query if your account has access to the Azure Log Analytics workspace specified in the query.
<div class="clearfix"></div>
### Azure Log Analytics alerting
> Only available in Grafana v7.0+.
Grafana alerting is supported for Application Insights. This is not Azure Alerts support. Read more about how alerting in Grafana works in [Alerting rules]({{< relref "../../alerting/rules.md" >}}).
### Writing analytics queries For the Application Insights service
If you change the service type to "Application Insights", the menu icon to the right adds another option, "Toggle Edit Mode". Once clicked, the query edit mode changes to give you a full text area in which to write log analytics queries. (This is identical to how the InfluxDB data source lets you write raw queries.)
@@ -293,3 +346,34 @@ There are some important caveats to remember:
- Currently, four default dashboard variables are supported: `$__timeFilter()`, `$__from`, `$__to`, and `$__interval`. If you're searching in timestamped data, replace the beginning of your where clause to `where $__timeFilter()`. Dashboard changes by time region are handled as you'd expect, as long as you leave the name of the `timestamp` column alone. Likewise, `$__interval` will automatically change based on the dashboard's time region _and_ the width of the chart being displayed. Use it in bins, so `bin(timestamp,$__interval)` changes into something like `bin(timestamp,1s)`. Use `$__from` and `$__to` if you just want the formatted dates to be inserted.
- Templated dashboard variables are not yet supported! They will come in a future version.
## Configure the data source with provisioning
It's now possible to 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.
@@ -43,7 +43,7 @@ server is running on AWS you can use IAM Roles and authentication will be handle
See the AWS documentation on [IAM Roles](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)
> NOTE: AWS Role Switching as described [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html) it not supported at the moment.
> NOTE: AWS Role Switching as described [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html) is not supported at the moment.
## IAM Policies
@@ -62,6 +62,8 @@ Here is a minimal policy example:
"Effect": "Allow",
"Action": [
"cloudwatch:DescribeAlarmsForMetric",
"cloudwatch:DescribeAlarmHistory",
"cloudwatch:DescribeAlarms",
"cloudwatch:ListMetrics",
"cloudwatch:GetMetricStatistics",
"cloudwatch:GetMetricData"
@@ -180,9 +182,9 @@ To import the pre-configured dashboards, go to the configuration page of your Cl
## Templated queries
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data being displayed in your dashboard.
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data being displayed in your dashboard.
See the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different types of template variables.
See the [Templating]({{< relref "../../variables/templates-and-variables.md" >}}) documentation for an introduction to the templating feature and the different types of template variables.
@@ -17,6 +17,6 @@ Each data source has a specific query editor that is customized for the features
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.
You can use [template variables]({{< relref "../../variables/templates-and-variables.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 they’re 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.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.