Skip to content

Commit

Permalink
account for text node situations
Browse files Browse the repository at this point in the history
  • Loading branch information
Steve Conover committed May 30, 2011
1 parent d07f433 commit f857d17
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 20 deletions.
46 changes: 29 additions & 17 deletions lib/splunk-socket/search/job.js
Expand Up @@ -6,8 +6,8 @@ function extend(toExtend, other) {
} }


function dictToJsObject(dictElement) { function dictToJsObject(dictElement) {
var obj = {} var obj = {},
var children = dictElement.childNodes() children = dictElement.childNodes()
for (var i=0; i<children.length; i++) { for (var i=0; i<children.length; i++) {
var child = children[i] var child = children[i]
if (child.name()=='key') { if (child.name()=='key') {
Expand All @@ -18,14 +18,33 @@ function dictToJsObject(dictElement) {
return obj return obj
} }


function childElements(parent) {
var elements = []
var children = parent.childNodes()
for (var i=0; i<children.length; i++) {
if (children[i].name() != 'text') elements.push(children[i])
}
return elements
}

function firstElementChild(parent) {
var elements = childElements(parent)
if (elements.length>=1) {
return elements[0]
} else {
return parent.child(0)
}
}

function valueOf(element) { function valueOf(element) {
if (element.child(0) === null) { var firstChild = firstElementChild(element)
if (firstChild === null) {
return null return null
} else if (element.child(0).name()=='dict') { } else if (firstChild.name()=='dict') {
return dictToJsObject(element.child(0)) return dictToJsObject(firstChild)
} else if (element.child(0).name()=='list') { } else if (firstChild.name()=='list') {
var items = [] var items = [],
var list = element.child(0).childNodes() list = childElements(firstChild)
for (var i=0; i<list.length; i++) items.push(valueOf(list[i])) for (var i=0; i<list.length; i++) items.push(valueOf(list[i]))
return items return items
} else { } else {
Expand All @@ -50,11 +69,7 @@ module.exports = function(apiClient, requestInfo) {
//see http://splunk-base.splunk.com/answers/24551/structured-fields-and-values-in-json-api-results //see http://splunk-base.splunk.com/answers/24551/structured-fields-and-values-in-json-api-results
} }
for (var k in requestInfo) { for (var k in requestInfo) {
if (requestInfo[k].push) { searchOptions[k] = requestInfo[k].push ? requestInfo[k].join(',') : requestInfo[k]
searchOptions[k] = requestInfo[k].join(',')
} else {
searchOptions[k] = requestInfo[k]
}
} }
searchOptions.search = 'search ' + requestInfo.search searchOptions.search = 'search ' + requestInfo.search
apiClient.post( apiClient.post(
Expand All @@ -73,10 +88,7 @@ module.exports = function(apiClient, requestInfo) {
this.getJobStatus = function(statusCallback) { this.getJobStatus = function(statusCallback) {
apiClient.get( apiClient.get(
'/services/search/jobs/' + this._jobId, '/services/search/jobs/' + this._jobId,
function(responseBodyXml) { function(responseBodyXml) { statusCallback(parseStatus(responseBodyXml)) })
var status = parseStatus(responseBodyXml)
statusCallback(status)
})
} }


this.checkWhetherWeHaveAllResults = function(resultsOffset, callback) { this.checkWhetherWeHaveAllResults = function(resultsOffset, callback) {
Expand Down
7 changes: 4 additions & 3 deletions spec/search/job_spec.js
Expand Up @@ -123,21 +123,22 @@ describe('splunk search job', function(){
}) })
}) })


it('parses sub dicts and lists (integration)', function(){ it('parses sub dicts and lists (integration, with text elements)', function(){
var status = Job.parseStatus( var status = Job.parseStatus(
'<foo xmlns:s="http://dev.splunk.com/ns/rest">' + '<foo xmlns:s="http://dev.splunk.com/ns/rest">' +
'<s:dict>' + '<s:dict>' +
'<s:key name="messages">' + '<s:key name="messages">' +
' ' +
'<s:dict>' + '<s:dict>' +
'<s:key name="fatal">' + '<s:key name="fatal">' +
'<s:list>' + '<s:list>' +
'<s:item>Something fatal</s:item>' + '<s:item>Something fatal</s:item>' +
'</s:list>' + '</s:list>' +
'</s:key>' + '</s:key>' +
'<s:key name="error">' + '<s:key name="error">' +
'<s:list>' + '<s:list> ' +
'<s:item>Some error</s:item>' + '<s:item>Some error</s:item>' +
'</s:list>' + ' </s:list>' +
'</s:key>' + '</s:key>' +
'</s:dict>' + '</s:dict>' +
'</s:key>' + '</s:key>' +
Expand Down

0 comments on commit f857d17

Please sign in to comment.