| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- import _ from "lodash";
- import config from "app/core/config";
- export class DashboardImportCtrl {
- navModel: any;
- step: number;
- jsonText: string;
- parseError: string;
- nameExists: boolean;
- dash: any;
- inputs: any[];
- inputsValid: boolean;
- gnetUrl: string;
- gnetError: string;
- gnetInfo: any;
- titleTouched: boolean;
- hasNameValidationError: boolean;
- nameValidationError: any;
- /** @ngInject */
- constructor(private backendSrv, private validationSrv, navModelSrv, private $location, private $scope, $routeParams) {
- this.navModel = navModelSrv.getNav('create', 'import');
- this.step = 1;
- this.nameExists = false;
- // check gnetId in url
- if ($routeParams.gnetId) {
- this.gnetUrl = $routeParams.gnetId;
- this.checkGnetDashboard();
- }
- }
- onUpload(dash) {
- this.dash = dash;
- this.dash.id = null;
- this.step = 2;
- this.inputs = [];
- if (this.dash.__inputs) {
- for (let input of this.dash.__inputs) {
- var inputModel = {
- name: input.name,
- label: input.label,
- info: input.description,
- value: input.value,
- type: input.type,
- pluginId: input.pluginId,
- options: []
- };
- if (input.type === "datasource") {
- this.setDatasourceOptions(input, inputModel);
- } else if (!inputModel.info) {
- inputModel.info = "Specify a string constant";
- }
- this.inputs.push(inputModel);
- }
- }
- this.inputsValid = this.inputs.length === 0;
- this.titleChanged();
- }
- setDatasourceOptions(input, inputModel) {
- var sources = _.filter(config.datasources, val => {
- return val.type === input.pluginId;
- });
- if (sources.length === 0) {
- inputModel.info =
- "No data sources of type " + input.pluginName + " found";
- } else if (!inputModel.info) {
- inputModel.info = "Select a " + input.pluginName + " data source";
- }
- inputModel.options = sources.map(val => {
- return { text: val.name, value: val.name };
- });
- }
- inputValueChanged() {
- this.inputsValid = true;
- for (let input of this.inputs) {
- if (!input.value) {
- this.inputsValid = false;
- }
- }
- }
- titleChanged() {
- this.titleTouched = true;
- this.nameExists = false;
- this.validationSrv.validateNewDashboardOrFolderName(this.dash.title)
- .then(() => {
- this.hasNameValidationError = false;
- })
- .catch(err => {
- if (err.type === 'EXISTING') {
- this.nameExists = true;
- }
- this.hasNameValidationError = true;
- this.nameValidationError = err.message;
- });
- }
- saveDashboard() {
- var inputs = this.inputs.map(input => {
- return {
- name: input.name,
- type: input.type,
- pluginId: input.pluginId,
- value: input.value
- };
- });
- return this.backendSrv
- .post("api/dashboards/import", {
- dashboard: this.dash,
- overwrite: true,
- inputs: inputs
- })
- .then(res => {
- this.$location.url("dashboard/" + res.importedUri);
- this.$scope.dismiss();
- });
- }
- loadJsonText() {
- try {
- this.parseError = "";
- var dash = JSON.parse(this.jsonText);
- this.onUpload(dash);
- } catch (err) {
- console.log(err);
- this.parseError = err.message;
- return;
- }
- }
- checkGnetDashboard() {
- this.gnetError = "";
- var match = /(^\d+$)|dashboards\/(\d+)/.exec(this.gnetUrl);
- var dashboardId;
- if (match && match[1]) {
- dashboardId = match[1];
- } else if (match && match[2]) {
- dashboardId = match[2];
- } else {
- this.gnetError = "Could not find dashboard";
- }
- return this.backendSrv
- .get("api/gnet/dashboards/" + dashboardId)
- .then(res => {
- this.gnetInfo = res;
- // store reference to grafana.com
- res.json.gnetId = res.id;
- this.onUpload(res.json);
- })
- .catch(err => {
- err.isHandled = true;
- this.gnetError = err.data.message || err;
- });
- }
- back() {
- this.gnetUrl = "";
- this.step = 1;
- this.gnetError = "";
- this.gnetInfo = "";
- }
- }
|