对 Elasticsearch 数据的 Restangular 调用
Restangular call for Elasticsearch data
我正在尝试使用 restangular api 从 elasticsearch rest 调用中捕获特定数据。我已经尝试了几种不同的方法(包括尝试使用 addResponseInterceptor)。要么我没有正确地做,要么我不明白 how/if 数据的格式可以被 API.
处理
我正在进行的 elasticsearch 调用是“_stats/index,store”。它返回的数据是:
{
"_shards": {
"total": 12,
"successful": 6,
"failed": 0
},
"_all": {
"primaries": {
"store": {
"size_in_bytes": 34177,
"throttle_time_in_millis": 0
}
},
"total": {
"store": {
"size_in_bytes": 34177,
"throttle_time_in_millis": 0
}
}
},
"indices": {
"logstash-2015.05.09": {
"primaries": {
"store": {
"size_in_bytes": 575,
"throttle_time_in_millis": 0
}
},
"total": {
"store": {
"size_in_bytes": 575,
"throttle_time_in_millis": 0
}
}
},
".kibana": {
"primaries": {
"store": {
"size_in_bytes": 33602,
"throttle_time_in_millis": 0
}
},
"total": {
"store": {
"size_in_bytes": 33602,
"throttle_time_in_millis": 0
}
}
}
}
}
我感兴趣的数据是每一个指标。任何有关如何使用 restangular api 捕获它的帮助将不胜感激。
我尝试使用以下方法通过 restangular api:
获取数据
app.controller('MainController', ['$scope', 'Restangular',
function($scope, Restangular) {
var restCall = Restangular.all('_stats/index,store');
var allData = restCall.get();
var allData2 = restCall.getList();
}]);
get 和 getList 因不同的错误而失败。
得到returns:
类型错误:无法读取未定义的 属性 'toString'
获取列表returns:
错误:getList 的响应应该是数组而不是对象或其他东西
谢谢你,格雷格
Restangular 使用承诺。可以尝试这样做:
app.controller('MainController', ['$scope', 'Restangular',
function($scope, Restangular) {
Restangular.all('_stats/index,store').getList().then(function(response) {
$scope.indices = response.getList("indices");
});
}
]);
然而,由于 Restangular 的 getList()
调用期望响应包含一个 JSON 数组,而 Elasticsearch 响应是一个普通的 JSON 对象(即其中没有任何数组),我们需要告诉 Restangular 在响应中在哪里找到数组。由于有 none 我们可以拦截响应并自己构建一个 using addResponseInterceptor
.
app.config(function(RestangularProvider) {
// add a response intereceptor
RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
var extractedData;
if (operation === "getList" && what === "indices") {
extractedData = {indices: Object.keys(data.indices)};
// now we have an array called "indices" with the index names "logstash-2015.05.09" and ".kibana" in it
} else {
extractedData = data.data;
}
return extractedData;
});
});
我正在尝试使用 restangular api 从 elasticsearch rest 调用中捕获特定数据。我已经尝试了几种不同的方法(包括尝试使用 addResponseInterceptor)。要么我没有正确地做,要么我不明白 how/if 数据的格式可以被 API.
处理我正在进行的 elasticsearch 调用是“_stats/index,store”。它返回的数据是:
{
"_shards": {
"total": 12,
"successful": 6,
"failed": 0
},
"_all": {
"primaries": {
"store": {
"size_in_bytes": 34177,
"throttle_time_in_millis": 0
}
},
"total": {
"store": {
"size_in_bytes": 34177,
"throttle_time_in_millis": 0
}
}
},
"indices": {
"logstash-2015.05.09": {
"primaries": {
"store": {
"size_in_bytes": 575,
"throttle_time_in_millis": 0
}
},
"total": {
"store": {
"size_in_bytes": 575,
"throttle_time_in_millis": 0
}
}
},
".kibana": {
"primaries": {
"store": {
"size_in_bytes": 33602,
"throttle_time_in_millis": 0
}
},
"total": {
"store": {
"size_in_bytes": 33602,
"throttle_time_in_millis": 0
}
}
}
}
}
我感兴趣的数据是每一个指标。任何有关如何使用 restangular api 捕获它的帮助将不胜感激。
我尝试使用以下方法通过 restangular api:
获取数据app.controller('MainController', ['$scope', 'Restangular',
function($scope, Restangular) {
var restCall = Restangular.all('_stats/index,store');
var allData = restCall.get();
var allData2 = restCall.getList();
}]);
get 和 getList 因不同的错误而失败。
得到returns: 类型错误:无法读取未定义的 属性 'toString'
获取列表returns: 错误:getList 的响应应该是数组而不是对象或其他东西
谢谢你,格雷格
Restangular 使用承诺。可以尝试这样做:
app.controller('MainController', ['$scope', 'Restangular',
function($scope, Restangular) {
Restangular.all('_stats/index,store').getList().then(function(response) {
$scope.indices = response.getList("indices");
});
}
]);
然而,由于 Restangular 的 getList()
调用期望响应包含一个 JSON 数组,而 Elasticsearch 响应是一个普通的 JSON 对象(即其中没有任何数组),我们需要告诉 Restangular 在响应中在哪里找到数组。由于有 none 我们可以拦截响应并自己构建一个 using addResponseInterceptor
.
app.config(function(RestangularProvider) {
// add a response intereceptor
RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
var extractedData;
if (operation === "getList" && what === "indices") {
extractedData = {indices: Object.keys(data.indices)};
// now we have an array called "indices" with the index names "logstash-2015.05.09" and ".kibana" in it
} else {
extractedData = data.data;
}
return extractedData;
});
});