2016-02-12 11:55:45 -06:00
|
|
|
import "./directives/dash_class";
|
2015-12-17 09:30:53 -06:00
|
|
|
import "./directives/dash_edit_link";
|
|
|
|
import "./directives/dropdown_typeahead";
|
|
|
|
import "./directives/metric_segment";
|
|
|
|
import "./directives/misc";
|
|
|
|
import "./directives/ng_model_on_blur";
|
|
|
|
import "./directives/tags";
|
|
|
|
import "./directives/value_select_dropdown";
|
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";
|
2017-12-19 09:06:54 -06:00
|
|
|
import "./jquery_extended";
|
|
|
|
import "./partials";
|
|
|
|
import "./components/jsontree/jsontree";
|
|
|
|
import "./components/code_editor/code_editor";
|
|
|
|
import "./utils/outline";
|
|
|
|
import "./components/colorpicker/ColorPicker";
|
|
|
|
import "./components/colorpicker/SeriesColorPicker";
|
|
|
|
import "./components/colorpicker/spectrum_picker";
|
|
|
|
import "./services/search_srv";
|
|
|
|
import "./services/ng_react";
|
2015-10-30 09:04:27 -05:00
|
|
|
|
2017-12-19 09:06:54 -06:00
|
|
|
import { grafanaAppDirective } from "./components/grafana_app";
|
|
|
|
import { sideMenuDirective } from "./components/sidemenu/sidemenu";
|
|
|
|
import { searchDirective } from "./components/search/search";
|
|
|
|
import { infoPopover } from "./components/info_popover";
|
|
|
|
import { navbarDirective } from "./components/navbar/navbar";
|
|
|
|
import { arrayJoin } from "./directives/array_join";
|
|
|
|
import { liveSrv } from "./live/live_srv";
|
|
|
|
import { Emitter } from "./utils/emitter";
|
|
|
|
import { layoutSelector } from "./components/layout_selector/layout_selector";
|
|
|
|
import { switchDirective } from "./components/switch";
|
|
|
|
import { dashboardSelector } from "./components/dashboard_selector";
|
|
|
|
import { queryPartEditorDirective } from "./components/query_part/query_part_editor";
|
|
|
|
import { formDropdownDirective } from "./components/form_dropdown/form_dropdown";
|
|
|
|
import "app/core/controllers/all";
|
|
|
|
import "app/core/services/all";
|
|
|
|
import "app/core/routes/routes";
|
|
|
|
import "./filters/filters";
|
|
|
|
import coreModule from "./core_module";
|
|
|
|
import appEvents from "./app_events";
|
|
|
|
import colors from "./utils/colors";
|
|
|
|
import { assignModelProperties } from "./utils/model_utils";
|
|
|
|
import { contextSrv } from "./services/context_srv";
|
|
|
|
import { KeybindingSrv } from "./services/keybindingSrv";
|
|
|
|
import { helpModal } from "./components/help/help";
|
|
|
|
import { JsonExplorer } from "./components/json_explorer/json_explorer";
|
|
|
|
import { NavModelSrv, NavModel } from "./nav_model_srv";
|
|
|
|
import { userPicker } from "./components/user_picker";
|
|
|
|
import { teamPicker } from "./components/team_picker";
|
|
|
|
import { geminiScrollbar } from "./components/scroll/scroll";
|
|
|
|
import { gfPageDirective } from "./components/gf_page";
|
|
|
|
import { orgSwitcher } from "./components/org_switcher";
|
|
|
|
import { profiler } from "./profiler";
|
|
|
|
import { registerAngularDirectives } from "./angular_wrappers";
|
|
|
|
import { updateLegendValues } from "./time_series2";
|
|
|
|
import TimeSeries from "./time_series2";
|
|
|
|
import { searchResultsDirective } from "./components/search/search_results";
|
|
|
|
import { manageDashboardsDirective } from "./components/manage_dashboards/manage_dashboards";
|
2017-10-22 00:03:26 -05:00
|
|
|
|
2016-02-21 11:08:44 -06:00
|
|
|
export {
|
2017-10-12 14:37:27 -05:00
|
|
|
profiler,
|
2017-10-22 05:48:20 -05:00
|
|
|
registerAngularDirectives,
|
2016-02-21 11:08:44 -06:00
|
|
|
arrayJoin,
|
|
|
|
coreModule,
|
|
|
|
grafanaAppDirective,
|
|
|
|
sideMenuDirective,
|
|
|
|
navbarDirective,
|
|
|
|
searchDirective,
|
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-12-08 09:25:45 -06:00
|
|
|
teamPicker,
|
2017-08-15 04:51:47 -05:00
|
|
|
geminiScrollbar,
|
2017-08-16 08:37:13 -05:00
|
|
|
gfPageDirective,
|
2017-12-04 08:22:08 -06:00
|
|
|
orgSwitcher,
|
2017-12-08 04:47:50 -06:00
|
|
|
manageDashboardsDirective,
|
2017-12-06 14:50:29 -06:00
|
|
|
TimeSeries,
|
2017-12-07 03:45:08 -06:00
|
|
|
updateLegendValues,
|
2017-12-04 08:22:08 -06:00
|
|
|
searchResultsDirective
|
2016-02-21 11:08:44 -06:00
|
|
|
};
|