diff --git a/dist/datasource-zabbix/dataProcessor.js b/dist/datasource-zabbix/dataProcessor.js index 12312de..642adc7 100644 --- a/dist/datasource-zabbix/dataProcessor.js +++ b/dist/datasource-zabbix/dataProcessor.js @@ -226,12 +226,12 @@ System.register(['lodash', './utils'], function (_export, _context) { return nearestLeft; }function timeShift(interval, range) { var shift = utils.parseTimeShiftInterval(interval) / 1000; - return range.map(function (time) { + return _.map(range, function (time) { return time - shift; }); }function unShiftTimeSeries(interval, datapoints) { var unshift = utils.parseTimeShiftInterval(interval); - return datapoints.map(function (dp) { + return _.map(datapoints, function (dp) { return [dp[0], dp[1] + unshift]; }); }return { diff --git a/dist/datasource-zabbix/dataProcessor.js.map b/dist/datasource-zabbix/dataProcessor.js.map index 7c84bff..31a1919 100644 --- a/dist/datasource-zabbix/dataProcessor.js.map +++ b/dist/datasource-zabbix/dataProcessor.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/datasource-zabbix/dataProcessor.js"],"names":["downsampleSeries","datapoints","time_to","ms_interval","func","downsampledSeries","timeWindow","from","to","points_sum","points_num","value_avg","frame","i","length","push","_","max","min","reverse","groupBy","interval","groupByCallback","utils","parseInterval","frames","point","Math","floor","grouped","mapValues","points","map","sortByTime","value","timestamp","Number","sumSeries","timeseries","new_timestamps","uniq","flatten","sortBy","interpolated_timeseries","series","timestamps","new_points","difference","new_series","concat","each","interpolateSeries","new_timeseries","sum","j","limit","order","n","orderByFunc","orderByCallback","aggregationFunctions","sortByIteratee","ts","values","sortedTimeseries","slice","AVERAGE","MIN","MAX","MEDIAN","sorted","setAlias","alias","target","setAliasByRegex","extractText","str","pattern","extractPattern","RegExp","extractedValue","exec","scale","factor","delta","newSeries","deltaValue","groupByWrapper","groupFunc","aggregateByWrapper","aggregateFunc","flattenedPoints","aggregateWrapper","left","right","findNearestLeft","findNearestRight","linearInterpolation","point_index","indexOf","nearestRight","nearestLeft","timeShift","range","shift","parseTimeShiftInterval","time","unShiftTimeSeries","unshift","dp","metricFunctions","aggregateBy","average","partial","median","top","bottom","avg"],"mappings":"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","file":"dataProcessor.js","sourcesContent":["import _ from 'lodash';\nimport * as utils from './utils';\n\n/**\n * Downsample datapoints series\n */\nfunction downsampleSeries(datapoints, time_to, ms_interval, func) {\n var downsampledSeries = [];\n var timeWindow = {\n from: time_to * 1000 - ms_interval,\n to: time_to * 1000\n };\n\n var points_sum = 0;\n var points_num = 0;\n var value_avg = 0;\n var frame = [];\n\n for (var i = datapoints.length - 1; i >= 0; i -= 1) {\n if (timeWindow.from < datapoints[i][1] && datapoints[i][1] <= timeWindow.to) {\n points_sum += datapoints[i][0];\n points_num++;\n frame.push(datapoints[i][0]);\n }\n else {\n value_avg = points_num ? points_sum / points_num : 0;\n\n if (func === \"max\") {\n downsampledSeries.push([_.max(frame), timeWindow.to]);\n }\n else if (func === \"min\") {\n downsampledSeries.push([_.min(frame), timeWindow.to]);\n }\n\n // avg by default\n else {\n downsampledSeries.push([value_avg, timeWindow.to]);\n }\n\n // Shift time window\n timeWindow.to = timeWindow.from;\n timeWindow.from -= ms_interval;\n\n points_sum = 0;\n points_num = 0;\n frame = [];\n\n // Process point again\n i++;\n }\n }\n return downsampledSeries.reverse();\n}\n\n/**\n * Group points by given time interval\n * datapoints: [[, ], ...]\n */\nfunction groupBy(interval, groupByCallback, datapoints) {\n var ms_interval = utils.parseInterval(interval);\n\n // Calculate frame timestamps\n var frames = _.groupBy(datapoints, function(point) {\n // Calculate time for group of points\n return Math.floor(point[1] / ms_interval) * ms_interval;\n });\n\n // frame: { '': [[, ], ...] }\n // return [{ '': }, { '': }, ...]\n var grouped = _.mapValues(frames, function(frame) {\n var points = _.map(frame, function(point) {\n return point[0];\n });\n return groupByCallback(points);\n });\n\n // Convert points to Grafana format\n return sortByTime(_.map(grouped, function(value, timestamp) {\n return [Number(value), Number(timestamp)];\n }));\n}\n\nfunction sumSeries(timeseries) {\n\n // Calculate new points for interpolation\n var new_timestamps = _.uniq(_.map(_.flatten(timeseries, true), function(point) {\n return point[1];\n }));\n new_timestamps = _.sortBy(new_timestamps);\n\n var interpolated_timeseries = _.map(timeseries, function(series) {\n var timestamps = _.map(series, function(point) {\n return point[1];\n });\n var new_points = _.map(_.difference(new_timestamps, timestamps), function(timestamp) {\n return [null, timestamp];\n });\n var new_series = series.concat(new_points);\n return sortByTime(new_series);\n });\n\n _.each(interpolated_timeseries, interpolateSeries);\n\n var new_timeseries = [];\n var sum;\n for (var i = new_timestamps.length - 1; i >= 0; i--) {\n sum = 0;\n for (var j = interpolated_timeseries.length - 1; j >= 0; j--) {\n sum += interpolated_timeseries[j][i][0];\n }\n new_timeseries.push([sum, new_timestamps[i]]);\n }\n\n return sortByTime(new_timeseries);\n}\n\nfunction limit(order, n, orderByFunc, timeseries) {\n let orderByCallback = aggregationFunctions[orderByFunc];\n let sortByIteratee = (ts) => {\n let values = _.map(ts.datapoints, (point) => {\n return point[0];\n });\n return orderByCallback(values);\n };\n let sortedTimeseries = _.sortBy(timeseries, sortByIteratee);\n if (order === 'bottom') {\n return sortedTimeseries.slice(0, n);\n } else {\n return sortedTimeseries.slice(-n);\n }\n}\n\nfunction AVERAGE(values) {\n var sum = 0;\n _.each(values, function(value) {\n sum += value;\n });\n return sum / values.length;\n}\n\nfunction MIN(values) {\n return _.min(values);\n}\n\nfunction MAX(values) {\n return _.max(values);\n}\n\nfunction MEDIAN(values) {\n var sorted = _.sortBy(values);\n return sorted[Math.floor(sorted.length / 2)];\n}\n\nfunction setAlias(alias, timeseries) {\n timeseries.target = alias;\n return timeseries;\n}\n\nfunction setAliasByRegex(alias, timeseries) {\n timeseries.target = extractText(timeseries.target, alias);\n return timeseries;\n}\n\nfunction extractText(str, pattern) {\n var extractPattern = new RegExp(pattern);\n var extractedValue = extractPattern.exec(str);\n extractedValue = extractedValue[0];\n return extractedValue;\n}\n\nfunction scale(factor, datapoints) {\n return _.map(datapoints, point => {\n return [\n point[0] * factor,\n point[1]\n ];\n });\n}\n\nfunction delta(datapoints) {\n let newSeries = [];\n let deltaValue;\n for (var i = 1; i < datapoints.length; i++) {\n deltaValue = datapoints[i][0] - datapoints[i - 1][0];\n newSeries.push([deltaValue, datapoints[i][1]]);\n }\n return newSeries;\n}\n\nfunction groupByWrapper(interval, groupFunc, datapoints) {\n var groupByCallback = aggregationFunctions[groupFunc];\n return groupBy(interval, groupByCallback, datapoints);\n}\n\nfunction aggregateByWrapper(interval, aggregateFunc, datapoints) {\n // Flatten all points in frame and then just use groupBy()\n var flattenedPoints = _.flatten(datapoints, true);\n var groupByCallback = aggregationFunctions[aggregateFunc];\n return groupBy(interval, groupByCallback, flattenedPoints);\n}\n\nfunction aggregateWrapper(groupByCallback, interval, datapoints) {\n var flattenedPoints = _.flatten(datapoints, true);\n return groupBy(interval, groupByCallback, flattenedPoints);\n}\n\nfunction sortByTime(series) {\n return _.sortBy(series, function(point) {\n return point[1];\n });\n}\n\n/**\n * Interpolate series with gaps\n */\nfunction interpolateSeries(series) {\n var left, right;\n\n // Interpolate series\n for (var i = series.length - 1; i >= 0; i--) {\n if (!series[i][0]) {\n left = findNearestLeft(series, series[i]);\n right = findNearestRight(series, series[i]);\n if (!left) {\n left = right;\n }\n if (!right) {\n right = left;\n }\n series[i][0] = linearInterpolation(series[i][1], left, right);\n }\n }\n return series;\n}\n\nfunction linearInterpolation(timestamp, left, right) {\n if (left[1] === right[1]) {\n return (left[0] + right[0]) / 2;\n } else {\n return (left[0] + (right[0] - left[0]) / (right[1] - left[1]) * (timestamp - left[1]));\n }\n}\n\nfunction findNearestRight(series, point) {\n var point_index = _.indexOf(series, point);\n var nearestRight;\n for (var i = point_index; i < series.length; i++) {\n if (series[i][0] !== null) {\n return series[i];\n }\n }\n return nearestRight;\n}\n\nfunction findNearestLeft(series, point) {\n var point_index = _.indexOf(series, point);\n var nearestLeft;\n for (var i = point_index; i > 0; i--) {\n if (series[i][0] !== null) {\n return series[i];\n }\n }\n return nearestLeft;\n}\n\nfunction timeShift(interval, range) {\n let shift = utils.parseTimeShiftInterval(interval) / 1000;\n return range.map(time => {\n return time - shift;\n });\n}\n\nfunction unShiftTimeSeries(interval, datapoints) {\n let unshift = utils.parseTimeShiftInterval(interval);\n return datapoints.map(dp => {\n return [\n dp[0],\n dp[1] + unshift\n ];\n });\n}\n\nlet metricFunctions = {\n groupBy: groupByWrapper,\n scale: scale,\n delta: delta,\n aggregateBy: aggregateByWrapper,\n average: _.partial(aggregateWrapper, AVERAGE),\n min: _.partial(aggregateWrapper, MIN),\n max: _.partial(aggregateWrapper, MAX),\n median: _.partial(aggregateWrapper, MEDIAN),\n sumSeries: sumSeries,\n top: _.partial(limit, 'top'),\n bottom: _.partial(limit, 'bottom'),\n timeShift: timeShift,\n setAlias: setAlias,\n setAliasByRegex: setAliasByRegex\n};\n\nlet aggregationFunctions = {\n avg: AVERAGE,\n min: MIN,\n max: MAX,\n median: MEDIAN\n};\n\nexport default {\n downsampleSeries: downsampleSeries,\n groupBy: groupBy,\n AVERAGE: AVERAGE,\n MIN: MIN,\n MAX: MAX,\n MEDIAN: MEDIAN,\n unShiftTimeSeries: unShiftTimeSeries,\n\n get aggregationFunctions() {\n return aggregationFunctions;\n },\n\n get metricFunctions() {\n return metricFunctions;\n }\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/datasource-zabbix/dataProcessor.js"],"names":["downsampleSeries","datapoints","time_to","ms_interval","func","downsampledSeries","timeWindow","from","to","points_sum","points_num","value_avg","frame","i","length","push","_","max","min","reverse","groupBy","interval","groupByCallback","utils","parseInterval","frames","point","Math","floor","grouped","mapValues","points","map","sortByTime","value","timestamp","Number","sumSeries","timeseries","new_timestamps","uniq","flatten","sortBy","interpolated_timeseries","series","timestamps","new_points","difference","new_series","concat","each","interpolateSeries","new_timeseries","sum","j","limit","order","n","orderByFunc","orderByCallback","aggregationFunctions","sortByIteratee","ts","values","sortedTimeseries","slice","AVERAGE","MIN","MAX","MEDIAN","sorted","setAlias","alias","target","setAliasByRegex","extractText","str","pattern","extractPattern","RegExp","extractedValue","exec","scale","factor","delta","newSeries","deltaValue","groupByWrapper","groupFunc","aggregateByWrapper","aggregateFunc","flattenedPoints","aggregateWrapper","left","right","findNearestLeft","findNearestRight","linearInterpolation","point_index","indexOf","nearestRight","nearestLeft","timeShift","range","shift","parseTimeShiftInterval","time","unShiftTimeSeries","unshift","dp","metricFunctions","aggregateBy","average","partial","median","top","bottom","avg"],"mappings":"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","file":"dataProcessor.js","sourcesContent":["import _ from 'lodash';\nimport * as utils from './utils';\n\n/**\n * Downsample datapoints series\n */\nfunction downsampleSeries(datapoints, time_to, ms_interval, func) {\n var downsampledSeries = [];\n var timeWindow = {\n from: time_to * 1000 - ms_interval,\n to: time_to * 1000\n };\n\n var points_sum = 0;\n var points_num = 0;\n var value_avg = 0;\n var frame = [];\n\n for (var i = datapoints.length - 1; i >= 0; i -= 1) {\n if (timeWindow.from < datapoints[i][1] && datapoints[i][1] <= timeWindow.to) {\n points_sum += datapoints[i][0];\n points_num++;\n frame.push(datapoints[i][0]);\n }\n else {\n value_avg = points_num ? points_sum / points_num : 0;\n\n if (func === \"max\") {\n downsampledSeries.push([_.max(frame), timeWindow.to]);\n }\n else if (func === \"min\") {\n downsampledSeries.push([_.min(frame), timeWindow.to]);\n }\n\n // avg by default\n else {\n downsampledSeries.push([value_avg, timeWindow.to]);\n }\n\n // Shift time window\n timeWindow.to = timeWindow.from;\n timeWindow.from -= ms_interval;\n\n points_sum = 0;\n points_num = 0;\n frame = [];\n\n // Process point again\n i++;\n }\n }\n return downsampledSeries.reverse();\n}\n\n/**\n * Group points by given time interval\n * datapoints: [[, ], ...]\n */\nfunction groupBy(interval, groupByCallback, datapoints) {\n var ms_interval = utils.parseInterval(interval);\n\n // Calculate frame timestamps\n var frames = _.groupBy(datapoints, function(point) {\n // Calculate time for group of points\n return Math.floor(point[1] / ms_interval) * ms_interval;\n });\n\n // frame: { '': [[, ], ...] }\n // return [{ '': }, { '': }, ...]\n var grouped = _.mapValues(frames, function(frame) {\n var points = _.map(frame, function(point) {\n return point[0];\n });\n return groupByCallback(points);\n });\n\n // Convert points to Grafana format\n return sortByTime(_.map(grouped, function(value, timestamp) {\n return [Number(value), Number(timestamp)];\n }));\n}\n\nfunction sumSeries(timeseries) {\n\n // Calculate new points for interpolation\n var new_timestamps = _.uniq(_.map(_.flatten(timeseries, true), function(point) {\n return point[1];\n }));\n new_timestamps = _.sortBy(new_timestamps);\n\n var interpolated_timeseries = _.map(timeseries, function(series) {\n var timestamps = _.map(series, function(point) {\n return point[1];\n });\n var new_points = _.map(_.difference(new_timestamps, timestamps), function(timestamp) {\n return [null, timestamp];\n });\n var new_series = series.concat(new_points);\n return sortByTime(new_series);\n });\n\n _.each(interpolated_timeseries, interpolateSeries);\n\n var new_timeseries = [];\n var sum;\n for (var i = new_timestamps.length - 1; i >= 0; i--) {\n sum = 0;\n for (var j = interpolated_timeseries.length - 1; j >= 0; j--) {\n sum += interpolated_timeseries[j][i][0];\n }\n new_timeseries.push([sum, new_timestamps[i]]);\n }\n\n return sortByTime(new_timeseries);\n}\n\nfunction limit(order, n, orderByFunc, timeseries) {\n let orderByCallback = aggregationFunctions[orderByFunc];\n let sortByIteratee = (ts) => {\n let values = _.map(ts.datapoints, (point) => {\n return point[0];\n });\n return orderByCallback(values);\n };\n let sortedTimeseries = _.sortBy(timeseries, sortByIteratee);\n if (order === 'bottom') {\n return sortedTimeseries.slice(0, n);\n } else {\n return sortedTimeseries.slice(-n);\n }\n}\n\nfunction AVERAGE(values) {\n var sum = 0;\n _.each(values, function(value) {\n sum += value;\n });\n return sum / values.length;\n}\n\nfunction MIN(values) {\n return _.min(values);\n}\n\nfunction MAX(values) {\n return _.max(values);\n}\n\nfunction MEDIAN(values) {\n var sorted = _.sortBy(values);\n return sorted[Math.floor(sorted.length / 2)];\n}\n\nfunction setAlias(alias, timeseries) {\n timeseries.target = alias;\n return timeseries;\n}\n\nfunction setAliasByRegex(alias, timeseries) {\n timeseries.target = extractText(timeseries.target, alias);\n return timeseries;\n}\n\nfunction extractText(str, pattern) {\n var extractPattern = new RegExp(pattern);\n var extractedValue = extractPattern.exec(str);\n extractedValue = extractedValue[0];\n return extractedValue;\n}\n\nfunction scale(factor, datapoints) {\n return _.map(datapoints, point => {\n return [\n point[0] * factor,\n point[1]\n ];\n });\n}\n\nfunction delta(datapoints) {\n let newSeries = [];\n let deltaValue;\n for (var i = 1; i < datapoints.length; i++) {\n deltaValue = datapoints[i][0] - datapoints[i - 1][0];\n newSeries.push([deltaValue, datapoints[i][1]]);\n }\n return newSeries;\n}\n\nfunction groupByWrapper(interval, groupFunc, datapoints) {\n var groupByCallback = aggregationFunctions[groupFunc];\n return groupBy(interval, groupByCallback, datapoints);\n}\n\nfunction aggregateByWrapper(interval, aggregateFunc, datapoints) {\n // Flatten all points in frame and then just use groupBy()\n var flattenedPoints = _.flatten(datapoints, true);\n var groupByCallback = aggregationFunctions[aggregateFunc];\n return groupBy(interval, groupByCallback, flattenedPoints);\n}\n\nfunction aggregateWrapper(groupByCallback, interval, datapoints) {\n var flattenedPoints = _.flatten(datapoints, true);\n return groupBy(interval, groupByCallback, flattenedPoints);\n}\n\nfunction sortByTime(series) {\n return _.sortBy(series, function(point) {\n return point[1];\n });\n}\n\n/**\n * Interpolate series with gaps\n */\nfunction interpolateSeries(series) {\n var left, right;\n\n // Interpolate series\n for (var i = series.length - 1; i >= 0; i--) {\n if (!series[i][0]) {\n left = findNearestLeft(series, series[i]);\n right = findNearestRight(series, series[i]);\n if (!left) {\n left = right;\n }\n if (!right) {\n right = left;\n }\n series[i][0] = linearInterpolation(series[i][1], left, right);\n }\n }\n return series;\n}\n\nfunction linearInterpolation(timestamp, left, right) {\n if (left[1] === right[1]) {\n return (left[0] + right[0]) / 2;\n } else {\n return (left[0] + (right[0] - left[0]) / (right[1] - left[1]) * (timestamp - left[1]));\n }\n}\n\nfunction findNearestRight(series, point) {\n var point_index = _.indexOf(series, point);\n var nearestRight;\n for (var i = point_index; i < series.length; i++) {\n if (series[i][0] !== null) {\n return series[i];\n }\n }\n return nearestRight;\n}\n\nfunction findNearestLeft(series, point) {\n var point_index = _.indexOf(series, point);\n var nearestLeft;\n for (var i = point_index; i > 0; i--) {\n if (series[i][0] !== null) {\n return series[i];\n }\n }\n return nearestLeft;\n}\n\nfunction timeShift(interval, range) {\n let shift = utils.parseTimeShiftInterval(interval) / 1000;\n return _.map(range, time => {\n return time - shift;\n });\n}\n\nfunction unShiftTimeSeries(interval, datapoints) {\n let unshift = utils.parseTimeShiftInterval(interval);\n return _.map(datapoints, dp => {\n return [\n dp[0],\n dp[1] + unshift\n ];\n });\n}\n\nlet metricFunctions = {\n groupBy: groupByWrapper,\n scale: scale,\n delta: delta,\n aggregateBy: aggregateByWrapper,\n average: _.partial(aggregateWrapper, AVERAGE),\n min: _.partial(aggregateWrapper, MIN),\n max: _.partial(aggregateWrapper, MAX),\n median: _.partial(aggregateWrapper, MEDIAN),\n sumSeries: sumSeries,\n top: _.partial(limit, 'top'),\n bottom: _.partial(limit, 'bottom'),\n timeShift: timeShift,\n setAlias: setAlias,\n setAliasByRegex: setAliasByRegex\n};\n\nlet aggregationFunctions = {\n avg: AVERAGE,\n min: MIN,\n max: MAX,\n median: MEDIAN\n};\n\nexport default {\n downsampleSeries: downsampleSeries,\n groupBy: groupBy,\n AVERAGE: AVERAGE,\n MIN: MIN,\n MAX: MAX,\n MEDIAN: MEDIAN,\n unShiftTimeSeries: unShiftTimeSeries,\n\n get aggregationFunctions() {\n return aggregationFunctions;\n },\n\n get metricFunctions() {\n return metricFunctions;\n }\n};\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/datasource.js b/dist/datasource-zabbix/datasource.js index 4bd133e..29ee5e7 100644 --- a/dist/datasource-zabbix/datasource.js +++ b/dist/datasource-zabbix/datasource.js @@ -311,6 +311,9 @@ System.register(['lodash', 'app/core/utils/datemath', './utils', './migrations', return getHistoryPromise.then(function (timeseries_data) { return _this2.applyDataProcessingFunctions(timeseries_data, target); }); + }).catch(function (error) { + console.log(error); + return []; }); } }, { @@ -558,7 +561,7 @@ System.register(['lodash', 'app/core/utils/datemath', './utils', './migrations', var _this7 = this; var parts = ['group', 'host', 'application', 'item']; - parts.forEach(function (p) { + _.forEach(parts, function (p) { if (target[p] && target[p].filter) { target[p].filter = _this7.replaceTemplateVars(target[p].filter, options.scopedVars); } @@ -566,7 +569,7 @@ System.register(['lodash', 'app/core/utils/datemath', './utils', './migrations', target.textFilter = this.replaceTemplateVars(target.textFilter, options.scopedVars); _.forEach(target.functions, function (func) { - func.params = func.params.map(function (param) { + func.params = _.map(func.params, function (param) { if (typeof param === 'number') { return +_this7.templateSrv.replace(param.toString(), options.scopedVars); } else { diff --git a/dist/datasource-zabbix/datasource.js.map b/dist/datasource-zabbix/datasource.js.map index e5410b1..61326a7 100644 --- a/dist/datasource-zabbix/datasource.js.map +++ b/dist/datasource-zabbix/datasource.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/datasource-zabbix/datasource.js"],"names":["bindFunctionDefs","functionDefs","category","aggregationFunctions","_","map","metricFunctions","getCategories","aggFuncDefs","filter","func","includes","def","name","funcInstance","createFuncInstance","params","bindFunction","dataProcessor","downsampleSeries","timeseries_data","options","timeseries","datapoints","length","maxDataPoints","groupBy","interval","AVERAGE","formatMetric","metricObj","text","expandable","zabbixTemplateFormat","value","utils","escapeRegex","escapedValues","join","replaceTemplateVars","templateSrv","target","scopedVars","replacedTarget","replace","isRegex","extractText","str","pattern","useCaptureGroups","extractPattern","RegExp","extractedValue","exec","sequence","funcsArray","result","i","call","dateMath","migrations","responseHandler","ZabbixAPIError","ZabbixAPIDatasource","instanceSettings","alertSrv","Zabbix","url","basicAuth","withCredentials","username","jsonData","password","trends","trendsFrom","ttl","cacheTTL","parseInterval","zabbix","partial","timeFrom","Math","ceil","parse","range","from","timeTo","to","useTrendsFrom","useTrends","promises","targets","cloneDeep","replaceTargetVariables","timeFunctions","functions","time_from","time_to","mode","migrate","hide","group","host","item","queryNumericData","queryTextData","itservice","slaProperty","getSLA","serviceid","then","handleSLAResponse","slaObject","Promise","all","flatten","data","itemtype","getItemsFromTarget","getHistoryPromise","valueType","getTrendValueType","getTrend","items","handleTrends","history","getHistory","handleHistory","applyDataProcessingFunctions","trendFunctions","trendValueFunc","find","transformFunctions","filterFunctions","aliasFunctions","dp","aggFuncNames","lastAgg","findLast","forEach","applyTimeShiftFunction","timeShiftFunc","shift","series","unShiftTimeSeries","convertHistory","point","textFilter","clock","resolve","zabbixVersion","getVersion","version","login","status","title","message","catch","error","query","parts","each","split","part","push","template","zipObject","app","getItems","getApps","getHosts","getGroups","metrics","rangeRaw","annotation","showOkEvents","showTriggers","getTriggers","application","trigger","triggers","buildRegex","test","description","Number","priority","minseverity","objectids","getEvents","indexedTriggers","keyBy","hideAcknowledged","events","event","acknowledges","tags","showHostname","hosts","formatted_acknowledges","formatAcknowledges","time","objectid","p","param","toString","contains","indexBy"],"mappings":"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","file":"datasource.js","sourcesContent":["//import angular from 'angular';\nimport _ from 'lodash';\nimport * as dateMath from 'app/core/utils/datemath';\nimport * as utils from './utils';\nimport * as migrations from './migrations';\nimport * as metricFunctions from './metricFunctions';\nimport dataProcessor from './dataProcessor';\nimport responseHandler from './responseHandler';\nimport './zabbix.js';\nimport {ZabbixAPIError} from './zabbixAPICore.service.js';\n\nclass ZabbixAPIDatasource {\n\n /** @ngInject */\n constructor(instanceSettings, templateSrv, alertSrv, Zabbix) {\n this.templateSrv = templateSrv;\n this.alertSrv = alertSrv;\n\n // General data source settings\n this.name = instanceSettings.name;\n this.url = instanceSettings.url;\n this.basicAuth = instanceSettings.basicAuth;\n this.withCredentials = instanceSettings.withCredentials;\n\n // Zabbix API credentials\n this.username = instanceSettings.jsonData.username;\n this.password = instanceSettings.jsonData.password;\n\n // Use trends instead history since specified time\n this.trends = instanceSettings.jsonData.trends;\n this.trendsFrom = instanceSettings.jsonData.trendsFrom || '7d';\n\n // Set cache update interval\n var ttl = instanceSettings.jsonData.cacheTTL || '1h';\n this.cacheTTL = utils.parseInterval(ttl);\n\n this.zabbix = new Zabbix(this.url, this.username, this.password, this.basicAuth, this.withCredentials, this.cacheTTL);\n\n // Use custom format for template variables\n this.replaceTemplateVars = _.partial(replaceTemplateVars, this.templateSrv);\n }\n\n ////////////////////////\n // Datasource methods //\n ////////////////////////\n\n /**\n * Query panel data. Calls for each panel in dashboard.\n * @param {Object} options Contains time range, targets and other info.\n * @return {Object} Grafana metrics object with timeseries data for each target.\n */\n query(options) {\n let timeFrom = Math.ceil(dateMath.parse(options.range.from) / 1000);\n let timeTo = Math.ceil(dateMath.parse(options.range.to) / 1000);\n\n let useTrendsFrom = Math.ceil(dateMath.parse('now-' + this.trendsFrom) / 1000);\n let useTrends = (timeFrom <= useTrendsFrom) && this.trends;\n\n // Create request for each target\n let promises = _.map(options.targets, target => {\n // Prevent changes of original object\n target = _.cloneDeep(target);\n this.replaceTargetVariables(target, options);\n\n // Apply Time-related functions (timeShift(), etc)\n let timeFunctions = bindFunctionDefs(target.functions, 'Time');\n if (timeFunctions.length) {\n const [time_from, time_to] = sequence(timeFunctions)([timeFrom, timeTo]);\n timeFrom = time_from;\n timeTo = time_to;\n }\n\n // Metrics or Text query mode\n if (target.mode !== 1) {\n // Migrate old targets\n target = migrations.migrate(target);\n\n // Don't request undefined and hidden targets\n if (target.hide || !target.group || !target.host || !target.item) {\n return [];\n }\n\n if (!target.mode || target.mode === 0) {\n return this.queryNumericData(target, timeFrom, timeTo, useTrends);\n } else if (target.mode === 2) {\n return this.queryTextData(target, timeFrom, timeTo);\n }\n }\n\n // IT services mode\n else if (target.mode === 1) {\n // Don't show undefined and hidden targets\n if (target.hide || !target.itservice || !target.slaProperty) {\n return [];\n }\n\n return this.zabbix.getSLA(target.itservice.serviceid, timeFrom, timeTo)\n .then(slaObject => {\n return responseHandler.handleSLAResponse(target.itservice, target.slaProperty, slaObject);\n });\n }\n });\n\n // Data for panel (all targets)\n return Promise.all(_.flatten(promises))\n .then(_.flatten)\n .then(timeseries_data => {\n return downsampleSeries(timeseries_data, options);\n })\n .then(data => {\n return { data: data };\n });\n }\n\n queryNumericData(target, timeFrom, timeTo, useTrends) {\n let options = {\n itemtype: 'num'\n };\n return this.zabbix.getItemsFromTarget(target, options)\n .then(items => {\n let getHistoryPromise;\n\n if (useTrends) {\n let valueType = this.getTrendValueType(target);\n getHistoryPromise = this.zabbix.getTrend(items, timeFrom, timeTo)\n .then(history => {\n return responseHandler.handleTrends(history, items, valueType);\n });\n } else {\n // Use history\n getHistoryPromise = this.zabbix.getHistory(items, timeFrom, timeTo)\n .then(history => {\n return responseHandler.handleHistory(history, items);\n });\n }\n\n return getHistoryPromise.then(timeseries_data => {\n return this.applyDataProcessingFunctions(timeseries_data, target);\n });\n });\n }\n\n getTrendValueType(target) {\n // Find trendValue() function and get specified trend value\n var trendFunctions = _.map(metricFunctions.getCategories()['Trends'], 'name');\n var trendValueFunc = _.find(target.functions, func => {\n return _.includes(trendFunctions, func.def.name);\n });\n return trendValueFunc ? trendValueFunc.params[0] : \"avg\";\n }\n\n applyDataProcessingFunctions(timeseries_data, target) {\n let transformFunctions = bindFunctionDefs(target.functions, 'Transform');\n let aggregationFunctions = bindFunctionDefs(target.functions, 'Aggregate');\n let filterFunctions = bindFunctionDefs(target.functions, 'Filter');\n let aliasFunctions = bindFunctionDefs(target.functions, 'Alias');\n\n // Apply transformation functions\n timeseries_data = _.map(timeseries_data, timeseries => {\n timeseries.datapoints = sequence(transformFunctions)(timeseries.datapoints);\n return timeseries;\n });\n\n // Apply filter functions\n if (filterFunctions.length) {\n timeseries_data = sequence(filterFunctions)(timeseries_data);\n }\n\n // Apply aggregations\n if (aggregationFunctions.length) {\n let dp = _.map(timeseries_data, 'datapoints');\n dp = sequence(aggregationFunctions)(dp);\n\n let aggFuncNames = _.map(metricFunctions.getCategories()['Aggregate'], 'name');\n let lastAgg = _.findLast(target.functions, func => {\n return _.includes(aggFuncNames, func.def.name);\n });\n\n timeseries_data = [{\n target: lastAgg.text,\n datapoints: dp\n }];\n }\n\n // Apply alias functions\n _.forEach(timeseries_data, sequence(aliasFunctions));\n\n // Apply Time-related functions (timeShift(), etc)\n // Find timeShift() function and get specified trend value\n this.applyTimeShiftFunction(timeseries_data, target);\n\n return timeseries_data;\n }\n\n applyTimeShiftFunction(timeseries_data, target) {\n // Find timeShift() function and get specified interval\n let timeShiftFunc = _.find(target.functions, (func) => {\n return func.def.name === 'timeShift';\n });\n if (timeShiftFunc) {\n let shift = timeShiftFunc.params[0];\n _.forEach(timeseries_data, (series) => {\n series.datapoints = dataProcessor.unShiftTimeSeries(shift, series.datapoints);\n });\n }\n }\n\n queryTextData(target, timeFrom, timeTo) {\n let options = {\n itemtype: 'text'\n };\n return this.zabbix.getItemsFromTarget(target, options)\n .then(items => {\n if (items.length) {\n return this.zabbix.getHistory(items, timeFrom, timeTo)\n .then(history => {\n return responseHandler.convertHistory(history, items, false, (point) => {\n let value = point.value;\n\n // Regex-based extractor\n if (target.textFilter) {\n value = extractText(point.value, target.textFilter, target.useCaptureGroups);\n }\n\n return [value, point.clock * 1000];\n });\n });\n } else {\n return Promise.resolve([]);\n }\n });\n }\n\n /**\n * Test connection to Zabbix API\n * @return {object} Connection status and Zabbix API version\n */\n testDatasource() {\n let zabbixVersion;\n return this.zabbix.getVersion()\n .then(version => {\n zabbixVersion = version;\n return this.zabbix.login();\n })\n .then(() => {\n return {\n status: \"success\",\n title: \"Success\",\n message: \"Zabbix API version: \" + zabbixVersion\n };\n })\n .catch(error => {\n if (error instanceof ZabbixAPIError) {\n return {\n status: \"error\",\n title: error.message,\n message: error.data\n };\n } else {\n return {\n status: \"error\",\n title: \"Connection failed\",\n message: \"Could not connect to given url\"\n };\n }\n });\n }\n\n ////////////////\n // Templating //\n ////////////////\n\n /**\n * Find metrics from templated request.\n *\n * @param {string} query Query from Templating\n * @return {string} Metric name - group, host, app or item or list\n * of metrics in \"{metric1,metcic2,...,metricN}\" format.\n */\n metricFindQuery(query) {\n let result;\n let parts = [];\n\n // Split query. Query structure: group.host.app.item\n _.each(query.split('.'), part => {\n part = this.replaceTemplateVars(part, {});\n\n // Replace wildcard to regex\n if (part === '*') {\n part = '/.*/';\n }\n parts.push(part);\n });\n let template = _.zipObject(['group', 'host', 'app', 'item'], parts);\n\n // Get items\n if (parts.length === 4) {\n // Search for all items, even it's not belong to any application\n if (template.app === '/.*/') {\n template.app = '';\n }\n result = this.zabbix.getItems(template.group, template.host, template.app, template.item);\n } else if (parts.length === 3) {\n // Get applications\n result = this.zabbix.getApps(template.group, template.host, template.app);\n } else if (parts.length === 2) {\n // Get hosts\n result = this.zabbix.getHosts(template.group, template.host);\n } else if (parts.length === 1) {\n // Get groups\n result = this.zabbix.getGroups(template.group);\n } else {\n result = Promise.resolve([]);\n }\n\n return result.then(metrics => {\n return _.map(metrics, formatMetric);\n });\n }\n\n /////////////////\n // Annotations //\n /////////////////\n\n annotationQuery(options) {\n var timeFrom = Math.ceil(dateMath.parse(options.rangeRaw.from) / 1000);\n var timeTo = Math.ceil(dateMath.parse(options.rangeRaw.to) / 1000);\n var annotation = options.annotation;\n var showOkEvents = annotation.showOkEvents ? [0, 1] : 1;\n\n // Show all triggers\n var showTriggers = [0, 1];\n\n var getTriggers = this.zabbix\n .getTriggers(this.replaceTemplateVars(annotation.group, {}),\n this.replaceTemplateVars(annotation.host, {}),\n this.replaceTemplateVars(annotation.application, {}),\n showTriggers);\n\n return getTriggers.then(triggers => {\n\n // Filter triggers by description\n if (utils.isRegex(annotation.trigger)) {\n triggers = _.filter(triggers, trigger => {\n return utils.buildRegex(annotation.trigger).test(trigger.description);\n });\n } else if (annotation.trigger) {\n triggers = _.filter(triggers, trigger => {\n return trigger.description === annotation.trigger;\n });\n }\n\n // Remove events below the chose severity\n triggers = _.filter(triggers, trigger => {\n return Number(trigger.priority) >= Number(annotation.minseverity);\n });\n\n var objectids = _.map(triggers, 'triggerid');\n return this.zabbix\n .getEvents(objectids, timeFrom, timeTo, showOkEvents)\n .then(events => {\n var indexedTriggers = _.keyBy(triggers, 'triggerid');\n\n // Hide acknowledged events if option enabled\n if (annotation.hideAcknowledged) {\n events = _.filter(events, event => {\n return !event.acknowledges.length;\n });\n }\n\n return _.map(events, event => {\n let tags;\n if (annotation.showHostname) {\n tags = _.map(event.hosts, 'name');\n }\n\n // Show event type (OK or Problem)\n let title = Number(event.value) ? 'Problem' : 'OK';\n\n let formatted_acknowledges = utils.formatAcknowledges(event.acknowledges);\n return {\n annotation: annotation,\n time: event.clock * 1000,\n title: title,\n tags: tags,\n text: indexedTriggers[event.objectid].description + formatted_acknowledges\n };\n });\n });\n });\n }\n\n // Replace template variables\n replaceTargetVariables(target, options) {\n let parts = ['group', 'host', 'application', 'item'];\n parts.forEach(p => {\n if (target[p] && target[p].filter) {\n target[p].filter = this.replaceTemplateVars(target[p].filter, options.scopedVars);\n }\n });\n target.textFilter = this.replaceTemplateVars(target.textFilter, options.scopedVars);\n\n _.forEach(target.functions, func => {\n func.params = func.params.map(param => {\n if (typeof param === 'number') {\n return +this.templateSrv.replace(param.toString(), options.scopedVars);\n } else {\n return this.templateSrv.replace(param, options.scopedVars);\n }\n });\n });\n }\n\n}\n\nfunction bindFunctionDefs(functionDefs, category) {\n var aggregationFunctions = _.map(metricFunctions.getCategories()[category], 'name');\n var aggFuncDefs = _.filter(functionDefs, function(func) {\n return _.includes(aggregationFunctions, func.def.name);\n });\n\n return _.map(aggFuncDefs, function(func) {\n var funcInstance = metricFunctions.createFuncInstance(func.def, func.params);\n return funcInstance.bindFunction(dataProcessor.metricFunctions);\n });\n}\n\nfunction downsampleSeries(timeseries_data, options) {\n return _.map(timeseries_data, timeseries => {\n if (timeseries.datapoints.length > options.maxDataPoints) {\n timeseries.datapoints = dataProcessor\n .groupBy(options.interval, dataProcessor.AVERAGE, timeseries.datapoints);\n }\n return timeseries;\n });\n}\n\nfunction formatMetric(metricObj) {\n return {\n text: metricObj.name,\n expandable: false\n };\n}\n\n/**\n * Custom formatter for template variables.\n * Default Grafana \"regex\" formatter returns\n * value1|value2\n * This formatter returns\n * (value1|value2)\n * This format needed for using in complex regex with\n * template variables, for example\n * /CPU $cpu_item.*time/ where $cpu_item is system,user,iowait\n */\nfunction zabbixTemplateFormat(value) {\n if (typeof value === 'string') {\n return utils.escapeRegex(value);\n }\n\n var escapedValues = _.map(value, utils.escapeRegex);\n return '(' + escapedValues.join('|') + ')';\n}\n\n/**\n * If template variables are used in request, replace it using regex format\n * and wrap with '/' for proper multi-value work. Example:\n * $variable selected as a, b, c\n * We use filter $variable\n * $variable -> a|b|c -> /a|b|c/\n * /$variable/ -> /a|b|c/ -> /a|b|c/\n */\nfunction replaceTemplateVars(templateSrv, target, scopedVars) {\n var replacedTarget = templateSrv.replace(target, scopedVars, zabbixTemplateFormat);\n if (target !== replacedTarget && !utils.isRegex(replacedTarget)) {\n replacedTarget = '/^' + replacedTarget + '$/';\n }\n return replacedTarget;\n}\n\nfunction extractText(str, pattern, useCaptureGroups) {\n let extractPattern = new RegExp(pattern);\n let extractedValue = extractPattern.exec(str);\n if (extractedValue) {\n if (useCaptureGroups) {\n extractedValue = extractedValue[1];\n } else {\n extractedValue = extractedValue[0];\n }\n }\n return extractedValue;\n}\n\n// Apply function one by one:\n// sequence([a(), b(), c()]) = c(b(a()));\nfunction sequence(funcsArray) {\n return function(result) {\n for (var i = 0; i < funcsArray.length; i++) {\n result = funcsArray[i].call(this, result);\n }\n return result;\n };\n}\n\nexport {ZabbixAPIDatasource, zabbixTemplateFormat};\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.includes) {_.includes = _.contains;}\nif (!_.keyBy) {_.keyBy = _.indexBy;}\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/datasource-zabbix/datasource.js"],"names":["bindFunctionDefs","functionDefs","category","aggregationFunctions","_","map","metricFunctions","getCategories","aggFuncDefs","filter","func","includes","def","name","funcInstance","createFuncInstance","params","bindFunction","dataProcessor","downsampleSeries","timeseries_data","options","timeseries","datapoints","length","maxDataPoints","groupBy","interval","AVERAGE","formatMetric","metricObj","text","expandable","zabbixTemplateFormat","value","utils","escapeRegex","escapedValues","join","replaceTemplateVars","templateSrv","target","scopedVars","replacedTarget","replace","isRegex","extractText","str","pattern","useCaptureGroups","extractPattern","RegExp","extractedValue","exec","sequence","funcsArray","result","i","call","dateMath","migrations","responseHandler","ZabbixAPIError","ZabbixAPIDatasource","instanceSettings","alertSrv","Zabbix","url","basicAuth","withCredentials","username","jsonData","password","trends","trendsFrom","ttl","cacheTTL","parseInterval","zabbix","partial","timeFrom","Math","ceil","parse","range","from","timeTo","to","useTrendsFrom","useTrends","promises","targets","cloneDeep","replaceTargetVariables","timeFunctions","functions","time_from","time_to","mode","migrate","hide","group","host","item","queryNumericData","queryTextData","itservice","slaProperty","getSLA","serviceid","then","handleSLAResponse","slaObject","Promise","all","flatten","data","itemtype","getItemsFromTarget","getHistoryPromise","valueType","getTrendValueType","getTrend","items","handleTrends","history","getHistory","handleHistory","applyDataProcessingFunctions","catch","console","log","error","trendFunctions","trendValueFunc","find","transformFunctions","filterFunctions","aliasFunctions","dp","aggFuncNames","lastAgg","findLast","forEach","applyTimeShiftFunction","timeShiftFunc","shift","series","unShiftTimeSeries","convertHistory","point","textFilter","clock","resolve","zabbixVersion","getVersion","version","login","status","title","message","query","parts","each","split","part","push","template","zipObject","app","getItems","getApps","getHosts","getGroups","metrics","rangeRaw","annotation","showOkEvents","showTriggers","getTriggers","application","trigger","triggers","buildRegex","test","description","Number","priority","minseverity","objectids","getEvents","indexedTriggers","keyBy","hideAcknowledged","events","event","acknowledges","tags","showHostname","hosts","formatted_acknowledges","formatAcknowledges","time","objectid","p","param","toString","contains","indexBy"],"mappings":"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","file":"datasource.js","sourcesContent":["//import angular from 'angular';\nimport _ from 'lodash';\nimport * as dateMath from 'app/core/utils/datemath';\nimport * as utils from './utils';\nimport * as migrations from './migrations';\nimport * as metricFunctions from './metricFunctions';\nimport dataProcessor from './dataProcessor';\nimport responseHandler from './responseHandler';\nimport './zabbix.js';\nimport {ZabbixAPIError} from './zabbixAPICore.service.js';\n\nclass ZabbixAPIDatasource {\n\n /** @ngInject */\n constructor(instanceSettings, templateSrv, alertSrv, Zabbix) {\n this.templateSrv = templateSrv;\n this.alertSrv = alertSrv;\n\n // General data source settings\n this.name = instanceSettings.name;\n this.url = instanceSettings.url;\n this.basicAuth = instanceSettings.basicAuth;\n this.withCredentials = instanceSettings.withCredentials;\n\n // Zabbix API credentials\n this.username = instanceSettings.jsonData.username;\n this.password = instanceSettings.jsonData.password;\n\n // Use trends instead history since specified time\n this.trends = instanceSettings.jsonData.trends;\n this.trendsFrom = instanceSettings.jsonData.trendsFrom || '7d';\n\n // Set cache update interval\n var ttl = instanceSettings.jsonData.cacheTTL || '1h';\n this.cacheTTL = utils.parseInterval(ttl);\n\n this.zabbix = new Zabbix(this.url, this.username, this.password, this.basicAuth, this.withCredentials, this.cacheTTL);\n\n // Use custom format for template variables\n this.replaceTemplateVars = _.partial(replaceTemplateVars, this.templateSrv);\n }\n\n ////////////////////////\n // Datasource methods //\n ////////////////////////\n\n /**\n * Query panel data. Calls for each panel in dashboard.\n * @param {Object} options Contains time range, targets and other info.\n * @return {Object} Grafana metrics object with timeseries data for each target.\n */\n query(options) {\n let timeFrom = Math.ceil(dateMath.parse(options.range.from) / 1000);\n let timeTo = Math.ceil(dateMath.parse(options.range.to) / 1000);\n\n let useTrendsFrom = Math.ceil(dateMath.parse('now-' + this.trendsFrom) / 1000);\n let useTrends = (timeFrom <= useTrendsFrom) && this.trends;\n\n // Create request for each target\n let promises = _.map(options.targets, target => {\n // Prevent changes of original object\n target = _.cloneDeep(target);\n this.replaceTargetVariables(target, options);\n\n // Apply Time-related functions (timeShift(), etc)\n let timeFunctions = bindFunctionDefs(target.functions, 'Time');\n if (timeFunctions.length) {\n const [time_from, time_to] = sequence(timeFunctions)([timeFrom, timeTo]);\n timeFrom = time_from;\n timeTo = time_to;\n }\n\n // Metrics or Text query mode\n if (target.mode !== 1) {\n // Migrate old targets\n target = migrations.migrate(target);\n\n // Don't request undefined and hidden targets\n if (target.hide || !target.group || !target.host || !target.item) {\n return [];\n }\n\n if (!target.mode || target.mode === 0) {\n return this.queryNumericData(target, timeFrom, timeTo, useTrends);\n } else if (target.mode === 2) {\n return this.queryTextData(target, timeFrom, timeTo);\n }\n }\n\n // IT services mode\n else if (target.mode === 1) {\n // Don't show undefined and hidden targets\n if (target.hide || !target.itservice || !target.slaProperty) {\n return [];\n }\n\n return this.zabbix.getSLA(target.itservice.serviceid, timeFrom, timeTo)\n .then(slaObject => {\n return responseHandler.handleSLAResponse(target.itservice, target.slaProperty, slaObject);\n });\n }\n });\n\n // Data for panel (all targets)\n return Promise.all(_.flatten(promises))\n .then(_.flatten)\n .then(timeseries_data => {\n return downsampleSeries(timeseries_data, options);\n })\n .then(data => {\n return { data: data };\n });\n }\n\n queryNumericData(target, timeFrom, timeTo, useTrends) {\n let options = {\n itemtype: 'num'\n };\n return this.zabbix.getItemsFromTarget(target, options)\n .then(items => {\n let getHistoryPromise;\n\n if (useTrends) {\n let valueType = this.getTrendValueType(target);\n getHistoryPromise = this.zabbix.getTrend(items, timeFrom, timeTo)\n .then(history => {\n return responseHandler.handleTrends(history, items, valueType);\n });\n } else {\n // Use history\n getHistoryPromise = this.zabbix.getHistory(items, timeFrom, timeTo)\n .then(history => {\n return responseHandler.handleHistory(history, items);\n });\n }\n\n return getHistoryPromise.then(timeseries_data => {\n return this.applyDataProcessingFunctions(timeseries_data, target);\n });\n })\n .catch(error => {\n console.log(error);\n return [];\n });\n }\n\n getTrendValueType(target) {\n // Find trendValue() function and get specified trend value\n var trendFunctions = _.map(metricFunctions.getCategories()['Trends'], 'name');\n var trendValueFunc = _.find(target.functions, func => {\n return _.includes(trendFunctions, func.def.name);\n });\n return trendValueFunc ? trendValueFunc.params[0] : \"avg\";\n }\n\n applyDataProcessingFunctions(timeseries_data, target) {\n let transformFunctions = bindFunctionDefs(target.functions, 'Transform');\n let aggregationFunctions = bindFunctionDefs(target.functions, 'Aggregate');\n let filterFunctions = bindFunctionDefs(target.functions, 'Filter');\n let aliasFunctions = bindFunctionDefs(target.functions, 'Alias');\n\n // Apply transformation functions\n timeseries_data = _.map(timeseries_data, timeseries => {\n timeseries.datapoints = sequence(transformFunctions)(timeseries.datapoints);\n return timeseries;\n });\n\n // Apply filter functions\n if (filterFunctions.length) {\n timeseries_data = sequence(filterFunctions)(timeseries_data);\n }\n\n // Apply aggregations\n if (aggregationFunctions.length) {\n let dp = _.map(timeseries_data, 'datapoints');\n dp = sequence(aggregationFunctions)(dp);\n\n let aggFuncNames = _.map(metricFunctions.getCategories()['Aggregate'], 'name');\n let lastAgg = _.findLast(target.functions, func => {\n return _.includes(aggFuncNames, func.def.name);\n });\n\n timeseries_data = [{\n target: lastAgg.text,\n datapoints: dp\n }];\n }\n\n // Apply alias functions\n _.forEach(timeseries_data, sequence(aliasFunctions));\n\n // Apply Time-related functions (timeShift(), etc)\n // Find timeShift() function and get specified trend value\n this.applyTimeShiftFunction(timeseries_data, target);\n\n return timeseries_data;\n }\n\n applyTimeShiftFunction(timeseries_data, target) {\n // Find timeShift() function and get specified interval\n let timeShiftFunc = _.find(target.functions, (func) => {\n return func.def.name === 'timeShift';\n });\n if (timeShiftFunc) {\n let shift = timeShiftFunc.params[0];\n _.forEach(timeseries_data, (series) => {\n series.datapoints = dataProcessor.unShiftTimeSeries(shift, series.datapoints);\n });\n }\n }\n\n queryTextData(target, timeFrom, timeTo) {\n let options = {\n itemtype: 'text'\n };\n return this.zabbix.getItemsFromTarget(target, options)\n .then(items => {\n if (items.length) {\n return this.zabbix.getHistory(items, timeFrom, timeTo)\n .then(history => {\n return responseHandler.convertHistory(history, items, false, (point) => {\n let value = point.value;\n\n // Regex-based extractor\n if (target.textFilter) {\n value = extractText(point.value, target.textFilter, target.useCaptureGroups);\n }\n\n return [value, point.clock * 1000];\n });\n });\n } else {\n return Promise.resolve([]);\n }\n });\n }\n\n /**\n * Test connection to Zabbix API\n * @return {object} Connection status and Zabbix API version\n */\n testDatasource() {\n let zabbixVersion;\n return this.zabbix.getVersion()\n .then(version => {\n zabbixVersion = version;\n return this.zabbix.login();\n })\n .then(() => {\n return {\n status: \"success\",\n title: \"Success\",\n message: \"Zabbix API version: \" + zabbixVersion\n };\n })\n .catch(error => {\n if (error instanceof ZabbixAPIError) {\n return {\n status: \"error\",\n title: error.message,\n message: error.data\n };\n } else {\n return {\n status: \"error\",\n title: \"Connection failed\",\n message: \"Could not connect to given url\"\n };\n }\n });\n }\n\n ////////////////\n // Templating //\n ////////////////\n\n /**\n * Find metrics from templated request.\n *\n * @param {string} query Query from Templating\n * @return {string} Metric name - group, host, app or item or list\n * of metrics in \"{metric1,metcic2,...,metricN}\" format.\n */\n metricFindQuery(query) {\n let result;\n let parts = [];\n\n // Split query. Query structure: group.host.app.item\n _.each(query.split('.'), part => {\n part = this.replaceTemplateVars(part, {});\n\n // Replace wildcard to regex\n if (part === '*') {\n part = '/.*/';\n }\n parts.push(part);\n });\n let template = _.zipObject(['group', 'host', 'app', 'item'], parts);\n\n // Get items\n if (parts.length === 4) {\n // Search for all items, even it's not belong to any application\n if (template.app === '/.*/') {\n template.app = '';\n }\n result = this.zabbix.getItems(template.group, template.host, template.app, template.item);\n } else if (parts.length === 3) {\n // Get applications\n result = this.zabbix.getApps(template.group, template.host, template.app);\n } else if (parts.length === 2) {\n // Get hosts\n result = this.zabbix.getHosts(template.group, template.host);\n } else if (parts.length === 1) {\n // Get groups\n result = this.zabbix.getGroups(template.group);\n } else {\n result = Promise.resolve([]);\n }\n\n return result.then(metrics => {\n return _.map(metrics, formatMetric);\n });\n }\n\n /////////////////\n // Annotations //\n /////////////////\n\n annotationQuery(options) {\n var timeFrom = Math.ceil(dateMath.parse(options.rangeRaw.from) / 1000);\n var timeTo = Math.ceil(dateMath.parse(options.rangeRaw.to) / 1000);\n var annotation = options.annotation;\n var showOkEvents = annotation.showOkEvents ? [0, 1] : 1;\n\n // Show all triggers\n var showTriggers = [0, 1];\n\n var getTriggers = this.zabbix\n .getTriggers(this.replaceTemplateVars(annotation.group, {}),\n this.replaceTemplateVars(annotation.host, {}),\n this.replaceTemplateVars(annotation.application, {}),\n showTriggers);\n\n return getTriggers.then(triggers => {\n\n // Filter triggers by description\n if (utils.isRegex(annotation.trigger)) {\n triggers = _.filter(triggers, trigger => {\n return utils.buildRegex(annotation.trigger).test(trigger.description);\n });\n } else if (annotation.trigger) {\n triggers = _.filter(triggers, trigger => {\n return trigger.description === annotation.trigger;\n });\n }\n\n // Remove events below the chose severity\n triggers = _.filter(triggers, trigger => {\n return Number(trigger.priority) >= Number(annotation.minseverity);\n });\n\n var objectids = _.map(triggers, 'triggerid');\n return this.zabbix\n .getEvents(objectids, timeFrom, timeTo, showOkEvents)\n .then(events => {\n var indexedTriggers = _.keyBy(triggers, 'triggerid');\n\n // Hide acknowledged events if option enabled\n if (annotation.hideAcknowledged) {\n events = _.filter(events, event => {\n return !event.acknowledges.length;\n });\n }\n\n return _.map(events, event => {\n let tags;\n if (annotation.showHostname) {\n tags = _.map(event.hosts, 'name');\n }\n\n // Show event type (OK or Problem)\n let title = Number(event.value) ? 'Problem' : 'OK';\n\n let formatted_acknowledges = utils.formatAcknowledges(event.acknowledges);\n return {\n annotation: annotation,\n time: event.clock * 1000,\n title: title,\n tags: tags,\n text: indexedTriggers[event.objectid].description + formatted_acknowledges\n };\n });\n });\n });\n }\n\n // Replace template variables\n replaceTargetVariables(target, options) {\n let parts = ['group', 'host', 'application', 'item'];\n _.forEach(parts, p => {\n if (target[p] && target[p].filter) {\n target[p].filter = this.replaceTemplateVars(target[p].filter, options.scopedVars);\n }\n });\n target.textFilter = this.replaceTemplateVars(target.textFilter, options.scopedVars);\n\n _.forEach(target.functions, func => {\n func.params = _.map(func.params, param => {\n if (typeof param === 'number') {\n return +this.templateSrv.replace(param.toString(), options.scopedVars);\n } else {\n return this.templateSrv.replace(param, options.scopedVars);\n }\n });\n });\n }\n\n}\n\nfunction bindFunctionDefs(functionDefs, category) {\n var aggregationFunctions = _.map(metricFunctions.getCategories()[category], 'name');\n var aggFuncDefs = _.filter(functionDefs, function(func) {\n return _.includes(aggregationFunctions, func.def.name);\n });\n\n return _.map(aggFuncDefs, function(func) {\n var funcInstance = metricFunctions.createFuncInstance(func.def, func.params);\n return funcInstance.bindFunction(dataProcessor.metricFunctions);\n });\n}\n\nfunction downsampleSeries(timeseries_data, options) {\n return _.map(timeseries_data, timeseries => {\n if (timeseries.datapoints.length > options.maxDataPoints) {\n timeseries.datapoints = dataProcessor\n .groupBy(options.interval, dataProcessor.AVERAGE, timeseries.datapoints);\n }\n return timeseries;\n });\n}\n\nfunction formatMetric(metricObj) {\n return {\n text: metricObj.name,\n expandable: false\n };\n}\n\n/**\n * Custom formatter for template variables.\n * Default Grafana \"regex\" formatter returns\n * value1|value2\n * This formatter returns\n * (value1|value2)\n * This format needed for using in complex regex with\n * template variables, for example\n * /CPU $cpu_item.*time/ where $cpu_item is system,user,iowait\n */\nfunction zabbixTemplateFormat(value) {\n if (typeof value === 'string') {\n return utils.escapeRegex(value);\n }\n\n var escapedValues = _.map(value, utils.escapeRegex);\n return '(' + escapedValues.join('|') + ')';\n}\n\n/**\n * If template variables are used in request, replace it using regex format\n * and wrap with '/' for proper multi-value work. Example:\n * $variable selected as a, b, c\n * We use filter $variable\n * $variable -> a|b|c -> /a|b|c/\n * /$variable/ -> /a|b|c/ -> /a|b|c/\n */\nfunction replaceTemplateVars(templateSrv, target, scopedVars) {\n var replacedTarget = templateSrv.replace(target, scopedVars, zabbixTemplateFormat);\n if (target !== replacedTarget && !utils.isRegex(replacedTarget)) {\n replacedTarget = '/^' + replacedTarget + '$/';\n }\n return replacedTarget;\n}\n\nfunction extractText(str, pattern, useCaptureGroups) {\n let extractPattern = new RegExp(pattern);\n let extractedValue = extractPattern.exec(str);\n if (extractedValue) {\n if (useCaptureGroups) {\n extractedValue = extractedValue[1];\n } else {\n extractedValue = extractedValue[0];\n }\n }\n return extractedValue;\n}\n\n// Apply function one by one:\n// sequence([a(), b(), c()]) = c(b(a()));\nfunction sequence(funcsArray) {\n return function(result) {\n for (var i = 0; i < funcsArray.length; i++) {\n result = funcsArray[i].call(this, result);\n }\n return result;\n };\n}\n\nexport {ZabbixAPIDatasource, zabbixTemplateFormat};\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.includes) {_.includes = _.contains;}\nif (!_.keyBy) {_.keyBy = _.indexBy;}\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/zabbixAPI.service.js b/dist/datasource-zabbix/zabbixAPI.service.js index 8832bd9..9e7ce25 100644 --- a/dist/datasource-zabbix/zabbixAPI.service.js +++ b/dist/datasource-zabbix/zabbixAPI.service.js @@ -169,7 +169,7 @@ System.register(['angular', 'lodash', './utils', './zabbixAPICore.service'], fun return this.request('item.get', params).then(expandItems); function expandItems(items) { - items.forEach(function (item) { + _.forEach(items, function (item) { item.item = item.name; item.name = utils.expandItemName(item.item, item.key_); return item; diff --git a/dist/datasource-zabbix/zabbixAPI.service.js.map b/dist/datasource-zabbix/zabbixAPI.service.js.map index e17b98d..2df810c 100644 --- a/dist/datasource-zabbix/zabbixAPI.service.js.map +++ b/dist/datasource-zabbix/zabbixAPI.service.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/datasource-zabbix/zabbixAPI.service.js"],"names":["ZabbixAPIServiceFactory","alertSrv","zabbixAPICoreService","ZabbixAPI","api_url","username","password","basicAuth","withCredentials","url","auth","requestOptions","loginPromise","loginErrorCount","maxLoginAttempts","zabbixAPICore","getTrend","getTrend_ZBXNEXT1193","method","params","request","catch","isNotAuthorized","error","data","loginOnce","then","message","statusText","alertAPIError","timeout","set","Promise","resolve","login","getVersion","eventid","eventids","output","sortfield","real_hosts","groupids","hostids","appids","itemtype","webitems","filter","selectHosts","applicationids","value_type","expandItems","items","forEach","item","name","utils","expandItemName","key_","globalmacro","itemid","itemids","length","lastvalue","timeFrom","timeTill","grouped_items","_","groupBy","promises","map","history","sortorder","time_from","time_till","all","flatten","trend","self","serviceids","timeTo","intervals","from","to","showTriggers","hideHostsInMaintenance","expandDescription","expandData","expandComment","monitored","skipDependent","value","selectGroups","selectItems","selectLastEvent","maintenance","lastChangeSince","lastChangeTill","objectids","showEvents","select_acknowledges","preservekeys","events","event","acknowledges","angular","module","factory"],"mappings":"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","file":"zabbixAPI.service.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport * as utils from './utils';\nimport './zabbixAPICore.service';\n\n/** @ngInject */\nfunction ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) {\n\n /**\n * Zabbix API Wrapper.\n * Creates Zabbix API instance with given parameters (url, credentials and other).\n * Wraps API calls and provides high-level methods.\n */\n class ZabbixAPI {\n\n constructor(api_url, username, password, basicAuth, withCredentials) {\n this.url = api_url;\n this.username = username;\n this.password = password;\n this.auth = \"\";\n\n this.requestOptions = {\n basicAuth: basicAuth,\n withCredentials: withCredentials\n };\n\n this.loginPromise = null;\n this.loginErrorCount = 0;\n this.maxLoginAttempts = 3;\n\n this.alertSrv = alertSrv;\n this.zabbixAPICore = zabbixAPICoreService;\n\n this.getTrend = this.getTrend_ZBXNEXT1193;\n //getTrend = getTrend_30;\n }\n\n //////////////////////////\n // Core method wrappers //\n //////////////////////////\n\n request(method, params) {\n return this.zabbixAPICore.request(this.url, method, params, this.requestOptions, this.auth)\n .catch(error => {\n if (isNotAuthorized(error.data)) {\n // Handle auth errors\n this.loginErrorCount++;\n if (this.loginErrorCount > this.maxLoginAttempts) {\n this.loginErrorCount = 0;\n return null;\n } else {\n return this.loginOnce()\n .then(() => this.request(method, params));\n }\n } else {\n // Handle API errors\n let message = error.data ? error.data : error.statusText;\n this.alertAPIError(message);\n }\n });\n }\n\n alertAPIError(message, timeout = 5000) {\n this.alertSrv.set(\n \"Zabbix API Error\",\n message,\n 'error',\n timeout\n );\n }\n\n /**\n * When API unauthenticated or auth token expired each request produce login()\n * call. But auth token is common to all requests. This function wraps login() method\n * and call it once. If login() already called just wait for it (return its promise).\n * @return login promise\n */\n loginOnce() {\n if (!this.loginPromise) {\n this.loginPromise = Promise.resolve(\n this.login().then(auth => {\n this.auth = auth;\n this.loginPromise = null;\n return auth;\n })\n );\n }\n return this.loginPromise;\n }\n\n /**\n * Get authentication token.\n */\n login() {\n return this.zabbixAPICore.login(this.url, this.username, this.password, this.requestOptions);\n }\n\n /**\n * Get Zabbix API version\n */\n getVersion() {\n return this.zabbixAPICore.getVersion(this.url, this.requestOptions);\n }\n\n ////////////////////////////////\n // Zabbix API method wrappers //\n ////////////////////////////////\n\n acknowledgeEvent(eventid, message) {\n var params = {\n eventids: eventid,\n message: message\n };\n\n return this.request('event.acknowledge', params);\n }\n\n getGroups() {\n var params = {\n output: ['name'],\n sortfield: 'name',\n real_hosts: true\n };\n\n return this.request('hostgroup.get', params);\n }\n\n getHosts(groupids) {\n var params = {\n output: ['name', 'host'],\n sortfield: 'name'\n };\n if (groupids) {\n params.groupids = groupids;\n }\n\n return this.request('host.get', params);\n }\n\n getApps(hostids) {\n var params = {\n output: ['applicationid', 'name'],\n hostids: hostids\n };\n\n return this.request('application.get', params);\n }\n\n /**\n * Get Zabbix items\n * @param {[type]} hostids host ids\n * @param {[type]} appids application ids\n * @param {String} itemtype 'num' or 'text'\n * @return {[type]} array of items\n */\n getItems(hostids, appids, itemtype) {\n var params = {\n output: [\n 'name', 'key_',\n 'value_type',\n 'hostid',\n 'status',\n 'state'\n ],\n sortfield: 'name',\n webitems: true,\n filter: {},\n selectHosts: [\n 'hostid',\n 'name'\n ]\n };\n if (hostids) {\n params.hostids = hostids;\n }\n if (appids) {\n params.applicationids = appids;\n }\n if (itemtype === 'num') {\n // Return only numeric metrics\n params.filter.value_type = [0, 3];\n }\n if (itemtype === 'text') {\n // Return only text metrics\n params.filter.value_type = [1, 2, 4];\n }\n\n return this.request('item.get', params)\n .then(expandItems);\n\n function expandItems(items) {\n items.forEach(item => {\n item.item = item.name;\n item.name = utils.expandItemName(item.item, item.key_);\n return item;\n });\n return items;\n }\n }\n\n getMacros(hostids) {\n var params = {\n output: 'extend',\n hostids: hostids\n };\n\n return this.request('usermacro.get', params);\n }\n\n getGlobalMacros() {\n var params = {\n output: 'extend',\n globalmacro: true\n };\n\n return this.request('usermacro.get', params);\n }\n\n getLastValue(itemid) {\n var params = {\n output: ['lastvalue'],\n itemids: itemid\n };\n return this.request('item.get', params)\n .then(items => items.length ? items[0].lastvalue : null);\n }\n\n /**\n * Perform history query from Zabbix API\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} timeFrom Time in seconds\n * @param {Number} timeTill Time in seconds\n * @return {Array} Array of Zabbix history objects\n */\n getHistory(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n history: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('history.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n /**\n * Perform trends query from Zabbix API\n * Use trends api extension from ZBXNEXT-1193 patch.\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} time_from Time in seconds\n * @param {Number} time_till Time in seconds\n * @return {Array} Array of Zabbix trend objects\n */\n getTrend_ZBXNEXT1193(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n trend: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('trend.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n getTrend_30(items, time_from, time_till, value_type) {\n var self = this;\n var itemids = _.map(items, 'itemid');\n\n var params = {\n output: [\"itemid\",\n \"clock\",\n value_type\n ],\n itemids: itemids,\n time_from: time_from\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (time_till) {\n params.time_till = time_till;\n }\n\n return self.request('trend.get', params);\n }\n\n getITService(serviceids) {\n var params = {\n output: 'extend',\n serviceids: serviceids\n };\n return this.request('service.get', params);\n }\n\n getSLA(serviceids, timeFrom, timeTo) {\n var params = {\n serviceids: serviceids,\n intervals: [{\n from: timeFrom,\n to: timeTo\n }]\n };\n return this.request('service.getsla', params);\n }\n\n getTriggers(groupids, hostids, applicationids, showTriggers, hideHostsInMaintenance, timeFrom, timeTo) {\n var params = {\n output: 'extend',\n groupids: groupids,\n hostids: hostids,\n applicationids: applicationids,\n expandDescription: true,\n expandData: true,\n expandComment: true,\n monitored: true,\n skipDependent: true,\n //only_true: true,\n filter: {\n value: 1\n },\n selectGroups: ['name'],\n selectHosts: ['name', 'host'],\n selectItems: ['name', 'key_', 'lastvalue'],\n selectLastEvent: 'extend'\n };\n\n if (showTriggers) {\n params.filter.value = showTriggers;\n }\n\n if (hideHostsInMaintenance) {\n params.maintenance = false;\n }\n\n if (timeFrom || timeTo) {\n params.lastChangeSince = timeFrom;\n params.lastChangeTill = timeTo;\n }\n\n return this.request('trigger.get', params);\n }\n\n getEvents(objectids, timeFrom, timeTo, showEvents) {\n var params = {\n output: 'extend',\n time_from: timeFrom,\n time_till: timeTo,\n objectids: objectids,\n select_acknowledges: 'extend',\n selectHosts: 'extend',\n value: showEvents\n };\n\n return this.request('event.get', params);\n }\n\n getAcknowledges(eventids) {\n var params = {\n output: 'extend',\n eventids: eventids,\n preservekeys: true,\n select_acknowledges: 'extend',\n sortfield: 'clock',\n sortorder: 'DESC'\n };\n\n return this.request('event.get', params)\n .then(events => {\n return _.filter(events, (event) => event.acknowledges.length);\n });\n }\n\n }\n\n return ZabbixAPI;\n}\n\nfunction isNotAuthorized(message) {\n return (\n message === \"Session terminated, re-login, please.\" ||\n message === \"Not authorised.\" ||\n message === \"Not authorized.\"\n );\n}\n\nangular\n .module('grafana.services')\n .factory('zabbixAPIService', ZabbixAPIServiceFactory);\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/datasource-zabbix/zabbixAPI.service.js"],"names":["ZabbixAPIServiceFactory","alertSrv","zabbixAPICoreService","ZabbixAPI","api_url","username","password","basicAuth","withCredentials","url","auth","requestOptions","loginPromise","loginErrorCount","maxLoginAttempts","zabbixAPICore","getTrend","getTrend_ZBXNEXT1193","method","params","request","catch","isNotAuthorized","error","data","loginOnce","then","message","statusText","alertAPIError","timeout","set","Promise","resolve","login","getVersion","eventid","eventids","output","sortfield","real_hosts","groupids","hostids","appids","itemtype","webitems","filter","selectHosts","applicationids","value_type","expandItems","items","_","forEach","item","name","utils","expandItemName","key_","globalmacro","itemid","itemids","length","lastvalue","timeFrom","timeTill","grouped_items","groupBy","promises","map","history","sortorder","time_from","time_till","all","flatten","trend","self","serviceids","timeTo","intervals","from","to","showTriggers","hideHostsInMaintenance","expandDescription","expandData","expandComment","monitored","skipDependent","value","selectGroups","selectItems","selectLastEvent","maintenance","lastChangeSince","lastChangeTill","objectids","showEvents","select_acknowledges","preservekeys","events","event","acknowledges","angular","module","factory"],"mappings":"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","file":"zabbixAPI.service.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport * as utils from './utils';\nimport './zabbixAPICore.service';\n\n/** @ngInject */\nfunction ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) {\n\n /**\n * Zabbix API Wrapper.\n * Creates Zabbix API instance with given parameters (url, credentials and other).\n * Wraps API calls and provides high-level methods.\n */\n class ZabbixAPI {\n\n constructor(api_url, username, password, basicAuth, withCredentials) {\n this.url = api_url;\n this.username = username;\n this.password = password;\n this.auth = \"\";\n\n this.requestOptions = {\n basicAuth: basicAuth,\n withCredentials: withCredentials\n };\n\n this.loginPromise = null;\n this.loginErrorCount = 0;\n this.maxLoginAttempts = 3;\n\n this.alertSrv = alertSrv;\n this.zabbixAPICore = zabbixAPICoreService;\n\n this.getTrend = this.getTrend_ZBXNEXT1193;\n //getTrend = getTrend_30;\n }\n\n //////////////////////////\n // Core method wrappers //\n //////////////////////////\n\n request(method, params) {\n return this.zabbixAPICore.request(this.url, method, params, this.requestOptions, this.auth)\n .catch(error => {\n if (isNotAuthorized(error.data)) {\n // Handle auth errors\n this.loginErrorCount++;\n if (this.loginErrorCount > this.maxLoginAttempts) {\n this.loginErrorCount = 0;\n return null;\n } else {\n return this.loginOnce()\n .then(() => this.request(method, params));\n }\n } else {\n // Handle API errors\n let message = error.data ? error.data : error.statusText;\n this.alertAPIError(message);\n }\n });\n }\n\n alertAPIError(message, timeout = 5000) {\n this.alertSrv.set(\n \"Zabbix API Error\",\n message,\n 'error',\n timeout\n );\n }\n\n /**\n * When API unauthenticated or auth token expired each request produce login()\n * call. But auth token is common to all requests. This function wraps login() method\n * and call it once. If login() already called just wait for it (return its promise).\n * @return login promise\n */\n loginOnce() {\n if (!this.loginPromise) {\n this.loginPromise = Promise.resolve(\n this.login().then(auth => {\n this.auth = auth;\n this.loginPromise = null;\n return auth;\n })\n );\n }\n return this.loginPromise;\n }\n\n /**\n * Get authentication token.\n */\n login() {\n return this.zabbixAPICore.login(this.url, this.username, this.password, this.requestOptions);\n }\n\n /**\n * Get Zabbix API version\n */\n getVersion() {\n return this.zabbixAPICore.getVersion(this.url, this.requestOptions);\n }\n\n ////////////////////////////////\n // Zabbix API method wrappers //\n ////////////////////////////////\n\n acknowledgeEvent(eventid, message) {\n var params = {\n eventids: eventid,\n message: message\n };\n\n return this.request('event.acknowledge', params);\n }\n\n getGroups() {\n var params = {\n output: ['name'],\n sortfield: 'name',\n real_hosts: true\n };\n\n return this.request('hostgroup.get', params);\n }\n\n getHosts(groupids) {\n var params = {\n output: ['name', 'host'],\n sortfield: 'name'\n };\n if (groupids) {\n params.groupids = groupids;\n }\n\n return this.request('host.get', params);\n }\n\n getApps(hostids) {\n var params = {\n output: ['applicationid', 'name'],\n hostids: hostids\n };\n\n return this.request('application.get', params);\n }\n\n /**\n * Get Zabbix items\n * @param {[type]} hostids host ids\n * @param {[type]} appids application ids\n * @param {String} itemtype 'num' or 'text'\n * @return {[type]} array of items\n */\n getItems(hostids, appids, itemtype) {\n var params = {\n output: [\n 'name', 'key_',\n 'value_type',\n 'hostid',\n 'status',\n 'state'\n ],\n sortfield: 'name',\n webitems: true,\n filter: {},\n selectHosts: [\n 'hostid',\n 'name'\n ]\n };\n if (hostids) {\n params.hostids = hostids;\n }\n if (appids) {\n params.applicationids = appids;\n }\n if (itemtype === 'num') {\n // Return only numeric metrics\n params.filter.value_type = [0, 3];\n }\n if (itemtype === 'text') {\n // Return only text metrics\n params.filter.value_type = [1, 2, 4];\n }\n\n return this.request('item.get', params)\n .then(expandItems);\n\n function expandItems(items) {\n _.forEach(items, item => {\n item.item = item.name;\n item.name = utils.expandItemName(item.item, item.key_);\n return item;\n });\n return items;\n }\n }\n\n getMacros(hostids) {\n var params = {\n output: 'extend',\n hostids: hostids\n };\n\n return this.request('usermacro.get', params);\n }\n\n getGlobalMacros() {\n var params = {\n output: 'extend',\n globalmacro: true\n };\n\n return this.request('usermacro.get', params);\n }\n\n getLastValue(itemid) {\n var params = {\n output: ['lastvalue'],\n itemids: itemid\n };\n return this.request('item.get', params)\n .then(items => items.length ? items[0].lastvalue : null);\n }\n\n /**\n * Perform history query from Zabbix API\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} timeFrom Time in seconds\n * @param {Number} timeTill Time in seconds\n * @return {Array} Array of Zabbix history objects\n */\n getHistory(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n history: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('history.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n /**\n * Perform trends query from Zabbix API\n * Use trends api extension from ZBXNEXT-1193 patch.\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} time_from Time in seconds\n * @param {Number} time_till Time in seconds\n * @return {Array} Array of Zabbix trend objects\n */\n getTrend_ZBXNEXT1193(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n trend: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('trend.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n getTrend_30(items, time_from, time_till, value_type) {\n var self = this;\n var itemids = _.map(items, 'itemid');\n\n var params = {\n output: [\"itemid\",\n \"clock\",\n value_type\n ],\n itemids: itemids,\n time_from: time_from\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (time_till) {\n params.time_till = time_till;\n }\n\n return self.request('trend.get', params);\n }\n\n getITService(serviceids) {\n var params = {\n output: 'extend',\n serviceids: serviceids\n };\n return this.request('service.get', params);\n }\n\n getSLA(serviceids, timeFrom, timeTo) {\n var params = {\n serviceids: serviceids,\n intervals: [{\n from: timeFrom,\n to: timeTo\n }]\n };\n return this.request('service.getsla', params);\n }\n\n getTriggers(groupids, hostids, applicationids, showTriggers, hideHostsInMaintenance, timeFrom, timeTo) {\n var params = {\n output: 'extend',\n groupids: groupids,\n hostids: hostids,\n applicationids: applicationids,\n expandDescription: true,\n expandData: true,\n expandComment: true,\n monitored: true,\n skipDependent: true,\n //only_true: true,\n filter: {\n value: 1\n },\n selectGroups: ['name'],\n selectHosts: ['name', 'host'],\n selectItems: ['name', 'key_', 'lastvalue'],\n selectLastEvent: 'extend'\n };\n\n if (showTriggers) {\n params.filter.value = showTriggers;\n }\n\n if (hideHostsInMaintenance) {\n params.maintenance = false;\n }\n\n if (timeFrom || timeTo) {\n params.lastChangeSince = timeFrom;\n params.lastChangeTill = timeTo;\n }\n\n return this.request('trigger.get', params);\n }\n\n getEvents(objectids, timeFrom, timeTo, showEvents) {\n var params = {\n output: 'extend',\n time_from: timeFrom,\n time_till: timeTo,\n objectids: objectids,\n select_acknowledges: 'extend',\n selectHosts: 'extend',\n value: showEvents\n };\n\n return this.request('event.get', params);\n }\n\n getAcknowledges(eventids) {\n var params = {\n output: 'extend',\n eventids: eventids,\n preservekeys: true,\n select_acknowledges: 'extend',\n sortfield: 'clock',\n sortorder: 'DESC'\n };\n\n return this.request('event.get', params)\n .then(events => {\n return _.filter(events, (event) => event.acknowledges.length);\n });\n }\n\n }\n\n return ZabbixAPI;\n}\n\nfunction isNotAuthorized(message) {\n return (\n message === \"Session terminated, re-login, please.\" ||\n message === \"Not authorised.\" ||\n message === \"Not authorized.\"\n );\n}\n\nangular\n .module('grafana.services')\n .factory('zabbixAPIService', ZabbixAPIServiceFactory);\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/zabbixAPICore.service.js b/dist/datasource-zabbix/zabbixAPICore.service.js index 1391f8c..9e1c1f2 100644 --- a/dist/datasource-zabbix/zabbixAPICore.service.js +++ b/dist/datasource-zabbix/zabbixAPICore.service.js @@ -100,6 +100,8 @@ System.register(['angular'], function (_export, _context) { // Success return response.data.result; + }).catch(function () { + return Promise.reject(new ZabbixAPIError({ data: "Connection Error" })); }); } }, { diff --git a/dist/datasource-zabbix/zabbixAPICore.service.js.map b/dist/datasource-zabbix/zabbixAPICore.service.js.map index 042c8b7..9055cbe 100644 --- a/dist/datasource-zabbix/zabbixAPICore.service.js.map +++ b/dist/datasource-zabbix/zabbixAPICore.service.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/datasource-zabbix/zabbixAPICore.service.js"],"names":["angular","ZabbixAPICoreService","backendSrv","api_url","method","params","options","auth","requestData","jsonrpc","id","Promise","reject","ZabbixAPIError","data","requestOptions","url","headers","basicAuth","withCredentials","Authorization","datasourceRequest","then","response","error","result","username","password","user","request","code","name","message","module","service"],"mappings":";;;;;;;;;;;;;;;AAIOA,a;;;;;;;;;;;;;;;;;;;;;AAEDC,0B;;AAEJ;AACA,sCAAYC,UAAZ,EAAwB;AAAA;;AACtB,eAAKA,UAAL,GAAkBA,UAAlB;AACD;;AAED;;;;;;;;kCAIQC,O,EAASC,M,EAAQC,M,EAAQC,O,EAASC,I,EAAM;AAC9C,gBAAIC,cAAc;AAChBC,uBAAS,KADO;AAEhBL,sBAAQA,MAFQ;AAGhBC,sBAAQA,MAHQ;AAIhBK,kBAAI;AAJY,aAAlB;;AAOA,gBAAIH,SAAS,EAAb,EAAiB;AACf;AACA,qBAAOI,QAAQC,MAAR,CAAe,IAAIC,cAAJ,CAAmB,EAACC,MAAM,iBAAP,EAAnB,CAAf,CAAP;AACD,aAHD,MAGO,IAAIP,IAAJ,EAAU;AACf;AACAC,0BAAYD,IAAZ,GAAmBA,IAAnB;AACD;;AAED,gBAAIQ,iBAAiB;AACnBX,sBAAQ,MADW;AAEnBY,mBAAKb,OAFc;AAGnBW,oBAAMN,WAHa;AAInBS,uBAAS;AACP,gCAAgB;AADT;AAJU,aAArB;;AASA;AACA,gBAAIX,QAAQY,SAAR,IAAqBZ,QAAQa,eAAjC,EAAkD;AAChDJ,6BAAeI,eAAf,GAAiC,IAAjC;AACD;AACD,gBAAIb,QAAQY,SAAZ,EAAuB;AACrBH,6BAAeE,OAAf,CAAuBG,aAAvB,GAAuCd,QAAQY,SAA/C;AACD;;AAED,mBAAO,KAAKG,iBAAL,CAAuBN,cAAvB,CAAP;AACD;;;4CAEiBA,c,EAAgB;AAChC,mBAAO,KAAKb,UAAL,CAAgBmB,iBAAhB,CAAkCN,cAAlC,EACNO,IADM,CACD,oBAAY;AAChB,kBAAI,CAACC,SAAST,IAAd,EAAoB;AAClB,uBAAOH,QAAQC,MAAR,CAAe,IAAIC,cAAJ,CAAmB,EAACC,MAAM,wBAAP,EAAnB,CAAf,CAAP;AACD,eAFD,MAEO,IAAIS,SAAST,IAAT,CAAcU,KAAlB,EAAyB;;AAE9B;AACA,uBAAOb,QAAQC,MAAR,CAAe,IAAIC,cAAJ,CAAmBU,SAAST,IAAT,CAAcU,KAAjC,CAAf,CAAP;AACD;;AAED;AACA,qBAAOD,SAAST,IAAT,CAAcW,MAArB;AACD,aAZM,CAAP;AAaD;;;gCAMKtB,O,EAASuB,Q,EAAUC,Q,EAAUrB,O,EAAS;AAC1C,gBAAID,SAAS;AACXuB,oBAAMF,QADK;AAEXC,wBAAUA;AAFC,aAAb;AAIA,mBAAO,KAAKE,OAAL,CAAa1B,OAAb,EAAsB,YAAtB,EAAoCE,MAApC,EAA4CC,OAA5C,EAAqD,IAArD,CAAP;AACD;;;qCAMUH,O,EAASG,O,EAAS;AAC3B,mBAAO,KAAKuB,OAAL,CAAa1B,OAAb,EAAsB,iBAAtB,EAAyC,EAAzC,EAA6CG,OAA7C,CAAP;AACD;;;;;;gCAIUO,c;AACX,gCAAYW,KAAZ,EAAmB;AAAA;;AACjB,eAAKM,IAAL,GAAYN,MAAMM,IAAlB;AACA,eAAKC,IAAL,GAAYP,MAAMV,IAAlB;AACA,eAAKkB,OAAL,GAAeR,MAAMV,IAArB;AACA,eAAKA,IAAL,GAAYU,MAAMV,IAAlB;AACD;;;;qCAEU;AACT,mBAAO,KAAKiB,IAAL,GAAY,IAAZ,GAAmB,KAAKC,OAA/B;AACD;;;;;;;;AAGHhC,cACGiC,MADH,CACU,kBADV,EAEGC,OAFH,CAEW,sBAFX,EAEmCjC,oBAFnC","file":"zabbixAPICore.service.js","sourcesContent":["/**\n * General Zabbix API methods\n */\n\nimport angular from 'angular';\n\nclass ZabbixAPICoreService {\n\n /** @ngInject */\n constructor(backendSrv) {\n this.backendSrv = backendSrv;\n }\n\n /**\n * Request data from Zabbix API\n * @return {object} response.result\n */\n request(api_url, method, params, options, auth) {\n let requestData = {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: 1\n };\n\n if (auth === \"\") {\n // Reject immediately if not authenticated\n return Promise.reject(new ZabbixAPIError({data: \"Not authorised.\"}));\n } else if (auth) {\n // Set auth parameter only if it needed\n requestData.auth = auth;\n }\n\n let requestOptions = {\n method: 'POST',\n url: api_url,\n data: requestData,\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n\n // Set request options for basic auth\n if (options.basicAuth || options.withCredentials) {\n requestOptions.withCredentials = true;\n }\n if (options.basicAuth) {\n requestOptions.headers.Authorization = options.basicAuth;\n }\n\n return this.datasourceRequest(requestOptions);\n }\n\n datasourceRequest(requestOptions) {\n return this.backendSrv.datasourceRequest(requestOptions)\n .then(response => {\n if (!response.data) {\n return Promise.reject(new ZabbixAPIError({data: \"General Error, no data\"}));\n } else if (response.data.error) {\n\n // Handle Zabbix API errors\n return Promise.reject(new ZabbixAPIError(response.data.error));\n }\n\n // Success\n return response.data.result;\n });\n }\n\n /**\n * Get authentication token.\n * @return {string} auth token\n */\n login(api_url, username, password, options) {\n let params = {\n user: username,\n password: password\n };\n return this.request(api_url, 'user.login', params, options, null);\n }\n\n /**\n * Get Zabbix API version\n * Matches the version of Zabbix starting from Zabbix 2.0.4\n */\n getVersion(api_url, options) {\n return this.request(api_url, 'apiinfo.version', [], options);\n }\n}\n\n// Define zabbix API exception type\nexport class ZabbixAPIError {\n constructor(error) {\n this.code = error.code;\n this.name = error.data;\n this.message = error.data;\n this.data = error.data;\n }\n\n toString() {\n return this.name + \": \" + this.message;\n }\n}\n\nangular\n .module('grafana.services')\n .service('zabbixAPICoreService', ZabbixAPICoreService);\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/datasource-zabbix/zabbixAPICore.service.js"],"names":["angular","ZabbixAPICoreService","backendSrv","api_url","method","params","options","auth","requestData","jsonrpc","id","Promise","reject","ZabbixAPIError","data","requestOptions","url","headers","basicAuth","withCredentials","Authorization","datasourceRequest","then","response","error","result","catch","username","password","user","request","code","name","message","module","service"],"mappings":";;;;;;;;;;;;;;;AAIOA,a;;;;;;;;;;;;;;;;;;;;;AAEDC,0B;;AAEJ;AACA,sCAAYC,UAAZ,EAAwB;AAAA;;AACtB,eAAKA,UAAL,GAAkBA,UAAlB;AACD;;AAED;;;;;;;;kCAIQC,O,EAASC,M,EAAQC,M,EAAQC,O,EAASC,I,EAAM;AAC9C,gBAAIC,cAAc;AAChBC,uBAAS,KADO;AAEhBL,sBAAQA,MAFQ;AAGhBC,sBAAQA,MAHQ;AAIhBK,kBAAI;AAJY,aAAlB;;AAOA,gBAAIH,SAAS,EAAb,EAAiB;AACf;AACA,qBAAOI,QAAQC,MAAR,CAAe,IAAIC,cAAJ,CAAmB,EAACC,MAAM,iBAAP,EAAnB,CAAf,CAAP;AACD,aAHD,MAGO,IAAIP,IAAJ,EAAU;AACf;AACAC,0BAAYD,IAAZ,GAAmBA,IAAnB;AACD;;AAED,gBAAIQ,iBAAiB;AACnBX,sBAAQ,MADW;AAEnBY,mBAAKb,OAFc;AAGnBW,oBAAMN,WAHa;AAInBS,uBAAS;AACP,gCAAgB;AADT;AAJU,aAArB;;AASA;AACA,gBAAIX,QAAQY,SAAR,IAAqBZ,QAAQa,eAAjC,EAAkD;AAChDJ,6BAAeI,eAAf,GAAiC,IAAjC;AACD;AACD,gBAAIb,QAAQY,SAAZ,EAAuB;AACrBH,6BAAeE,OAAf,CAAuBG,aAAvB,GAAuCd,QAAQY,SAA/C;AACD;;AAED,mBAAO,KAAKG,iBAAL,CAAuBN,cAAvB,CAAP;AACD;;;4CAEiBA,c,EAAgB;AAChC,mBAAO,KAAKb,UAAL,CAAgBmB,iBAAhB,CAAkCN,cAAlC,EACNO,IADM,CACD,oBAAY;AAChB,kBAAI,CAACC,SAAST,IAAd,EAAoB;AAClB,uBAAOH,QAAQC,MAAR,CAAe,IAAIC,cAAJ,CAAmB,EAACC,MAAM,wBAAP,EAAnB,CAAf,CAAP;AACD,eAFD,MAEO,IAAIS,SAAST,IAAT,CAAcU,KAAlB,EAAyB;;AAE9B;AACA,uBAAOb,QAAQC,MAAR,CAAe,IAAIC,cAAJ,CAAmBU,SAAST,IAAT,CAAcU,KAAjC,CAAf,CAAP;AACD;;AAED;AACA,qBAAOD,SAAST,IAAT,CAAcW,MAArB;AACD,aAZM,EAaNC,KAbM,CAaA,YAAM;AACX,qBAAOf,QAAQC,MAAR,CAAe,IAAIC,cAAJ,CAAmB,EAACC,MAAM,kBAAP,EAAnB,CAAf,CAAP;AACD,aAfM,CAAP;AAgBD;;;gCAMKX,O,EAASwB,Q,EAAUC,Q,EAAUtB,O,EAAS;AAC1C,gBAAID,SAAS;AACXwB,oBAAMF,QADK;AAEXC,wBAAUA;AAFC,aAAb;AAIA,mBAAO,KAAKE,OAAL,CAAa3B,OAAb,EAAsB,YAAtB,EAAoCE,MAApC,EAA4CC,OAA5C,EAAqD,IAArD,CAAP;AACD;;;qCAMUH,O,EAASG,O,EAAS;AAC3B,mBAAO,KAAKwB,OAAL,CAAa3B,OAAb,EAAsB,iBAAtB,EAAyC,EAAzC,EAA6CG,OAA7C,CAAP;AACD;;;;;;gCAIUO,c;AACX,gCAAYW,KAAZ,EAAmB;AAAA;;AACjB,eAAKO,IAAL,GAAYP,MAAMO,IAAlB;AACA,eAAKC,IAAL,GAAYR,MAAMV,IAAlB;AACA,eAAKmB,OAAL,GAAeT,MAAMV,IAArB;AACA,eAAKA,IAAL,GAAYU,MAAMV,IAAlB;AACD;;;;qCAEU;AACT,mBAAO,KAAKkB,IAAL,GAAY,IAAZ,GAAmB,KAAKC,OAA/B;AACD;;;;;;;;AAGHjC,cACGkC,MADH,CACU,kBADV,EAEGC,OAFH,CAEW,sBAFX,EAEmClC,oBAFnC","file":"zabbixAPICore.service.js","sourcesContent":["/**\n * General Zabbix API methods\n */\n\nimport angular from 'angular';\n\nclass ZabbixAPICoreService {\n\n /** @ngInject */\n constructor(backendSrv) {\n this.backendSrv = backendSrv;\n }\n\n /**\n * Request data from Zabbix API\n * @return {object} response.result\n */\n request(api_url, method, params, options, auth) {\n let requestData = {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: 1\n };\n\n if (auth === \"\") {\n // Reject immediately if not authenticated\n return Promise.reject(new ZabbixAPIError({data: \"Not authorised.\"}));\n } else if (auth) {\n // Set auth parameter only if it needed\n requestData.auth = auth;\n }\n\n let requestOptions = {\n method: 'POST',\n url: api_url,\n data: requestData,\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n\n // Set request options for basic auth\n if (options.basicAuth || options.withCredentials) {\n requestOptions.withCredentials = true;\n }\n if (options.basicAuth) {\n requestOptions.headers.Authorization = options.basicAuth;\n }\n\n return this.datasourceRequest(requestOptions);\n }\n\n datasourceRequest(requestOptions) {\n return this.backendSrv.datasourceRequest(requestOptions)\n .then(response => {\n if (!response.data) {\n return Promise.reject(new ZabbixAPIError({data: \"General Error, no data\"}));\n } else if (response.data.error) {\n\n // Handle Zabbix API errors\n return Promise.reject(new ZabbixAPIError(response.data.error));\n }\n\n // Success\n return response.data.result;\n })\n .catch(() => {\n return Promise.reject(new ZabbixAPIError({data: \"Connection Error\"}));\n });\n }\n\n /**\n * Get authentication token.\n * @return {string} auth token\n */\n login(api_url, username, password, options) {\n let params = {\n user: username,\n password: password\n };\n return this.request(api_url, 'user.login', params, options, null);\n }\n\n /**\n * Get Zabbix API version\n * Matches the version of Zabbix starting from Zabbix 2.0.4\n */\n getVersion(api_url, options) {\n return this.request(api_url, 'apiinfo.version', [], options);\n }\n}\n\n// Define zabbix API exception type\nexport class ZabbixAPIError {\n constructor(error) {\n this.code = error.code;\n this.name = error.data;\n this.message = error.data;\n this.data = error.data;\n }\n\n toString() {\n return this.name + \": \" + this.message;\n }\n}\n\nangular\n .module('grafana.services')\n .service('zabbixAPICoreService', ZabbixAPICoreService);\n"]} \ No newline at end of file diff --git a/dist/test/datasource-zabbix/dataProcessor.js b/dist/test/datasource-zabbix/dataProcessor.js index 2ce1585..fc62f26 100644 --- a/dist/test/datasource-zabbix/dataProcessor.js +++ b/dist/test/datasource-zabbix/dataProcessor.js @@ -275,14 +275,14 @@ function findNearestLeft(series, point) { function timeShift(interval, range) { var shift = utils.parseTimeShiftInterval(interval) / 1000; - return range.map(function (time) { + return _lodash2.default.map(range, function (time) { return time - shift; }); } function unShiftTimeSeries(interval, datapoints) { var unshift = utils.parseTimeShiftInterval(interval); - return datapoints.map(function (dp) { + return _lodash2.default.map(datapoints, function (dp) { return [dp[0], dp[1] + unshift]; }); } diff --git a/dist/test/datasource-zabbix/datasource.js b/dist/test/datasource-zabbix/datasource.js index 96f99d9..111d962 100644 --- a/dist/test/datasource-zabbix/datasource.js +++ b/dist/test/datasource-zabbix/datasource.js @@ -186,6 +186,9 @@ var ZabbixAPIDatasource = function () { return getHistoryPromise.then(function (timeseries_data) { return _this2.applyDataProcessingFunctions(timeseries_data, target); }); + }).catch(function (error) { + console.log(error); + return []; }); } }, { @@ -460,7 +463,7 @@ var ZabbixAPIDatasource = function () { var _this7 = this; var parts = ['group', 'host', 'application', 'item']; - parts.forEach(function (p) { + _lodash2.default.forEach(parts, function (p) { if (target[p] && target[p].filter) { target[p].filter = _this7.replaceTemplateVars(target[p].filter, options.scopedVars); } @@ -468,7 +471,7 @@ var ZabbixAPIDatasource = function () { target.textFilter = this.replaceTemplateVars(target.textFilter, options.scopedVars); _lodash2.default.forEach(target.functions, function (func) { - func.params = func.params.map(function (param) { + func.params = _lodash2.default.map(func.params, function (param) { if (typeof param === 'number') { return +_this7.templateSrv.replace(param.toString(), options.scopedVars); } else { diff --git a/dist/test/datasource-zabbix/zabbixAPI.service.js b/dist/test/datasource-zabbix/zabbixAPI.service.js index 86e5644..550d453 100644 --- a/dist/test/datasource-zabbix/zabbixAPI.service.js +++ b/dist/test/datasource-zabbix/zabbixAPI.service.js @@ -218,7 +218,7 @@ function ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) { return this.request('item.get', params).then(expandItems); function expandItems(items) { - items.forEach(function (item) { + _lodash2.default.forEach(items, function (item) { item.item = item.name; item.name = utils.expandItemName(item.item, item.key_); return item; diff --git a/dist/test/datasource-zabbix/zabbixAPICore.service.js b/dist/test/datasource-zabbix/zabbixAPICore.service.js index 075f149..865431a 100644 --- a/dist/test/datasource-zabbix/zabbixAPICore.service.js +++ b/dist/test/datasource-zabbix/zabbixAPICore.service.js @@ -83,6 +83,8 @@ var ZabbixAPICoreService = function () { // Success return response.data.result; + }).catch(function () { + return Promise.reject(new ZabbixAPIError({ data: "Connection Error" })); }); } diff --git a/src/datasource-zabbix/dataProcessor.js b/src/datasource-zabbix/dataProcessor.js index 7551ae7..9c3e1d1 100644 --- a/src/datasource-zabbix/dataProcessor.js +++ b/src/datasource-zabbix/dataProcessor.js @@ -265,14 +265,14 @@ function findNearestLeft(series, point) { function timeShift(interval, range) { let shift = utils.parseTimeShiftInterval(interval) / 1000; - return range.map(time => { + return _.map(range, time => { return time - shift; }); } function unShiftTimeSeries(interval, datapoints) { let unshift = utils.parseTimeShiftInterval(interval); - return datapoints.map(dp => { + return _.map(datapoints, dp => { return [ dp[0], dp[1] + unshift diff --git a/src/datasource-zabbix/datasource.js b/src/datasource-zabbix/datasource.js index 36d35ee..95f1c75 100644 --- a/src/datasource-zabbix/datasource.js +++ b/src/datasource-zabbix/datasource.js @@ -137,6 +137,10 @@ class ZabbixAPIDatasource { return getHistoryPromise.then(timeseries_data => { return this.applyDataProcessingFunctions(timeseries_data, target); }); + }) + .catch(error => { + console.log(error); + return []; }); } @@ -393,7 +397,7 @@ class ZabbixAPIDatasource { // Replace template variables replaceTargetVariables(target, options) { let parts = ['group', 'host', 'application', 'item']; - parts.forEach(p => { + _.forEach(parts, p => { if (target[p] && target[p].filter) { target[p].filter = this.replaceTemplateVars(target[p].filter, options.scopedVars); } @@ -401,7 +405,7 @@ class ZabbixAPIDatasource { target.textFilter = this.replaceTemplateVars(target.textFilter, options.scopedVars); _.forEach(target.functions, func => { - func.params = func.params.map(param => { + func.params = _.map(func.params, param => { if (typeof param === 'number') { return +this.templateSrv.replace(param.toString(), options.scopedVars); } else { diff --git a/src/datasource-zabbix/zabbixAPI.service.js b/src/datasource-zabbix/zabbixAPI.service.js index 4701a32..d793999 100644 --- a/src/datasource-zabbix/zabbixAPI.service.js +++ b/src/datasource-zabbix/zabbixAPI.service.js @@ -189,7 +189,7 @@ function ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) { .then(expandItems); function expandItems(items) { - items.forEach(item => { + _.forEach(items, item => { item.item = item.name; item.name = utils.expandItemName(item.item, item.key_); return item; diff --git a/src/datasource-zabbix/zabbixAPICore.service.js b/src/datasource-zabbix/zabbixAPICore.service.js index 4ab33c1..c570585 100644 --- a/src/datasource-zabbix/zabbixAPICore.service.js +++ b/src/datasource-zabbix/zabbixAPICore.service.js @@ -64,6 +64,9 @@ class ZabbixAPICoreService { // Success return response.data.result; + }) + .catch(() => { + return Promise.reject(new ZabbixAPIError({data: "Connection Error"})); }); }