table_model.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. ///<reference path="../../headers/common.d.ts" />
  2. import moment = require('moment');
  3. import _ = require('lodash');
  4. var transformers = {};
  5. transformers['timeseries_to_rows'] = {
  6. description: 'Time series to rows',
  7. transform: function(data, panel, model) {
  8. model.columns = [
  9. {text: 'Time'},
  10. {text: 'Series'},
  11. {text: 'Value'},
  12. ];
  13. model.rows = [];
  14. for (var i = 0; i < data.length; i++) {
  15. var series = data[i];
  16. for (var y = 0; y < series.datapoints.length; y++) {
  17. var dp = series.datapoints[y];
  18. var time = moment(dp[1]).format('LLL');
  19. var value = dp[0];
  20. if (value === null) {
  21. value = 'null';
  22. } else if (_.isNumber(value)) {
  23. value = value.toFixed(2);
  24. }
  25. model.rows.push([time, series.target, value]);
  26. }
  27. }
  28. },
  29. };
  30. transformers['timeseries_to_columns'] = {
  31. description: 'Time series to columns',
  32. transform: function(data, panel, model) {
  33. model.columns = [{text: 'Time'}];
  34. model.rows = [];
  35. var points = {};
  36. for (var i = 0; i < data.length; i++) {
  37. var series = data[i];
  38. model.columns.push({text: series.target});
  39. for (var y = 0; y < series.datapoints.length; y++) {
  40. var dp = series.datapoints[y];
  41. var time = dp[1];
  42. if (!points[time]) {
  43. points[time] = {};
  44. points[time][i] = [dp[0]];
  45. }
  46. else {
  47. points[time][i] = dp[0];
  48. }
  49. }
  50. }
  51. for (var time in points) {
  52. var point = points[time];
  53. var values = [time];
  54. for (var i = 0; i < data.length; i++) {
  55. if (point[i] !== undefined) {
  56. values.push(point[i]);
  57. }
  58. }
  59. model.rows.push(values);
  60. }
  61. }
  62. };
  63. export {transformers}
  64. export class TableModel {
  65. columns: any[];
  66. rows: any[];
  67. static transform(data, panel) {
  68. var model = new TableModel();
  69. if (!data || data.length === 0) {
  70. return model;
  71. }
  72. var transformer = transformers[panel.transform];
  73. if (!transformer) {
  74. throw {message: 'Transformer ' + panel.transformer + ' not found'};
  75. }
  76. transformer.transform(data, panel, model);
  77. return model;
  78. }
  79. }