diff --git a/public/app/panels/table/controller.ts b/public/app/panels/table/controller.ts index 463096f097c..cfd2fdf7786 100644 --- a/public/app/panels/table/controller.ts +++ b/public/app/panels/table/controller.ts @@ -9,7 +9,7 @@ import {TableModel} from './table_model'; export class TablePanelCtrl { - constructor($scope, $rootScope, $q, panelSrv, panelHelper) { + constructor($scope, $rootScope, $q, panelSrv, panelHelper, annotationsSrv) { $scope.ctrl = this; $scope.pageIndex = 0; @@ -36,19 +36,22 @@ export class TablePanelCtrl { $scope.init = function() { _.defaults($scope.panel, panelDefaults); - if ($scope.panel.columns.length === 0) { - } - panelSrv.init($scope); }; $scope.refreshData = function(datasource) { panelHelper.updateTimeRange($scope); + if ($scope.panel.transform === 'annotations') { + return annotationsSrv.getAnnotations($scope.dashboard).then(annotations => { + $scope.dataRaw = annotations; + $scope.render(); + }); + } + return panelHelper.issueMetricQuery($scope, datasource) .then($scope.dataHandler, function(err) { - $scope.seriesList = []; - $scope.render([]); + $scope.render(); throw err; }); }; diff --git a/public/app/panels/table/renderer.ts b/public/app/panels/table/renderer.ts index acfef961f07..fae851e54b5 100644 --- a/public/app/panels/table/renderer.ts +++ b/public/app/panels/table/renderer.ts @@ -24,9 +24,22 @@ export class TableRenderer { return null; } + defaultCellFormater(v) { + if (v === null || v === void 0) { + return ''; + } + + if (_.isArray(v)) { + v = v.join(', '); + } + + return v; + } + + createColumnFormater(style) { if (!style) { - return v => v; + return this.defaultCellFormater; } if (style.type === 'date') { @@ -60,17 +73,7 @@ export class TableRenderer { }; } - return v => { - if (v === null || v === void 0) { - return '-'; - } - - if (_.isArray(v)) { - v = v.join(', '); - } - - return v; - }; + return this.defaultCellFormater; } formatColumnValue(colIndex, value) { @@ -88,10 +91,7 @@ export class TableRenderer { } } - this.formaters[colIndex] = function(v) { - return v; - }; - + this.formaters[colIndex] = this.defaultCellFormater; return this.formaters[colIndex](value); } diff --git a/public/app/panels/table/specs/renderer_specs.ts b/public/app/panels/table/specs/renderer_specs.ts index fad4f993acf..43b60c1b364 100644 --- a/public/app/panels/table/specs/renderer_specs.ts +++ b/public/app/panels/table/specs/renderer_specs.ts @@ -9,7 +9,8 @@ describe('when rendering table', () => { table.columns = [ {text: 'Time'}, {text: 'Value'}, - {text: 'Colored'} + {text: 'Colored'}, + {text: 'Undefined'}, ]; var panel = { @@ -59,6 +60,11 @@ describe('when rendering table', () => { var html = renderer.renderCell(2, 55); expect(html).to.be('55.0'); }); + + it('unformated undefined should be rendered as -', () => { + var html = renderer.renderCell(3, undefined); + expect(html).to.be(''); + }); }); }); diff --git a/public/app/panels/table/specs/transformers_specs.ts b/public/app/panels/table/specs/transformers_specs.ts index 6e002a5d561..c41143ab016 100644 --- a/public/app/panels/table/specs/transformers_specs.ts +++ b/public/app/panels/table/specs/transformers_specs.ts @@ -103,8 +103,37 @@ describe('when transforming time series table', () => { expect(table.rows[0][0]).to.be('time'); expect(table.rows[0][1]).to.be('message'); }); - }); + + describe('Annnotations', () => { + var panel = {transform: 'annotations'}; + var rawData = [ + { + min: 1000, + text: 'hej', + tags: ['tags', 'asd'], + title: 'title', + } + ]; + + beforeEach(() => { + table = TableModel.transform(rawData, panel); + }); + + it ('should return 4 columns', () => { + expect(table.columns.length).to.be(4); + expect(table.columns[0].text).to.be('Time'); + expect(table.columns[1].text).to.be('Title'); + expect(table.columns[2].text).to.be('Text'); + expect(table.columns[3].text).to.be('Tags'); + }); + + it ('should return 1 rows', () => { + expect(table.rows.length).to.be(1); + expect(table.rows[0][0]).to.be(1000); + }); + }); + }); }); diff --git a/public/app/panels/table/transformers.ts b/public/app/panels/table/transformers.ts index dce0098dde3..044a20c8c0b 100644 --- a/public/app/panels/table/transformers.ts +++ b/public/app/panels/table/transformers.ts @@ -66,6 +66,21 @@ transformers['timeseries_to_columns'] = { transformers['annotations'] = { description: 'Annotations', + transform: function(data, panel, model) { + model.columns.push({text: 'Time', type: 'date'}); + model.columns.push({text: 'Title'}); + model.columns.push({text: 'Text'}); + model.columns.push({text: 'Tags'}); + + if (!data || data.length === 0) { + return; + } + + for (var i = 0; i < data.length; i++) { + var evt = data[i]; + model.rows.push([evt.min, evt.title, evt.text, evt.tags]); + } + } }; transformers['json'] = {