Skip to content

Commit e30bb49

Browse files
committed
Merge pull request #40 from DanCunnington/master
workaround for get collection info bug in node sdk
2 parents 124286b + 3209d36 commit e30bb49

2 files changed

Lines changed: 58 additions & 40 deletions

File tree

services/retrieve_and_rank/v1.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,10 @@
321321
</script>
322322

323323
<script type="text/x-red" data-help-name="watson-retrieve-rank-create-cluster">
324-
324+
<p>The IBM Watson™ Retrieve and Rank service combines two information retrieval components in a single service: the power of Apache Solr and a sophisticated machine learning capability. This combination provides users with more relevant results by automatically reranking them by using these machine learning algorithms.</p>
325+
<p>The create cluster node provisions a Solr cluster. You can specify the <b>size</b> of the cluster in the node configuration panel. For a small free cluster for testing choose the Free option. For more information about cluster sizing, see <a href="http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/retrieve-rank/solr_ops.shtml#sizing">Sizing your Retrieve and Rank cluster</a>. A <b>cluster name</b> can also be specified in the node configuration panel.</p>
326+
<p>The cluster will then be created. This takes a short while to complete. When the cluster is available, the status underneath the node will change to <b>“Cluster available”</b>.</p>
327+
<p>For more information about the Retrieve and Rank service, read the <a href="https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/retrieve-rank.html">documentation</a>.</p>
325328
</script>
326329

327330
<script type="text/javascript">

services/retrieve_and_rank/v1.js

Lines changed: 54 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ module.exports = function (RED) {
1919
var fs = require('fs');
2020
var temp = require('temp');
2121
var qs = require('qs');
22+
var request = require('request');
23+
var fileType = require('file-type');
2224
var watson = require('watson-developer-cloud');
2325
temp.track();
2426

@@ -52,41 +54,36 @@ module.exports = function (RED) {
5254
var params = {
5355
training_data: training_data
5456
};
57+
console.log(training_data);
5558

5659
if (config.rankername) {
5760
params.training_metadata = "{\"name\": \""+config.rankername+"\"}";
5861
}
5962
node.status({fill:"blue",shape:"ring",text:"Uploading training data"});
6063
retrieve_and_rank.createRanker(params, function(err, res) {
61-
if (err) {
62-
node.status({});
63-
var message = "";
64-
(err.error) ? message = err.error : message = err.message;
65-
return node.error(message, msg);
66-
}
67-
node.status({fill:"blue",shape:"ring",text:"Training data uploaded. Ranker is training"});
6864
handleWatsonCallback(null,node,msg,err,res,function() {
65+
node.status({fill:"blue",shape:"ring",text:"Training data uploaded. Ranker is training"});
6966
//Now check the status of the ranker
7067
var ranker_id = res.ranker_id;
7168
checkRankerStatus(retrieve_and_rank,msg,node,ranker_id);
7269
});;
7370
});
7471
}
75-
72+
createRanker(msg.payload);
7673
//csv training file comes in on msg.payload as a buffer
77-
var stream_buffer = function (file, contents, cb) {
78-
fs.writeFile(file, contents, function (err) {
79-
if (err) throw err;
80-
cb();
81-
});
82-
};
83-
84-
temp.open({suffix: '.training'}, function (err, info) {
85-
if (err) throw err;
86-
stream_buffer(info.path, msg.payload, function () {
87-
createRanker(fs.createReadStream(info.path), temp.cleanup);
88-
});
89-
});
74+
// var stream_buffer = function (file, contents, cb) {
75+
// fs.writeFile(file, contents, function (err) {
76+
// if (err) throw err;
77+
// cb();
78+
// });
79+
// };
80+
81+
// temp.open({suffix: '.csv'}, function (err, info) {
82+
// if (err) throw err;
83+
// stream_buffer(info.path, msg.payload, function () {
84+
// createRanker(fs.createReadStream(info.path), temp.cleanup);
85+
// });
86+
// });
9087
});
9188
});
9289
}
@@ -289,24 +286,35 @@ module.exports = function (RED) {
289286
break;
290287
case 'info':
291288
if (params.cluster_id && params.config_name) {
292-
// retrieve_and_rank.getConfig(params, function(err,res) {
293-
// console.log("HELLO LADS GET CONFIG BACK");
294-
// console.log(err);
295-
// console.log(res);
296-
// });
297-
var configZipResponse = "hello world";
298-
console.log("***********");
299-
console.log(configZipResponse);
300-
//Pass on response to payload as buffer
301-
if (typeof(configZipResponse) == 'Buffer') {
302-
handleWatsonCallback(null,node,msg,null,configZipResponse);
303-
} else {
304-
var error = {
305-
message: "No configuration recieved from the rank and retrieve service"
306-
}
307-
handleWatsonCallback(null,node,msg,error,null);
289+
290+
//Note. temporary workaround until bug is fixed in Node SDK
291+
//Stream zip file from watson api to temp directory,
292+
//read from temp directory and pass on in msg.payload as buffer
293+
var url = "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/"+params.cluster_id+"/config/"+params.config_name;
294+
var sendToPayload = function(zipFile, cb) {
295+
msg.payload = zipFile;
296+
node.send(msg);
297+
if (cb) cb();
308298
}
309-
299+
300+
var stream_url = function (file, location, cb) {
301+
var wstream = fs.createWriteStream(file);
302+
wstream.on('finish', function () {
303+
fs.readFile(file, function (err, buf) {
304+
if (err) console.error(err);
305+
cb(buf);
306+
})
307+
});
308+
request(location).auth(username,password)
309+
.pipe(wstream);
310+
};
311+
312+
temp.open({suffix: '.zip'}, function (err, info) {
313+
if (err) throw err;
314+
stream_url(info.path, url, function (content) {
315+
sendToPayload(content, temp.cleanup);
316+
});
317+
});
310318
} else {
311319
var message = 'Missing cluster id or config name';
312320
node.error(message, msg)
@@ -489,7 +497,14 @@ module.exports = function (RED) {
489497
function handleWatsonCallback(mode,node,msg,err,res,cb) {
490498
if (err) {
491499
var message = "";
492-
(err.error) ? message = err.error : message = err.message;
500+
if (err.description) {
501+
message = err.description;
502+
} else if (err.message) {
503+
message = err.message;
504+
} else if (err.error) {
505+
message = err.error;
506+
}
507+
node.status({});
493508
return node.error(message, msg);
494509
} else {
495510
(mode == 'delete' && Object.keys(res).length == 0) ? msg.payload = "Ranker deleted" : msg.payload = res;

0 commit comments

Comments
 (0)