2015-12-16 05:21:13 -06:00
|
|
|
///<reference path="../headers/common.d.ts" />
|
2015-12-16 10:01:34 -06:00
|
|
|
///<reference path="./mod_defs.d.ts" />
|
2015-12-16 05:21:13 -06:00
|
|
|
|
2016-02-12 11:55:45 -06:00
|
|
|
import "./directives/dash_class";
|
2015-12-17 09:30:53 -06:00
|
|
|
import "./directives/confirm_click";
|
|
|
|
import "./directives/dash_edit_link";
|
|
|
|
import "./directives/dropdown_typeahead";
|
|
|
|
import "./directives/metric_segment";
|
|
|
|
import "./directives/misc";
|
|
|
|
import "./directives/ng_model_on_blur";
|
|
|
|
import "./directives/spectrum_picker";
|
|
|
|
import "./directives/tags";
|
|
|
|
import "./directives/value_select_dropdown";
|
2016-02-02 02:12:58 -06:00
|
|
|
import "./directives/plugin_component";
|
2016-02-01 16:24:08 -06:00
|
|
|
import "./directives/rebuild_on_change";
|
2016-01-14 07:37:04 -06:00
|
|
|
import "./directives/give_focus";
|
History and Version Control for Dashboard Updates
A simple version control system for dashboards. Closes #1504.
Goals
1. To create a new dashboard version every time a dashboard is saved.
2. To allow users to view all versions of a given dashboard.
3. To allow users to rollback to a previous version of a dashboard.
4. To allow users to compare two versions of a dashboard.
Usage
Navigate to a dashboard, and click the settings cog. From there, click
the "Changelog" button to be brought to the Changelog view. In this
view, a table containing each version of a dashboard can be seen. Each
entry in the table represents a dashboard version. A selectable
checkbox, the version number, date created, name of the user who created
that version, and commit message is shown in the table, along with a
button that allows a user to restore to a previous version of that
dashboard. If a user wants to restore to a previous version of their
dashboard, they can do so by clicking the previously mentioned button.
If a user wants to compare two different versions of a dashboard, they
can do so by clicking the checkbox of two different dashboard versions,
then clicking the "Compare versions" button located below the dashboard.
From there, the user is brought to a view showing a summary of the
dashboard differences. Each summarized change contains a link that can
be clicked to take the user a JSON diff highlighting the changes line by
line.
Overview of Changes
Backend Changes
- A `dashboard_version` table was created to store each dashboard
version, along with a dashboard version model and structs to represent
the queries and commands necessary for the dashboard version API
methods.
- API endpoints were created to support working with dashboard
versions.
- Methods were added to create, update, read, and destroy dashboard
versions in the database.
- Logic was added to compute the diff between two versions, and
display it to the user.
- The dashboard migration logic was updated to save a "Version
1" of each existing dashboard in the database.
Frontend Changes
- New views
- Methods to pull JSON and HTML from endpoints
New API Endpoints
Each endpoint requires the authorization header to be sent in
the format,
```
Authorization: Bearer <jwt>
```
where `<jwt>` is a JSON web token obtained from the Grafana
admin panel.
`GET "/api/dashboards/db/:dashboardId/versions?orderBy=<string>&limit=<int>&start=<int>"`
Get all dashboard versions for the given dashboard ID. Accepts
three URL parameters:
- `orderBy` String to order the results by. Possible values
are `version`, `created`, `created_by`, `message`. Default
is `versions`. Ordering is always in descending order.
- `limit` Maximum number of results to return
- `start` Position in results to start from
`GET "/api/dashboards/db/:dashboardId/versions/:id"`
Get an individual dashboard version by ID, for the given
dashboard ID.
`POST "/api/dashboards/db/:dashboardId/restore"`
Restore to the given dashboard version. Post body is of
content-type `application/json`, and must contain.
```json
{
"dashboardId": <int>,
"version": <int>
}
```
`GET "/api/dashboards/db/:dashboardId/compare/:versionA...:versionB"`
Compare two dashboard versions by ID for the given
dashboard ID, returning a JSON delta formatted
representation of the diff. The URL format follows
what GitHub does. For example, visiting
[/api/dashboards/db/18/compare/22...33](http://ec2-54-80-139-44.compute-1.amazonaws.com:3000/api/dashboards/db/18/compare/22...33)
will return the diff between versions 22 and 33 for
the dashboard ID 18.
Dependencies Added
- The Go package [gojsondiff](https://github.com/yudai/gojsondiff)
was added and vendored.
2017-05-24 18:14:39 -05:00
|
|
|
import "./directives/diff-view";
|
2015-12-17 09:30:53 -06:00
|
|
|
import './jquery_extended';
|
|
|
|
import './partials';
|
2016-07-21 06:57:19 -05:00
|
|
|
import './components/jsontree/jsontree';
|
2017-08-07 11:31:50 -05:00
|
|
|
import './components/code_editor/code_editor';
|
2017-08-31 09:38:49 -05:00
|
|
|
import './utils/outline';
|
2015-10-30 09:04:27 -05:00
|
|
|
|
2016-01-16 11:55:13 -06:00
|
|
|
import {grafanaAppDirective} from './components/grafana_app';
|
2016-01-16 16:26:29 -06:00
|
|
|
import {sideMenuDirective} from './components/sidemenu/sidemenu';
|
2016-01-26 10:54:19 -06:00
|
|
|
import {searchDirective} from './components/search/search';
|
2016-03-01 14:01:41 -06:00
|
|
|
import {infoPopover} from './components/info_popover';
|
|
|
|
import {colorPicker} from './components/colorpicker';
|
2016-01-16 16:26:29 -06:00
|
|
|
import {navbarDirective} from './components/navbar/navbar';
|
2015-12-15 13:23:55 -06:00
|
|
|
import {arrayJoin} from './directives/array_join';
|
2016-03-14 05:59:51 -05:00
|
|
|
import {liveSrv} from './live/live_srv';
|
2016-03-22 12:21:21 -05:00
|
|
|
import {Emitter} from './utils/emitter';
|
2016-03-15 09:28:08 -05:00
|
|
|
import {layoutSelector} from './components/layout_selector/layout_selector';
|
2016-03-21 15:24:06 -05:00
|
|
|
import {switchDirective} from './components/switch';
|
2016-04-01 19:34:30 -05:00
|
|
|
import {dashboardSelector} from './components/dashboard_selector';
|
2016-05-11 07:52:44 -05:00
|
|
|
import {queryPartEditorDirective} from './components/query_part/query_part_editor';
|
2016-10-08 03:06:47 -05:00
|
|
|
import {formDropdownDirective} from './components/form_dropdown/form_dropdown';
|
2016-01-13 14:07:57 -06:00
|
|
|
import 'app/core/controllers/all';
|
|
|
|
import 'app/core/services/all';
|
2016-02-09 04:17:49 -06:00
|
|
|
import 'app/core/routes/routes';
|
2015-12-17 09:30:53 -06:00
|
|
|
import './filters/filters';
|
2016-01-13 15:31:29 -06:00
|
|
|
import coreModule from './core_module';
|
2016-03-23 11:39:10 -05:00
|
|
|
import appEvents from './app_events';
|
2016-09-22 09:05:20 -05:00
|
|
|
import colors from './utils/colors';
|
2016-10-30 09:14:18 -05:00
|
|
|
import {assignModelProperties} from './utils/model_utils';
|
|
|
|
import {contextSrv} from './services/context_srv';
|
2016-11-02 06:55:58 -05:00
|
|
|
import {KeybindingSrv} from './services/keybindingSrv';
|
2016-11-03 14:32:36 -05:00
|
|
|
import {helpModal} from './components/help/help';
|
2017-09-21 06:32:57 -05:00
|
|
|
import {PasswordStrength} from './components/PasswordStrength';
|
2017-05-19 09:00:01 -05:00
|
|
|
import {JsonExplorer} from './components/json_explorer/json_explorer';
|
2017-06-02 07:00:42 -05:00
|
|
|
import {NavModelSrv, NavModel} from './nav_model_srv';
|
2017-06-08 15:19:11 -05:00
|
|
|
import {userPicker} from './components/user_picker';
|
2017-06-09 14:57:24 -05:00
|
|
|
import {userGroupPicker} from './components/user_group_picker';
|
2017-08-15 04:51:47 -05:00
|
|
|
import {geminiScrollbar} from './components/scroll/scroll';
|
2017-08-16 04:28:52 -05:00
|
|
|
import {gfPageDirective} from './components/gf_page';
|
2017-08-16 08:37:13 -05:00
|
|
|
import {orgSwitcher} from './components/org_switcher';
|
2015-09-10 04:26:40 -05:00
|
|
|
|
2016-02-21 11:08:44 -06:00
|
|
|
export {
|
|
|
|
arrayJoin,
|
|
|
|
coreModule,
|
|
|
|
grafanaAppDirective,
|
|
|
|
sideMenuDirective,
|
|
|
|
navbarDirective,
|
|
|
|
searchDirective,
|
2016-02-22 11:46:58 -06:00
|
|
|
colorPicker,
|
2016-03-14 05:59:51 -05:00
|
|
|
liveSrv,
|
2016-03-15 09:28:08 -05:00
|
|
|
layoutSelector,
|
2016-03-21 15:24:06 -05:00
|
|
|
switchDirective,
|
2016-03-22 12:21:21 -05:00
|
|
|
infoPopover,
|
2016-03-23 11:39:10 -05:00
|
|
|
Emitter,
|
|
|
|
appEvents,
|
2016-04-01 19:34:30 -05:00
|
|
|
dashboardSelector,
|
2016-05-11 07:52:44 -05:00
|
|
|
queryPartEditorDirective,
|
2016-09-22 09:05:20 -05:00
|
|
|
colors,
|
2016-10-08 03:06:47 -05:00
|
|
|
formDropdownDirective,
|
2016-10-30 09:14:18 -05:00
|
|
|
assignModelProperties,
|
|
|
|
contextSrv,
|
2016-11-02 06:55:58 -05:00
|
|
|
KeybindingSrv,
|
2016-11-03 14:32:36 -05:00
|
|
|
helpModal,
|
2017-05-19 09:00:01 -05:00
|
|
|
JsonExplorer,
|
2017-06-02 07:00:42 -05:00
|
|
|
NavModelSrv,
|
|
|
|
NavModel,
|
2017-06-08 15:19:11 -05:00
|
|
|
userPicker,
|
2017-06-09 14:57:24 -05:00
|
|
|
userGroupPicker,
|
2017-08-15 04:51:47 -05:00
|
|
|
geminiScrollbar,
|
2017-08-16 08:37:13 -05:00
|
|
|
gfPageDirective,
|
|
|
|
orgSwitcher,
|
2017-09-21 06:32:57 -05:00
|
|
|
PasswordStrength,
|
2016-02-21 11:08:44 -06:00
|
|
|
};
|