realtime polling
diff --git a/xos-apps/auto-scale/gui/src/js/autoscaling.service.js b/xos-apps/auto-scale/gui/src/js/autoscaling.service.js
index 15b9118..5af613d 100644
--- a/xos-apps/auto-scale/gui/src/js/autoscaling.service.js
+++ b/xos-apps/auto-scale/gui/src/js/autoscaling.service.js
@@ -32,12 +32,15 @@
};
this.getAutoscalingData = () => {
- // pollinginterval = $interval(() => {
- // $http.get('/autoscaledata')
- $http.get('../mocks/mock.json')
+ $http.get('/autoscaledata')
+ .success((res) => {
+ $rootScope.$emit('autoscaling.update', this.formatData(res));
+ });
+ pollinginterval = $interval(() => {
+ $http.get('/autoscaledata')
.success((res) => {
$rootScope.$emit('autoscaling.update', this.formatData(res));
});
- // }, pollingFrequency * 1000)
+ }, pollingFrequency * 1000)
};
});
\ No newline at end of file
diff --git a/xos-apps/auto-scale/gui/src/js/autoscaling_details.directive.js b/xos-apps/auto-scale/gui/src/js/autoscaling_details.directive.js
index f35508a..109e743 100644
--- a/xos-apps/auto-scale/gui/src/js/autoscaling_details.directive.js
+++ b/xos-apps/auto-scale/gui/src/js/autoscaling_details.directive.js
@@ -15,7 +15,6 @@
/**
* Group resources by service and slice
*/
-
this.printData = (data) => {
this.services = lodash.groupBy(data, 'service');
lodash.forEach(Object.keys(this.services), (service) => {
@@ -33,8 +32,87 @@
})
});
- console.log(this.services);
+ // arbitrary set the first service in the list as the selected one
+ this.selectedService = this.services[Object.keys(this.services)[0]];
};
}
};
+})
+.directive('serviceDetail', function(lodash){
+ return {
+ restrict: 'E',
+ scope: {
+ service: '=service'
+ },
+ bindToController: true,
+ controllerAs: 'vm',
+ templateUrl: 'templates/service-detail.tpl.html',
+ controller: function($scope) {
+
+ }
+ };
+})
+.directive('sliceDetail', function(lodash){
+ return {
+ restrict: 'E',
+ scope: {
+ instances: '=instances'
+ },
+ bindToController: true,
+ controllerAs: 'vm',
+ templateUrl: 'templates/slice-detail.tpl.html',
+ controller: function($scope) {
+
+ this.chart = {};
+
+ /**
+ * Goes trough the array and format date to be used as labels
+ *
+ * @param Array data
+ * @returns Array a list of labels
+ */
+
+ this.getLabels = (data) => {
+ return data.reduce((list, item) => {
+ let date = new Date(item.timestamp);
+ list.push(`${date.getHours()}:${(date.getMinutes()<10?'0':'') + date.getMinutes()}:${date.getSeconds()}`);
+ return list;
+ }, []);
+ };
+
+ /**
+ * Convert an object of array,
+ * in an array of arrays of values
+ */
+ this.getData = (data, instanceNames) => {
+ return lodash.map(instanceNames, (item) => {
+ return lodash.reduce(data[item], (list, sample) => {
+ // console.log(data[item], sample);
+ list.push(sample.counter_volume);
+ return list;
+ }, []);
+ });
+ };
+
+ this.drawChart = (data) => {
+
+ const instanceNames = Object.keys(data);
+
+ this.chart.labels = this.getLabels(data[instanceNames[0]]);
+ this.chart.series = instanceNames;
+ this.chart.data = this.getData(data, instanceNames);
+
+ console.log(this.getData(data, instanceNames));
+ }
+
+ $scope.$watch(() => this.instances, (val) => {this.drawChart(val)})
+
+ }
+ };
});
+
+// TODO
+// [x] repeat service name in a menu
+// [x] create a directive that receive a service
+// [ ] print a chart for every slice
+// [ ] print a line in the chart for every instance
\ No newline at end of file