diff --git a/public/app/core/utils/kbn.js b/public/app/core/utils/kbn.js index e323a9223e3..e3a9fbaa39e 100644 --- a/public/app/core/utils/kbn.js +++ b/public/app/core/utils/kbn.js @@ -186,8 +186,29 @@ function($, _) { text += series.alias + ';' + new Date(dp[1]).toISOString() + ';' + dp[0] + '\n'; }); }); - var blob = new Blob([text], { type: "text/csv;charset=utf-8" }); - window.saveAs(blob, 'grafana_data_export.csv'); + kbn.saveSaveBlob(text, 'grafana_data_export.csv'); + }; + + kbn.exportTableDataToCsv = function(table) { + var text = ''; + // add header + _.each(table.columns, function(column) { + text += column.text + ';'; + }); + text += '\n'; + // process data + _.each(table.rows, function(row) { + _.each(row, function(value) { + text += value + ';'; + }); + text += '\n'; + }); + kbn.saveSaveBlob(text, 'grafana_data_export.csv'); + }; + + kbn.saveSaveBlob = function(payload, fname) { + var blob = new Blob([payload], { type: "text/csv;charset=utf-8" }); + window.saveAs(blob, fname); }; kbn.stringToJsRegex = function(str) { diff --git a/public/app/plugins/panel/table/controller.ts b/public/app/plugins/panel/table/controller.ts index f05a36c4cdf..971f37de849 100644 --- a/public/app/plugins/panel/table/controller.ts +++ b/public/app/plugins/panel/table/controller.ts @@ -3,6 +3,7 @@ import angular from 'angular'; import _ from 'lodash'; import moment from 'moment'; +import kbn from 'app/core/utils/kbn'; import PanelMeta from 'app/features/panel/panel_meta2'; import {transformDataToTable} from './transformers'; @@ -23,6 +24,8 @@ export class TablePanelCtrl { $scope.panelMeta.addEditorTab('Options', 'app/plugins/panel/table/options.html'); $scope.panelMeta.addEditorTab('Time range', 'app/features/panel/partials/panelTime.html'); + $scope.panelMeta.addExtendedMenuItem('Export CSV', '', 'exportCsv()'); + var panelDefaults = { targets: [{}], transform: 'timeseries_to_columns', @@ -124,6 +127,10 @@ export class TablePanelCtrl { panelHelper.broadcastRender($scope, $scope.table, $scope.dataRaw); }; + $scope.exportCsv = function() { + kbn.exportTableDataToCsv($scope.table); + }; + $scope.init(); } }