| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- import { transformers, transformDataToTable } from "../transformers";
- describe("when transforming time series table", () => {
- var table;
- describe("given 2 time series", () => {
- var time = new Date().getTime();
- var timeSeries = [
- {
- target: "series1",
- datapoints: [[12.12, time], [14.44, time + 1]]
- },
- {
- target: "series2",
- datapoints: [[16.12, time]]
- }
- ];
- describe("timeseries_to_rows", () => {
- var panel = {
- transform: "timeseries_to_rows",
- sort: { col: 0, desc: true }
- };
- beforeEach(() => {
- table = transformDataToTable(timeSeries, panel);
- });
- it("should return 3 rows", () => {
- expect(table.rows.length).toBe(3);
- expect(table.rows[0][1]).toBe("series1");
- expect(table.rows[1][1]).toBe("series1");
- expect(table.rows[2][1]).toBe("series2");
- expect(table.rows[0][2]).toBe(12.12);
- });
- it("should return 3 rows", () => {
- expect(table.columns.length).toBe(3);
- expect(table.columns[0].text).toBe("Time");
- expect(table.columns[1].text).toBe("Metric");
- expect(table.columns[2].text).toBe("Value");
- });
- });
- describe("timeseries_to_columns", () => {
- var panel = {
- transform: "timeseries_to_columns"
- };
- beforeEach(() => {
- table = transformDataToTable(timeSeries, panel);
- });
- it("should return 3 columns", () => {
- expect(table.columns.length).toBe(3);
- expect(table.columns[0].text).toBe("Time");
- expect(table.columns[1].text).toBe("series1");
- expect(table.columns[2].text).toBe("series2");
- });
- it("should return 2 rows", () => {
- expect(table.rows.length).toBe(2);
- expect(table.rows[0][1]).toBe(12.12);
- expect(table.rows[0][2]).toBe(16.12);
- });
- it("should be undefined when no value for timestamp", () => {
- expect(table.rows[1][2]).toBe(undefined);
- });
- });
- describe("timeseries_aggregations", () => {
- var panel = {
- transform: "timeseries_aggregations",
- sort: { col: 0, desc: true },
- columns: [{ text: "Max", value: "max" }, { text: "Min", value: "min" }]
- };
- beforeEach(() => {
- table = transformDataToTable(timeSeries, panel);
- });
- it("should return 2 rows", () => {
- expect(table.rows.length).toBe(2);
- expect(table.rows[0][0]).toBe("series1");
- expect(table.rows[0][1]).toBe(14.44);
- expect(table.rows[0][2]).toBe(12.12);
- });
- it("should return 2 columns", () => {
- expect(table.columns.length).toBe(3);
- expect(table.columns[0].text).toBe("Metric");
- expect(table.columns[1].text).toBe("Max");
- expect(table.columns[2].text).toBe("Min");
- });
- });
- });
- describe("table data sets", () => {
- describe("Table", () => {
- const transform = "table";
- var panel = {
- transform
- };
- var time = new Date().getTime();
- var nonTableData = [
- {
- type: "foo",
- columns: [
- { text: "Time" },
- { text: "Label Key 1" },
- { text: "Value" }
- ],
- rows: [[time, "Label Value 1", 42]]
- }
- ];
- var singleQueryData = [
- {
- type: "table",
- columns: [
- { text: "Time" },
- { text: "Label Key 1" },
- { text: "Value" }
- ],
- rows: [[time, "Label Value 1", 42]]
- }
- ];
- var multipleQueriesDataSameLabels = [
- {
- type: "table",
- columns: [
- { text: "Time" },
- { text: "Label Key 1" },
- { text: "Label Key 2" },
- { text: "Value #A" }
- ],
- rows: [[time, "Label Value 1", "Label Value 2", 42]]
- },
- {
- type: "table",
- columns: [
- { text: "Time" },
- { text: "Label Key 1" },
- { text: "Label Key 2" },
- { text: "Value #B" }
- ],
- rows: [[time, "Label Value 1", "Label Value 2", 13]]
- },
- {
- type: "table",
- columns: [
- { text: "Time" },
- { text: "Label Key 1" },
- { text: "Label Key 2" },
- { text: "Value #C" }
- ],
- rows: [[time, "Label Value 1", "Label Value 2", 4]]
- },
- {
- type: "table",
- columns: [
- { text: "Time" },
- { text: "Label Key 1" },
- { text: "Label Key 2" },
- { text: "Value #C" }
- ],
- rows: [[time, "Label Value 1", "Label Value 2", 7]]
- }
- ];
- var multipleQueriesDataDifferentLabels = [
- {
- type: "table",
- columns: [
- { text: "Time" },
- { text: "Label Key 1" },
- { text: "Value #A" }
- ],
- rows: [[time, "Label Value 1", 42]]
- },
- {
- type: "table",
- columns: [
- { text: "Time" },
- { text: "Label Key 2" },
- { text: "Value #B" }
- ],
- rows: [[time, "Label Value 2", 13]]
- },
- {
- type: "table",
- columns: [
- { text: "Time" },
- { text: "Label Key 1" },
- { text: "Value #C" }
- ],
- rows: [[time, "Label Value 3", 7]]
- }
- ];
- describe("getColumns", function() {
- it("should return data columns given a single query", function() {
- var columns = transformers[transform].getColumns(singleQueryData);
- expect(columns[0].text).toBe("Time");
- expect(columns[1].text).toBe("Label Key 1");
- expect(columns[2].text).toBe("Value");
- });
- it("should return the union of data columns given a multiple queries", function() {
- var columns = transformers[transform].getColumns(
- multipleQueriesDataSameLabels
- );
- expect(columns[0].text).toBe("Time");
- expect(columns[1].text).toBe("Label Key 1");
- expect(columns[2].text).toBe("Label Key 2");
- expect(columns[3].text).toBe("Value #A");
- expect(columns[4].text).toBe("Value #B");
- });
- it("should return the union of data columns given a multiple queries with different labels", function() {
- var columns = transformers[transform].getColumns(
- multipleQueriesDataDifferentLabels
- );
- expect(columns[0].text).toBe("Time");
- expect(columns[1].text).toBe("Label Key 1");
- expect(columns[2].text).toBe("Value #A");
- expect(columns[3].text).toBe("Label Key 2");
- expect(columns[4].text).toBe("Value #B");
- expect(columns[5].text).toBe("Value #C");
- });
- });
- describe("transform", function() {
- it("should throw an error with non-table data", () => {
- expect(() => transformDataToTable(nonTableData, panel)).toThrow();
- });
- it("should return 3 columns for single queries", () => {
- table = transformDataToTable(singleQueryData, panel);
- expect(table.columns.length).toBe(3);
- expect(table.columns[0].text).toBe("Time");
- expect(table.columns[1].text).toBe("Label Key 1");
- expect(table.columns[2].text).toBe("Value");
- });
- it("should return the union of columns for multiple queries", () => {
- table = transformDataToTable(multipleQueriesDataSameLabels, panel);
- expect(table.columns.length).toBe(6);
- expect(table.columns[0].text).toBe("Time");
- expect(table.columns[1].text).toBe("Label Key 1");
- expect(table.columns[2].text).toBe("Label Key 2");
- expect(table.columns[3].text).toBe("Value #A");
- expect(table.columns[4].text).toBe("Value #B");
- expect(table.columns[5].text).toBe("Value #C");
- });
- it("should return 1 row for a single query", () => {
- table = transformDataToTable(singleQueryData, panel);
- expect(table.rows.length).toBe(1);
- expect(table.rows[0][0]).toBe(time);
- expect(table.rows[0][1]).toBe("Label Value 1");
- expect(table.rows[0][2]).toBe(42);
- });
- it("should return 2 rows for a mulitple queries with same label values plus one extra row", () => {
- table = transformDataToTable(multipleQueriesDataSameLabels, panel);
- expect(table.rows.length).toBe(2);
- expect(table.rows[0][0]).toBe(time);
- expect(table.rows[0][1]).toBe("Label Value 1");
- expect(table.rows[0][2]).toBe("Label Value 2");
- expect(table.rows[0][3]).toBe(42);
- expect(table.rows[0][4]).toBe(13);
- expect(table.rows[0][5]).toBe(4);
- expect(table.rows[1][0]).toBe(time);
- expect(table.rows[1][1]).toBe("Label Value 1");
- expect(table.rows[1][2]).toBe("Label Value 2");
- expect(table.rows[1][3]).toBeUndefined();
- expect(table.rows[1][4]).toBeUndefined();
- expect(table.rows[1][5]).toBe(7);
- });
- it("should return 2 rows for mulitple queries with different label values", () => {
- table = transformDataToTable(
- multipleQueriesDataDifferentLabels,
- panel
- );
- expect(table.rows.length).toBe(2);
- expect(table.columns.length).toBe(6);
- expect(table.rows[0][0]).toBe(time);
- expect(table.rows[0][1]).toBe("Label Value 1");
- expect(table.rows[0][2]).toBe(42);
- expect(table.rows[0][3]).toBe("Label Value 2");
- expect(table.rows[0][4]).toBe(13);
- expect(table.rows[0][5]).toBeUndefined();
- expect(table.rows[1][0]).toBe(time);
- expect(table.rows[1][1]).toBe("Label Value 3");
- expect(table.rows[1][2]).toBeUndefined();
- expect(table.rows[1][3]).toBeUndefined();
- expect(table.rows[1][4]).toBeUndefined();
- expect(table.rows[1][5]).toBe(7);
- });
- });
- });
- });
- describe("doc data sets", () => {
- describe("JSON Data", () => {
- var panel = {
- transform: "json",
- columns: [
- { text: "Timestamp", value: "timestamp" },
- { text: "Message", value: "message" },
- { text: "nested.level2", value: "nested.level2" }
- ]
- };
- var rawData = [
- {
- type: "docs",
- datapoints: [
- {
- timestamp: "time",
- message: "message",
- nested: {
- level2: "level2-value"
- }
- }
- ]
- }
- ];
- describe("getColumns", function() {
- it("should return nested properties", function() {
- var columns = transformers["json"].getColumns(rawData);
- expect(columns[0].text).toBe("timestamp");
- expect(columns[1].text).toBe("message");
- expect(columns[2].text).toBe("nested.level2");
- });
- });
- describe("transform", function() {
- beforeEach(() => {
- table = transformDataToTable(rawData, panel);
- });
- it("should return 2 columns", () => {
- expect(table.columns.length).toBe(3);
- expect(table.columns[0].text).toBe("Timestamp");
- expect(table.columns[1].text).toBe("Message");
- expect(table.columns[2].text).toBe("nested.level2");
- });
- it("should return 2 rows", () => {
- expect(table.rows.length).toBe(1);
- expect(table.rows[0][0]).toBe("time");
- expect(table.rows[0][1]).toBe("message");
- expect(table.rows[0][2]).toBe("level2-value");
- });
- });
- });
- });
- describe("annotation data", () => {
- describe("Annnotations", () => {
- var panel = { transform: "annotations" };
- var rawData = {
- annotations: [
- {
- time: 1000,
- text: "hej",
- tags: ["tags", "asd"],
- title: "title"
- }
- ]
- };
- beforeEach(() => {
- table = transformDataToTable(rawData, panel);
- });
- it("should return 4 columns", () => {
- expect(table.columns.length).toBe(4);
- expect(table.columns[0].text).toBe("Time");
- expect(table.columns[1].text).toBe("Title");
- expect(table.columns[2].text).toBe("Text");
- expect(table.columns[3].text).toBe("Tags");
- });
- it("should return 1 rows", () => {
- expect(table.rows.length).toBe(1);
- expect(table.rows[0][0]).toBe(1000);
- });
- });
- });
- });
|