Support table mode for text data

This commit is contained in:
Alexander Zobnin
2017-12-27 14:44:06 +03:00
parent a8b2e3c88c
commit 9eeb4fe468
14 changed files with 92 additions and 22 deletions

View File

@@ -290,7 +290,11 @@ class ZabbixAPIDatasource {
if (items.length) {
return this.zabbix.getHistory(items, timeFrom, timeTo)
.then(history => {
return responseHandler.handleText(history, items, target);
if (target.resultFormat === 'table') {
return responseHandler.handleHistoryAsTable(history, items);
} else {
return responseHandler.handleText(history, items, target);
}
});
} else {
return Promise.resolve([]);

View File

@@ -26,6 +26,7 @@ export function migrateFrom2To3version(target) {
}
export function migrate(target) {
target.resultFormat = target.resultFormat || 'time_series';
if (isGrafana2target(target)) {
return migrateFrom2To3version(target);
} else {

View File

@@ -11,6 +11,12 @@
</select>
</div>
</div>
<div class="gf-form" ng-show="ctrl.target.mode == editorMode.TEXT">
<label class="gf-form-label query-keyword width-8">Format As</label>
<div class="gf-form-select-wrapper">
<select class="gf-form-input gf-size-auto" ng-model="ctrl.target.resultFormat" ng-options="f.value as f.text for f in ctrl.resultFormats" ng-change="ctrl.refresh()"></select>
</div>
</div>
<div class="gf-form gf-form--grow">
<div class="gf-form-label gf-form-label--grow"></div>
</div>

View File

@@ -49,6 +49,8 @@ export class ZabbixQueryController extends QueryCtrl {
{text: 'acknowledged', value: 1},
];
this.resultFormats = [{ text: 'Time series', value: 'time_series' }, { text: 'Table', value: 'table' }];
this.triggerSeverity = c.TRIGGER_SEVERITY;
// Map functions for bs-typeahead

View File

@@ -54,6 +54,29 @@ function handleText(history, items, target, addHostName = true) {
return convertHistory(history, items, addHostName, convertTextCallback);
}
function handleHistoryAsTable(history, items) {
let table = new TableModel();
table.addColumn({text: 'Host'});
table.addColumn({text: 'Item'});
table.addColumn({text: 'Key'});
table.addColumn({text: 'Last value'});
let grouped_history = _.groupBy(history, 'itemid');
_.each(items, (item) => {
let itemHistory = grouped_history[item.itemid] || [];
let lastPoint = _.last(itemHistory);
let lastValue = lastPoint ? lastPoint.value : null;
let host = _.first(item.hosts);
host = host ? host.name : "";
table.rows.push([
host, item.name, item.key_, lastValue
]);
});
return table;
}
function convertText(target, point) {
let value = point.value;
@@ -182,6 +205,7 @@ export default {
convertHistory: convertHistory,
handleTrends: handleTrends,
handleText: handleText,
handleHistoryAsTable: handleHistoryAsTable,
handleSLAResponse: handleSLAResponse,
handleTriggersResponse: handleTriggersResponse
};