feat(influxdb): minor progress on new editor

pull/3375/head
Torkel Ödegaard 10 years ago
parent c68cd7d19a
commit 9b4150509c
  1. 9
      public/app/plugins/datasource/influxdb/datasource.js
  2. 3
      public/app/plugins/datasource/influxdb/influx_query.ts
  3. 31
      public/app/plugins/datasource/influxdb/partials/query.editor.html
  4. 17
      public/app/plugins/datasource/influxdb/query_part.ts
  5. 3
      public/app/plugins/datasource/influxdb/specs/influx_query_specs.ts

@ -3,11 +3,11 @@ define([
'lodash', 'lodash',
'app/core/utils/datemath', 'app/core/utils/datemath',
'./influx_series', './influx_series',
'./query_builder', './influx_query',
'./directives', './directives',
'./query_ctrl', './query_ctrl',
], ],
function (angular, _, dateMath, InfluxSeries, InfluxQueryBuilder) { function (angular, _, dateMath, InfluxSeries, InfluxQuery) {
'use strict'; 'use strict';
var module = angular.module('grafana.services'); var module = angular.module('grafana.services');
@ -41,8 +41,9 @@ function (angular, _, dateMath, InfluxSeries, InfluxQueryBuilder) {
queryTargets.push(target); queryTargets.push(target);
// build query // build query
var queryBuilder = new InfluxQueryBuilder(target); var queryModel = new InfluxQuery(target);
var query = queryBuilder.build(); var query = queryModel.render();
console.log(query);
query = query.replace(/\$interval/g, (target.interval || options.interval)); query = query.replace(/\$interval/g, (target.interval || options.interval));
return query; return query;

@ -18,7 +18,8 @@ class InfluxQuery {
target.tags = target.tags || []; target.tags = target.tags || [];
target.groupBy = target.groupBy || [{type: 'time', interval: 'auto'}]; target.groupBy = target.groupBy || [{type: 'time', interval: 'auto'}];
target.select = target.select || [[ target.select = target.select || [[
{name: 'mean', params: ['value']}, {name: 'field', params: ['value']},
{name: 'mean', params: []},
]]; ]];
this.updateSelectParts(); this.updateSelectParts();

@ -87,42 +87,13 @@
<li> <li>
<influx-query-part-editor part="part" class="tight-form-item tight-form-func"></influx-query-part-editor> <influx-query-part-editor part="part" class="tight-form-item tight-form-func"></influx-query-part-editor>
</li> </li>
<!-- <li class="dropdown" ng&#45;if="groupBy.type === 'time'"> --> <li class="dropdown" dropdown-typeahead="groupByMenu" dropdown-typeahead-on-select="groupByMenuAction(parts, $item, $subItem)">
<!-- <a class="tight&#45;form&#45;item pointer" data&#45;toggle="dropdown" bs&#45;tooltip="'Insert missing values, important when stacking'" data&#45;placement="right"> -->
<!-- <span ng&#45;show="target.fill"> -->
<!-- fill ({{target.fill}}) -->
<!-- </span> -->
<!-- <span ng&#45;show="!target.fill"> -->
<!-- no fill -->
<!-- </span> -->
<!-- </a> -->
<!-- <ul class="dropdown&#45;menu"> -->
<!-- <li><a ng&#45;click="setFill('')">no fill</a></li> -->
<!-- <li><a ng&#45;click="setFill('0')">fill (0)</a></li> -->
<!-- <li><a ng&#45;click="setFill('null')">fill (null)</a></li> -->
<!-- <li><a ng&#45;click="setFill('none')">fill (none)</a></li> -->
<!-- <li><a ng&#45;click="setFill('previous')">fill (previous)</a></li> -->
<!-- </ul> -->
<!-- </li> -->
<!-- <li ng&#45;if="groupBy.type === 'tag'"> -->
<!-- <metric&#45;segment&#45;model property="groupBy.key" get&#45;options="getTagOptions()" on&#45;change="get_data()"></metric&#45;segment> -->
<!-- </li> -->
</ul>
<ul class="tight-form-list pull-right">
<li class="tight-form-item last" ng-show="$index === 0">
<a class="pointer" ng-click="addGroupBy()"><i class="fa fa-plus"></i></a>
</li>
<li class="tight-form-item last" ng-show="$index > 0">
<a class="pointer" ng-click="removeGroupBy($index)"><i class="fa fa-minus"></i></a>
</li> </li>
</ul> </ul>
<div class="clearfix"></div> <div class="clearfix"></div>
</div> </div>
</div> </div>
<div class="tight-form"> <div class="tight-form">
<ul class="tight-form-list"> <ul class="tight-form-list">
<li class="tight-form-item query-keyword tight-form-align" style="width: 75px;"> <li class="tight-form-item query-keyword tight-form-align" style="width: 75px;">

@ -8,6 +8,7 @@ var categories = {
Transformations: [], Transformations: [],
Math: [], Math: [],
Aliasing: [], Aliasing: [],
Fields: [],
}; };
class QueryPartDef { class QueryPartDef {
@ -64,19 +65,27 @@ function quotedIdentityRenderer(part, innerExpr) {
return '"' + part.params[0] + '"'; return '"' + part.params[0] + '"';
} }
QueryPartDef.register({
name: 'field',
category: categories.Fields,
params: [{type: 'field'}],
defaultParams: ['value'],
renderer: quotedIdentityRenderer,
});
QueryPartDef.register({ QueryPartDef.register({
name: 'mean', name: 'mean',
category: categories.Aggregations, category: categories.Aggregations,
params: [{type: 'field', quote: 'double'}], params: [],
defaultParams: ['value'], defaultParams: [],
renderer: functionRenderer, renderer: functionRenderer,
}); });
QueryPartDef.register({ QueryPartDef.register({
name: 'sum', name: 'sum',
category: categories.Aggregations, category: categories.Aggregations,
params: [{type: 'field', quote: 'double'}], params: [],
defaultParams: ['value'], defaultParams: [],
renderer: functionRenderer, renderer: functionRenderer,
}); });

@ -21,7 +21,8 @@ describe.only('InfluxQuery', function() {
measurement: 'cpu', measurement: 'cpu',
select: [ select: [
[ [
{name: 'mean', params: ['value']}, {name: 'field', params: ['value']},
{name: 'mean', params: []},
{name: 'math', params: ['/100']}, {name: 'math', params: ['/100']},
{name: 'alias', params: ['text']}, {name: 'alias', params: ['text']},
] ]

Loading…
Cancel
Save