raylu 11 лет назад
Родитель
Сommit
d72048763f
2 измененных файлов с 33 добавлено и 3 удалено
  1. 17 0
      api/sysvitals_api.py
  2. 16 3
      web/static/js/stats.js

+ 17 - 0
api/sysvitals_api.py

@@ -36,6 +36,7 @@ def main():
 	server = gevent.pywsgi.WSGIServer(('0.0.0.0', config.api_port), application)
 	if config.debug:
 		reloader.init(server)
+	print 'listening on', config.api_port
 	server.serve_forever()
 
 class HTTPException(Exception):
@@ -193,6 +194,22 @@ def get_stats(split, query, environ):
 				for subfield, array in field_data.iteritems():
 					stats[field].setdefault(subfield, {})
 					stats[field][subfield][date] = average(array, interval)
+			elif field == 'disk':
+				field_data = {}
+				for mountpoint, disk_sfs in subfields.items():
+					used_key = mountpoint + '_used'
+					free_key = mountpoint + '_free'
+					field_data[used_key] = [None] * 1440
+					field_data[free_key] = [None] * 1440
+					for i in xrange(1440):
+						if disk_sfs['total'][i] == -1:
+							continue
+						used = disk_sfs['used'][i]
+						field_data[used_key][i] = used
+						field_data[free_key][i] = disk_sfs['total'][i] - used
+				for subfield, array in field_data.iteritems():
+					stats[field].setdefault(subfield, {})
+					stats[field][subfield][date] = average(array, interval)
 	return stats
 
 def post_datum(split, query, environ):

+ 16 - 3
web/static/js/stats.js

@@ -45,8 +45,6 @@ window.addEvent('domready', function() {
 			'url': url + '?start=' + start + '&end=' + end + '&interval=' + interval,
 			'onSuccess': function(data) {
 				Object.each(data, function(subfields, field) {
-					if (field == 'disk')
-						return;
 					graph_stat(field, subfields, interval);
 				});
 			},
@@ -97,8 +95,23 @@ window.addEvent('domready', function() {
 		],
 	};
 	function graph_stat(field, subfields, interval) {
+		var subfield_metas = colors[field];
+		if (field == 'disk') {
+			var subfield_names = Object.keys(subfields);
+			subfield_names.sort(function(a, b) { // reverse sort
+				if (a > b) return -1;
+				if (a < b) return 1;
+				return 0;
+			});
+			subfield_metas = subfield_names.map(function(subfield) {
+				if (subfield.substr(-5) == '_used')
+					return [subfield, '#a33'];
+				else
+					return [subfield, '#3a3'];
+			});
+		}
 		var series = [];
-		colors[field].each(function(subfield_meta) {
+		subfield_metas.each(function(subfield_meta) {
 			var subfield = subfield_meta[0];
 			var color = subfield_meta[1];
 			var days = Object.keys(subfields[subfield]).sort();