forked from pwmcintyre/splunk-tester
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelper.js
88 lines (67 loc) · 1.83 KB
/
helper.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
var splunkjs = require('splunk-sdk');
var config = require('config');
var handlebars = require('handlebars');
var util = require("util");
var splunkConfig = config.get('splunk');
// console.log("Loaded conf", process.env.NODE_ENV);
var service = new splunkjs.Service(splunkConfig);
// console.log("Splunk service", service);
// simply applies
var apply = function (template, parms) {
var compiled = handlebars.compile(template);
var result = compiled(parms);
return result;
}
// given a result object, returns a more usable json
// (probably not great for large results)
function mapToJson (results) {
var newResults = [];
var fields = results.fields;
var rows = results.rows;
for(var i = 0; rows && i < rows.length; i++) {
var values = rows[i];
var newRow = {};
for(var j = 0; j < values.length; j++) {
var field = fields[j];
var value = values[j];
newRow[field] = value;
}
newResults.push(newRow);
}
return newResults;
}
// run search, poll job, return results
var search = function (query, parms) {
var promise = new Promise(function (resolve, reject) {
service.search( query, parms, function(err, job) {
// error scenarios
if (err) return reject(err);
if (job === undefined) return reject('Unable to create job');
// Poll the status of the search job
job.track({period: 200}, {
done: function(job) {
// Get the results and return
job.results({}, function(err,results,job){
// error
if (err) return reject(err);
// success
return resolve({job:job,results:results});
});
},
failed: function(job) {
return reject('failed');
},
error: function(err) {
return reject(err);
}
});
});
});
return promise;
};
var exports = module.exports = {
service: service,
apply: apply,
search: search,
toJson: mapToJson
};