Ejemplo n.º 1
0
 describe('When performing performSuggestQuery', function() {
   var results;
   var response;
   it('cache response', function() {
     response = {
       status: "success",
       data: ["value1", "value2", "value3"]
     };
     ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/__name__/values').respond(response);
     ctx.ds.performSuggestQuery('value', true).then(function(data) { results = data; });
     ctx.$httpBackend.flush();
     ctx.$rootScope.$apply();
     expect(results.length).to.be(3);
     ctx.ds.performSuggestQuery('value', true).then(function (data) {
       // get from cache, no need to flush
       results = data;
       expect(results.length).to.be(3);
     });
   });
 });
Ejemplo n.º 2
0
  describe('when loading metric sources', function() {
    var unsortedDatasources = {
      'mmm': {
        type: 'test-db',
        meta: { metrics: {m: 1} }
      },
      '--Grafana--': {
        type: 'grafana',
        meta: {builtIn: true, metrics: {m: 1}, id: "grafana"}
      },
      '--Mixed--': {
        type: 'test-db',
        meta: {builtIn: true, metrics: {m: 1}, id: "mixed"}
      },
      'ZZZ': {
        type: 'test-db',
        meta: {metrics: {m: 1} }
      },
      'aaa': {
        type: 'test-db',
        meta: { metrics: {m: 1} }
      },
      'BBB': {
        type: 'test-db',
        meta: { metrics: {m: 1} }
      },
    };
    beforeEach(function() {
      config.datasources = unsortedDatasources;
      metricSources = _datasourceSrv.getMetricSources({skipVariables: true});
    });

    it('should return a list of sources sorted case insensitively with builtin sources last', function() {
      expect(metricSources[0].name).to.be('aaa');
      expect(metricSources[1].name).to.be('BBB');
      expect(metricSources[2].name).to.be('mmm');
      expect(metricSources[3].name).to.be('ZZZ');
      expect(metricSources[4].name).to.be('--Grafana--');
      expect(metricSources[5].name).to.be('--Mixed--');
    });
  });
Ejemplo n.º 3
0
  describe('simple query and count', function() {
    beforeEach(function() {
      targets = [
        {
          refId: 'A',
          metrics: [{ type: 'count', id: '1' }],
          bucketAggs: [{ type: 'date_histogram', field: '@timestamp', id: '2' }],
        },
      ];
      response = {
        responses: [
          {
            aggregations: {
              '2': {
                buckets: [
                  {
                    doc_count: 10,
                    key: 1000,
                  },
                  {
                    doc_count: 15,
                    key: 2000,
                  },
                ],
              },
            },
          },
        ],
      };

      result = new ElasticResponse(targets, response).getTimeSeries();
    });

    it('should return 1 series', function() {
      expect(result.data.length).to.be(1);
      expect(result.data[0].target).to.be('Count');
      expect(result.data[0].datapoints.length).to.be(2);
      expect(result.data[0].datapoints[0][0]).to.be(10);
      expect(result.data[0].datapoints[0][1]).to.be(1000);
    });
  });
Ejemplo n.º 4
0
  describe('given 2 subscribers', () => {

    it('should notfiy subscribers', () => {
      var events = new Emitter();
      var sub1Called = false;
      var sub2Called = false;

      events.on('test', () => {
        sub1Called = true;
      });
      events.on('test', () => {
        sub2Called = true;
      });

      events.emit('test', null);

      expect(sub1Called).to.be(true);
      expect(sub2Called).to.be(true);
    });

    it.only('should handle errors', () => {
      var events = new Emitter();
      var sub1Called = 0;
      var sub2Called = 0;

      events.on('test', () => {
        sub1Called++;
        throw "hello";
      });

      events.on('test', () => {
        sub2Called++;
      });

      try { events.emit('test', null); } catch (_) { }
      try { events.emit('test', null); } catch (_) {}

      expect(sub1Called).to.be(2);
      expect(sub2Called).to.be(0);
    });
  });
Ejemplo n.º 5
0
 describe('When performing annotationQuery', function () {
   var results;
   var urlExpected = 'proxied/api/v1/query_range?query=' +
                     encodeURIComponent('ALERTS{alertstate="firing"}') +
                     '&start=1443438675&end=1443460275&step=60s';
   var options = {
     annotation: {
       expr: 'ALERTS{alertstate="firing"}',
       tagKeys: 'job',
       titleFormat: '{{alertname}}',
       textFormat: '{{instance}}'
     },
     range: {
       from: moment(1443438674760),
       to: moment(1443460274760)
     }
   };
   var response = {
     status: "success",
     data: {
       resultType: "matrix",
       result: [{
         metric: {"__name__": "ALERTS", alertname: "InstanceDown", alertstate: "firing", instance: "testinstance", job: "testjob"},
         values: [[1443454528, "1"]]
       }]
     }
   };
   beforeEach(function() {
     ctx.$httpBackend.expect('GET', urlExpected).respond(response);
     ctx.ds.annotationQuery(options).then(function(data) { results = data; });
     ctx.$httpBackend.flush();
   });
   it('should return annotation list', function() {
     ctx.$rootScope.$apply();
     expect(results.length).to.be(1);
     expect(results[0].tags).to.contain('testjob');
     expect(results[0].title).to.be('InstanceDown');
     expect(results[0].text).to.be('testinstance');
     expect(results[0].time).to.be(1443454528 * 1000);
   });
 });
Ejemplo n.º 6
0
 describe('When resultFormat is table and instant = true', function() {
   var results;
   var urlExpected = 'proxied/api/v1/query?query=' +
     encodeURIComponent('test{job="testjob"}') +
     '&time=1443460275';
   var query = {
     range: { from: moment(1443438674760), to: moment(1443460274760) },
     targets: [{ expr: 'test{job="testjob"}', format: 'time_series', instant: true }],
     interval: '60s'
   };
   var response = {
     status: "success",
     data: {
       resultType: "vector",
       result: [{
         metric: { "__name__": "test", job: "testjob" },
         value: [1443454528, "3846"]
       }]
     }
   };
   beforeEach(function () {
     ctx.$httpBackend.expect('GET', urlExpected).respond(response);
     ctx.ds.query(query).then(function (data) { results = data; });
     ctx.$httpBackend.flush();
   });
   it('should return table model', function() {
     var table = ctx.ds.transformMetricDataToTable(response.data.result);
     expect(table.type).to.be('table');
     expect(table.rows).to.eql(
       [
         [ 1443454528000, 'test', 'testjob', 3846]
       ]);
     expect(table.columns).to.eql(
       [ { text: 'Time', type: 'time' },
         { text: '__name__' },
         { text: 'job' },
         { text: 'Value' }
       ]
     );
   });
 });
Ejemplo n.º 7
0
  describe('given measurement with dots', function() {
    var options = {
      alias: '',
      series: [
        {
          name: 'app.prod.server1.count',
          tags:  {},
          columns: ['time', 'mean'],
          values: [[1431946625000, 10], [1431946626000, 12]]
        }
      ]
    };

    it('should replace patterns', function() {
      options.alias = 'alias: $1 -> [[3]]';
      var series = new InfluxSeries(options);
      var result = series.getTimeSeries();

      expect(result[0].target).to.be('alias: prod -> count');
    });
  });
Ejemplo n.º 8
0
  describe('When querying influxdb with one raw query', function() {
    var results;
    var urlExpected = "/series?p=mupp&q=select+value+from+series+where+time+%3E+now()-1h";
    var query = {
      rangeRaw: { from: 'now-1h', to: 'now' },
      targets: [{ query: "select value from series where $timeFilter", rawQuery: true }]
    };

    var response = [];

    beforeEach(function() {
      ctx.$httpBackend.expect('GET', urlExpected).respond(response);
      ctx.ds.query(query).then(function(data) { results = data; });
      ctx.$httpBackend.flush();
    });

    it('should generate the correct query', function() {
      ctx.$httpBackend.verifyNoOutstandingExpectation();
    });

  });
Ejemplo n.º 9
0
    describe("response from 0.11.0", () => {
      var response = {
        "results": [
          {
            "series": [
              {
                "name": "cpu",
                "columns": ["fieldKey"],
                "values": [ [ "value"] ]
              }
            ]
          }
        ]
      };

      var result = this.parser.parse(query, response);

      it("should get two responses", () => {
        expect(_.size(result)).to.be(1);
      });
    });
Ejemplo n.º 10
0
  describe('When performing metricFindQuery with key, value columns', function() {
    let results;
    const query = 'select * from atable';
    const response = {
      results: {
        tempvar: {
          meta: {
            rowCount: 3
          },
          refId: 'tempvar',
          tables: [
            {
              columns: [{text: '__value'}, {text: '__text'}],
              rows: [
                ['value1', 'aTitle'],
                ['value2', 'aTitle2'],
                ['value3', 'aTitle3']
              ]
            }
          ]
        }
      }
    };

    beforeEach(function() {
      ctx.backendSrv.datasourceRequest = function(options) {
        return ctx.$q.when({data: response, status: 200});
      };
      ctx.ds.metricFindQuery(query).then(function(data) { results = data; });
      ctx.$rootScope.$apply();
    });

    it('should return list of as text, value', function() {
      expect(results.length).to.be(3);
      expect(results[0].text).to.be('aTitle');
      expect(results[0].value).to.be('value1');
      expect(results[2].text).to.be('aTitle3');
      expect(results[2].value).to.be('value3');
    });
  });