grafana/public/app/core/core.ts

97 lines
3.4 KiB
TypeScript
Raw Normal View History

2016-02-12 11:55:45 -06:00
import "./directives/dash_class";
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";
import "./directives/rebuild_on_change";
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";
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
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";
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,
liveSrv,
layoutSelector,
switchDirective,
infoPopover,
Emitter,
appEvents,
2016-04-01 19:34:30 -05:00
dashboardSelector,
queryPartEditorDirective,
colors,
2016-10-08 03:06:47 -05:00
formDropdownDirective,
assignModelProperties,
contextSrv,
KeybindingSrv,
2016-11-03 14:32:36 -05:00
helpModal,
2017-05-19 09:00:01 -05:00
JsonExplorer,
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,
gfPageDirective,
orgSwitcher,
manageDashboardsDirective,
TimeSeries,
updateLegendValues,
searchResultsDirective
2016-02-21 11:08:44 -06:00
};