Commit Graph

2376 Commits

Author SHA1 Message Date
Ryan McKinley
6599bdc7f1
AnnoList: add alpha annotations list plugin (#17187)
adding an alpha panel
2019-07-09 09:28:19 -07:00
Tobias Skarhed
9e87dbb153
CSV Export: Timezone based on dashboard setting (#18002)
* Timezone export CSV based on dashboard setting

* Add options object and interface
2019-07-09 16:16:46 +02:00
Ryan McKinley
fcdc29746f
@grafana/data: export dateMath and rangeUtil (#17971) 2019-07-05 23:43:12 -07:00
Ryan McKinley
3f15170914 Refactor: move some files to @grafana/data (#17952)
* moving to data WIP

* more refactoring

* add missing test

* mock full path

* remove sinon from grafana-ui
2019-07-06 08:05:53 +02:00
Leonard Gram
e574147b1e Auth: SAML login button. (#17932)
* Auth: SAML login button.

* Fixed ts issue
2019-07-05 15:24:52 +02:00
kay delaney
d4e9a8c009
Explore: Introduces storage keys for last used data source on per-orgId basis (#17934)
* Explore: Introduces storage keys for last used data source on per-orgId basis
Closes #17903
2019-07-04 15:31:15 +01:00
kay delaney
164fb13d99
Explore: Adds orgId to URL for sharing purposes (#17895)
Also replaces one-off segment detection functions in explore.ts with general purpose function
Closes #15462
2019-07-03 16:36:12 +01:00
Shavonn Brown
874b8abcc0 ChangePassword: Rewrite change password page to react (#17811)
* ChangePassword to React, created PasswordInput component, attempting UserProvider wrapper component, adding flex to btn row

* UserAPI interface, force classes on PasswordInput, remove api call from ChangePassword

* refactored out form

* clean up

* removed unnecessary bind, added loading state and loading component to change password form

* should be OR

* arrow funcs instead of binds, inline-block instead of flex, isSaving instead of isLoading, disabled button instead of spinner

* inline-flex on the react btn

* change state instatiatiation
2019-07-03 17:02:11 +02:00
Ryan McKinley
e7c3d0ed97
Refactor: rename SeriesData to DataFrame (#17854) 2019-07-01 12:00:29 -07:00
Hugo Häggmark
ead4b1f5c7
Explore: Uses new TimePicker from Grafana/UI (#17793)
* Wip: Intiail commit

* Refactor: Replaces TimePicker in Explore

* Refactor: Removes Angular TimePicker folder

* Refactor: Adds tests for getShiftedTimeRange

* Fix: Fixes invalid import to removed TimePicker

* Fix: Fixes dateTime tests

* Refactor: Reuses getShiftedTimeRange for both Explore and Dashboards

* Refactor: Shares getZoomedTimeRange between Explore and Dashboard
2019-06-28 12:07:55 +02:00
kay delaney
5f3a71bc7a Explore: Adds URL support for select mode (#17755)
Adds URL support for mode state (Metrics/Logs). It's important 
to be able to share a link to logs when a data source supports 
both metrics and logs.

Closes #17101
2019-06-27 11:11:49 +02:00
Hugo Häggmark
7cac7435ce
Explore: Displays only one Time column as configured in TimeZone settings (#17775)
* Refactor: Removes switches for TimeStamp and LocalTime and displays time as configured for user

* Styles: Updates classname used to display timeUtc

* Refactor: Adds switch for Time column
2019-06-26 13:35:23 +02:00
Tobias Skarhed
8541214c9e
Markdown: Replace rendering library (#17686)
* Replace remarkable with marked

* Add wrapper and options for marked
2019-06-26 13:15:45 +02:00
Tobias Skarhed
0904607eda Password: Remove PasswordStrength (#17750)
* Closes #17748

* Remove remaining occurences

* And the last one
2019-06-25 13:56:35 +02:00
Torkel Ödegaard
335cec07a5
Graph: Add data links feature (click on graph) (#17267)
* WIP: initial panel links editor

* WIP: Added dashboard migration to new panel drilldown link schema

* Make link_srv interpolate new variables

* Fix failing tests

* Drilldown: Add context menu to graph viz (#17284)

* Add simple context menu for adding graph annotations and showing drilldown links

* Close graph context menu when user start scrolling

* Move context menu component to grafana/ui

* Make graph context menu appear on click, use cmd/ctrl click for quick annotations

* Move graph context menu controller to separate file

* Drilldown: datapoint variables interpolation (#17328)

* Add simple context menu for adding graph annotations and showing drilldown links

* Close graph context menu when user start scrolling

* Move context menu component to grafana/ui

* Make graph context menu appear on click, use cmd/ctrl click for quick annotations

* Add util for absolute time range transformation

* Add series name and datapoint timestamp interpolation

* Rename drilldown link variables tot snake case, use const values instead of strings in tests

* Bring LinkSrv.getPanelLinkAnchorInfo for compatibility reasons and add deprecation warning

* Rename seriesLabel to seriesName

* Drilldown: use separate editors for panel and series links (#17355)

* Use correct target ini context menu links

* Rename PanelLinksEditor to DrilldownLinksEditor and mote it to grafana/ui

* Expose DrilldownLinksEditor as an angular directive

* Enable visualization specifix drilldown links

* Props interfaces rename

* Drilldown: Add variables suggestion and syntax highlighting for drilldown link editor (#17391)

* Add variables suggestion in drilldown link editor

* Enable prism

* Fix backspace not working

* Move slate value helpers to grafana/ui

* Add syntax higlighting for links input

* Rename drilldown link components to data links

* Add template variabe suggestions

* Bugfix

* Fix regexp not working in Firefox

* Display correct links in panel header corner

* bugfix

* bugfix

* Bugfix

* Context menu UI tweaks

* Use data link terminology instead of drilldown

* DataLinks: changed autocomplete syntax

* Use singular form for data link

* Use the same syntax higlighting for built-in and template variables in data links editor

* UI improvements to context menu

* UI review tweaks

* Tweak layout of data link editor

* Fix vertical spacing

* Remove data link header in context menu

* Remove pointer cursor from series label in context menu

* Fix variable selection on click

* DataLinks: migrations for old links

* Update docs about data links

* Use value time instead of time range when interpolating datapoint timestamp

* Remove not used util

* Update docs

* Moved icon a bit more down

* Interpolate value ts only when using __value_time variable

* Bring href property back to LinkModel

* Add any type annotations

* Fix TS error on slate's Value type

* minor changes
2019-06-25 11:38:51 +02:00
Tobias Skarhed
75c29566a6 Panel: Fully escape html in drilldown links (was only sanitized before) (#17731)
* Sanitize HTML

* Replace sanitization lib and check for config

* Add htmlToText

* Refactor: Renaming htmlToText to escapeHtml
2019-06-25 09:06:28 +02:00
Johannes Schill
0412a28d2e TimePicker: New time picker dropdown & custom range UI (#16811)
* feat: Add new picker to DashNavTimeControls

* chore: noImplicitAny limit reached

* chore: noImplicityAny fix

* chore: Add momentUtc helper to avoid the isUtc conditionals

* chore: Move getRaw from Explore's time picker to grafana/ui utils and rename to getRawRange

* feat: Use helper functions to convert utc to browser time

* fix: Dont Select current value when pressing tab when using Time Picker

* fix: Add tabIndex to time range inputs so tab works smoothly and prevent mouseDown event to propagate to react-select

* fix: Add spacing to custom range labels

* fix: Updated snapshot

* fix: Re-adding getRaw() temporary to fix the build

* fix: Disable scroll event in Popper when we're using the TimePicker so the popup wont "follow" the menu

* fix: Move all "Last xxxx" quick ranges to the menu and show a "UTC" text when applicable

* fix: Add zoom functionality

* feat: Add logic to mark selected option as active

* fix: Add tooltip to zoom button

* fix: lint fix after rebase

* chore: Remove old time picker from DashNav

* TimePicker: minor design update

* chore: Move all time picker quick ranges to the menu

* fix: Remove the popover border-right, since the quick ranges are gone

* chore: Remove function not in use

* Fix: Close time picker on resize event

* Fix: Remove border bottom

* Fix: Use fa icons on prev/next arrows

* Fix: Pass ref from TimePicker to TimePickerOptionGroup so the popover will align as it should

* Fix: time picker ui adjustments to get better touch area on buttons

* Fix: Dont increase line height on large screens

* TimePicker: style updates

* Fix: Add more prominent colors for selected dates and fade out dates in previous/next month

* TimePicker: style updates2

* TimePicker: Big refactorings and style changes

* Removed use of Popper not sure we need that here?
* Made active selected item in the list have the "selected" checkmark
* Changed design of popover
* Changed design of and implementation of the Custom selection in the dropdown it did not feel like a item you
could select like the rest now the list is just a normal list

* TimePicker: Refactoring & style changes

* TimePicker: use same date format everywhere

* TimePicker: Calendar style updates

* TimePicker: fixed unit test

* fixed unit test

* TimeZone: refactoring time zone type

* TimePicker: refactoring

* TimePicker: finally to UTC to work

* TimePicker: better way to handle calendar utc dates

* TimePicker: Fixed tooltip issues

* Updated snapshot

* TimePicker: moved tooltip from DashNavControls into TimePicker
2019-06-24 14:39:59 +02:00
David
4ddeb94f52 Dashboard: Use Explore's Prometheus editor in dashboard panel edit (#15364)
* WIP prometheus editor same in panel

* Dont use panel in plugin editors

* prettiered modified files

* Fix step in external link

* Prevent exiting edit mode when slate suggestions are shown

* Blur behavior and $__interval variable

* Remove unused query controller

* Basic render test

* Chore: Fixes blacklisted import

* Refactor: Adds correct start and end time
2019-06-24 08:42:08 +02:00
Ryan McKinley
428134482d
@grafana/runtime: expose config and loadPluginCss (#17655)
* move config to grafana runtime

* set defaults

* defaults in constructor

* use @types/systemjs

* rename Settings to GrafanaBootConfig
2019-06-19 11:31:47 -07:00
Ryan McKinley
401615847c
Build: add @grafana/data package (#17436)
first step in moving non-ui components to their own package
2019-06-18 08:17:27 -07:00
srid12
b950eebf99 JsonTree: fix jsonTree angular binding (#17608)
The API changed so it expects a numeric level rather than a boolean flag.  Since 6.1 plugins using jsonTree just show an empty div
2019-06-17 15:10:56 -07:00
Tobias Skarhed
6de75de755
Refactor buttons (#17611) 2019-06-17 16:15:49 +02:00
Shavonn Brown
40f95a95c0
16223 user auth token list and revoke (#17434)
* Start user auth token list on user profile (#16223)

* Now session found and first, better os regex (#16223)

* Revoke for user and admin user token manage (#16223)

* Tidying and styling (#16223)

* Tidying and styling (#16223)

* Update to use #16222 (#16223)

* Update for changes to 16222

* update per api issue
2019-06-11 14:23:54 +02:00
Torkel Ödegaard
ad744beb60
NavModel: Fixed page header ui tabs issues for some admin pages (#17444) 2019-06-05 15:18:31 +02:00
Ryan McKinley
574a37e46f
@grafana/runtime: expose location update (#17428) 2019-06-04 16:20:55 +02:00
Hugo Häggmark
10a4a89902
Fix: Adds context to list of keys that are not part of query (#17423)
Fixes: #17408
2019-06-04 14:07:25 +02:00
Ryan McKinley
4066c55298
Fix: change angular loader paths (#17421) 2019-06-04 09:19:55 +02:00
Ryan McKinley
96ba32d0c8
Add a @grafana/runtime package with backendSrv interface (#16533)
grafana-runtime/tsconfig.json imports query to avoid a build error  ¯\_(ツ)_/¯
2019-06-03 17:55:59 +02:00
Hugo Häggmark
fb39831df2
Explore: Queries the datasource once per run query and uses DataStreamObserver (#17263)
* Refactor: Removes replaceUrl from actions

* Refactor: Moves saveState thunk to epic

* Refactor: Moves thunks to epics

* Wip: removes resulttype and queries once

* Refactor: LiveTailing uses observer in query

* Refactor: Creates epics folder for epics and move back actioncreators

* Tests: Adds tests for epics and reducer

* Fix: Checks for undefined as well

* Refactor: Cleans up previous live tailing implementation

* Chore: merge with master

* Fix: Fixes url issuses and prom graph in Panels

* Refactor: Removes supportsStreaming and adds sockets to DataSourcePluginMeta instead

* Refactor: Changes the way we create TimeSeries

* Refactor: Renames sockets to streaming

* Refactor: Changes the way Explore does incremental updates

* Refactor: Removes unused method

* Refactor: Adds back Loading indication
2019-06-03 14:54:32 +02:00
Hugo Häggmark
5761179ad9
Feature: Adds redux action logging toggle from url params (#17368)
With live tailing introduced in Explore we now have a lot of actions dispatching and the Redux Dev Tools doesn't cope with the amount and rate of actions and crashes. This PR turns on redux action logging when you add logActions=true in the url and turns it off if you refresh the page or add logActions=false in the url.
2019-06-03 13:40:33 +02:00
Dan Cech
5e7537878e Security: Prevent csv formula injection attack (#17363)
* mitigate https://www.owasp.org/index.php/CSV_Injection

- prepend csv cell values that begin with -, +, = or @ with '
- trim trailing whitespace from all csv values

* test for csv formula injection mitigation
2019-05-30 07:07:19 +02:00
Šimon Podlipský
4b0ad174ff Frontend/utils: Import has only from lodash (#17311) 2019-05-28 10:17:03 +02:00
Šimon Podlipský
83af1bdff3 Frontend/utils: Add missing type (#17312) 2019-05-28 10:13:49 +02:00
Marcus Efraimsson
a07296bf24
explore: don't parse log levels if provided by field or label (#17180)
If a field or a label named level is returned from datasource that is 
used as log level for the logs result instead of parsing the log level 
from the message.

Closes #17122
2019-05-27 18:43:04 +02:00
Dominik Prokop
a9c94ec93b
Explore: Update the way Loki retrieve log context (#17204)
* Move log's typings into grafana/ui
* Update the way context is retrieved for Loki

Major changes:

1. getLogRowContext expects row to be of LogRowModel type
2. getLogRowContext accepts generic options object, specific to a datasource of interest. limit option has been removed, and now it's a part of Loki's context query options (see below)
3. LogRowContextProvider performs two queries now. Before, it was Loki ds that performed queries in both directions when getLogRowContext.
4. Loki's getLogRowContext accepts options object of a type:

interface LokiContextQueryOptions {
    direction?: 'BACKWARD' | 'FORWARD';
    limit?: number;
}

This will enable querying in either direction independently and also slightly simplifies the way query errors are handled.

LogRowContextProvider maps the results to a Loki specific context types, basically string[][], as raw log lines are displayed in first version.
2019-05-22 23:10:05 +02:00
Torkel Ödegaard
e421723992
Search: removed old not working search shortcuts (#17226) 2019-05-22 12:23:30 +02:00
Hugo Häggmark
db48ec1f08
Explore: Adds Live option for supported datasources (#17062)
* Wip: Initial commit

* Refactor: Adds support in Loki datasource for streaming

* Refactor: Adds Live option to RefreshInterval

* Refactor: Adds styles to logrows

* Style: Reverses the order of Explore layout on Live

* Refactor: Adds LiveLogs component

* Tests: Adds tests for epics

* Style: Adds animation to Live in RefreshPicker

* Refactor: Adds ElapsedTime and progress line to LiveLogs

* Style: Adds specific colors to each theme

* Refactor: Adds support for Lokis new API

* Fix: Adds null to resulting empty array

* Refactor: Limits the rate of incoming messages from websockets

* Refactor: Throttles messages instead for simplicity

* Refactor: Optimizes row processing performance

* Refactor: Adds stop live button

* Fix: Fixes so that RefreshPicker shows the correct value when called programmatically

* Refactor: Merges with master and removes a console.log

* Refactor: Sorts rows in correct order and fixes minor UI issues

* Refactor: Adds minor improvments to sorting and container size
2019-05-20 13:28:23 +02:00
Marcus Efraimsson
e6001f57a2
Explore: Allow switching between metrics and logs (#16959)
Adds basic support for switching between Metrics and Logs in Explore. 
Currently only test datasource that supports both Metrics and Logs.
Summary of changes:
* Moves mode (Metric, Logs) selection to the left of datasource 
picker and add some quick styling.
* Only trigger change in ToggleButton if not selected
* Set correct mode if datasource only supports logs

Closes #16808
2019-05-16 09:52:22 +02:00
Torkel Ödegaard
6c7224c74d
InfoPopover: Fixes transclude undefined error (#17063) 2019-05-14 15:28:09 +02:00
David
927e1cbd27
(feat/explore): Support for new LogQL filtering syntax (#16674)
* (feat/explore): Support for new LogQL filtering syntax

Loki is adding syntax to support chained filtering.
This PR adapts Grafana to support this.

- Send only `query` parameter in loki request
- Automatically wrap search text in simple syntax, e.g., `{} foo` is
sent as `{} |~ "foo"`.


* Adapted to regexp parameter staying on in Loki

* Dont wrap single regexp in new filter syntax

* Fix datasource test

* Fallback regexp parameter for legacy queries

* Fix search highlighting

* Make highlighting work for filter chains

* Fix datasource test
2019-05-13 09:58:26 +02:00
Torkel Ödegaard
e0b760e08e
Chore: No implict any fixes (#17020) 2019-05-13 09:38:19 +02:00
Torkel Ödegaard
f12d47ef52
Chore: Typescript no-implicit any fixes progress (#17018)
* Chore: Typescript no-implicit any fixes progress

* Fixed tests

* Updated snapshot
2019-05-12 14:15:23 +02:00
Hugo Häggmark
6dbaa704bc
Explore: Align Explore with Dashboards and Panels (#16823)
* Wip: Removes queryTransactions from state

* Refactor: Adds back query failures

* Refactor: Moves error parsing to datasources

* Refactor: Adds back hinting for Prometheus

* Refactor: removed commented out code

* Refactor: Adds back QueryStatus

* Refactor: Adds scanning back to Explore

* Fix: Fixes prettier error

* Fix: Makes sure there is an error

* Merge: Merges with master

* Fix: Adds safeStringifyValue to error parsing

* Fix: Fixes table result calculations

* Refactor: Adds ErrorContainer and generic error handling in Explore

* Fix: Fixes so refIds remain consistent

* Refactor: Makes it possible to return result even when there are errors

* Fix: Fixes digest issue with Angular editors

* Refactor: Adds tests for explore utils

* Refactor: Breakes current behaviour of always returning a result even if Query fails

* Fix: Fixes Prettier error

* Fix: Adds back console.log for erroneous querys

* Refactor: Changes console.log to console.error
2019-05-10 14:00:39 +02:00
Marcus Efraimsson
8eb78ea931
Explore: Fix empty result from datasource should render logs container (#16999)
Make sure to return an empty logs model instead of undefined so that 
the logs container renders an empty graph and log result in Explore.

Fixes #16997
2019-05-10 12:45:26 +02:00
r66ad
99c754c4a5 Templating: Support selecting all filtered values of multi-value variable (#16873)
* Closes #15821

* sorry, now prettier

* select and deselect on filtered values works with Selected option now. Should the clearSelections function rather be renamed to selectOrClearValues? Selected should have another name too.
2019-05-09 07:51:14 +02:00
Hugo Häggmark
a4d287d2e1
Tests: Adds end-to-end tests skeleton and basic smoke test scenario (#16901)
* Chore: Adds neccessary packages

* Wip: Initial dummy test in place

* Feature: Downloads Chromium if needed

* Fix: Adds global config object

* Refactor: Adds basic e2eScenario

* Build: Adds end to end tests to config

* Build: Changes end to end job

* Build: Adds browsers to image

* Build: Adds failing test

* Refactor: Adds first e2e-test scenario

* Fix: Ignores test output in gitignore

* Refactor: Adds compare screenshots ability

* Refactor: Removes unnecessary code

* Build: Removes jest-puppeteer

* Fix: Replaces test snapshots

* Refactor: Creates output dir if missing

* Refactor: Changes aria-labels to be more consistent

* Docs: Adds section about end to end tests

* Fix: Fixes snapshots

* Docs: Adds information about ENV variables
2019-05-08 16:50:21 +02:00
Hugo Häggmark
ceb9f0855b
Chore: Replaces moment with Grafanas DateTime (#16919)
* Wip: Initial commit

* Refactor: Replaces moment.utc(

* Refactor: replaces the last isMoment statements

* Refactor: Removes almost all moment imports

* Refactor: Moves moment_wrapper to grafana/ui

* Refactor: Renames momentWrapper

* Refactor: Removes one more moment import

* Refactor: Removes unitOfTime import

* Fix: Fixes Prettier error

* Refactor: Renames DateTimeType to DateTime

* Refactor: Renames isDateTimeType to isDateTime

* Refactor: Renames dateTime to dateTime

* Feature: Bans moment imports and types
2019-05-08 13:51:44 +02:00
Torkel Ödegaard
48ae93048b
Panels: No title will no longer make panel header take up space (#16884)
* Panels: Initial poc of no panel titles

* moving panel-container to DashboardPanel

* Starting to work

* Gauge fix

* Panels: tweaked panel padding and title z-index stuff

* Panels: changed panel padding a bit and simplified it by having same padding in vertical and horizontal

* Lots of tweaks to panel padding related stuff

* Updated snapshot

* Added test dashboard

* Final refactorings

* Trim title befgor applying panel-container--no-title class

* Remove unnecessary type annotation

* Panels: hasTitle no need to trim

* Gauge: fixed font family
2019-05-06 15:26:09 +02:00
Ryan McKinley
d881976c9d Refactor: move datemath to grafana/ui (#16890)
* move datemath to grafana/ui

* don't reference @grafana/ui from its own component
2019-05-06 12:36:42 +02:00
Ryan McKinley
013f1b8d19
App Plugins: support react pages and tabs (#16586) 2019-05-02 10:15:39 -07:00
Dominik Prokop
7194c6d9bf Search: Enable filtering dashboards in search by current folder (#16790)
* Added search-query-parser package

* Migrate search input field to react and enable current folter filtering

* Reveiw changes

* FIx tags

* Fix event handlers  passed to html elements directly

* noImplicitAny fix

* Debounce search method in search controller

* Search: have clear reset query as well
2019-05-02 08:49:03 +02:00
Marcus Efraimsson
fe20dde5db
Explore: Use SeriesData format for loki/logs (#16793)
This is the first step moving towards Explore supporting logs for 
more datasources than Loki. In the first step we move all the log 
processing from Loki into Explore.
- Make explore convert logs result returned from datasources to SeriesData, 
if needed, and for now convert SeriesData to LogsModel.
- Loki datasource query now returns SeriesData and all
processing have been moved into explore instead.
- Removed key from LogRowModel and use log row indexes as 
the unique key instead.
- Removed id from LogsModel since it looks like it's not in use.
- Introduced a new class FieldCache which is convenient to use when
looking up multiple fields and/or field types and series values.

Closes #16287
2019-04-30 18:21:22 +02:00
Ryan McKinley
26bd76b4c2
Refactor: move NavModel to @grafana/ui (#16813) 2019-04-30 07:46:46 -07:00
Marcus Efraimsson
02cb7ff436
Explore: Support user timezone (#16469)
Explore now uses the timezone of the user to decide if local browser 
time or UTC should be used. 
- Now uses TimeRange instead of RawTimeRange in explore item
state tree and only parsing actual time in a few action
handlers.
- Time picker should now properly handle moving back/forward and
apply time range when both utc and non utc time zone.
- URL range representation is changed from YYYY-MM-DD HH:mm:ss
to epoch ms.
- Now uses AbsoluteTimeRange in graph component instead of moment.
- Makes a copy of the time range passed to timeSrv to make sure immutability
of explore time range when for example elasticsearch test datasources uses
timeSrv and sets a time range of last 1 min.
- Various refactorings and cleanup.

Closes #12812
2019-04-29 18:28:41 +02:00
Ryan McKinley
5c2d38126d
Plugins: move PanelPluginMeta to grafana/ui (#16804) 2019-04-29 08:17:35 -07:00
Torkel Ödegaard
a4f5c54871
Chore: Fixed no implicit any Typescript errors (#16799) 2019-04-28 09:58:12 +02:00
Torkel Ödegaard
060e97bea8
Plugins: ReactPanelPlugin to VizPanelPlugin (#16779)
* Plugins: ReactPanelPlugin renamed

* Plugins: renamed PanelPlugin to PanelPluginMeta and VizPanelPlugin to PanelPlugin
2019-04-26 19:16:38 +02:00
Ryan McKinley
470634e2d6
Streaming: support streaming and a javascript test datasource (#16729) 2019-04-25 14:01:02 -04:00
Dominik Prokop
19e824006a
Refactor: Make SelectOptionItem a generic type to enable select value typing (#16718)
* Make SelectOptionItem a generic type to enable select value typing
* TS ignores added because of optional value on Select items (it's no longer any)
2019-04-23 20:44:16 +02:00
Patrick O'Carroll
d040e336c1 UI: Remove old icons (#16335)
* removed unsused grafana-icon classes, replaced grafana-icons with gicons

* replaced old dashboard and datasource icons with gicon, fixed so icons on plugin list are shown

* removed unsused grafana-icon classes, replaced grafana-icons with gicons

* replaced old dashboard and datasource icons with gicon, fixed so icons on plugin list are shown

* replaced fontawesome cog, eye, link and edit with gicons

* updated snapshot

* fixed color of cog in dashboard nav, removed icons from buttons, ran preitterier on some files

* changed opacity on getting started icons and fixed getting started button

* .5 -> 0.5 fix for prettier
2019-04-17 15:18:32 +02:00
Torkel Ödegaard
057577dcc5
Heatmap: Fixed auto decimals when bucket name is not number but contains dots, fixes #13019 (#16609) 2019-04-16 10:39:12 +02:00
Johannes Schill
406ef962fc Explore & Dashboard: New Refresh picker (#16505)
* Added RefreshButton

* Added RefreshSelect

* Added RefreshSelectButton

* Added RefreshPicker

* Removed the magic string Paused

* Minor style changes and using Off instead of Pause

* Added HeadlessSelect

* Added HeadlessSelect story

* Added SelectButton

* Removed RefreshSelectButton

* Added TimePicker and moved ClickOutsideWrapper to ui/components

* Added TimePickerPopOver

* Added react-calendar

* Missed yarn lock file

* Added inputs to popover

* Added TimePicker and RefreshPicker to DashNav

* Moved TimePicker and RefreshPicker to app/core

* Added react-calendar to app and removed from ui/components

* Fixed PopOver onClick

* Moved everything back to ui components because of typings problems

* Exporing RefreshPicker and TimePicker

* Added Apply and inputs

* Added typings

* Added TimePickerInput and logic

* Fixed parsing of string to Moments

* Fixed range string

* Styling and connecting the calendars and inputs

* Changed Calendar styling

* Added backward forward and zoom

* Fixed responsive styles

* Moved TimePicker and RefreshPicker into app core

* Renamed menuIsOpen to isOpen

* Changed from className={} to className=""

* Moved Popover to TimePickerOptionGroup

* Renamed all PopOver to Popover

* Renamed popOver to popover and some minor refactorings

* Renamed files with git mv

* Added ButtonSelect and refactored RefreshPicker

* Refactored TimePicker to use new ButtonSelect

* Removed HeadlessSelect as suggested

* fix: Fix typings and misc errors after rebase

* wip: Enable time picker on dashboard and add tooltip

* Merge branch 'master' into hugoh/new-timepicker-and-unified-component

# Conflicts:
#	packages/grafana-ui/package.json
#	packages/grafana-ui/src/components/Input/Input.test.tsx
#	packages/grafana-ui/src/components/Input/Input.tsx
#	packages/grafana-ui/src/utils/validate.ts
#	public/app/features/dashboard/panel_editor/QueryOptions.tsx
#	yarn.lock

* fix: Snapshot update

* Move TimePicker default options into the TimePicker as statics, pass the tooltipContent down the line when wanted and wrap the button in a tooltip element

* fix: Override internal state prop if we provide one in a prop

* Updated snapshots

* Let dashnav control refreshPicker state

* feat: Add a stringToMs function

* wip: RefreshPicker

* wip: Move RefreshPicker to @grafana/ui

* wip: Move TimePicker to @grafana/ui

* wip: Remove comments

* wip: Add refreshPicker to explore

* wip: Use default intervals if the prop is missing

* wip: Nicer way of setting defaults

* fix: Control the select component

* wip: Add onMoveForward/onMoveBack

* Remove code related to the new time picker and refresh picker from dashnav

* Fix: Typings after merge

* chore: Minor fix after merge

* chore: Remove _.map usage

* chore: Moved refresh-picker logic out of the refresh picker since it will work a little differently in explore and dashboards until we have replaced the TimeSrv

* feat: Add an Interval component to @grafana/ui

* chore: Remove intervalId from redux state and move setInterval logic from ExploreToolbar to its own Interval component

* feat: Add refreshInterval to Explore's URL state

* feat: Pick up refreshInterval from url on page load

* fix: Set default refreshInterval when no value can be retained from URL

* fix: Update test initial state with refreshInterval

* fix: Handle URLs before RefreshPicker

* fix: Move RefreshInterval to url position 3 since the segments can take multiple positions

* fix: A better way of detecting urls without RefreshInterval in Explore

* chore: Some Explore typings

* fix: Attach refresh picker to interval picker

* chore: Sass fix for refresh button border radius

* fix: Remove refreshInterval from URL

* fix: Intervals now start when previous interval is finished

* fix: Use clearTimeout instead of clearInterval

* fix: Make sure there's a delay set before adding a timeout when we have slow explore queries

* wip: Add refresh picker to dashboard

* feat: Add util for removing keys with empty values

* feat: RefreshPicker in dashboards and tmp rem out old RefreshPicker

* fix: Remove the jumpy:ness in the refreshpicker

* Changed placement and made it hide when your in dashboard settings

* chore: Move logic related to refresh picker out of DashNav to its own component

* feat: Add tooltip to refreshpicker

* fix: Fix bug with refreshpicker not updating when setting to 'off'

* fix: Make it possible to override refresh intervals using the dashboard intervals

* chore: Change name of Interval to SetInterval to align with ecmascripts naming since its basically the same but declarative and async

* fix: Use default intervals when auto refresh is empty in dashboard settings

* fix: Hide time/interval picker when hidden is true on the model, such as on the home dashboard

* fix: Interval picker will have to handle location changes since timeSrv wont

* RefreshPicker: Refactoring refresh picker

* RefreshPicker: minor refactoring
2019-04-16 09:15:23 +02:00
Hugo Häggmark
7eabc282e9
Chore: Adds typings to lodash (#16590) 2019-04-15 12:11:52 +02:00
Andrej Ocenas
66f6e16916
Security: Store datasource passwords encrypted in secureJsonData (#16175)
* Store passwords in secureJsonData

* Revert unnecessary refactors

* Fix for nil jsonSecureData value

* Remove copied encryption code from migration

* Fix wrong field reference

* Remove migration and provisioning changes

* Use password getters in datasource proxy

* Refactor password handling in datasource configs

* Add provisioning warnings

* Update documentation

* Remove migration command, moved to separate PR

* Remove unused code

* Set the upgrade version

* Remove unused code

* Remove double reference
2019-04-15 11:11:17 +02:00
Hugo Häggmark
e5c1cbabb1
Fix: Pass missing maxDataPoints to query in Explore (#16513)
Fixes: #16490
2019-04-11 13:57:04 +02:00
Ryan McKinley
d6887bf77f Plugins: Optionally preload some plugins during frontend app boot (#15266)
* auto load

* update comments

* gofmt

* use preload from json

* fix formatting

* change general plugin loader to app

* Refactoring: Plugin preloading #15266
2019-04-11 08:02:22 +02:00
Andrej Ocenas
2d7fc55df7
Provisioning: Do not allow deletion of provisioned dashboards (#16211)
* Unprovision dashboard in case of DisableDeletion = true

* Rename command struct

* Handle removed provision files

* Allow html in confirm-modal

* Do not show confirm button without onConfirm

* Show dialog on deleting provisioned dashboard

* Changed DeleteDashboard to DeleteProvisionedDashboard

* Remove unreachable return

* Add provisioned checks to API

* Remove filter func

* Fix and add tests for deleting dashboards

* Change delete confirm text

* Added and used pkg/errors for error wrapping
2019-04-10 13:29:10 +02:00
Hugo Häggmark
a887c344eb
Fix: Disables auto open datasource picker on focus (#16398) 2019-04-09 14:59:30 +02:00
Patrick O'Carroll
128fb8fa7e Theme: Reworking button styling (#16362)
* added new variables for height in theme, added height to gui button large, replaced add gicon with regular gicon, replaced + with gicon, changed button display to flex

* set fixed height to large button, removed xlarge button and replaced with large button

* removed button-mini and replaced with button-small, set fixed height to default button and button-small

* fixed padding for default and large button, fixed height for navbar button, fixed snapshots

* fixed padding and margin on navbar buttons

* gave special height to login btn-primary

* readded btn-mini class with same styling as btn-small and a deprecated notice

* fixed add panel widget buttons
2019-04-08 09:48:15 +02:00
Torkel Ödegaard
47e51cb6b3
Refactor: Plugin exports & data source / panel types (#16364)
* wip: began work off removing meta and pluginExports from DataSourceApi interface

* WIP: changing how plugins are exports and loaded

* Down the refactoring rabit hole that keeps expanding

* TestData now returns DataSourcePlugin

* Refactoring: fixed app config page loading, type renamings and more typings

* Refactor: Correct casing on DatasourceStatus => DataSourceStatus
2019-04-04 18:30:15 +02:00
Johannes Schill
8370a182f7 Tech: Bump typescript and jest (#16354)
* chore: Bump Typescript to 3.4.1

* chore: Bump babel-jest, jest, ts-jest

* fix: Fix tests after typescript upgrade by disabling some typings

* chore: noImplicitAny

* chore: Bump typescript in @grafana/ui
2019-04-03 11:41:08 +02:00
Ryan McKinley
bfba47c6c4 Refactor: Move LogLevel and Labels utils to @grafana/ui (#16285)
* rename Tags to Labels in SeriesData

* move some logs stuff to grafana/ui

* add roundtrip tests
2019-03-29 09:41:37 +01:00
Steven Sheehy
0bc314a47b Feature: Case insensitive Loki search (#15948)
* Case insensitive Loki search
* Make Loki case insensitivity work with highlighting

Signed-off-by: Steven Sheehy <ssheehy@firescope.com>
2019-03-28 15:58:19 +01:00
Dominik Prokop
206921d21b
Feature: Introduced CallToActionCard to @grafana/ui (#16237)
CallToActionCard is an abstraction to display a card with message, call to action element and a footer. It is used i.e. on datasource add page.
2019-03-27 22:33:20 +01:00
Hugo Häggmark
7f9ad77153
Merge pull request #16241 from grafana/hugoh/no-implicit-any
Chore: Eliminate implicit anys in backend_srv
2019-03-27 09:14:16 +01:00
Torkel Ödegaard
8ef1c75aa1
fix(react2angular): Fixed react to angular wrapper watching function expressions causing infinte digest loop, fixes #16194 (#16196) 2019-03-25 16:29:09 +01:00
Steven Sheehy
dd388ed578 fix(loki): Hide empty labels column
Signed-off-by: Steven Sheehy <ssheehy@firescope.com>
2019-03-25 15:23:54 +01:00
Ryan McKinley
77b3da3e8b refactor(data models): Renamed TableData to SeriesData (#16185) 2019-03-25 14:46:16 +01:00
Andrej Ocenas
a978e28e7c
chore(core/utils): Add typings to datemath.ts (#16195)
* Add typings

* Remove explicit cast
2019-03-25 14:32:55 +01:00
Dominik Prokop
c2e9daad1e
feat(Explore): make sure Loki labels are up to date (#16131)
* Migrated loki syntax and labels logic to useLokiSyntax hook

* Enable loki labels  refresh after specified interval has passed

* Enable periodic loki labels refresh when labels selector is opened

* Fix prettier

* Add react-hooks-testing-library and disable lib check on typecheck

* Add tests for loki syntax/label hooks

* Move tsc's skipLibCheck option to tsconfig for webpack to pick it up

* Set log labels refresh marker variable when log labels fetch start

* Fix prettier issues

* Fix type on activeOption in useLokiLabel hook

* Typo fixes and types in useLokiSyntax hook test fixes

* Make sure effect's setState is not performed on unmounted component

* Extract logic for checking if is component mounted to a separate hook
2019-03-25 12:08:28 +01:00
Torkel Ödegaard
e578e8d2dc
Merge pull request #16189 from grafana/hugoh/explore-graphite-url-not-working
Added target as isMetric property
2019-03-25 10:54:22 +01:00
Hugo Häggmark
b42dec7353 fix: added target and datasource as isMetric property
Fixes: #15862
2019-03-25 09:08:17 +01:00
Torkel Ödegaard
20fec4d261 Panels: Added more tests for change panel plugin 2019-03-24 16:39:55 +01:00
Hugo Häggmark
eedbc485dd
Makes it possible to navigate back/forward with browser buttons in Explore (#16150)
Make it possible to navigate back/forward with browser buttons in Explore
2019-03-22 15:24:30 +01:00
Torkel Ödegaard
0091b86e9c
Merge pull request #16078 from grafana/secret-input-field-component
Secret input field component
2019-03-20 10:15:33 +01:00
Torkel Ödegaard
abd8948478
Merge pull request #15864 from ryantxu/all-data-as-table
Use TableData for all data in react
2019-03-20 09:15:06 +01:00
Torkel Ödegaard
0a2d69c794
Merge pull request #16089 from grafana/no-implicit-any-fixes-p4
Fixed no implicit any for form dropdown & panel model
2019-03-20 07:01:14 +01:00
Torkel Ödegaard
4f134ea4b8
Merge pull request #16080 from grafana/hugoh/no-implicit-any
Cleaning up no implicit anys in search_srv and tests
2019-03-19 18:26:28 +01:00
Torkel Ödegaard
42c87141a5 Minor progress on fixing no-implicit any issues 2019-03-19 18:24:47 +01:00
Hugo Häggmark
d845aacbdc refactor: merged types and updated references 2019-03-19 17:44:58 +01:00
ryan
08d6540cbb merge master 2019-03-19 09:26:15 -07:00
Hugo Häggmark
c1d585b156 chore: cleaning up noimplicit anys in search_srv and tests
progress: #14714
2019-03-19 14:48:35 +01:00
Hugo Häggmark
96aa4ae19f teams: remov permission select for non admin users 2019-03-19 14:01:12 +01:00
Hugo Häggmark
a90b3e331e config: updated feature toggle name 2019-03-19 13:59:39 +01:00
Hugo Häggmark
467b7a40d8 teams: feature toggle component 2019-03-19 13:57:24 +01:00
Andrej Ocenas
150b97692d Use SecretFormField in MSSql and Postgres datasources 2019-03-19 13:40:18 +01:00
Andrej Ocenas
8f0d92ef85 Allow angular react bridge to use kebab case attribute names 2019-03-19 13:40:16 +01:00
Torkel Ödegaard
25cd196c09
Merge pull request #16006 from grafana/fix-explore-refId
Explore: Query row using character refId instead of number
2019-03-18 22:59:47 +01:00
Torkel Ödegaard
32d80f2da8
Merge pull request #16045 from grafana/hugoh/no-implicit-any
Cleaning up implicit anys in DashboardExporter and tests
2019-03-18 22:50:23 +01:00
Peter Holmberg
384e11fd68 Copied from new timepicker and unified component branch 2019-03-18 15:41:46 +01:00
Peter Holmberg
be7a5dab69 reorder imports 2019-03-18 11:23:40 +01:00
Peter Holmberg
cb9bda810f test 2019-03-18 11:21:40 +01:00
Peter Holmberg
39728c885b rename to char 2019-03-18 11:17:58 +01:00
Hugo Häggmark
0eb2ca3ffd chore: Cleaning up implicit anys in DashboardExporter and tests
progress: #14714
2019-03-18 07:42:43 +01:00
ryan
ff3c25ad79 Merge remote-tracking branch 'grafana/master' into all-data-as-table
* grafana/master: (57 commits)
  feature(explore/table): Add tooltips to explore table (#16007)
  Update changelog
  Add check for Env before log
  Update index.md
  chore: Cleaning up implicit anys in manage_dashboard.ts and manage_dashboard.test.ts progress: #14714
  chore: Cleaning up implicit anys in app.ts progress: #14714
  changelog: adds note about closing #15836
  changelog: adds note about closing #6359 and #15931
  add partial
  Add check so that header is not sent for anonymous users
  Update config docs
  Add custom header with grafana user and a config switch for it
  changelog: adds note about closing #10816
  use constants for cache type
  makes variables template prettier complient
  white space formating
  changelog: adds note about #15744
  updates old distcache names
  dont allow inifinite expiration
  return error if cache type is invalid
  ...
2019-03-15 09:19:01 -07:00
Hugo Häggmark
96af051cb2 chore: Cleaning up implicit anys in manage_dashboard.ts and manage_dashboard.test.ts
progress: #14714
2019-03-15 01:59:16 -07:00
Peter Holmberg
6ca1ae309a set correct return type 2019-03-15 08:52:25 +01:00
Peter Holmberg
52dcb9bf00 renaming function 2019-03-14 17:39:56 +01:00
Peter Holmberg
cf55d68894 using refId from panel model 2019-03-14 17:20:33 +01:00
ryan
b4a3aecbbc merge master 2019-03-13 09:03:32 -07:00
Torkel Ödegaard
d6bab53d3b
Merge pull request #15626 from grafana/davkal/15607-explore-line-colors
Explore: Make sure line graphs get different colors
2019-03-13 12:21:44 +01:00
Torkel Ödegaard
71159fb606 Merge remote-tracking branch 'origin/master' into bar-gauge-poc 2019-03-13 08:26:06 +01:00
Torkel Ödegaard
d7dc6ad3f4 Fixed type issues introduced by adding angular types 2019-03-12 15:27:02 +01:00
Torkel Ödegaard
25b1bec250 Typescript noAny fixes, start of a long journey 2019-03-12 15:14:45 +01:00
ryan
4ad5e1595b remove kbn test 2019-03-11 21:07:10 -07:00
ryan
4783ea629b merge with master 2019-03-11 15:10:11 -07:00
ryan
00942ec882 MutableColumn 2019-03-11 09:29:30 -07:00
ryan
455a33bd8e cleanup after review 2019-03-11 09:24:25 -07:00
ryan
f4ae0cfaa8 Merge remote-tracking branch 'grafana/master' into all-data-as-table
* grafana/master:
  fix(explore/logs) not collapsing whitespace (#15737)
  Refactoring / fixing password hint PR #15868
  chore: Move sidemenu out of context service and use the logic we have in the router already for hiding the sidemenu
  Fix deduplication results displaying wrong data (#15755)
  Revert "Fix Datasource Update to no User/Password"
  fix imageurl in notification test
  changed all rems to pixels in defaults and template, changed back root font size
  Make password hint configurable from settings/defaults.ini
  changed root font to 100%(default 16px), changed font-size from px to rem, updated rem sizes in template and default.ts files, removed display classes and variables since not used, removed lead class and variables since not usedremoved serif font since not used and probably never should be used
  fix: Update test snapshot
  fix: Logo goes Home instead of toggling side menu #15482
  Fix: #14706 Incorrect index pattern padding in alerting queries
  Removed commented code
  Fixed alias in Cloudwatch Expressions
2019-03-11 09:06:08 -07:00
ryan
59b5f88798 rename handleXXX to onXX events 2019-03-11 09:03:10 -07:00
Torkel Ödegaard
5f6838abca
Merge pull request #15847 from grafana/15482-go-home-with-logo
Logo takes you Home instead of toggling side menu #15482
2019-03-11 14:10:15 +01:00
Torkel Ödegaard
26779e0798 Merge PR #15868 password hint 2019-03-11 13:34:39 +01:00
Johannes Schill
0736b8a1fb chore: Move sidemenu out of context service and use the logic we have in the router already for hiding the sidemenu 2019-03-11 13:18:22 +01:00
Torkel Ödegaard
647cb6ddae Merge branch 'master' of https://github.com/joshuawoodward/grafana into joshuawoodward-master 2019-03-11 13:10:45 +01:00
Dominik Prokop
a853e2c36e
Fix deduplication results displaying wrong data (#15755)
The log rows were mutated in the store, what resulted in wrong deduplication results as well as made the selector memoization quirky - for "the same results" the selector was running twice.
2019-03-11 11:48:14 +01:00
ryan
eef94b3f08 Merge remote-tracking branch 'grafana/master' into all-data-as-table
* grafana/master:
  reuse deprecationWarning
  move to string.ts
  move stringToJsRegex
  minor storybook cleanup
  docs: update slack alert notification settings
2019-03-10 15:34:18 -07:00
ryan
f7f124c56b reuse deprecationWarning 2019-03-10 10:37:44 -07:00
ryan
b2a7891b08 move stringToJsRegex 2019-03-09 23:50:46 -08:00
ryan
6617a382a3 Merge remote-tracking branch 'grafana/master' into all-data-as-table
* grafana/master: (23 commits)
  @grafana/ui - release docs v1 (#15835)
  Minor refactoring of copy tags when saving feature, #15446
  Simple implementation for preserve tags, closes #11627
  Updated prettierignore
  Refactoring of PR #14772
  fix typo in pr template
  add nil/length check when delete old login attempts
  Minor refactoring of new react text panel
  fix allow anonymous server bind for ldap search
  Update README.md
  use pure component
  use replaceVariables
  Catch bad regex exception at controller level
  11780: invalid reg value can cause unexpected behaviour
  update
  Add string quote func
  Remove option used to control within browser
  Add pic into actionCard message
  Add new option to set where to open the message url
  Optimize the Dingding match values format
  ...
2019-03-08 08:25:30 -08:00
Torkel Ödegaard
878da68c90 Refactoring of PR #14772 2019-03-08 13:55:39 +01:00
Torkel Ödegaard
01eb5fade3 Merge branch '11780_wrong_repexp_in_series' of https://github.com/SamuelToh/grafana into SamuelToh-11780_wrong_repexp_in_series 2019-03-08 13:40:50 +01:00
Woodward, Joshua
946e542412 Make password hint configurable from settings/defaults.ini 2019-03-07 14:00:04 -08:00
ryan
abf015ace2 use TableData for timeseries in react 2019-03-07 12:13:38 -08:00
Johannes Schill
f3dbdfac07 fix: Make sure we dont add &autofitpanels to the url if it already exists #15849 2019-03-07 10:32:36 +01:00
Johannes Schill
06e9c116af fix: Update test snapshot 2019-03-07 09:54:39 +01:00
Johannes Schill
d6449ee629 fix: Logo goes Home instead of toggling side menu #15482 2019-03-07 09:36:40 +01:00
Torkel Ödegaard
18d5c04ae4 Merge branch 'toggle-all-legends' of https://github.com/jsferrei/grafana into jsferrei-toggle-all-legends 2019-03-06 17:48:59 +01:00
Marcus Efraimsson
1a588dadbe
fix only users that can edit a dashboard should be able to update panel json 2019-03-06 12:57:19 +01:00
Jon Ferreira
46fa09fdad Add a keybinding that toggles all legends in a dashboard 2019-03-05 13:19:40 -05:00
Peter Holmberg
ee4df15526 moving 2019-03-05 13:55:29 +01:00
Daniel Lee
8b1e25b50a utils: show string errors. Fixes #15782 2019-03-05 09:32:02 +01:00
parry
25b09168eb Don't mutate seriesList parameter in mergeSeriesByTime (#15619)
* do not mutate seriesList in mergeSeriesByTime

* extendedseriesList -> extendedDatapointsList

* remove toString() from datapoints, since the value can be null
2019-03-04 09:56:47 +01:00
SamuelToh
d2c161c2e6 Catch bad regex exception at controller level 2019-03-02 20:50:25 +10:00
SamuelToh
6bfbdbe20b 11780: invalid reg value can cause unexpected behaviour 2019-03-01 20:34:40 +10:00
Leonard Gram
ccc97ed649
Merge pull request #15634 from grafana/15621-series-overrides
graph: fixes click after scroll in series override menu
2019-02-25 12:50:06 +01:00
Daniel Lee
e76655df43 graph: fixes click after scroll in series override menu
Makes changes to dropdown-typeahead2 so that a css
class for the button can be passed in. Means it can
be used instead of dropdown-typeahead.

Switches to using dropdown-typeahead2 for series_overrides
directive and for the influxdb, mysql and postgres datasources
as it already contains a fix for this issue.

This commit also fixes the index property which
was set using an incorrectly spelled length property in the
series_overrides directive.

Closes #15621
2019-02-25 02:11:28 +01:00
David Kaltschmidt
e6a74eb1a2 Explore: Make sure line graphs get different colors
- lines for graphs from different query rows end up in different
transactions
- within each transaction the color distribution resets leading to color
overlap
- this change takes existing transaction colors into account
2019-02-24 10:01:50 -08:00
Torkel Ödegaard
f768808b6e Fixed value dropdown not updating when it's current value updates, fixes #15566 2019-02-23 08:59:00 +01:00
Hugo Häggmark
9c9691f7af Added feature toggle editors_can_own 2019-02-22 14:39:22 +01:00
Valentin Agachi
425636ff70 Improve Loki logs render with ANSI colors (#15558)
* Improve Loki logs render with ANSI colors

* fixup! Improve Loki logs render with ANSI colors

* fixup! Improve Loki logs render with ANSI colors

* fixup! Improve Loki logs render with ANSI colors
2019-02-22 13:13:10 +01:00