Clean up the druid sync api. (#1101)

This commit is contained in:
Bogdan 2016-09-13 17:30:36 -07:00 committed by GitHub
parent 2e6b4b121f
commit a871ee7858
2 changed files with 41 additions and 38 deletions

View File

@ -1388,9 +1388,10 @@ class Caravel(BaseCaravelView):
"dimensions": ["affiliate_id", "campaign", "first_seen"] "dimensions": ["affiliate_id", "campaign", "first_seen"]
} }
""" """
druid_config = json.loads(request.form.get('config')) payload = request.get_json(force=True)
user_name = request.form.get('user') druid_config = payload['config']
cluster_name = request.form.get('cluster') user_name = payload['user']
cluster_name = payload['cluster']
user = sm.find_user(username=user_name) user = sm.find_user(username=user_name)
if not user: if not user:

View File

@ -218,22 +218,24 @@ class CoreTests(CaravelTestCase):
db.session.commit() db.session.commit()
cfg = { cfg = {
"name": "test_click", "user": "admin",
"dimensions": ["affiliate_id", "campaign", "first_seen"], "cluster": "new_druid",
"metrics_spec": [{"type": "count", "name": "count"}, "config": {
{"type": "sum", "name": "sum"}], "name": "test_click",
"batch_ingestion": { "dimensions": ["affiliate_id", "campaign", "first_seen"],
"sql": "SELECT * FROM clicks WHERE d='{{ ds }}'", "metrics_spec": [{"type": "count", "name": "count"},
"ts_column": "d", {"type": "sum", "name": "sum"}],
"sources": [{ "batch_ingestion": {
"table": "clicks", "sql": "SELECT * FROM clicks WHERE d='{{ ds }}'",
"partition": "d='{{ ds }}'" "ts_column": "d",
}] "sources": [{
"table": "clicks",
"partition": "d='{{ ds }}'"
}]
}
} }
} }
resp = self.client.post( resp = self.client.post('/caravel/sync_druid/', data=json.dumps(cfg))
'/caravel/sync_druid/', data=dict(
config=json.dumps(cfg), user="admin", cluster="new_druid"))
druid_ds = db.session.query(DruidDatasource).filter_by( druid_ds = db.session.query(DruidDatasource).filter_by(
datasource_name="test_click").first() datasource_name="test_click").first()
@ -243,30 +245,30 @@ class CoreTests(CaravelTestCase):
["count", "sum"]) ["count", "sum"])
assert resp.status_code == 201 assert resp.status_code == 201
# Datasource exists, not changes required
resp = self.client.post(
'/caravel/sync_druid/', data=dict(
config=json.dumps(cfg), user="admin", cluster="new_druid"))
druid_ds = db.session.query(DruidDatasource).filter_by(
datasource_name="test_click").first()
assert set([c.column_name for c in druid_ds.columns]) == set(
["affiliate_id", "campaign", "first_seen"])
assert set([m.metric_name for m in druid_ds.metrics]) == set(
["count", "sum"])
assert resp.status_code == 201
# datasource exists, not changes required # datasource exists, not changes required
resp = self.client.post('/caravel/sync_druid/', data=json.dumps(cfg))
druid_ds = db.session.query(DruidDatasource).filter_by(
datasource_name="test_click").first()
assert set([c.column_name for c in druid_ds.columns]) == set(
["affiliate_id", "campaign", "first_seen"])
assert set([m.metric_name for m in druid_ds.metrics]) == set(
["count", "sum"])
assert resp.status_code == 201
# datasource exists, add new metrics and dimentions
cfg = { cfg = {
"name": "test_click", "user": "admin",
"dimensions": ["affiliate_id", "second_seen"], "cluster": "new_druid",
"metrics_spec": [ "config": {
{"type": "bla", "name": "sum"}, "name": "test_click",
{"type": "unique", "name": "unique"} "dimensions": ["affiliate_id", "second_seen"],
], "metrics_spec": [
{"type": "bla", "name": "sum"},
{"type": "unique", "name": "unique"}
],
}
} }
resp = self.client.post( resp = self.client.post('/caravel/sync_druid/', data=json.dumps(cfg))
'/caravel/sync_druid/', data=dict(
config=json.dumps(cfg), user="admin", cluster="new_druid"))
druid_ds = db.session.query(DruidDatasource).filter_by( druid_ds = db.session.query(DruidDatasource).filter_by(
datasource_name="test_click").first() datasource_name="test_click").first()
# columns and metrics are not deleted if config is changed as # columns and metrics are not deleted if config is changed as