From 0bb722df5d5cd31b22fc88d0b69c3c3bede3ef7c Mon Sep 17 00:00:00 2001 From: Arik Fraimovich Date: Wed, 4 May 2016 12:03:47 +0300 Subject: [PATCH 1/2] Make sure data sources ordered by id --- redash/handlers/data_sources.py | 2 +- tests/handlers/test_data_sources.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/redash/handlers/data_sources.py b/redash/handlers/data_sources.py index 5c4ca0b158d..07f4441c86a 100644 --- a/redash/handlers/data_sources.py +++ b/redash/handlers/data_sources.py @@ -67,7 +67,7 @@ def get(self): d['view_only'] = all(project(ds.groups, self.current_user.groups).values()) response[ds.id] = d - return response.values() + return sorted(response.values(), key=lambda d: d['id']) @require_admin def post(self): diff --git a/tests/handlers/test_data_sources.py b/tests/handlers/test_data_sources.py index e052ec64469..ee9f3af595b 100644 --- a/tests/handlers/test_data_sources.py +++ b/tests/handlers/test_data_sources.py @@ -1,4 +1,7 @@ import json + +from funcy import pairwise + from tests import BaseTestCase from redash.models import DataSource @@ -25,6 +28,12 @@ def test_returns_each_data_source_once(self): self.assertEqual(len(response.json), 1) + def test_returns_data_sources_ordered_by_id(self): + self.factory.create_data_source(group=self.factory.org.default_group) + self.factory.create_data_source(group=self.factory.org.default_group) + response = self.make_request("get", "/api/data_sources", user=self.factory.user) + self.assertTrue(all(left <= right for left, right in pairwise(response.json))) + class DataSourceTypesTest(BaseTestCase): def test_returns_data_for_admin(self): From 70164777005ba4419a8f9921101851a656467b28 Mon Sep 17 00:00:00 2001 From: Arik Fraimovich Date: Wed, 4 May 2016 12:07:59 +0300 Subject: [PATCH 2/2] Restore support for forwarding events --- redash/tasks/general.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/redash/tasks/general.py b/redash/tasks/general.py index 2589b744653..3aa6e6d2c1c 100644 --- a/redash/tasks/general.py +++ b/redash/tasks/general.py @@ -1,8 +1,9 @@ +import requests from celery.utils.log import get_task_logger from flask.ext.mail import Message from redash.worker import celery from redash.version_check import run_version_check -from redash import models, mail +from redash import models, mail, settings from .base import BaseTask logger = get_task_logger(__name__) @@ -10,7 +11,16 @@ @celery.task(name="redash.tasks.record_event", base=BaseTask) def record_event(event): + original_event = event.copy() models.Event.record(event) + for hook in settings.EVENT_REPORTING_WEBHOOKS: + logger.debug("Forwarding event to: %s", hook) + try: + response = requests.post(hook, original_event) + if response.status_code != 200: + logger.error("Failed posting to %s: %s", hook, response.content) + except Exception: + logger.exception("Failed posting to %s", hook) @celery.task(name="redash.tasks.version_check", base=BaseTask)