diff --git a/manage.py b/manage.py
index 6f0b1d77b..1e484c945 100755
--- a/manage.py
+++ b/manage.py
@@ -2,12 +2,15 @@
"""
CLI to manage redash.
"""
+import json
+
from flask.ext.script import Manager
from redash import settings, models, __version__
from redash.wsgi import app
from redash.import_export import import_manager
from redash.cli import users, database, data_sources
+from redash.monitor import get_status
manager = Manager(app)
manager.add_command("database", database.manager)
@@ -21,6 +24,9 @@ def version():
"""Displays re:dash version."""
print __version__
+@manager.command
+def status():
+ print json.dumps(get_status(), indent=2)
@manager.command
def runworkers():
diff --git a/rd_ui/app/scripts/visualizations/chart.js b/rd_ui/app/scripts/visualizations/chart.js
index 440c3ce2d..4d5f674f9 100644
--- a/rd_ui/app/scripts/visualizations/chart.js
+++ b/rd_ui/app/scripts/visualizations/chart.js
@@ -163,7 +163,7 @@
scope.visualization.options.seriesOptions[s] = {'type': scope.visualization.options.globalSeriesType, 'yAxis': 0};
}
scope.visualization.options.seriesOptions[s].zIndex = scope.visualization.options.seriesOptions[s].zIndex === undefined ? i : scope.visualization.options.seriesOptions[s].zIndex;
-
+ scope.visualization.options.seriesOptions[s].index = scope.visualization.options.seriesOptions[s].index === undefined ? i : scope.visualization.options.seriesOptions[s].index;
});
scope.zIndexes = _.range(scope.series.length);
scope.yAxes = [[0, 'left'], [1, 'right']];
diff --git a/rd_ui/app/views/visualizations/chart_editor.html b/rd_ui/app/views/visualizations/chart_editor.html
index 4e2b62420..f3f2bfdf1 100644
--- a/rd_ui/app/views/visualizations/chart_editor.html
+++ b/rd_ui/app/views/visualizations/chart_editor.html
@@ -108,6 +108,15 @@
class="form-control">
+
diff --git a/redash/controllers.py b/redash/controllers.py
index ca3096d99..93060560a 100644
--- a/redash/controllers.py
+++ b/redash/controllers.py
@@ -23,6 +23,7 @@ from redash.tasks import QueryTask, record_event
from redash.cache import headers as cache_headers
from redash.permissions import require_permission
from redash.query_runner import query_runners, validate_configuration
+from redash.monitor import get_status
@app.route('/ping', methods=['GET'])
@@ -98,34 +99,7 @@ def logout():
@auth.required
@require_permission('admin')
def status_api():
- status = {}
- info = redis_connection.info()
- status['redis_used_memory'] = info['used_memory_human']
- status['version'] = __version__
- status['queries_count'] = models.Query.select().count()
- status['query_results_count'] = models.QueryResult.select().count()
- status['unused_query_results_count'] = models.QueryResult.unused().count()
- status['dashboards_count'] = models.Dashboard.select().count()
- status['widgets_count'] = models.Widget.select().count()
-
- status['workers'] = []
-
- manager_status = redis_connection.hgetall('redash:status')
- status['manager'] = manager_status
- status['manager']['outdated_queries_count'] = len(models.Query.outdated_queries())
-
- queues = {}
- for ds in models.DataSource.select():
- for queue in (ds.queue_name, ds.scheduled_queue_name):
- queues.setdefault(queue, set())
- queues[queue].add(ds.name)
-
- status['manager']['queues'] = {}
- for queue, sources in queues.iteritems():
- status['manager']['queues'][queue] = {
- 'data_sources': ', '.join(sources),
- 'size': redis_connection.llen(queue)
- }
+ status = get_status()
return jsonify(status)
diff --git a/redash/monitor.py b/redash/monitor.py
new file mode 100644
index 000000000..27726b35a
--- /dev/null
+++ b/redash/monitor.py
@@ -0,0 +1,33 @@
+from redash import redis_connection, models, __version__
+
+def get_status():
+ status = {}
+ info = redis_connection.info()
+ status['redis_used_memory'] = info['used_memory_human']
+ status['version'] = __version__
+ status['queries_count'] = models.Query.select().count()
+ status['query_results_count'] = models.QueryResult.select().count()
+ status['unused_query_results_count'] = models.QueryResult.unused().count()
+ status['dashboards_count'] = models.Dashboard.select().count()
+ status['widgets_count'] = models.Widget.select().count()
+
+ status['workers'] = []
+
+ manager_status = redis_connection.hgetall('redash:status')
+ status['manager'] = manager_status
+ status['manager']['outdated_queries_count'] = len(models.Query.outdated_queries())
+
+ queues = {}
+ for ds in models.DataSource.select():
+ for queue in (ds.queue_name, ds.scheduled_queue_name):
+ queues.setdefault(queue, set())
+ queues[queue].add(ds.name)
+
+ status['manager']['queues'] = {}
+ for queue, sources in queues.iteritems():
+ status['manager']['queues'][queue] = {
+ 'data_sources': ', '.join(sources),
+ 'size': redis_connection.llen(queue)
+ }
+
+ return status