| 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 = '';
- }
- }
|