2015-12-16 19:21:13 +08:00
|
|
|
///<reference path="../headers/common.d.ts" />
|
2015-12-17 00:01:34 +08:00
|
|
|
///<reference path="./mod_defs.d.ts" />
|
2015-12-16 19:21:13 +08:00
|
|
|
|
2016-02-13 01:55:45 +08:00
|
|
|
import "./directives/dash_class";
|
2015-12-17 23:30:53 +08: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";
|
2016-11-11 16:59:27 +08:00
|
|
|
import "./directives/password_strength";
|
2015-12-17 23:30:53 +08:00
|
|
|
import "./directives/spectrum_picker";
|
|
|
|
|
import "./directives/tags";
|
|
|
|
|
import "./directives/value_select_dropdown";
|
2016-02-02 16:12:58 +08:00
|
|
|
import "./directives/plugin_component";
|
2016-02-02 06:24:08 +08:00
|
|
|
import "./directives/rebuild_on_change";
|
2016-01-14 21:37:04 +08: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-25 07:14:39 +08:00
|
|
|
import "./directives/diff-view";
|
2015-12-17 23:30:53 +08:00
|
|
|
import './jquery_extended';
|
|
|
|
|
import './partials';
|
2016-07-21 19:57:19 +08:00
|
|
|
import './components/jsontree/jsontree';
|
2015-10-30 22:04:27 +08:00
|
|
|
|
2016-01-17 01:55:13 +08:00
|
|
|
import {grafanaAppDirective} from './components/grafana_app';
|
2016-01-17 06:26:29 +08:00
|
|
|
import {sideMenuDirective} from './components/sidemenu/sidemenu';
|
2016-01-27 00:54:19 +08:00
|
|
|
import {searchDirective} from './components/search/search';
|
2016-03-02 04:01:41 +08:00
|
|
|
import {infoPopover} from './components/info_popover';
|
|
|
|
|
import {colorPicker} from './components/colorpicker';
|
2016-01-17 06:26:29 +08:00
|
|
|
import {navbarDirective} from './components/navbar/navbar';
|
2015-12-16 03:23:55 +08:00
|
|
|
import {arrayJoin} from './directives/array_join';
|
2016-03-14 18:59:51 +08:00
|
|
|
import {liveSrv} from './live/live_srv';
|
2016-03-23 01:21:21 +08:00
|
|
|
import {Emitter} from './utils/emitter';
|
2016-03-15 22:28:08 +08:00
|
|
|
import {layoutSelector} from './components/layout_selector/layout_selector';
|
2016-03-22 04:24:06 +08:00
|
|
|
import {switchDirective} from './components/switch';
|
2016-04-02 08:34:30 +08:00
|
|
|
import {dashboardSelector} from './components/dashboard_selector';
|
2016-05-11 20:52:44 +08:00
|
|
|
import {queryPartEditorDirective} from './components/query_part/query_part_editor';
|
2016-05-12 20:45:32 +08:00
|
|
|
import {WizardFlow} from './components/wizard/wizard';
|
2016-10-08 16:06:47 +08:00
|
|
|
import {formDropdownDirective} from './components/form_dropdown/form_dropdown';
|
2016-01-14 04:07:57 +08:00
|
|
|
import 'app/core/controllers/all';
|
|
|
|
|
import 'app/core/services/all';
|
2016-02-09 18:17:49 +08:00
|
|
|
import 'app/core/routes/routes';
|
2015-12-17 23:30:53 +08:00
|
|
|
import './filters/filters';
|
2016-01-14 05:31:29 +08:00
|
|
|
import coreModule from './core_module';
|
2016-03-24 00:39:10 +08:00
|
|
|
import appEvents from './app_events';
|
2016-09-22 22:05:20 +08:00
|
|
|
import colors from './utils/colors';
|
2016-10-30 22:14:18 +08:00
|
|
|
import {assignModelProperties} from './utils/model_utils';
|
|
|
|
|
import {contextSrv} from './services/context_srv';
|
2016-11-02 19:55:58 +08:00
|
|
|
import {KeybindingSrv} from './services/keybindingSrv';
|
2016-11-04 03:32:36 +08:00
|
|
|
import {helpModal} from './components/help/help';
|
2017-05-19 22:00:01 +08:00
|
|
|
import {collapseBox} from './components/collapse_box';
|
|
|
|
|
import {JsonExplorer} from './components/json_explorer/json_explorer';
|
2017-06-02 20:00:42 +08:00
|
|
|
import {NavModelSrv, NavModel} from './nav_model_srv';
|
2017-06-09 04:19:11 +08:00
|
|
|
import {userPicker} from './components/user_picker';
|
2017-06-10 03:57:24 +08:00
|
|
|
import {userGroupPicker} from './components/user_group_picker';
|
2015-09-10 17:26:40 +08:00
|
|
|
|
2016-02-22 01:08:44 +08:00
|
|
|
export {
|
|
|
|
|
arrayJoin,
|
|
|
|
|
coreModule,
|
|
|
|
|
grafanaAppDirective,
|
|
|
|
|
sideMenuDirective,
|
|
|
|
|
navbarDirective,
|
|
|
|
|
searchDirective,
|
2016-02-23 01:46:58 +08:00
|
|
|
colorPicker,
|
2016-03-14 18:59:51 +08:00
|
|
|
liveSrv,
|
2016-03-15 22:28:08 +08:00
|
|
|
layoutSelector,
|
2016-03-22 04:24:06 +08:00
|
|
|
switchDirective,
|
2016-03-23 01:21:21 +08:00
|
|
|
infoPopover,
|
2016-03-24 00:39:10 +08:00
|
|
|
Emitter,
|
|
|
|
|
appEvents,
|
2016-04-02 08:34:30 +08:00
|
|
|
dashboardSelector,
|
2016-05-11 20:52:44 +08:00
|
|
|
queryPartEditorDirective,
|
2016-05-12 20:45:32 +08:00
|
|
|
WizardFlow,
|
2016-09-22 22:05:20 +08:00
|
|
|
colors,
|
2016-10-08 16:06:47 +08:00
|
|
|
formDropdownDirective,
|
2016-10-30 22:14:18 +08:00
|
|
|
assignModelProperties,
|
|
|
|
|
contextSrv,
|
2016-11-02 19:55:58 +08:00
|
|
|
KeybindingSrv,
|
2016-11-04 03:32:36 +08:00
|
|
|
helpModal,
|
2017-05-19 22:00:01 +08:00
|
|
|
collapseBox,
|
|
|
|
|
JsonExplorer,
|
2017-06-02 20:00:42 +08:00
|
|
|
NavModelSrv,
|
|
|
|
|
NavModel,
|
2017-06-09 04:19:11 +08:00
|
|
|
userPicker,
|
2017-06-10 03:57:24 +08:00
|
|
|
userGroupPicker,
|
2016-02-22 01:08:44 +08:00
|
|
|
};
|