| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- import _ from 'lodash';
- import moment from 'moment';
- import { saveAs } from 'file-saver';
- const DEFAULT_DATETIME_FORMAT = 'YYYY-MM-DDTHH:mm:ssZ';
- const POINT_TIME_INDEX = 1;
- const POINT_VALUE_INDEX = 0;
- export function convertSeriesListToCsv(seriesList, dateTimeFormat = DEFAULT_DATETIME_FORMAT, excel = false) {
- var text = (excel ? 'sep=;\n' : '') + 'Series;Time;Value\n';
- _.each(seriesList, function(series) {
- _.each(series.datapoints, function(dp) {
- text +=
- series.alias + ';' + moment(dp[POINT_TIME_INDEX]).format(dateTimeFormat) + ';' + dp[POINT_VALUE_INDEX] + '\n';
- });
- });
- return text;
- }
- export function exportSeriesListToCsv(seriesList, dateTimeFormat = DEFAULT_DATETIME_FORMAT, excel = false) {
- var text = convertSeriesListToCsv(seriesList, dateTimeFormat, excel);
- saveSaveBlob(text, 'grafana_data_export.csv');
- }
- export function convertSeriesListToCsvColumns(seriesList, dateTimeFormat = DEFAULT_DATETIME_FORMAT, excel = false) {
- let text = (excel ? 'sep=;\n' : '') + 'Time;';
- // add header
- _.each(seriesList, function(series) {
- text += series.alias + ';';
- });
- text = text.substring(0, text.length - 1);
- text += '\n';
- // process data
- seriesList = mergeSeriesByTime(seriesList);
- var dataArr = [[]];
- var sIndex = 1;
- _.each(seriesList, function(series) {
- var cIndex = 0;
- dataArr.push([]);
- _.each(series.datapoints, function(dp) {
- dataArr[0][cIndex] = moment(dp[POINT_TIME_INDEX]).format(dateTimeFormat);
- dataArr[sIndex][cIndex] = dp[POINT_VALUE_INDEX];
- cIndex++;
- });
- sIndex++;
- });
- // make text
- for (var i = 0; i < dataArr[0].length; i++) {
- text += dataArr[0][i] + ';';
- for (var j = 1; j < dataArr.length; j++) {
- text += dataArr[j][i] + ';';
- }
- text = text.substring(0, text.length - 1);
- text += '\n';
- }
- return text;
- }
- /**
- * Collect all unique timestamps from series list and use it to fill
- * missing points by null.
- */
- function mergeSeriesByTime(seriesList) {
- let timestamps = [];
- for (let i = 0; i < seriesList.length; i++) {
- let seriesPoints = seriesList[i].datapoints;
- for (let j = 0; j < seriesPoints.length; j++) {
- timestamps.push(seriesPoints[j][POINT_TIME_INDEX]);
- }
- }
- timestamps = _.sortedUniq(timestamps.sort());
- for (let i = 0; i < seriesList.length; i++) {
- let seriesPoints = seriesList[i].datapoints;
- let seriesTimestamps = _.map(seriesPoints, p => p[POINT_TIME_INDEX]);
- let extendedSeries = [];
- let pointIndex;
- for (let j = 0; j < timestamps.length; j++) {
- pointIndex = _.sortedIndexOf(seriesTimestamps, timestamps[j]);
- if (pointIndex !== -1) {
- extendedSeries.push(seriesPoints[pointIndex]);
- } else {
- extendedSeries.push([null, timestamps[j]]);
- }
- }
- seriesList[i].datapoints = extendedSeries;
- }
- return seriesList;
- }
- export function exportSeriesListToCsvColumns(seriesList, dateTimeFormat = DEFAULT_DATETIME_FORMAT, excel = false) {
- let text = convertSeriesListToCsvColumns(seriesList, dateTimeFormat, excel);
- saveSaveBlob(text, 'grafana_data_export.csv');
- }
- export function exportTableDataToCsv(table, excel = false) {
- var text = excel ? 'sep=;\n' : '';
- // add header
- _.each(table.columns, function(column) {
- text += (column.title || column.text) + ';';
- });
- text += '\n';
- // process data
- _.each(table.rows, function(row) {
- _.each(row, function(value) {
- text += value + ';';
- });
- text += '\n';
- });
- saveSaveBlob(text, 'grafana_data_export.csv');
- }
- export function saveSaveBlob(payload, fname) {
- var blob = new Blob([payload], { type: 'text/csv;charset=utf-8' });
- saveAs(blob, fname);
- }
|