Compare commits

...

3014 Commits

Author SHA1 Message Date
Arik Fraimovich
bba801f9d5 Merge pull request #1167 from ariarijp/fix-bootstrap-script-for-ubuntu
Fix the version of setuptools on bootstrap script for Ubuntu
2016-07-03 14:17:03 +03:00
Arik Fraimovich
b41041014f Merge pull request #1166 from getredash/refersh_14_days
Feature: add "every 14 days" refresh option
2016-07-03 14:14:34 +03:00
Arik Fraimovich
31edf9cf80 Add every 14 days refresh option 2016-07-03 14:12:09 +03:00
Takuya Arita
522e07ac95 Fix the version of setuptools on bootstrap script for Ubuntu 2016-07-03 20:10:01 +09:00
Arik Fraimovich
837073144f Dockerfile: pin setuptools version to 23.1.0 until they resolve bug introduced in 24.0 2016-07-03 13:39:38 +03:00
Arik Fraimovich
9895e28a3f Cleanup/fix script tags. 2016-07-03 13:31:59 +03:00
Arik Fraimovich
ae9e295d2f Fix #1165: don't use hard coded org/user. 2016-07-03 13:26:54 +03:00
Arik Fraimovich
7681d3ee84 Merge pull request #1164 from darabos/patch-1
Docs: update permission documentation
2016-07-01 08:30:15 +03:00
Daniel Darabos
458f5eb032 Update permission documentation
https://github.com/getredash/redash/pull/957 has been merged.
2016-06-30 13:22:55 +02:00
Arik Fraimovich
ce81d69f91 Merge pull request #1160 from 5t111111/fix-indentation-in-docker-compose-example
Fix indentation in docker-compose-example.yml
2016-06-28 16:12:07 +03:00
Hirofumi Wakasugi
0456caf798 Fix indentation in docker-compose-example.yml 2016-06-28 22:05:23 +09:00
Arik Fraimovich
bcd3670282 Merge pull request #1156 from jcox92/patch-1
Docs: add SSL parameters to nginx configuration
2016-06-26 08:56:19 +03:00
Josh Cox
f7e556969a Add SSL parameters to nginx configuration
These parameters prevent some common exploits and vulnerabilities. My primary reference was here: https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
2016-06-23 15:24:17 -04:00
Arik Fraimovich
dd759fe4b0 Merge pull request #1155 from getredash/random
Fix: make all configuration values of Oracle required
2016-06-23 21:24:09 +03:00
Arik Fraimovich
988b301f65 Fix: make all configuration values of Oracle required 2016-06-23 21:21:04 +03:00
Arik Fraimovich
923b3b18e4 Merge pull request #1152 from getredash/random
Fix: add missing paddings in titles
2016-06-22 16:08:45 +03:00
Arik Fraimovich
95c47138ab Fix: add missing paddings in titles 2016-06-22 14:12:27 +03:00
Arik Fraimovich
31e7375a30 Merge pull request #1150 from getredash/random
UI Fixes for v0.11
2016-06-21 14:07:50 +03:00
Arik Fraimovich
8808e38de9 Fix: shared dashboard fail to render queries. 2016-06-21 11:56:02 +03:00
Arik Fraimovich
0314313285 Merge pull request #1149 from toru-takahashi/patch-2
Presto QueryRunner supports tinyint and smallint
2016-06-21 11:50:32 +03:00
Toru Takahashi
9c0d1da7f9 Presto QueryRunner supports tinyint and smallint
Presto0.148 started to support tinyint and smallint.
https://prestodb.io/docs/current/release/release-0.148.html
2016-06-21 17:36:23 +09:00
Arik Fraimovich
904ea9f90a Fix: after creating new alert, it uses wrong id to load subscribers 2016-06-20 19:36:27 +03:00
Arik Fraimovich
6bb09d8446 Merge pull request #1146 from someones/doc-add-settings
Docs: add a link to settings documentation.
2016-06-20 09:31:50 +03:00
Arik Fraimovich
d5e5b2438b Merge pull request #1136 from someones/org-aware-cli
Feature: add --org option to all relevant CLI commands.
2016-06-20 09:27:38 +03:00
Arik Fraimovich
dbd48e15bc Merge pull request #1143 from ariarijp/fix/email-input
Fix: use the email input type where needed
2016-06-20 08:56:43 +03:00
Takuya Arita
21fdd6b69d Revert input type 2016-06-20 14:05:51 +09:00
Adam Griffiths
a666adeaa7 Add a link to settings.
The settings page doesn't seem to have any links to it.
The only way to find it is through searching for it.
So we'll add one to the setup.rst page.
2016-06-20 11:05:28 +10:00
Adam Griffiths
15361cc81c Improve the help text text
Add "(leave blank for 'default')." or
"(leave blank for all organizations)" to organization options.
Remove the text "This commands assume single organization operation."
from the `users` and `groups` managers help text.
2016-06-20 09:56:05 +10:00
Adam Griffiths
704a167c74 Fix organization parameters.
Move organization to the end of the parameter
list to prevent breaking any existing code.
Provide a default for all organization parameters
to allow people to call the CLI functions without
breaking existing code.
Add missing organization parameter to `list` in
`users.py`.
2016-06-20 09:49:37 +10:00
ariarijp
df2c8d83b0 Use the email input type 2016-06-19 20:48:01 +09:00
Arik Fraimovich
7445972c10 Merge pull request #1142 from getredash/random
Fix: dates in filters might be duplicated
2016-06-19 08:54:02 +03:00
Arik Fraimovich
1933995a28 Fix: dates in filters might be duplicated 2016-06-19 08:51:45 +03:00
Arik Fraimovich
8df822eee2 Merge pull request #1141 from getredash/random
Make create data source button more prominent
2016-06-17 18:10:28 +03:00
Arik Fraimovich
227fe9b44a Make create data source button more prominent 2016-06-17 18:07:48 +03:00
Arik Fraimovich
5d0ed02caa Merge pull request #1140 from getredash/random
Fix: Hive should use the enabled variable
2016-06-17 18:06:54 +03:00
Arik Fraimovich
392627d6d6 Merge pull request #1139 from getredash/random
Fix: Impala data source referencing wrong variable
2016-06-17 17:53:30 +03:00
Arik Fraimovich
72d02e9e9d Fix: Hive should use the enabled variable 2016-06-17 17:50:26 +03:00
Arik Fraimovich
902ce24f6f Fix: Impala data source referencing wrong variable 2016-06-17 17:49:34 +03:00
Arik Fraimovich
c5bfbbaef7 Merge pull request #1133 from vishesh92/fix-scroll
Fix: query scrolling issues
2016-06-17 17:43:04 +03:00
Arik Fraimovich
a03f5f88fb Limit Celery concurrency 2016-06-17 10:19:33 +03:00
Adam Griffiths
a66e182f73 Add --org option to all relevant CLI commands.
--org is the organization slug, not the name.
Allows the management of users, datasources and groups
with respect to organisations.
All commands default to 'default' slug, or None where
relevant, which means the commands will still work
as they did before without any changes.
2016-06-17 12:03:09 +10:00
Arik Fraimovich
96dd811607 Merge pull request #1127 from someones/schema_secrets
Mark basic_auth_password as secret
2016-06-16 21:24:16 +03:00
Vishesh Jindal
409200188e Fix query scrolling #1024 2016-06-16 17:40:48 +05:30
Arik Fraimovich
ad65391914 Merge pull request #1130 from AntoineAugusti/patch-1
Improve Slack notification style
2016-06-15 17:22:31 +03:00
Antoine Augusti
203f6afa09 Improve Slack notification style 2016-06-15 15:56:04 +02:00
Arik Fraimovich
2b710420ab Docs: start worker process on Heroku 2016-06-15 16:17:11 +03:00
Arik Fraimovich
01116f41ed Don't auto reload/run in debug mode on Heroku 2016-06-15 16:17:11 +03:00
Arik Fraimovich
87e25f2107 Merge pull request #1129 from getredash/fix-viz-options
Feature: support for JSON query formatting (Mongo, ElasticSearch)
2016-06-15 15:21:41 +03:00
Arik Fraimovich
c495250a54 Feature: support for JSON query formatting (Mongo, ElasticSearch) 2016-06-15 15:06:50 +03:00
Arik Fraimovich
c01d266030 Merge pull request #1128 from getredash/fix-viz-options
Fix: visualization options not updating after changing type
2016-06-15 12:49:43 +03:00
Arik Fraimovich
8515ac25bc Fix: visualization options not updating after changing type 2016-06-15 12:42:18 +03:00
Adam Griffiths
23988a72aa Mark basic_auth_password as secret 2016-06-15 11:34:02 +10:00
Arik Fraimovich
6bc0e7a716 Merge pull request #1126 from getredash/fix_669
Fix #669: save fails when doing partial save of new query
2016-06-14 15:39:58 +03:00
Arik Fraimovich
2c2ff0d252 Fix #669: save fails when doing partial save of new query 2016-06-14 15:39:12 +03:00
Arik Fraimovich
69cefee0d4 Update Heroku instructions. 2016-06-14 14:36:41 +03:00
Arik Fraimovich
02c065751a Update Heroku pre_compile hook 2016-06-14 14:23:56 +03:00
Arik Fraimovich
aed65f4bad Deduplicate parameter names 2016-06-14 14:00:38 +03:00
Arik Fraimovich
6bb2716fe3 Merge pull request #1121 from getredash/fix_949
Show error when failing to communicate with server
2016-06-14 13:18:06 +03:00
Arik Fraimovich
efaeb08178 Merge pull request #1120 from getredash/feature/params_ui
Fix: default vale for parameters should be [] and not {}
2016-06-14 13:17:21 +03:00
Arik Fraimovich
e18a073128 Show error when failing to communicate with server
Closes #949.
2016-06-14 12:12:31 +03:00
Arik Fraimovich
f21276ec06 Merge pull request #1119 from getredash/feature/params_ui
Feature: add UI to delete alerts
2016-06-14 12:00:53 +03:00
Arik Fraimovich
b0c0582e41 Fix: default vale for parameters should be [] and not {} 2016-06-14 11:59:11 +03:00
Arik Fraimovich
9ad85091ed Add UI to delete alerts (closes #731) 2016-06-14 11:55:00 +03:00
Arik Fraimovich
2d2fb69b7b Add API to delete alerts (#731). 2016-06-14 11:21:05 +03:00
Arik Fraimovich
3ce27b9652 Merge pull request #1118 from getredash/feature/params_ui
Fix: remove alerts for archived queries
2016-06-14 11:15:50 +03:00
Arik Fraimovich
da4db94cf8 Close #930: remove alerts for archived queries 2016-06-14 11:09:35 +03:00
Arik Fraimovich
4cbc79a7aa Use default user for alert_subscription factory 2016-06-14 11:04:41 +03:00
Arik Fraimovich
4fabaaea8a Merge pull request #1117 from getredash/feature/params_ui
Fix #1052: filter not working for date/time values
2016-06-14 11:02:02 +03:00
Arik Fraimovich
a7af596da0 Fix #1052: filter not working for date/time values 2016-06-14 10:58:33 +03:00
Arik Fraimovich
df637e3f6b Merge pull request #1116 from getredash/feature/params_ui
Return meaningful error when there is no cached result.
2016-06-14 10:44:24 +03:00
Arik Fraimovich
68465b0c60 Return meaningful error when there is no cached result.
Previously it was crashing as it was trying to access an unreferenced
variables (query_result).
2016-06-14 10:41:01 +03:00
Arik Fraimovich
86565402fa Merge pull request #1069 from getredash/feature/params_ui
Feature: UI for query parameters
2016-06-14 10:15:36 +03:00
Arik Fraimovich
c2e3637dce Feature: UI for query parameters
This pull request implements UI for parameters and also allows to set the default value and type of a parameter.
(Closes #583)

Other changes in this pull request:

- Loading/error state for dashboard widgets.
- Refresh button on dashboard widgets (Closes #810).
- Maintain sync between query/dashboard URL and current parameters, and preserve them when navigating.
- Removed Pivot Table tab.
2016-06-14 10:09:16 +03:00
Arik Fraimovich
52558043ee Merge pull request #1091 from whummer/feature/cache_embeds
Add caching for queries used in embeds
2016-06-14 08:34:13 +03:00
Waldemar Hummer
a045d7ddf7 simplify code to get parameters 2016-06-14 09:36:32 +10:00
Arik Fraimovich
c107c94a27 Merge pull request #1077 from nabilblk/master
Fix: install needed dependencies to use Hive in Docker image
2016-06-13 15:22:53 +03:00
Arik Fraimovich
790128ce77 Merge pull request #1067 from anthony-coble/add_word_cloud
Feature: word cloud visualization
2016-06-13 13:40:02 +03:00
Arik Fraimovich
abc790ce41 Merge pull request #1115 from getredash/fix-1097
Fix: allow non integers in alert reference value
2016-06-13 13:13:27 +03:00
Arik Fraimovich
f2643521f7 Fix: allow non integers in alert reference value 2016-06-13 13:03:08 +03:00
nabil
0d897e6878 move hive depencencies into req_all_ds.txt 2016-06-09 22:29:46 +00:00
Arik Fraimovich
4ec473cf5e Merge pull request #1110 from getredash/fix-1097
Fix #1109: mixed group permissions resulting in wrong permission
2016-06-09 20:02:06 +03:00
Arik Fraimovich
0c7f0c25a8 Fix #1109: mixed group permissions resulting in wrong permission 2016-06-09 19:59:26 +03:00
Arik Fraimovich
8c21e9149d Merge pull request #1108 from getredash/fix-1097
Remove potnetially concurrency not safe code form enqueue_query
2016-06-09 17:08:53 +03:00
Arik Fraimovich
7159f0beb0 Remove potnetially concurrency not safe code form enqueue_query.
This might have been causing the behavior described in #1097.
2016-06-09 16:53:29 +03:00
Arik Fraimovich
095e7596b5 Merge pull request #1103 from AntoineAugusti/patch-1
Docs: add section about monitoring
2016-06-09 16:32:24 +03:00
Arik Fraimovich
31013836ea Fix path reference in embed.html. 2016-06-09 11:06:52 +03:00
Arik Fraimovich
b67f412f58 Add test for enqueue_query 2016-06-08 20:00:59 +03:00
Antoine Augusti
c1bf9dc67d Add section about monitoring 2016-06-08 15:47:00 +02:00
Arik Fraimovich
65635ec703 Merge pull request #1102 from getredash/feature/hipchat_v2
Switch to HipChat V2 API
2016-06-08 16:17:10 +03:00
Arik Fraimovich
ceaa00e448 Fix HipChat base URL 2016-06-08 16:09:06 +03:00
Arik Fraimovich
679b0a3125 Switch to HipChat V2. 2016-06-08 16:04:28 +03:00
Arik Fraimovich
fe81dbd3a2 Fix paths in Gulp build pipeline 2016-06-08 10:00:05 +03:00
Arik Fraimovich
1409907ef1 WIP: gulp fix 2016-06-08 09:32:14 +03:00
Arik Fraimovich
cbbfc4e931 Update bower.json 2016-06-08 08:57:51 +03:00
Arik Fraimovich
1ca5262fa8 Merge pull request #1099 from someones/heroku-clean
Fix RST syntax for links
2016-06-08 08:14:29 +03:00
Adam Griffiths
429b76f5a7 Fix RST syntax for links 2016-06-08 15:01:03 +10:00
Arik Fraimovich
8b73a2b135 Merge pull request #1098 from getredash/flexible_notifications
Feature: UI for alert destinations & new destination types
2016-06-07 15:18:11 +03:00
Arik Fraimovich
eed5485080 Update Alerts/subscriptions UI for new look and feel. 2016-06-07 15:12:47 +03:00
Arik Fraimovich
daa6c1cd6f Merge pull request #1096 from AntoineAugusti/patch-2
Fix typo in env variable VERSION_CHECK
2016-06-07 11:01:00 +03:00
Antoine Augusti
68dc3b033c Fix typo in env variable VERSION_CHECK 2016-06-07 09:58:49 +02:00
Anthony Coble
2e88e7f396 fixup! Add a word cloud vis 2016-06-06 17:49:31 -04:00
Arik Fraimovich
cd06d276e4 Merge pull request #1095 from ordd/fix_new_query_permission
Fix: use create_query permission for new query button.
2016-06-06 17:25:28 +03:00
Or
437f589fde Fix: use create_query permission for new query button. 2016-06-06 12:27:08 +03:00
Arik Fraimovich
1fbeb5d2a5 Merge pull request #1092 from someones/heroku-clean
Add Heroku support
2016-06-06 09:24:27 +03:00
Arik Fraimovich
df1e72ca01 Take into account that node_modules moves to root 2016-06-06 09:24:13 +03:00
Arik Fraimovich
fcc656e04e Add support for REDIS_URL and DATABASE_URL in settings.
(preparation for Heroku support - #1092)
2016-06-06 09:22:33 +03:00
Adam Griffiths
a0b97c1fc9 Update Heroku support as per comments
Fix comment in bin/pre_compile.
Remove .gitattributes and .travis.yml in rd_ui/.
Remove bin/run from Procfile.heroku.
Update documentation:
-Add a note about upgrading from version to version.
-Remove commands for DATABASE_URL and REDIS_URL.
-Add importance to the cookie secret variable.
-Merge adding redis and postgres addons into 1 step.
2016-06-06 11:39:10 +10:00
Arik Fraimovich
4d6599e0ea WIP 2016-06-05 15:51:49 +03:00
Adam Griffiths
c75054b320 Add Heroku support
Move .bowerrc, bower.json, gulpfile.js, package.json
down to root level.
Update paths in .bowerrc, gulpfile.js, Makefile
Add a heroku-postbuild step to package.json which
installs devDependencies and runs the build.
Add step in bin/pre_compile which adds the
requirements_all_ds.txt to requirements.txt to ensure that
cffi is installed. Also removes pymssql as this is
not supported on Heroku.
Add content from rd_ui/.gitignore to .gitignore and
remove rd_ui/.gitignore.
Add section in setup.rst about Heroku deployments.
2016-06-03 12:21:09 +10:00
Waldemar Hummer
011ca74338 add caching for queries used in embeds 2016-06-03 09:14:59 +10:00
Arik Fraimovich
434615a1be Merge remote-tracking branch 'origin/master' into flexible_notifications 2016-06-02 10:21:52 +03:00
Arik Fraimovich
2bc0b276b5 Merge pull request #1061 from thoughtworks/fix/area_plots
Fix: area chart stacking doesn't work
2016-06-01 21:21:18 +03:00
Arik Fraimovich
e942486ed7 Merge pull request #1090 from getredash/contributing_guide
Contributing Guide
2016-06-01 15:56:36 +03:00
Arik Fraimovich
9eff7ef8c9 Update CONTRIBUTING.md 2016-06-01 15:55:50 +03:00
Arik Fraimovich
34b305d232 Update CONTRIBUTING.md 2016-06-01 15:52:52 +03:00
Arik Fraimovich
f0d97bc5d1 Update CONTRIBUTING.md 2016-06-01 15:30:04 +03:00
Arik Fraimovich
f64622db77 Merge pull request #1089 from James226/master
Add support for serialising UUID type within MSSQL #961
2016-06-01 15:14:59 +03:00
Arik Fraimovich
8030baa6a5 Create "Contributing Guide" 2016-06-01 14:55:11 +03:00
Raymond Machira
3d82b702b3 Merge branch 'upstream/master' into fix/area_plots
# Conflicts:
#	rd_ui/app/scripts/directives/plotly.js
2016-05-31 10:50:05 -05:00
Arik Fraimovich
ad8676df2e Merge pull request #1087 from getredash/fix/chart_editor
Maintain fixed size of chart area
2016-05-31 11:29:37 +03:00
Arik Fraimovich
ea031e9a98 Maintain fixed size of chart area 2016-05-31 11:27:01 +03:00
Arik Fraimovich
9cfebedec9 Merge pull request #1086 from getredash/fix/chart_editor
Give bottom margin setting more meaningful name & change to input type to number.
2016-05-31 10:36:24 +03:00
Arik Fraimovich
772d263827 Give bottom margin setting more meaningful name & change to input to number. 2016-05-31 10:27:28 +03:00
Arik Fraimovich
8c455c8a1c Update login page title 2016-05-31 09:46:29 +03:00
Arik Fraimovich
857caab20e Merge pull request #1085 from getredash/feature/pause-api
Feature: API to pause a data source
2016-05-31 09:08:03 +03:00
Arik Fraimovich
59f8af2c44 Switch to Redis for pause state storage 2016-05-30 22:44:09 +03:00
Arik Fraimovich
9538ee7c31 Feature: API to pause a data source 2016-05-30 18:30:05 +03:00
Arik Fraimovich
e8312185dc Merge pull request #1084 from getredash/fix_dup_alerts
Fix #1049: duplicate alerts when data source belongs to multiple groups
2016-05-30 14:42:05 +03:00
Arik Fraimovich
07d2b5ba42 Fix #1049: duplicate alerts 2016-05-30 14:39:58 +03:00
Arik Fraimovich
f8120284d5 WIP: updated look and feel 2016-05-30 14:39:01 +03:00
James Parker
5b654fd1c8 Add support for serialising UUID type within MSSQL #961 2016-05-27 09:22:38 +01:00
Arik Fraimovich
6edb0ca8ec Merge pull request #1080 from jeffwidman/patch-1
Fix typo
2016-05-27 08:42:21 +03:00
Jeff Widman
ef0de1414d Fix typo 2016-05-26 14:29:40 -07:00
Arik Fraimovich
214aa3b799 Merge pull request #1060 from thoughtworks/saml-authorization
Feature: support configuring user's groups with SAML
2016-05-26 23:07:30 +03:00
Arik Fraimovich
64d7538040 Merge pull request #1074 from toyama0919/master
Fix: ElasticSearch wasn't using correct type names
2016-05-26 22:57:32 +03:00
Kumar Vora
69177752bc addresses PR feedback! 2016-05-26 14:46:25 -05:00
Kumar Vora
d83c6c42dd Raymond/Kumar : Fixes issue where going into edit more would break stacking. - selects legend divs from current graph only (instead of selecting from the entire dom) 2016-05-26 14:17:19 -05:00
nabil
2043834ae9 Issue #1076 : addtional dependencies for Hive Datasource 2016-05-26 10:38:07 +01:00
toyama0919
d6f4af448c fix bug. There is a case set unsupport type for elasticsearch. 2016-05-25 17:50:13 +09:00
Raymond Machira
43b425f91c Merge branch 'get-redash-master' of github.com:thoughtworks/redash into fix/area_plots 2016-05-24 18:11:13 -05:00
Raymond Machira
17427cf47b Names the legend item click listener to avoid overriding other places the event may be used. Also removes the event listener when type of chart changes. 2016-05-24 17:54:50 -05:00
Kumar Vora
b5be5a8fa4 no need to check count of results 2016-05-24 16:38:41 -05:00
Arik Fraimovich
14fcf01751 Merge pull request #1072 from getredash/arikfr-patch-2
Remove counter from the tasks Done tab (as it always shows 50). #1047
2016-05-23 21:24:01 +03:00
Arik Fraimovich
09848d65a1 Remove counter from the tasks Done tab (as it always shows 50). #1047 2016-05-23 18:32:59 +03:00
Arik Fraimovich
0d897ea959 Update AMIs to 0.10.1 2016-05-22 13:35:07 +03:00
Arik Fraimovich
e88d4c3d27 Remove reference to Google Groups and add Discourse instead 2016-05-22 10:33:46 +03:00
Arik Fraimovich
82f0b4c386 Update version reference in bootstrap scripts. 2016-05-22 10:33:46 +03:00
Arik Fraimovich
3037c4f90d Merge pull request #1066 from edwardsharp/edwardsharp-fix-1057
Docs: command type-o fix.
2016-05-22 08:59:12 +03:00
Kumar Vora
8900d02c95 fixing test 2016-05-20 14:35:49 -05:00
Kumar Vora
c1c2db4a73 use user.org instead of passing org as a separate argument 2016-05-20 14:28:08 -05:00
Anthony Coble
574d8a18ae Add a word cloud vis 2016-05-19 16:19:08 -04:00
edward sharp
82872db111 command type-o in setup docs. fix #1057 2016-05-19 12:57:18 -07:00
Arik Fraimovich
3f90dd9247 Merge pull request #1064 from getredash/fix/keys_cleanup
Fix: old task trackers were not really removed
2016-05-19 10:08:58 +03:00
Arik Fraimovich
b2e2277d0b Fix: old task trackers were not really removed 2016-05-19 09:58:30 +03:00
Arik Fraimovich
e20a00566a Merge pull request #1007 from vorakumar/issue-1006
Issue#1006:  Make bottom margin editable for Chart visualization
2016-05-18 23:18:12 +03:00
Arik Fraimovich
e10ecd2dad Merge pull request #1058 from AntoineAugusti/patch-1
Bring back filters if dashboard filters are enabled
2016-05-18 22:50:31 +03:00
Arik Fraimovich
6e0dd2b9a3 Merge pull request #1063 from windward-ltd/master
Add support for date/time Y axis
2016-05-18 22:50:13 +03:00
tomerb
0bb3fb9c40 added datetime to the yaxis scale options 2016-05-18 18:41:08 +03:00
Arik Fraimovich
1a1160eb76 Merge pull request #1062 from getredash/fix_dql
DynamoDB: Better exception handling
2016-05-18 14:14:00 +03:00
Arik Fraimovich
d4ae97aab2 Move pyparsing import to the try/except block 2016-05-18 14:08:42 +03:00
Arik Fraimovich
8bc42c8ad9 Remove duplicate reference to ParseException 2016-05-18 13:45:26 +03:00
Arik Fraimovich
6c5865bd3b Better exception handling 2016-05-18 13:44:38 +03:00
Arik Fraimovich
701035fabd Merge pull request #1059 from getredash/fix_dql
Fix: DynamoDB having issues when setting host
2016-05-18 13:42:48 +03:00
Arik Fraimovich
31aee1b6b9 Better exception handling 2016-05-18 13:30:20 +03:00
Arik Fraimovich
367ea859e4 If host param is empty, change it to None 2016-05-18 13:30:10 +03:00
Raymond Machira
d79d3da955 Merge branch 'get-redash-master' into fix/area_plots 2016-05-17 15:55:21 -05:00
Raymond Machira
6c822d1e4b Force area charts to recalculate on click of legend items.
This fixes issue #948 where stacked area plots do not update once series are enabled/disabled using the legend.
It also fixes the behaviour of percentage stack area plots, so as to have similar behaviour to percentage stacked bar charts.
2016-05-17 15:49:25 -05:00
Ama Asare
ad85b9a62c Ama/Kumar: Configure authorization for SAML 2016-05-17 14:01:18 -05:00
Arik Fraimovich
b5a4a6b880 Merge pull request #979 from ninneko/860-managepy_support_gropu_operation
Feature: Add CLI to edit group permissions
2016-05-17 15:05:16 +03:00
Arik Fraimovich
1828de20b0 Fix: DynamoDB having issues when setting host 2016-05-17 14:36:15 +03:00
Antoine Augusti
48c85645c6 Bring back filters if dashboard filters are enabled 2016-05-17 09:57:08 +02:00
Arik Fraimovich
ed45dcb01d Merge pull request #1044 from thoughtworks/improve-vagrant-flow
Improve vagrant flow
2016-05-13 15:47:10 +03:00
Ama Asare
d4ff7482ad Ama: Install just pymongo and not everything in requirements_all_ds.txt
Because some dependencies were missing and we dont really need everything in the file...just pymongo
Also removed unneeded files, reverted circle.yml to as it is on redash, so it doesnt show in the PR diff
2016-05-09 17:15:07 -05:00
Ama Asare
90f0b3b49a Ama: Consolidate vagrant_provision script, move files to more intuitive locations, include command from #1021.
Also reset circle.yml to be as in the main redash repo so our changes are not included in the changeset
Check earlier PR https://github.com/getredash/redash/pull/1027 to follow conversation.
2016-05-09 17:13:33 -05:00
Ama Asare
f8efb2d7ea Ama/Chris #7121 Added script to run or test redash vagrant server in one command. 2016-05-09 17:13:18 -05:00
Kumar Vora
d2ba0cb6cf Let plotly calculate the height based on provided margin values 2016-05-09 16:11:51 -05:00
Arik Fraimovich
cfb852e9c5 Add missing import. 2016-05-08 22:29:36 +03:00
Arik Fraimovich
d5c6e57c62 Optionally get org_slug from g. 2016-05-08 10:41:56 +03:00
Arik Fraimovich
2924d4fce6 Merge pull request #1040 from getredash/fix/visaulizations
Small fixes to visualizations view
2016-05-08 10:39:37 +03:00
Arik Fraimovich
e602b8cf2b Don't render visualizations in the background 2016-05-08 10:34:30 +03:00
Arik Fraimovich
0b806e2e7d Fix: link in pivot tab was broken 2016-05-08 10:34:14 +03:00
yohei.naruse
c3c302e11e modify indent size 2016-05-08 12:43:42 +09:00
Arik Fraimovich
aa837ed09b Update for new design 2016-05-07 22:20:06 +03:00
Arik Fraimovich
f07e7273c1 Fix: add destination to list of static routes 2016-05-07 22:19:53 +03:00
Arik Fraimovich
9b6f555d76 Update alert task to use destinations 2016-05-07 17:58:15 +03:00
Arik Fraimovich
e069374232 Merge w/ latest master 2016-05-07 17:49:49 +03:00
Arik Fraimovich
c496df3b87 Update ISSUE_TEMPLATE.md 2016-05-05 22:30:10 +03:00
Arik Fraimovich
2ee0065102 Merge pull request #1038 from getredash/docs-github
Add an ISSUE_TEMPLATE.md to direct people at the forum
2016-05-05 22:29:23 +03:00
Arik Fraimovich
c0ffea7083 Add an ISSUE_TEMPLATE.md to direct people at the forum 2016-05-05 22:28:04 +03:00
Arik Fraimovich
fec0d5fecc Merge pull request #1037 from dheerajrav/master
multifilter bug fix
2016-05-05 16:28:03 +03:00
dheerajrav
83a03a22b1 multifilter bug fix 2016-05-05 18:51:41 +05:30
Arik Fraimovich
8b5dc8ef68 Merge pull request #1036 from getredash/fixes_160504
Add optional block for more scripts in template
2016-05-05 11:26:22 +03:00
Arik Fraimovich
f3a274a5c0 Add optional block for more scripts in template 2016-05-05 11:26:02 +03:00
Arik Fraimovich
386d6efdaa Merge pull request #1035 from whummer/feat/test_params_on_embeds
Add test case for embeds with parameters
2016-05-05 09:56:56 +03:00
Waldemar Hummer
e415189017 add test case for embeds with parameters; minor fix in embeds.py 2016-05-05 11:15:49 +10:00
Arik Fraimovich
b066ce4b74 Merge pull request #1033 from getredash/fixes_160504
Fix: only ask for notification permissions if wasn't denied
2016-05-04 17:03:26 +03:00
Arik Fraimovich
056ae4f63e Fix: only ask for notification permissions if wasn't denied 2016-05-04 16:57:58 +03:00
Arik Fraimovich
6d495d2f2c Merge pull request #1014 from whummer/feat/params_on_embeds
Add server-side parameter handling for embeds
2016-05-04 16:56:35 +03:00
Arik Fraimovich
960c416fcb Merge pull request #1032 from getredash/fixes_160504
Fix: make sure we return dashboards only for current org only
2016-05-04 16:54:25 +03:00
Arik Fraimovich
f7322a413f Merge pull request #1021 from ariarijp/documentation-improvement
Vagrant docs: add purging the cache step
2016-05-04 16:49:58 +03:00
Arik Fraimovich
d9cc063be2 Fix: make sure we return dashboards only for current org 2016-05-04 16:32:49 +03:00
Arik Fraimovich
8fa6fdb0d5 Merge pull request #1030 from getredash/fixes_160504
Make sure data sources list ordered by id
2016-05-04 12:12:17 +03:00
Arik Fraimovich
7016477700 Restore support for forwarding events 2016-05-04 12:07:59 +03:00
Arik Fraimovich
0bb722df5d Make sure data sources ordered by id 2016-05-04 12:03:47 +03:00
Arik Fraimovich
b3844d3643 Merge pull request #1029 from getredash/fixes_160504
Hive: close connection only if it exists
2016-05-04 10:42:59 +03:00
Arik Fraimovich
e32bfe3db7 Hive: close connection only if it exists 2016-05-04 10:40:53 +03:00
Waldemar Hummer
4591eff557 add server-side parameter handling for embeds 2016-05-03 10:49:01 +10:00
Arik Fraimovich
7062873cd1 Add note re. GCE image version 2016-05-02 12:48:43 +03:00
Arik Fraimovich
9e23cc2bf2 update version references 2016-05-01 15:49:39 +03:00
ariarijp
c5d92b4e7e Add purging the cache step 2016-05-01 21:37:51 +09:00
Arik Fraimovich
41dfcd8cbf Bump version. 2016-05-01 11:18:32 +03:00
Arik Fraimovich
869c060f5a Merge pull request #1017 from getredash/fix/ds_cli
Add data source to default group when creating with CLI
2016-04-29 16:11:30 +03:00
Arik Fraimovich
b9322004f8 Add data source to default group when creating with CLI 2016-04-29 16:08:23 +03:00
yohei.naruse
1fa701c136 apply reviews. 2016-04-28 11:43:01 +09:00
Arik Fraimovich
7b5d16ef6c Merge pull request #1005 from staritza/master
Update bootstrap.sh to include saml dependency
2016-04-25 23:44:39 +03:00
Kumar Vora
303e158eb1 Issue#1006: allowing user to change bottom margin for Chart visualizations 2016-04-22 13:16:00 -05:00
Arik Fraimovich
d331285c1f Merge pull request #980 from machira/master
Add environment variable to override secure_flag on session cookie
2016-04-21 19:16:40 +03:00
Ama A
aab0542a93 Update bootstrap.sh to include saml dependency
Required for saml to work
2016-04-20 14:17:10 -05:00
Arik Fraimovich
1f824fc5e3 Merge pull request #957 from gseva:dashboard-permissions
Hide dashboards that current user cannot see based on his groups
2016-04-20 20:18:19 +03:00
Raymond Machira
c19a0209eb Make secure_flag environment var default to Enforce HTTPs
Also wraps parse_boolean around the os.get call for the secure_flag variable
2016-04-20 11:01:37 -05:00
Arik Fraimovich
5bd133ca50 Add additional tests 2016-04-20 18:30:31 +03:00
Arik Fraimovich
3ce07782ad Fix #986: search might return duplicate queries 2016-04-20 17:54:20 +03:00
Arik Fraimovich
078fd96660 Record event when opening shared dashboard 2016-04-20 17:54:20 +03:00
Arik Fraimovich
5fe70b7aff Record event when opening visualization embed (closes #971). 2016-04-20 17:54:20 +03:00
Arik Fraimovich
ad445ef40d Fix: don't show viz edit button if user can't edit 2016-04-20 17:54:20 +03:00
Arik Fraimovich
61aca53300 Show query description only if enabled 2016-04-20 17:54:20 +03:00
Arik Fraimovich
6881da930b Fix #996: only show edit controls if user can edit 2016-04-20 17:54:20 +03:00
Arik Fraimovich
d9a8b25430 Fix #994: query description was rendered with bigger font than name 2016-04-20 17:54:20 +03:00
Antoine Augusti
8c77d77668 Mention how to use some special features 2016-04-20 17:54:20 +03:00
Antoine Augusti
5cef835a78 Specify the user to use when using the provided AMIs 2016-04-20 17:54:20 +03:00
Arik Fraimovich
3c0fc3b134 Feature: running queries (tasks) monitor
- Refactored tasks module into a package.
- Add new admins screens (running queries & outdated queries).
2016-04-20 17:54:20 +03:00
Arik Fraimovich
a9cab5fd46 Avoid drawing chart before there is data 2016-04-20 17:54:20 +03:00
Arik Fraimovich
152109a8ef use ng-src to avoid errors before scope is available 2016-04-20 17:54:20 +03:00
Arik Fraimovich
4ed1db3ccd Show message if dashboard is archived 2016-04-20 17:54:20 +03:00
Arik Fraimovich
b4af116fc5 Fix: new user form was in wrong scope 2016-04-20 17:54:20 +03:00
Arik Fraimovich
20f6993c8b Fix: embeds got broken due to missing inject 2016-04-20 17:54:20 +03:00
Arik Fraimovich
15c032668b Add material font to gulpfile 2016-04-20 17:54:20 +03:00
Arik Fraimovich
0f20f8d5f9 Fix #779: use the default chart type for new series 2016-04-20 17:54:20 +03:00
Arik Fraimovich
fc0dd22e03 Remove angular-plotly and use Plotly's autoresize 2016-04-20 17:54:20 +03:00
Arik Fraimovich
ae98bf9f60 Remove Plotly legend height workaround and use official support for scrolling. 2016-04-20 17:54:20 +03:00
Arik Fraimovich
a426002adf Switch to official Plotly.js bower distribution and use latest version. 2016-04-20 17:54:20 +03:00
Arik Fraimovich
2e9c6dd05d bower.json: move bootstrap version to correct location 2016-04-20 17:54:20 +03:00
Arik Fraimovich
509b8afefc Add documentation on permissions model 2016-04-20 17:54:20 +03:00
Arik Fraimovich
43fb88d49b Add Slack to list of contact methods 2016-04-20 17:54:20 +03:00
Arik Fraimovich
2bd60663b9 Update name in conf.py 2016-04-20 17:54:20 +03:00
Arik Fraimovich
accb3d973d Docs: re:dash -> Re:dash & new screenshots 2016-04-20 17:54:20 +03:00
Arik Fraimovich
807df66ae9 Refine docker instructions 2016-04-20 17:54:20 +03:00
Antoine Augusti
bdfb2e9e63 Snake case it is 2016-04-20 17:54:20 +03:00
Antoine Augusti
3d946b9a36 Clean code 2016-04-20 17:54:20 +03:00
Antoine Augusti
9ebd7c8f04 Add a command to send an invitation link to a user 2016-04-20 17:54:20 +03:00
Arik Fraimovich
222eb369ca Change logoUrl to logo_url to comply w/ code style 2016-04-20 17:54:20 +03:00
Arik Fraimovich
d8207241b7 New design 🎉 and UX improvements! In more detail:
- Based on the SuperFlat admin theme (I bought the extended license).
- All pages are now full-width to give your data the room it deserves.
- Various UX improvements (althuogh there is still room for improvement).
2016-04-20 17:54:20 +03:00
Antoine Augusti
2f94a21bd0 Inject variables with app context and ability to change the logo 2016-04-20 17:54:20 +03:00
tdawber
1233706aac Add link to embeds to open query in new window 2016-04-20 17:54:20 +03:00
Arik Fraimovich
0fb17c5478 Fix #958: group members/datasources were cached. 2016-04-20 17:54:20 +03:00
chiragkparmar@gmail.com
b74db8148d Correct ports per installation strategy used 2016-04-20 17:54:20 +03:00
chiragkparmar@gmail.com
d1b979b64e Add more instructions on getting started. 2016-04-20 17:54:20 +03:00
chiragkparmar@gmail.com
bf47e57abc Remove extra gif 2016-04-20 17:54:20 +03:00
chiragkparmar@gmail.com
f8161dc9a5 Add second demo 2016-04-20 17:54:20 +03:00
chiragkparmar@gmail.com
3fccd23a62 Add missing ) 2016-04-20 17:54:20 +03:00
chiragkparmar@gmail.com
2888f0dbf4 Add documentation link at the top 2016-04-20 17:54:20 +03:00
chiragkparmar@gmail.com
3b4bb6a557 Add gitter chat button 2016-04-20 17:54:20 +03:00
Arik Fraimovich
346b31d39e Add support for using Redis via unix socket 2016-04-20 17:54:20 +03:00
Arik Fraimovich
1d2425e002 Ability to disable some query runners 2016-04-20 17:54:20 +03:00
Arik Fraimovich
bee6a6d80b Friendlier name for MySQL query runner 2016-04-20 17:54:20 +03:00
Arik Fraimovich
515b52196c Allow toggling dashboard full screen from URL 2016-04-20 17:54:20 +03:00
Andrew Davison
02601ace68 Release download path must use the version, not the branch 2016-04-20 17:54:20 +03:00
Andrew Davison
5cb03baa95 Use a REDASH_BRANCH environment variable instead, in the same way as REDASH_VERSION.
Move REDASH_VERSION var setup to top of file where it is more visible and easier to update.
2016-04-20 17:54:20 +03:00
Arik Fraimovich
fac8295aaf Use ng-if instead of ng-show for schema 2016-04-20 17:54:20 +03:00
Arik Fraimovich
fd913402bc Fix: on first save, make sure we load alredy existing data 2016-04-20 17:54:20 +03:00
Arik Fraimovich
7f7ab39329 Fix mobile state of query page 2016-04-20 17:54:20 +03:00
Andrew Davison
23c7218195 Allow passing version to bootstrap.sh as a cli parameter, to download a specific tag's setup files. 2016-04-20 17:54:20 +03:00
Andrew Davison
2a559d6452 Fix "http directive is not allowed here" 2016-04-20 17:54:20 +03:00
Sam Ehlers
3a8af1e4c7 Fixed error when result doesn't contain series 2016-04-20 17:54:20 +03:00
Sam Ehlers
3c2877123f Fixed error when series doesn't have tags 2016-04-20 17:54:20 +03:00
Sam Ehlers
ebb07946ac Added support for multiple queries and tags
Multiple queries are separated by semicolons and could possibly have
different columns and tags.
https://docs.influxdata.com/influxdb/v0.11/guides/querying_data/#multiple-queries

Tags come in to the result set when you use a GROUP BY statement.
2016-04-20 17:54:20 +03:00
Arik Fraimovich
afd009e540 When opening a query page, don't automatically execute it 2016-04-20 17:54:20 +03:00
Arik Fraimovich
5d86d34b4e Fix: show notifications only when page in background 2016-04-20 17:54:20 +03:00
Arik Fraimovich
8b5673e973 Ask for notification permissions only on query execution 2016-04-20 17:54:20 +03:00
Arik Fraimovich
50c043ca54 Split colors palette to base and additional 2016-04-20 17:54:20 +03:00
chiragkparmar@gmail.com
42fdfdeb97 Update color palette to add more pretty colors
Inspired from ggplot2 color palette, update ColorPalette to make charts
more pretty.
2016-04-20 17:54:20 +03:00
Arik Fraimovich
cc51baabce Move buttons in the query page 2016-04-20 17:54:20 +03:00
Alex DeBrie
586f035a5c Prevent schemas from expanding on search 2016-04-20 17:54:20 +03:00
Andrea Leesley
d3c47e5bf3 Adjust query info ui. 2016-04-20 17:54:20 +03:00
Andrea Leesley
cfc064ef48 Make query results full width. 2016-04-20 17:54:20 +03:00
Andrea Leesley
36b471f26d Move the schema container to the right.
- Clean up ui on the new query page.
2016-04-20 17:54:20 +03:00
atharva.inamdar
96a0fe8ed8 updated query search bar visibility threshold to 500 2016-04-20 17:54:20 +03:00
Alexander Leibzon
f33a2fcaa9 code style, name method 2016-04-20 17:54:20 +03:00
Alexander Leibzon
073182612b requirements rearrangement 2016-04-20 17:54:20 +03:00
Alexander Leibzon
d3d6121fc0 fixes 2016-04-20 17:54:20 +03:00
Alexander Leibzon
0b222498e7 the dynamoDB SQL connector 2016-04-20 17:54:20 +03:00
Alexander Leibzon
1b3fe9dde2 add requirements 2016-04-20 17:54:20 +03:00
Alexander Leibzon
ccf6c0ede6 dynamodb SQL connector 2016-04-20 17:54:20 +03:00
John Katsnelson
07f18cbe0c docker-compose ls should be docker-machine ls 2016-04-20 17:54:20 +03:00
John Katsnelson
619b4ec32d adds basic docker compose instructions 2016-04-20 17:54:20 +03:00
Arik Fraimovich
b73fdf1f33 Merge pull request #1003 from getredash/feature/embed_event
Fix #986: search might return duplicate queries
2016-04-20 17:14:05 +03:00
Arik Fraimovich
10f12e5008 Fix #986: search might return duplicate queries 2016-04-20 17:09:59 +03:00
Arik Fraimovich
ff9336907e Merge pull request #1002 from getredash/feature/embed_event
Feature: record events for embed and shared dashboard open
2016-04-20 16:25:45 +03:00
Arik Fraimovich
fe54e63dd3 Record event when opening shared dashboard 2016-04-20 16:23:00 +03:00
Arik Fraimovich
17d371379b Record event when opening visualization embed (closes #971). 2016-04-20 16:15:31 +03:00
Arik Fraimovich
0908e222a6 Merge pull request #1000 from getredash/fix/edit_button
Fix: don't show visualization edit button if user can't edit it.
2016-04-19 14:14:37 +03:00
Arik Fraimovich
dbfe6c385c Fix: don't show viz edit button if user can't edit 2016-04-19 14:11:50 +03:00
Arik Fraimovich
e63220cc3a Merge pull request #998 from getredash/fix/embed_title
Fix #994: query description was rendered with bigger font than name
2016-04-18 22:10:30 +03:00
Arik Fraimovich
07ccd0986d Show query description only if enabled 2016-04-18 22:08:32 +03:00
Arik Fraimovich
9e96b7f81e Merge pull request #999 from getredash/fix/empty_dropdown
Fix #996: only show dashboard edit controls if user can edit
2016-04-18 18:46:40 +03:00
Arik Fraimovich
a9ccdc79a4 Fix #996: only show edit controls if user can edit 2016-04-18 18:43:56 +03:00
Arik Fraimovich
3ad726e87f Fix #994: query description was rendered with bigger font than name 2016-04-18 18:36:42 +03:00
Arik Fraimovich
2655eec907 Merge pull request #997 from AntoineAugusti/additional-documentation
Additional documentation
2016-04-18 18:09:36 +03:00
Antoine Augusti
1d54bf000b Mention how to use some special features 2016-04-18 17:00:23 +02:00
Antoine Augusti
2e45b67e11 Specify the user to use when using the provided AMIs 2016-04-18 15:39:42 +02:00
Arik Fraimovich
30227f4815 Merge pull request #856 from getredash/feature/task_monitoring
Feature: running queries monitor
2016-04-18 13:49:55 +03:00
Arik Fraimovich
d38ab20c45 Feature: running queries (tasks) monitor
- Refactored tasks module into a package.
- Add new admins screens (running queries & outdated queries).
2016-04-18 13:46:31 +03:00
Arik Fraimovich
c17ba03a20 Merge pull request #992 from getredash/fix/2016-04-17
Small UI fixes
2016-04-17 18:15:51 +03:00
Arik Fraimovich
ff641440aa Avoid drawing chart before there is data 2016-04-17 18:12:12 +03:00
Arik Fraimovich
505f807e5a use ng-src to avoid errors before scope is available 2016-04-17 18:08:09 +03:00
Arik Fraimovich
eb61caa6b8 Show message if dashboard is archived 2016-04-17 18:05:15 +03:00
Arik Fraimovich
cbc58ba594 Fix: new user form was in wrong scope 2016-04-17 17:57:25 +03:00
Arik Fraimovich
8b4e8729dd Fix: embeds got broken due to missing inject 2016-04-17 14:30:02 +03:00
Arik Fraimovich
3925c48d14 Add material font to gulpfile 2016-04-17 12:26:48 +03:00
Arik Fraimovich
376199957e Merge pull request #991 from getredash/plotly
Improvements to Plotly.js integration
2016-04-17 12:13:57 +03:00
Arik Fraimovich
cf2407b69b Fix #779: use the default chart type for new series 2016-04-17 11:58:29 +03:00
Arik Fraimovich
c51779708e Remove angular-plotly and use Plotly's autoresize 2016-04-17 11:58:00 +03:00
Arik Fraimovich
9cded144e6 Remove Plotly legend height workaround and use official support for scrolling. 2016-04-17 11:12:33 +03:00
Arik Fraimovich
1dd8b6293b Switch to official Plotly.js bower distribution and use latest version. 2016-04-17 11:12:09 +03:00
Arik Fraimovich
3881eaa72e bower.json: move bootstrap version to correct location 2016-04-17 11:12:03 +03:00
Arik Fraimovich
6db399893b Add documentation on permissions model 2016-04-17 09:45:52 +03:00
Arik Fraimovich
a98c45f649 Add Slack to list of contact methods 2016-04-17 09:24:21 +03:00
Arik Fraimovich
8e9cced4c5 Update name in conf.py 2016-04-15 23:27:29 +03:00
Arik Fraimovich
05eb9685ee Docs: re:dash -> Re:dash & new screenshots 2016-04-15 23:26:21 +03:00
Arik Fraimovich
7f920f352a Refine docker instructions 2016-04-15 23:14:14 +03:00
Arik Fraimovich
874793e4b0 Merge pull request #977 from ChiragKParmar/master
Adding two badges for better visibility.
2016-04-15 23:13:29 +03:00
Arik Fraimovich
6e440d8263 Merge pull request #911 from jkatsnelson/patch-1
Docs: Docker compose instructions
2016-04-15 22:45:17 +03:00
Arik Fraimovich
235109c3f7 Merge pull request #984 from getredash/surprise
New design 🎉 and UX improvements!
2016-04-15 18:59:04 +03:00
Arik Fraimovich
c7f2217f15 Merge pull request #988 from AntoineAugusti/cli-invite-user
Feature: add CLI to invite user
2016-04-15 18:54:52 +03:00
Antoine Augusti
25cfa04a2b Snake case it is 2016-04-15 17:34:57 +02:00
Antoine Augusti
a8758c3a5f Clean code 2016-04-15 16:38:05 +02:00
Antoine Augusti
e015adba7e Add a command to send an invitation link to a user 2016-04-15 15:55:52 +02:00
Arik Fraimovich
38b603b28c Change logoUrl to logo_url to comply w/ code style 2016-04-14 22:31:02 +03:00
Arik Fraimovich
44f8ccfd75 New design 🎉 and UX improvements! In more detail:
- Based on the SuperFlat admin theme (I bought the extended license).
- All pages are now full-width to give your data the room it deserves.
- Various UX improvements (althuogh there is still room for improvement).
2016-04-14 22:27:26 +03:00
Arik Fraimovich
6cc2cf765d Merge pull request #987 from AntoineAugusti/inject-app-context
Feature: ability to change logo
2016-04-14 22:18:32 +03:00
Arik Fraimovich
748f6e4f2c Merge pull request #983 from tdawber/feature/embed_open_in_redash
Add link to embeds to open query page in new window
2016-04-14 21:53:11 +03:00
Antoine Augusti
2d578247ef Inject variables with app context and ability to change the logo 2016-04-14 11:50:00 +02:00
tdawber
bde60d5919 Add link to embeds to open query in new window 2016-04-12 12:02:02 +10:00
Raymond Machira
17ca702cb3 Add environment variable to override secure_flag on session cookie 2016-04-11 13:02:29 -05:00
yohei.naruse
19aaa938d8 manage.py support group operations. 2016-04-10 22:08:36 +09:00
Arik Fraimovich
c80728c3fa Merge pull request #978 from getredash/fix958
Fix #958: group members/datasources were cached.
2016-04-10 11:28:28 +03:00
Arik Fraimovich
39a832aff5 Fix #958: group members/datasources were cached. 2016-04-10 11:26:33 +03:00
chiragkparmar@gmail.com
f3a12d20f8 Correct ports per installation strategy used 2016-04-08 12:41:29 -04:00
chiragkparmar@gmail.com
0743c4a532 Add more instructions on getting started. 2016-04-07 18:32:01 -04:00
chiragkparmar@gmail.com
1169ed2542 Remove extra gif 2016-04-07 18:19:31 -04:00
chiragkparmar@gmail.com
3f3a8fb903 Add second demo 2016-04-07 18:07:44 -04:00
chiragkparmar@gmail.com
8b87ac39d1 Add missing ) 2016-04-07 18:05:33 -04:00
chiragkparmar@gmail.com
4520d1889c Add documentation link at the top 2016-04-07 18:04:30 -04:00
chiragkparmar@gmail.com
57ec4bf21e Add gitter chat button 2016-04-07 17:55:32 -04:00
chiragkparmar@gmail.com
8091b546e0 Merge remote-tracking branch 'getredash/master' 2016-04-07 17:52:56 -04:00
Arik Fraimovich
d78ef8fab5 Merge pull request #974 from getredash/embed
Add support for using Redis via unix socket
2016-04-06 20:57:13 +03:00
Arik Fraimovich
31879f9f7d Add support for using Redis via unix socket 2016-04-06 20:54:21 +03:00
Arik Fraimovich
0c6317c1db Merge pull request #973 from getredash/embed
Small updates to data sources (friendlier name for MySQL, and ability to disable query runners)
2016-04-06 20:42:24 +03:00
Arik Fraimovich
eec883763a Ability to disable some query runners 2016-04-06 18:19:51 +03:00
Arik Fraimovich
85be5fb7e9 Friendlier name for MySQL query runner 2016-04-06 18:19:42 +03:00
Arik Fraimovich
2308a3af10 Merge pull request #972 from getredash/embed
Feature: allow toggling dashboard full screen from URL
2016-04-06 18:12:43 +03:00
Arik Fraimovich
db56818a52 Allow toggling dashboard full screen from URL 2016-04-06 18:02:42 +03:00
Arik Fraimovich
39315dbb18 Merge pull request #962 from handwritingio/influxdb_tags
InfluxDB: Added support for multiple queries and tags
2016-04-05 14:50:39 +03:00
Arik Fraimovich
0d9faa8c04 Merge pull request #964 from ink-adavison/bootstrap_version_parameter
Allow passing branch name to bootstrap.sh
2016-04-05 14:44:23 +03:00
Andrew Davison
70f7219057 Release download path must use the version, not the branch 2016-04-04 16:02:58 +01:00
Andrew Davison
ad2a5601bf Use a REDASH_BRANCH environment variable instead, in the same way as REDASH_VERSION.
Move REDASH_VERSION var setup to top of file where it is more visible and easier to update.
2016-04-04 15:37:38 +01:00
Arik Fraimovich
b0ea6b0f7f Merge pull request #970 from getredash/query_page
Use ng-if instead of ng-show for schema
2016-04-03 12:07:23 +03:00
Arik Fraimovich
43078f60cf Use ng-if instead of ng-show for schema 2016-04-03 12:06:52 +03:00
Arik Fraimovich
637c17bcd1 Merge pull request #969 from getredash/query_page
Fix: on first save, make sure we load alredy existing data
2016-04-03 11:08:09 +03:00
Arik Fraimovich
941657fbbc Fix: on first save, make sure we load alredy existing data 2016-04-03 10:42:48 +03:00
Arik Fraimovich
07a53d6aa8 Fix mobile state of query page 2016-04-03 10:30:53 +03:00
Arik Fraimovich
93c663d5aa Merge pull request #963 from ink-adavison/nginx_vhost_http_fix
Fix "http directive is not allowed here" on Ubuntu and Amazon Linux
2016-03-31 10:38:25 +03:00
Andrew Davison
4a401db4d2 Allow passing version to bootstrap.sh as a cli parameter, to download a specific tag's setup files. 2016-03-30 17:04:57 +01:00
Andrew Davison
90128b90e6 Fix "http directive is not allowed here" 2016-03-30 16:19:14 +01:00
Sam Ehlers
c6794dde64 Fixed error when result doesn't contain series 2016-03-30 10:17:55 -05:00
Sam Ehlers
b100824f94 Fixed error when series doesn't have tags 2016-03-30 10:17:45 -05:00
Sam Ehlers
9ff33ac024 Added support for multiple queries and tags
Multiple queries are separated by semicolons and could possibly have
different columns and tags.
https://docs.influxdata.com/influxdb/v0.11/guides/querying_data/#multiple-queries

Tags come in to the result set when you use a GROUP BY statement.
2016-03-30 09:28:24 -05:00
Arik Fraimovich
f6f9dace4d Merge pull request #960 from getredash/notification
When opening a query page, don't automatically execute it
2016-03-30 11:53:11 +03:00
Arik Fraimovich
4cc8dd1df8 When opening a query page, don't automatically execute it 2016-03-30 11:33:55 +03:00
Arik Fraimovich
52902c3f47 Merge pull request #959 from getredash/notification
Fix: show browser notification only when page is hidden
2016-03-30 11:04:32 +03:00
Arik Fraimovich
1768778d1d Fix: show notifications only when page in background 2016-03-30 11:01:11 +03:00
Arik Fraimovich
f5abb47d89 Ask for notification permissions only on query execution 2016-03-30 11:01:01 +03:00
Arik Fraimovich
ffe23fc59c Split colors palette to base and additional 2016-03-30 10:30:15 +03:00
chiragkparmar@gmail.com
d6a474b9f1 Update color palette to add more pretty colors
Inspired from ggplot2 color palette, update ColorPalette to make charts
more pretty.
2016-03-30 10:27:38 +03:00
Arik Fraimovich
c5a763b5f2 Merge pull request #932 from hudl:SkunkUI
Adjust the UI on the New Query page
2016-03-30 10:11:37 +03:00
Arik Fraimovich
aab2da2f4c Move buttons in the query page 2016-03-30 10:06:48 +03:00
Arik Fraimovich
d83dfc977e Merge pull request #934 from alexanderlz/master
Feature: DynamoDB DQL query runner
2016-03-29 22:00:32 +03:00
Seva Gavrilov
5149845eec Merge branch 'master' of github.com:gseva/redash into dashboard-permissions 2016-03-29 13:29:45 -03:00
Seva Gavrilov
c98cdef8f2 Fixed dashboard restrictions and added tests. 2016-03-29 13:27:35 -03:00
Arik Fraimovich
0f727c2424 Fix typo in requirements.txt. 2016-03-29 16:16:57 +03:00
Arik Fraimovich
982b0efbe8 Fix #946: update Python redis lib version.
Looks like some of the Celery dependencies (which we don't have pinned version for) require newer version of redis lib.
2016-03-29 16:12:24 +03:00
Arik Fraimovich
5e22576c5c Merge pull request #956 from getredash/fix/impala
Fix: adapt Impala query runner for new configuration
2016-03-29 10:38:13 +03:00
Arik Fraimovich
76c2d37d0e Fix: adapt Impala query runner for new configuration 2016-03-29 10:30:31 +03:00
Seva Gavrilov
5bb1d2757e Text only widgets are now shown to everybody. 2016-03-28 18:00:37 -03:00
Arik Fraimovich
a66ac849ff Merge pull request #951 from seanauriti/patch-1
Fixes URL for Github Release
2016-03-28 21:35:22 +03:00
Arik Fraimovich
8b4e3226a8 Merge pull request #952 from seanauriti/patch-2
Update upgrade.rst
2016-03-28 21:34:49 +03:00
Sean Auriti
00c455fea5 Update upgrade.rst 2016-03-28 13:41:21 -04:00
Sean Auriti
339c91836f Fixes URL for Github Release 2016-03-28 12:17:52 -04:00
Arik Fraimovich
0dfbe6fc72 Merge pull request #947 from getredash/fix/migration
Fix: permissions migration was changing default's group type
2016-03-27 10:32:14 +03:00
Arik Fraimovich
dd836d909d Migration to make sure the default group has correct type 2016-03-27 10:29:26 +03:00
Arik Fraimovich
6cff6e833a Fix permissions migration 2016-03-27 10:26:09 +03:00
Arik Fraimovich
5885cd9aef Merge pull request #940 from kirikiriyamama/improve_security
Nginx configuration: hide version
2016-03-25 20:16:37 +02:00
Alex DeBrie
d43d5731ee Prevent schemas from expanding on search 2016-03-24 17:00:45 +00:00
Andrea Leesley
1701d6cb60 Adjust query info ui. 2016-03-24 16:59:14 +00:00
Andrea Leesley
a9fbb1ccb2 Make query results full width. 2016-03-24 16:59:14 +00:00
Andrea Leesley
c096a133c5 Move the schema container to the right.
- Clean up ui on the new query page.
2016-03-24 16:55:49 +00:00
atharva.inamdar
be90353cca updated query search bar visibility threshold to 500 2016-03-24 16:39:19 +00:00
Alex DeBrie
4bcb705a2a Hide user subscriptions if email is not enabled 2016-03-24 14:28:47 +00:00
Alex DeBrie
1c04f3cc29 Fix broken tests 2016-03-24 13:55:46 +00:00
Alex DeBrie
ee29f07802 Clean up after rebase 2016-03-24 02:46:59 +00:00
Alex DeBrie
df2067eec1 Make subscription display more clear 2016-03-23 20:57:19 +00:00
Alex DeBrie
601010e44e Remove email destination from AlertSubscription migration 2016-03-23 20:57:19 +00:00
Alex DeBrie
6c3b713b3d Add destination subscriptions to Alert page 2016-03-23 20:57:19 +00:00
Alex DeBrie
faf2f7dede Add user subscriptions back to Alert page 2016-03-23 20:57:19 +00:00
Alex DeBrie
bf880a834b Move notify to AlertSubscription; adjust email destination to take multiple addresses 2016-03-23 20:57:19 +00:00
Alex DeBrie
ce6ceac5c4 Add hipchat to default destinations 2016-03-23 20:57:19 +00:00
Alex DeBrie
70b4f9d447 Create dynamicForm directive 2016-03-23 20:57:18 +00:00
Alex DeBrie
3838b03417 Clean up tasks.py to remove unneeded code 2016-03-23 20:52:50 +00:00
Alex DeBrie
a11fa2717d Add migrations of existing alerts 2016-03-23 20:51:10 +00:00
Alex DeBrie
becf315e66 Add hipchat destination 2016-03-23 20:51:10 +00:00
Alex DeBrie
04eb37a7f2 Pass objects instead of IDs to notify method 2016-03-23 20:51:10 +00:00
Alex DeBrie
e91610f4b4 Remove hacky backwards compatibility for notifications 2016-03-23 20:51:10 +00:00
Alex DeBrie
63786c98df Remove unnecessary code 2016-03-23 20:51:10 +00:00
Alex DeBrie
54f3df6988 Move destination icons to BaseDestination 2016-03-23 20:49:20 +00:00
Alex DeBrie
bb3874e631 Pass subscription user to notify method 2016-03-23 20:49:20 +00:00
Alex DeBrie
eef18510d5 Fix email destination bugs; make email alerts backward compatible 2016-03-23 20:49:20 +00:00
Alex DeBrie
a3c0917d85 Fix AlertSubscription unsubscribe permissions and broken tests 2016-03-23 20:49:20 +00:00
Alex DeBrie
ed7f9ea5f0 Create UI for adding/removing alert subscriptions 2016-03-23 20:49:20 +00:00
Alex DeBrie
82b7146216 Enforce AlertSubscription uniqueness; update AlertSubscription delete handler 2016-03-23 20:49:20 +00:00
Alex DeBrie
3cfbb9855b Update notify logic in tasks and add destinations for Slack, email, and webhooks 2016-03-23 20:49:20 +00:00
Alex DeBrie
4938f8e013 Add ability to choose destination when creating alert 2016-03-23 20:47:50 +00:00
Alex DeBrie
a43761da39 Require destination_id in POSTs that create a subscription 2016-03-23 20:47:50 +00:00
Alex DeBrie
a3703b2058 Fix broken tests 2016-03-23 20:47:08 +00:00
Alex DeBrie
f2d5d52310 Remove destination groups; use ConfigurationContainer for options; Add user field on NotificationDestination 2016-03-23 20:44:14 +00:00
Alex DeBrie
eed2a41816 Add destination field to AlertSubscription 2016-03-23 20:39:22 +00:00
Alex DeBrie
16c0df4117 Group handlers for Destinations 2016-03-23 20:38:33 +00:00
Alex DeBrie
3844483776 Add destination elements to rd_ui 2016-03-23 20:35:50 +00:00
Alex DeBrie
53f8f1de3b Fix typo 2016-03-23 20:24:26 +00:00
Alex DeBrie
3ac7f02aea Add NotificationDestination model and handlers; Add BaseNotification class 2016-03-23 20:24:26 +00:00
Seva Gavrilov
66d1bb1af6 Merge github.com:yanenok/redash into dashboard-permissions 2016-03-23 12:36:11 -03:00
Arik Fraimovich
002396117d Merge pull request #941 from kasajei/master
Fix install command for freetds-devel on amazon_linux
2016-03-23 14:58:47 +02:00
kasajei
eaaeffb8a2 Fix install command for freetds-devel on amazon_linux 2016-03-23 19:06:27 +09:00
Alexander Leibzon
7bb80e375a code style, name method 2016-03-23 11:44:57 +02:00
kirikiriyamama
3aca06b57f Remove unnecessary blanks 2016-03-23 11:16:12 +09:00
kirikiriyamama
d2a57cbf62 Improve security
Hide nginx version
2016-03-23 11:16:05 +09:00
Arik Fraimovich
70a5ffdbf5 Merge pull request #939 from AntoineAugusti/patch-1
Docs: Fix command to restart the web server
2016-03-22 11:03:52 +02:00
Antoine Augusti
a77b2168bd Fix command to restart the web server 2016-03-22 10:00:14 +01:00
Arik Fraimovich
ba3013a513 Merge pull request #883 from tsibley/remote-user-auth
Support for REMOTE_USER authentication
2016-03-22 09:53:13 +02:00
Thomas Sibley
e61a5f3567 Support for remote user authentication via a trusted request header
This allows redash to use nearly any custom authentication setup.
Authentication via the REMOTE_USER environment variable is not provided
as it's deemed unlikely to ever be used.

Note that, like existing authentication providers, if you disable
password authentication and the remote user auth is unsuccessful
(probably due to a misconfiguration), then you'll get a redirect
loop of /login ⇄  /remote_user/login.
2016-03-21 17:00:16 -07:00
Arik Fraimovich
624ebbadb9 Retain copy of the event before it's being changed 2016-03-21 14:29:07 +02:00
Arik Fraimovich
2ce6b567ca Include public.html in frontend build 2016-03-21 13:12:01 +02:00
Arik Fraimovich
70e2b5de23 Merge pull request #938 from getredash/api_key_name
Fix: event reporting breaks when using ApiUser.
2016-03-21 12:49:40 +02:00
Arik Fraimovich
c3299ff0e6 Fix: event reporting breaks when using ApiUser. 2016-03-21 12:40:23 +02:00
Arik Fraimovich
0ec8c3e0b9 Add find_by_email method to User model 2016-03-21 10:20:58 +02:00
Arik Fraimovich
fbb81b62d6 Make signed out layout more modular 2016-03-20 10:07:10 +02:00
Arik Fraimovich
ea57175bfa Merge pull request #935 from getredash/extensibility
Feature: allow forwarding events to a webhook
2016-03-17 13:47:50 +02:00
Alexander Leibzon
ad95a5eb5e requirements rearrangement 2016-03-17 13:10:15 +02:00
Arik Fraimovich
efe1f8370c Feature: allow forwarding events to a webhook 2016-03-17 13:10:09 +02:00
Alexander Leibzon
2e93af3a21 fixes 2016-03-17 13:09:02 +02:00
Alexander Leibzon
c2f3c55d80 Merge remote-tracking branch 'upstream/master' 2016-03-17 12:51:53 +02:00
Alexander Leibzon
629c16acbe the dynamoDB SQL connector 2016-03-17 12:51:06 +02:00
Alexander Leibzon
158fc6222d add requirements 2016-03-17 12:50:39 +02:00
Alexander Leibzon
d88d1a1e61 dynamodb SQL connector 2016-03-17 03:13:44 +02:00
John Katsnelson
f2a1bc7f0e docker-compose ls should be docker-machine ls 2016-03-16 09:17:09 -07:00
Arik Fraimovich
9e6e913347 Merge pull request #928 from getredash/extensibility
Add extension points to override frontend elements
2016-03-15 22:49:45 +02:00
Arik Fraimovich
fde36298ce Add extension points to override frontend elemnts 2016-03-15 22:46:36 +02:00
Arik Fraimovich
e75c3c6871 Merge pull request #927 from getredash/fix/format
Fix: format API not working for non default organization
2016-03-15 15:28:13 +02:00
Arik Fraimovich
82871f606a Fix: format API not working for non defualt organization 2016-03-15 15:25:52 +02:00
Arik Fraimovich
0fcf232b5e Move footer to include file 2016-03-15 14:22:12 +02:00
Arik Fraimovich
e0ad3ee309 Merge pull request #925 from getredash/feature/password_reset
Feature: password reset & invite links functionality.
2016-03-15 10:59:54 +02:00
Arik Fraimovich
df180a2cb8 Allow admin to reset password instead of resend invite 2016-03-15 10:56:37 +02:00
Arik Fraimovich
0dccaa9ca4 Show warning if email server isn't configured 2016-03-15 10:37:33 +02:00
Arik Fraimovich
5a222beff4 Merge pull request #926 from erans/master
Python query runner: make max and min functions available to the scripts
2016-03-15 10:11:05 +02:00
Eran Sandler
86980793ac made Python's max and min functions available to the scripts 2016-03-15 09:40:03 +02:00
Arik Fraimovich
7a943f62b3 Password reset & invite links functionality. 2016-03-14 18:33:17 +02:00
Arik Fraimovich
56b3675a23 Merge pull request #923 from getredash/sentry_logs
Setup Sentry to catch error logs
2016-03-14 11:54:33 +02:00
Arik Fraimovich
7e094f2b2d Setup Sentry to catch error logs 2016-03-14 11:50:11 +02:00
Arik Fraimovich
079ae09253 Merge pull request #917 from getredash/modular
Restructure the Flask app
2016-03-14 11:47:26 +02:00
Arik Fraimovich
9ae503289c Restructure the Flask app:
Tried to untangle the cyclic dependencies, although there are still some of
them left. The main reason for this restructuring/refactoring is to make
the application a bit more extensible, so it's possible to add more routes
to it without touching the core.
2016-03-14 11:45:02 +02:00
Arik Fraimovich
f8a8928a90 Merge pull request #922 from getredash/feature/google_login
Allow existing users sign in with Google Apps even if they are not from an allowed domain
2016-03-14 11:30:11 +02:00
Arik Fraimovich
7da1c85315 Allow existing users sign in with Google Apps even if they are not in domain list. 2016-03-14 11:19:23 +02:00
Arik Fraimovich
d8b1131011 Merge pull request #921 from getredash/events
Additional events and information
2016-03-14 11:16:29 +02:00
Arik Fraimovich
3bdcd958ca Track data source and query creation 2016-03-14 10:59:11 +02:00
Arik Fraimovich
4d5d9fc42f Track user ip and useragent in events 2016-03-14 10:53:41 +02:00
Arik Fraimovich
dd5c1866f2 Merge pull request #920 from getredash/mongo_improvements
Feature: MongoDB - add support for $date and relative dates.
2016-03-14 10:16:25 +02:00
Arik Fraimovich
1359d386c6 Change tag to be humanTime 2016-03-14 10:13:38 +02:00
Arik Fraimovich
1aab5b4963 Install Pymongo for tests (temporary solution) 2016-03-13 23:32:54 +02:00
Arik Fraimovich
18d7c33620 Feature: MongoDB - add support for $date and relative dates. 2016-03-13 23:25:24 +02:00
Arik Fraimovich
abde67f2d9 Fix: gulp wasn't building app_layout.html 2016-03-13 22:58:12 +02:00
Arik Fraimovich
e60caf87a6 Merge pull request #919 from alexanderlz/master
Fix: schema fetching for Vertica & SQLite was broken (fix #916)
2016-03-13 22:51:25 +02:00
Alexander Leibzon
3f15ad36a5 fix schema resolution, resolves #916 2016-03-13 16:59:09 +02:00
Arik Fraimovich
2f35c1ea2b Merge pull request #918 from getredash/query_runners_improvements
Several improvements to query runners:
2016-03-13 15:44:04 +02:00
Arik Fraimovich
2d1a28389b Sort query runners by name 2016-03-13 15:40:51 +02:00
Arik Fraimovich
5cc7eda420 Remove from default list query runners we don't install deps for by default 2016-03-13 15:39:49 +02:00
Arik Fraimovich
32682483cd Add explicit Redshift query runner 2016-03-13 15:38:09 +02:00
Arik Fraimovich
605a12c34b PostgreSQL query runner: add timeout for connection 2016-03-13 15:38:00 +02:00
Arik Fraimovich
a6b86c7af2 Friendly name for MSSQL query runner 2016-03-13 15:34:41 +02:00
Arik Fraimovich
741faeef2b Update PyMongo versino to 3.2.1 2016-03-13 15:33:19 +02:00
Arik Fraimovich
2a745d5d54 Dockerfile: set the path to static assets 2016-03-12 18:37:20 +02:00
Arik Fraimovich
12660c3d51 Remove references to deprecated config 2016-03-12 18:22:53 +02:00
Arik Fraimovich
7c0c189b55 Merge pull request #910 from getredash/feature/better_fullscreen
Better full screen support
2016-03-12 18:18:07 +02:00
Arik Fraimovich
b0b9cd92f8 Merge pull request #912 from jkatsnelson/patch-2
redash static assets path should be pointed at dist, not app
2016-03-12 18:10:00 +02:00
Arik Fraimovich
27feb676b2 Added X-Forwarded-Proto to nginx config (closes #884) 2016-03-11 23:19:28 +02:00
Arik Fraimovich
cd5aec2b63 Fix #848: change instructions to recreate database instead of running migrations. 2016-03-11 23:13:17 +02:00
Arik Fraimovich
a1a73a1b2f Merge pull request #888 from toru-takahashi/improve-treasuredata-plugin
Improve TreasureData query runner
2016-03-11 22:58:11 +02:00
toru-takahashi
99ed8f8daf Modify property name and change default behavior 2016-03-12 00:31:54 +09:00
John Katsnelson
6fe5127f20 redash static assets path should be pointed at dist, not app 2016-03-10 11:36:42 -08:00
John Katsnelson
4d06a26038 adds basic docker compose instructions 2016-03-10 11:33:08 -08:00
Arik Fraimovich
841805496e Better full screen support 2016-03-10 14:05:34 +02:00
Arik Fraimovich
0e7098020c Merge pull request #909 from getredash/fix908
Fix #908: updating configuration without secrets was failing
2016-03-10 11:58:38 +02:00
Arik Fraimovich
33a5e06eb1 Fix #908: updating configuration without secrets was failing 2016-03-10 11:56:49 +02:00
Arik Fraimovich
536d7595c5 Merge pull request #906 from getredash/feature/public_dashboard
Feature: public dashboards
2016-03-10 11:52:01 +02:00
Arik Fraimovich
6104e5df3c Remove unused (Heroku related) Procfiles 2016-03-10 11:51:06 +02:00
Arik Fraimovich
b183651e04 Verify user has access to visualization before creating widget 2016-03-10 11:42:04 +02:00
Arik Fraimovich
fad8f2b7be UI for controlling access to dashboard 2016-03-10 11:28:39 +02:00
Arik Fraimovich
298db14bc1 API to create api key for dashboards 2016-03-10 10:09:26 +02:00
Arik Fraimovich
6bc3970ad5 Make sure user has access to data source when loading query result 2016-03-09 15:15:03 +02:00
Arik Fraimovich
be65582da9 Remove explicit header setting as we do it in the config 2016-03-09 13:43:52 +02:00
Arik Fraimovich
b92fbb489b Fix call to authenticate_request 2016-03-09 13:41:33 +02:00
Arik Fraimovich
52ad1f1ba1 Public dasboards feature. 2016-03-09 13:38:02 +02:00
Arik Fraimovich
b4b2bb86ee Merge pull request #902 from jeffwidman/fix-execute-bit
Make create_database script executable
2016-03-08 11:36:08 +02:00
Jeff Widman
ed01773d4e Make create_database script executable 2016-03-08 01:34:31 -08:00
Arik Fraimovich
399b7ad348 Merge pull request #901 from jeffwidman/fix-docker-compose
Docker: fix docker-compose env variables in example
2016-03-08 11:25:23 +02:00
Jeff Widman
6393f0225a No longer specifying google-apps domain from ENV var
http://docs.redash.io/en/latest/setup.html#users-google-authentication-setup
2016-03-08 01:21:04 -08:00
Jeff Widman
30066f6d04 Postgres and Redis urls should call out to their own container 2016-03-08 01:20:32 -08:00
Arik Fraimovich
feadf88159 Merge pull request #894 from jeffwidman/patch-4
Dockerfile: use redash's docker-hub nginx image
2016-03-08 10:56:21 +02:00
Jeff Widman
8d8605c7d8 volume mapping already handled in dockerfile 2016-03-08 00:53:31 -08:00
Arik Fraimovich
bf55d2f4da Merge pull request #895 from jeffwidman/patch-5
Use redash's docker-hub redash image
2016-03-08 08:32:03 +02:00
Arik Fraimovich
aec5f78e7b Merge pull request #893 from jeffwidman/patch-3
Fix YAML syntax error due to missing spaces
2016-03-08 08:27:44 +02:00
Jeff Widman
2a1354e70b Use redash's docker-hub redash image 2016-03-07 15:44:42 -08:00
Jeff Widman
2365f25e11 Use redash's docker-hub nginx image 2016-03-07 15:16:49 -08:00
Jeff Widman
8d10e9696e Fix YAML syntax error due to missing spaces
Environment variables weren't being parsed properly due to missing spaces.
2016-03-07 14:50:12 -08:00
toru-takahashi
6065545352 Fix case sensitive issue for query type 2016-03-08 02:13:52 +09:00
toru-takahashi
a98ead9030 Add option to enable Auto Get Schema 2016-03-08 02:05:05 +09:00
toru-takahashi
f07ed1df31 Update td-client to v0.4.1 2016-03-07 22:51:13 +09:00
Arik Fraimovich
a8ece8641a Bump version. 2016-03-06 12:13:19 +02:00
Arik Fraimovich
bac4025eff Merge pull request #882 from tsibley/new-data-source-via-cli
CLI: Restore ability to pass JSON options string for a new data source
2016-03-06 12:01:23 +02:00
Thomas Sibley
d07bf7e0aa CLI: Restore ability to pass JSON options string for a new data source
Commit "Encapsulate data source/query runner configuration in an
object." (ed99b84) accidentally removed that functionality by not
inflating the passed in JSON into a ConfigurationContainer object.

This led to errors of the form if you passed -o:

    Traceback (most recent call last):
      ...
      File "/opt/redash/redash-git/redash/models.py", line 321, in db_value
	return value.to_json()
    AttributeError: 'unicode' object has no attribute 'to_json'
2016-03-04 09:22:42 -08:00
Yana Manukhina
207dac693c Fix: show empty dashboards to their creators 2016-03-02 20:44:38 +03:00
Arik Fraimovich
8f937b7a35 Merge pull request #850 from toyama0919/master
Kibana: add support for limiting # of results returned
2016-03-01 23:37:24 +02:00
Arik Fraimovich
8747d0e724 Merge pull request #872 from erans/master
MongoDB: support for count queries
2016-03-01 23:36:24 +02:00
Yana Manukhina
866f378c88 List only dashboards available to current user based on user's groups 2016-03-01 20:46:36 +03:00
Arik Fraimovich
4a280eea29 Merge pull request #877 from ink-adavison/ink-adavison-ubuntubasepathfix
Correct Ubuntu Bootstrap.sh to a working Base URL
2016-03-01 13:36:25 +02:00
ink-adavison
194e9f4d7e Correct Ubuntu Bootstrap.sh to a working Base URL
The redash/docker/setup/... path is returning 404, but redash/master/setup/... works
2016-03-01 11:17:11 +00:00
Arik Fraimovich
4c5d2f14bf Merge pull request #866 from jeffwidman/fix_end_of_file_spacing
Fix whitespace issues
2016-02-29 22:39:15 +02:00
Jeff Widman
b86cf6ea4d Check should be 'x not in y' rather than 'not x in y' 2016-02-29 12:34:50 -08:00
Jeff Widman
dd72faaa77 Fix docstring spacing per PEP 257 2016-02-29 12:34:50 -08:00
Jeff Widman
c1b33939d0 A few misc whitespaces fixes 2016-02-29 12:34:50 -08:00
Jeff Widman
1aad95986b Add spaces around arithmetic operators per PEP 8 2016-02-29 12:34:50 -08:00
Jeff Widman
80209defc9 Remove extraneous spaces at end of lines 2016-02-29 12:34:46 -08:00
Jeff Widman
c198d22691 Format files to end in a single newline per PEP 8 2016-02-29 12:00:03 -08:00
Arik Fraimovich
43ac5600e5 Merge pull request #873 from getredash/feature/print_layout
Feature: print layout for dashboards
2016-02-29 21:11:41 +02:00
Arik Fraimovich
863365a412 Feature: print layout for dashboards 2016-02-29 21:07:07 +02:00
Eran Sandler
50c6bca421 added support for count queries 2016-02-29 21:05:50 +02:00
Arik Fraimovich
30b97e37f0 Merge pull request #854 from erans/master
Minors fixes for MongoDB and Python query runners
2016-02-29 21:04:14 +02:00
Eran Sandler
7f96de8b22 updated reverted change 2016-02-29 21:02:05 +02:00
Arik Fraimovich
dec30549f6 Merge pull request #867 from jeffwidman/fix_weird_indenting
Fix non-standard indentation to conventional four spaces
2016-02-29 15:25:11 +02:00
Arik Fraimovich
1a9059f1cc Merge pull request #865 from jeffwidman/fix_flask_ext
Replace deprecated flask.ext.* with flask_*
2016-02-29 15:22:13 +02:00
Jeff Widman
5208abd072 Make lines indented by four spaces instead of three 2016-02-29 01:58:19 -08:00
Jeff Widman
0ccbb24b3f Fix non-standard indentation to conventional four spaces
Not sure what happened in this section of code, but it was incorrectly indented by two spaces rather than four in several places.
2016-02-29 01:09:43 -08:00
Jeff Widman
09ccec59f5 Replace deprecated flask.ext.* with flask_*
Importing flask extensions using flask.ext.* is deprecated in favor of flask_*
For background, see: https://github.com/mitsuhiko/flask/issues/1135
2016-02-29 00:39:50 -08:00
Arik Fraimovich
8688b1c432 Merge pull request #864 from getredash/fix/datasource_show
Fix: data source loaded without properties
2016-02-28 18:56:10 +02:00
Arik Fraimovich
d06d1ada28 Fix: data source loaded without properties 2016-02-28 18:54:20 +02:00
Arik Fraimovich
3328de3462 Merge pull request #863 from getredash/fix/filters_datetime
Fix: properly show date/time in filters
2016-02-28 11:06:02 +02:00
Arik Fraimovich
84f71d1837 Fix: properly show date/time in filters 2016-02-28 11:04:08 +02:00
Arik Fraimovich
f219d20299 Merge pull request #857 from jeffwidman/patch-1
Fix typo: completly => completely
2016-02-27 21:55:56 +02:00
Eran Sandler
bdd2e0c418 fixed the query runner actually running code 2016-02-26 09:59:49 +02:00
Jeff Widman
d0cdf53b33 Fix typo: completly => completely 2016-02-25 18:00:15 -08:00
Arik Fraimovich
27faf8f88a Merge pull request #849 from sortable/presto-column-names
Fix: Presto - deduplicate column names
2016-02-25 21:39:29 +02:00
Arik Fraimovich
caf0734bac Merge pull request #855 from sreynen/patch-2
Docs: document settings.py
2016-02-25 21:37:57 +02:00
Eran Sandler
5f501b9df6 added JSON serialization support for internal bson timestamp which sometimes gets return in newer pymongo versions 2016-02-25 09:25:26 +02:00
Scott Reynen
caaf180d13 Create settings.rst
This is mostly just a template so far, as I'm only able to describe the settings I already understand, which isn't many.
2016-02-24 16:28:24 -07:00
Eran Sandler
68220a0d67 Added 'additionalModulesPaths' to the config allowing import modules from an external verified path. You'd still need to whitelist the module name in 'allowedImportModules' 2016-02-25 00:35:00 +02:00
Colin Dellow
0ebb53994b presto: use the disambiguated column name 2016-02-24 15:40:22 -05:00
Colin Dellow
177b62ea40 presto: use existing disambiguation path 2016-02-24 15:23:50 -05:00
Arik Fraimovich
a26da3aed3 Merge pull request #846 from sreynen/patch-1
Add link to dev environment documentation.
2016-02-24 22:07:35 +02:00
Arik Fraimovich
3a27955d24 Merge pull request #853 from getredash/arikfr-patch-1
Fix #851: embed doesn't load due to missing module.
2016-02-24 21:59:29 +02:00
Arik Fraimovich
86f2a0172f Fix #851: embed doesn't load due to missing module. 2016-02-24 21:53:12 +02:00
Arik Fraimovich
db59b34bda Merge pull request #852 from hudl/ConfigurationFixes
Small fixes for new ConfigurationContainer use
2016-02-24 21:49:57 +02:00
Alex DeBrie
51e92e0c71 Small fixes for new ConfigurationContainer use 2016-02-24 17:52:49 +00:00
toyama0919
246ce10a7f fix bug: Kibana not working limit, all select results. 2016-02-24 13:02:28 +09:00
Colin Dellow
cde54cec8b presto: don't merge columns with the same name
Fixes #847
2016-02-23 18:40:49 -05:00
Scott Reynen
21dc36b506 Add link to dev environment documentation. 2016-02-23 14:16:47 -07:00
Arik Fraimovich
d74442184e Merge pull request #844 from getredash/kms
Encapsulate data sources configuration logic in an object
2016-02-23 15:06:29 +02:00
Arik Fraimovich
db3e689e68 Update query runners for new config class 2016-02-23 15:02:49 +02:00
Arik Fraimovich
491e2e10d1 Fix test 2016-02-23 15:02:49 +02:00
Arik Fraimovich
ed99b8452c Encapsulate data source/query runner configuration in an object.
This is a step towards adding more complex logic in configuration
handling, like encryption of secrets.
2016-02-23 15:02:49 +02:00
Arik Fraimovich
f1e90fde31 Merge pull request #843 from getredash/design/download_links
Fix: dashboard query results links broken
2016-02-23 11:35:06 +02:00
Arik Fraimovich
954e63a41f Fix: dashboard query results links broken 2016-02-23 11:33:13 +02:00
Arik Fraimovich
6ec4c4c19c Merge pull request #840 from getredash/design/download_links
Improve layout of download links
2016-02-22 11:53:43 +02:00
Arik Fraimovich
553c6ac8d7 Improve layout of download links 2016-02-22 11:50:42 +02:00
Arik Fraimovich
b462869be7 Merge pull request #833 from toyama0919/feature/download-excel-from-dashboard
Feature: download Excel file link from dashboard.
2016-02-22 10:55:20 +02:00
Arik Fraimovich
3a5d59cf69 Merge pull request #839 from getredash/feature/api_params
Feature: add API to trigger query refresh and support for parameters.
2016-02-22 10:43:42 +02:00
Arik Fraimovich
c12b059d10 Add API to trigger query refresh and support for parameters. 2016-02-22 10:40:46 +02:00
Arik Fraimovich
e705ede3b7 Merge pull request #838 from erans/master
Python query runner -- added access to sorted and reversed functions
2016-02-21 13:03:05 +02:00
Eran Sandler
3b5aafa8e1 Added access to sorted and reversed functions 2016-02-21 11:13:46 +02:00
Arik Fraimovich
2440a83e46 Merge pull request #835 from benmanns/ubuntu-bootstrap-update-reorder
Ubuntu bootstrap script - move update before upgrade
2016-02-18 10:56:00 +02:00
Benjamin Manns
2b5a36cb3f Move update before upgrade
Running update before upgrade will fetch the latest sources, so we
can be sure that the upgrades will bring the box to the latest
versions of everything. Otherwise, this is often a no-op because
the box's sources will be cached at time of generation, meaning
there is nothing to upgrade.
2016-02-17 16:11:16 -05:00
toyama0919
78511fd0ce add feature, Excel download from dashboard. 2016-02-17 14:48:23 +09:00
Arik Fraimovich
a50ae19236 Merge pull request #823 from mobiledefense/add-widescreen-toggle
Feature: Button toggle to display dashboard in at full screen width
2016-02-16 10:23:16 +02:00
Arik Fraimovich
65f81c4d93 Merge pull request #831 from ninneko/801-download-excel
Feature: download results in Excel (XSLX) format (closes #801)
2016-02-16 09:19:53 +02:00
yohei.naruse
0afca7321a #801 fix test case.
schedule = "{:02d}:00".format(now.hour - 3) maybe be negative value when now.hour < 3.
I've fixed it.
2016-02-16 13:16:31 +09:00
yohei.naruse
32824f7575 apply reviews 2016-02-16 10:56:06 +09:00
yohei.naruse
2f16c8ae5f #801 Download DataSheets as Excel file 2016-02-15 23:47:31 +09:00
Arik Fraimovich
868263315b Merge pull request #829 from getredash/fix/embed
Fix: Plot.ly was given wrong timestamp
2016-02-14 20:40:43 +02:00
Arik Fraimovich
1ceddc9e91 Fix: we were sending wrong timestamp to Plotly 2016-02-14 20:38:32 +02:00
Arik Fraimovich
a96d135a4f Merge pull request #828 from getredash/fix/embed
Fix #797: user redirected to homepage when changing permission type
2016-02-14 20:11:51 +02:00
Arik Fraimovich
cec4e71d99 Fix #797: user redirected to homepage when changing permission type 2016-02-14 16:01:36 +02:00
Arik Fraimovich
0730ed8ed4 Merge pull request #827 from getredash/fix/embed
Feature: pivot tables are now regular visualizations that can be *saved*
2016-02-14 15:21:45 +02:00
Arik Fraimovich
e3420acd4b Feature: pivots are now regular visualizations that can be *saved*. 2016-02-14 15:17:52 +02:00
Arik Fraimovich
d21e2a79cc Close #772: upgrade to latest PivotTable.js lib 2016-02-14 14:40:01 +02:00
Arik Fraimovich
d1cf376ab3 Merge pull request #826 from getredash/fix/embed
Fix #802: switching to/from query source view resets chart colors
2016-02-14 14:13:24 +02:00
Arik Fraimovich
0ea0ba3fbe Fix #802: switching to/from query source view resets chart colors 2016-02-14 13:52:53 +02:00
Arik Fraimovich
0c93fe12ba Amend jshint settings 2016-02-14 13:51:32 +02:00
Arik Fraimovich
dad7b22cba Merge pull request #825 from getredash/fix/embed
Fix: sorting X values in charts had no effect
2016-02-14 13:26:32 +02:00
Arik Fraimovich
19766cf4ce Fix: sorting X values had no effect. 2016-02-14 13:24:14 +02:00
Arik Fraimovich
5e2727cfdf Use unminified d3.js in development. 2016-02-14 12:25:16 +02:00
Arik Fraimovich
3da326009b Bump Plot.ly version to a more recent one. 2016-02-14 12:24:56 +02:00
Matt Sochor
240739a445 Add dashboard toggle to display dashboard in at full screen width 2016-02-11 16:39:40 -05:00
Arik Fraimovich
253c4fd0a6 Merge pull request #821 from getredash/fix/embed
Fix embed URL & move logic into a directive
2016-02-10 15:41:05 +02:00
Arik Fraimovich
cda1068ff1 Show logo in embdes 2016-02-10 15:39:02 +02:00
Arik Fraimovich
eb324a4067 Limit the amount of information we return for embeds 2016-02-10 15:34:48 +02:00
Arik Fraimovich
8cf7314dc0 Fix embed URL & move logic into a directive 2016-02-10 15:34:31 +02:00
Arik Fraimovich
32b928d247 BSD 2-Clause
Updated copyright holder & removed last paragraph that doesn't belong to BSD-2 clause.
2016-02-10 11:32:00 +02:00
Arik Fraimovich
a5168ecc80 Update bootstrap.sh to more recent release 2016-02-09 15:18:58 +02:00
Arik Fraimovich
262ebb3bf1 Merge pull request #820 from getredash/gulp
Switch to Gulp from Grunt for faster builds
2016-02-09 15:15:38 +02:00
Arik Fraimovich
3e58d8798a Copy additional files on gulp build 2016-02-09 15:09:31 +02:00
Arik Fraimovich
bab536aaea Support for embeds in multi-org 2016-02-09 14:59:38 +02:00
Arik Fraimovich
bab4080430 Switch to Gulp from Grunt 2016-02-09 14:59:19 +02:00
Arik Fraimovich
a894f035dd Merge pull request #815 from getredash/fix/cli
Fix CLI issues with recent version
2016-02-09 00:56:16 +02:00
Arik Fraimovich
d4a83e29d4 Fix: delete data source CLI failing when data source has references 2016-02-09 00:03:35 +02:00
Arik Fraimovich
ded4761c8a If start_time not found skip metric collections (probably not running in real request context) 2016-02-09 00:01:44 +02:00
Arik Fraimovich
3fa143cfb1 Merge pull request #813 from ojarva/shellcheck-fixes
Fix shellcheck issues in bootstrap.sh scripts
2016-02-07 08:49:06 +02:00
Olli Jarva
de01184bbd Small shellcheck updates
Fix shellcheck complaints. These changes are not particularly important,
but spotting new/real issues is easier when checker output is empty by
default.
2016-02-06 16:42:24 +02:00
Arik Fraimovich
635bcc3e9f Pull latest docker image before building 2016-02-03 11:06:09 +02:00
Arik Fraimovich
b6b8daced6 Update Circle: build deps on master branch 2016-02-03 10:20:07 +02:00
Arik Fraimovich
b222f85d88 Add freetds-dev to Dockerfile 2016-02-03 09:06:01 +02:00
Arik Fraimovich
27c3fee345 Merge pull request #808 from joeharris76/master
Feature: Microsoft SQL Server query runner
2016-02-03 08:48:05 +02:00
Joe Harris
8c48ec5508 Cleanup of issues with the SQL Server feature PR 2016-02-02 16:18:21 -05:00
Joe Harris
cc176f5cba Add error handling to the pymssql import 2016-02-02 09:24:58 -05:00
Joe Harris
3a970a00c4 Add Microsoft SQL Server as a data source
Uses `pymssql` which in turn uses `FreeTDS`. Note that the data type
support is somewhat limited (see “datasources” page in docs).
2016-02-01 16:53:52 -05:00
Joe Harris
3b395a05b8 Merge pull request #1 from getredash/master
Pull from origin
2016-01-29 15:55:50 -05:00
Arik Fraimovich
9fa249a519 Update screenshots. 2016-01-27 12:55:52 +02:00
Arik Fraimovich
4e9b60ac82 Merge pull request #794 from getredash/hotfixes
Fixes for #792, #785, #733 and additional logging for execute_query
2016-01-24 12:03:34 +02:00
Arik Fraimovich
7a7e5be166 Fix #733: update migrations to work with new code 2016-01-24 11:57:05 +02:00
Arik Fraimovich
a1eec8490a Add more logging to execute_query 2016-01-24 11:32:44 +02:00
Arik Fraimovich
197bbde788 Fix #785: remove admin check box and direct users to use the groups
admin.
2016-01-24 11:08:02 +02:00
Arik Fraimovich
fed9d80fdb Fix #792: can't grant admin with CLI 2016-01-24 10:58:05 +02:00
Arik Fraimovich
78ba6f2739 Merge pull request #781 from woei66/master
Amazon Linux bootstrap script: check nginx default directory
2016-01-23 16:52:39 +02:00
Arik Fraimovich
cbb84ae3d3 Merge pull request #786 from JohnConnell/patch-1
Docs: instructions for compressed backup.
2016-01-23 16:51:21 +02:00
Arik Fraimovich
8120158119 Merge pull request #782 from shyamgopal/bug-768
Fix: Empty cells in google sheets displayed as datetime values #768
2016-01-23 16:50:44 +02:00
Arik Fraimovich
bd7b60d859 Merge pull request #784 from bobrik/fix-isoformat
Fix json serialization for datetime.timedelta, closes #783
2016-01-23 16:49:46 +02:00
Arik Fraimovich
80c03a5900 Merge pull request #787 from JohnConnell/patch-2
Docs: Updated links to Google's documentation about creating a service account
2016-01-23 16:46:04 +02:00
Arik Fraimovich
77e2d5db9b Merge pull request #790 from tknzk/fix_typo_on_doc
Docs: fix a typo in backup instructions
2016-01-23 16:44:35 +02:00
tknzk
7174dd856e fix a typo. 2016-01-22 17:45:40 +09:00
John Connell
6b5efc9e16 Update datasources.rst
Updated links to Google's documentation about creating a service account.
2016-01-21 13:05:02 -07:00
John Connell
4f95205795 Update maintenance.rst
Added: How to create a compressed backup.
2016-01-21 12:51:13 -07:00
Ivan Babrou
e26ea40c9b Fix json serialization for datetime.timedelta, closes #783 2016-01-21 14:37:36 +00:00
Arik Fraimovich
24137e87fd Update cloud images references 2016-01-21 14:47:51 +02:00
Shyamgopal Kundapurkar
221ec3a2a1 Fix of #768 2016-01-21 16:35:03 +05:30
David Lin
7081e25fa3 add -y to expect package, check nginx default directory and install to the right directory 2016-01-21 06:37:12 +00:00
Arik Fraimovich
8d126331cf Fix #778: update docs with correct CLI command. 2016-01-20 22:19:43 +02:00
Arik Fraimovich
33ffb2158b Update __init__.py 2016-01-20 10:21:45 +02:00
Arik Fraimovich
76ee88608d Merge pull request #777 from getredash/hotfix
Treat query errors as expected errors
2016-01-20 10:21:08 +02:00
Arik Fraimovich
a1ac289fb4 Treat query errors as expected errors 2016-01-20 10:17:10 +02:00
Arik Fraimovich
4f0b18b44e Merge pull request #776 from getredash/hotfix
Friendlier error messages for BigQuery query errors
2016-01-20 10:16:36 +02:00
Arik Fraimovich
44595cc930 Friendlier error messages for BigQuery 2016-01-20 10:01:08 +02:00
Arik Fraimovich
fcd478c93c Merge pull request #774 from getredash/hotfix
Fix: don't fail refresh_schema if one of the refresh ops fails
2016-01-19 18:44:47 +02:00
Arik Fraimovich
9971496401 Fix: don't fail refresh_schema if one of the refresh ops fails 2016-01-19 18:37:47 +02:00
Arik Fraimovich
8473783b0b Merge pull request #773 from getredash/hotfix
0.9.0 Hot Fixes
2016-01-19 18:34:19 +02:00
Arik Fraimovich
a9ae3c9ea3 Don't use DataSource.all in old migrations 2016-01-19 18:31:08 +02:00
Arik Fraimovich
505166455d Fix: show each data source only once 2016-01-19 18:26:51 +02:00
Arik Fraimovich
c6a06bd40a Remove debugging text 2016-01-19 18:01:35 +02:00
Arik Fraimovich
ed9e27019f Remove references to activity_log table 2016-01-19 18:00:42 +02:00
Arik Fraimovich
5b1abaaa52 Bump version. 2016-01-18 10:14:15 +02:00
Arik Fraimovich
c1da2579a3 Test for embed handler 2016-01-16 21:25:19 +02:00
Arik Fraimovich
1b36a62b91 Add conversion to int for Organization 2016-01-16 21:25:09 +02:00
Arik Fraimovich
ed2e06a787 Fix: counter visualization doesn't update when editing 2016-01-16 21:17:23 +02:00
Arik Fraimovich
47d3faae92 Fix: dashboard editor doesn't include last added widget 2016-01-16 21:11:25 +02:00
Olga Kogan
ff49321056 Update supervisor configs to recycle Gunicorn/Celery workers
This helps with avoiding memory leaks.
2016-01-15 17:57:09 +02:00
Arik Fraimovich
ee98b5a5c6 Improve the migration for unique data source name 2016-01-15 17:53:24 +02:00
Arik Fraimovich
245a4b5a3f Merge pull request #765 from nakechi/master
Feature: support HipChat Server
2016-01-15 17:30:48 +02:00
Arik Fraimovich
0546528b2c Merge pull request #762 from JohnConnell/master
Fix: typos and formatting issues in letsencrypt SSL cert documentation
2016-01-15 17:29:46 +02:00
Arik Fraimovich
d8d925c297 Merge pull request #764 from JohnConnell/master
Documentation: How to backup & restore redash db
2016-01-15 17:28:43 +02:00
nao-akechi
fac0af548b Feature: support HipChat Server 2016-01-15 18:36:07 +09:00
John Connell
5deca9bd60 Documentation: How to backup & restore redash db 2016-01-14 19:48:04 -07:00
John Connell
b1e0620f85 Update backup_restore.rst 2016-01-14 18:50:20 -07:00
John Connell
0a35f70a27 Update backup_restore.rst 2016-01-14 18:49:13 -07:00
John Connell
bd1551fb9d Rename backup_restore to backup_restore.rst 2016-01-14 18:47:18 -07:00
John Connell
f6a8a9975f How To: Backup re:dash database & restore to different server
Short guide explaining how to backup your re:dash database and restore it on a different server.
2016-01-14 18:46:31 -07:00
John Connell
179649d422 Update letsencrypt.rst 2016-01-14 01:32:10 -07:00
John Connell
1c584f65ba Update letsencrypt.rst
Fix various typos and formatting issues, including the commands for step 5 not being displayed.
2016-01-14 01:30:56 -07:00
John Connell
b62c75ac66 Update letsencrypt.rst
Fix two small typos. The first prevented the commands for step 5 from appearing and the second was a typo in the SSLLabs test URL.
2016-01-14 01:19:26 -07:00
Arik Fraimovich
f4096c0356 Update README.md 2016-01-14 09:56:17 +02:00
Arik Fraimovich
419fe389a4 Update README.md 2016-01-14 09:56:07 +02:00
Arik Fraimovich
031cb63f67 Rename peronal.html -> index.html 2016-01-13 10:03:52 +02:00
Arik Fraimovich
a62c5b5b24 Merge pull request #759 from getredash/fix/new_ds
Remove unused client side code
2016-01-13 10:02:25 +02:00
Arik Fraimovich
3befab7244 Remove client side performance collection 2016-01-13 10:00:06 +02:00
Arik Fraimovich
8c006238c5 Remove old IndexCtrl 2016-01-13 09:56:58 +02:00
Arik Fraimovich
03d897886e Merge pull request #758 from getredash/fix/new_ds
Fix: update dashboard after layout change
2016-01-12 21:43:10 +02:00
Arik Fraimovich
ebe032070e Fix: update dashboard after layout change 2016-01-12 16:25:10 +02:00
Arik Fraimovich
4a29f41ab3 Merge pull request #757 from getredash/fix/new_ds
Fix: infinite digest loop in coutner visualization
2016-01-12 15:14:05 +02:00
Arik Fraimovich
566cda359e Fix: infinite digest loop in coutner visualization 2016-01-12 15:13:23 +02:00
Arik Fraimovich
5a1736ad31 Merge pull request #756 from getredash/fix/new_ds
Fix: new data source should be assigned to default group
2016-01-12 15:13:04 +02:00
Arik Fraimovich
eed3d50372 create data source with default group specific method 2016-01-12 15:10:03 +02:00
Arik Fraimovich
901cf6f017 Fix: new data source should be assigned to default group? 2016-01-12 13:39:54 +02:00
Arik Fraimovich
83458ab25e increase opacity of overlay 2016-01-12 12:08:02 +02:00
Arik Fraimovich
9ab4e0e888 Merge pull request #754 from getredash/proxy_fix
Make groups listing only available for users with list_users permission
2016-01-12 09:22:06 +02:00
Arik Fraimovich
89ac67555e Make groups listing only available for users with list_users permission 2016-01-11 15:46:41 +02:00
Arik Fraimovich
4d7e58c8d7 Merge pull request #753 from getredash/proxy_fix
Show meaningful message when no data sources defined yet
2016-01-11 12:48:29 +02:00
Arik Fraimovich
14c4203593 Show meaningful message when no data sources defined yet 2016-01-11 12:47:17 +02:00
Arik Fraimovich
ccec964c24 Merge pull request #752 from getredash/proxy_fix
Fix: creating new user w/ Google Auth was broken.
2016-01-11 12:46:53 +02:00
Arik Fraimovich
d65e1a799a Fix: creating new user w/ Google Auth was broken. 2016-01-11 12:46:19 +02:00
Arik Fraimovich
451f216c31 Merge pull request #750 from JohnConnell/master
Docs: how to setup SSL using Let's Encrypt SSL certs
2016-01-11 12:07:21 +02:00
Arik Fraimovich
270afad6cf Merge pull request #751 from getredash/proxy_fix
Feature: ability to set # of proxies for the ProxyFix & fix the unique data source name migration
2016-01-11 12:07:14 +02:00
Arik Fraimovich
ccae8bcc69 Add option to override # of proxies 2016-01-11 12:02:18 +02:00
Arik Fraimovich
07f96a22af Update data source unique name migration to support another name of constraint 2016-01-11 11:30:26 +02:00
John Connell
3f6cf95307 Update letsencrypt.rst 2016-01-10 14:41:32 -07:00
John Connell
6f2d5090e6 Add documentation on using Let's Encrypt SSL certs 2016-01-09 16:00:09 -07:00
Arik Fraimovich
9cedb3bb66 Merge pull request #749 from getredash/unique_ds
Data sources should have unique names per organization
2016-01-09 22:37:40 +02:00
Arik Fraimovich
9751d3584b Remove forgotten console.log 2016-01-08 20:45:13 +02:00
Arik Fraimovich
13ced12cc9 Change data source index to be (org, name) 2016-01-08 20:44:11 +02:00
Arik Fraimovich
fdd60b364f Merge pull request #746 from Xangis/master
Feature: add an option to update a query every 30 days
2016-01-07 21:47:14 +02:00
Arik Fraimovich
dde63d1e96 Fix #745: when creating user from CLI, use default org. 2016-01-07 21:46:46 +02:00
=
174f7c0b1a Add an option to update a query every 30 days for use with things like monthly reports. 2016-01-07 08:24:34 -08:00
Arik Fraimovich
887d7179c4 Merge pull request #744 from getredash/feature/permissions
Run make deps only if rd_ui/app exists
2016-01-07 14:56:52 +02:00
Arik Fraimovich
fc84cf39fc Run make deps only if rd_ui/app exists 2016-01-07 14:56:28 +02:00
Arik Fraimovich
849c11b5f4 Merge pull request #743 from getredash/feature/permissions
Explicitly add httplib2 to requirements
2016-01-07 14:20:07 +02:00
Arik Fraimovich
66b4fe8e32 Explicitly add httplib2 to requirements 2016-01-07 14:18:12 +02:00
Arik Fraimovich
9d1823426c Fix SSLify skip list. 2016-01-07 13:09:41 +02:00
Arik Fraimovich
c004274108 Merge pull request #742 from getredash/feature/permissions
Add option to enforce HTTPs at the "Flask level"
2016-01-07 12:25:01 +02:00
Arik Fraimovich
0b89ee4653 Add option to enforce HTTPs at the Flask level 2016-01-07 12:22:32 +02:00
Arik Fraimovich
caff2e5caa Fix logo URL for multi-org 2016-01-07 12:03:28 +02:00
Arik Fraimovich
aa98f22a04 Merge pull request #741 from getredash/feature/permissions
Upgrade gunicorn version to latest.
2016-01-07 11:55:52 +02:00
Arik Fraimovich
db8915f154 Upgrade gunicorn 2016-01-07 11:52:50 +02:00
Arik Fraimovich
ce9a5c05fb Merge pull request #740 from getredash/feature/permissions
Fix #738: alert code was referencing non existing attribute
2016-01-07 11:48:27 +02:00
Arik Fraimovich
246725515d Fix #738: alert code was referencing non existing attribute 2016-01-07 11:46:35 +02:00
Arik Fraimovich
be4c59e73d Merge pull request #739 from toyama0919/master
Fix: Alert: when Alert.name is multibyte character, occur UnicodeEncodeError
2016-01-07 11:44:58 +02:00
toyama0919
40e047a47c Fix: Alert: when Alert.name is multibyte character, occur UnicodeEncodeError. 2016-01-07 11:03:33 +09:00
Arik Fraimovich
048ef7234c Merge pull request #737 from getredash/feature/permissions
Fix: user created without groups (+2 more)
2016-01-07 00:38:27 +02:00
Arik Fraimovich
bd29bdbb2e Fix: datasource refresh schemas was broken 2016-01-07 00:36:09 +02:00
Arik Fraimovich
13252bb0af Fix #736: user missing groups & events missing ord_id 2016-01-07 00:34:23 +02:00
Arik Fraimovich
07a709d59a Upgrade Sentry client to support new flask-login 2016-01-07 00:24:34 +02:00
Arik Fraimovich
55f80695b0 Merge pull request #707 from ryotarai/bower-in-dockerfile
Build dependencies during building Docker image
2016-01-06 23:11:14 +02:00
Arik Fraimovich
991512bc17 Merge pull request #735 from getredash/feature/permissions
Fix migration issue and CLI
2016-01-06 22:28:33 +02:00
Arik Fraimovich
5e58818043 Fix CLI to work with organizations 2016-01-06 15:14:09 +02:00
Arik Fraimovich
224998c62a Fix #733: merge migration #20 into #18, to avoid errors. 2016-01-06 14:59:18 +02:00
Arik Fraimovich
9a31077a99 Merge pull request #732 from getredash/feature/permissions
Fix #730: migration failing when no Google Apps domain set
2016-01-05 12:48:08 +02:00
Arik Fraimovich
ab39ed2898 Fix #730: migration failing when no Google Apps domain set 2016-01-05 12:46:00 +02:00
Arik Fraimovich
cb4fbf81a2 Merge pull request #724 from getredash/feature/permissions
Feature: new permission model
2016-01-04 17:27:01 +02:00
Arik Fraimovich
7c6b95e71d Change multi-org implementation:
To avoid complications with how Google Auth works, when enabling organization
multi-tenancy on a single instance, each organization becomes a "sub folder"
instead of a sub-domain.
2016-01-04 00:03:49 +02:00
Arik Fraimovich
f7b57fa580 Feature: new permissions system
This is one huge change for the permissions system and related:

* (Backward incompatible:) Remove the table based permissions in favour of the new model.
* Manage permission to view or query datasources based on groups.
* Add the concept of Organization. It's irrelevant for most deployments, but allows for
  multi-tenant support in re:dash.
* Replace ActivityLog with Event based rows (old data in activity_log table is retained).
* Enforce permissions on the server-side. There were some permissions that were only enforced
  on the client side. This is no more. All permissions are enforced by the server.
* Added new permission: 'super-admin' to access the status and Flask-Admin interface.
* Make sure that html is never cached by the browser - this is to make sure that the browser
  will always ask for the new Javascript/CSS resources (if such are available).
2015-12-31 10:43:33 +02:00
Arik Fraimovich
6e32f5b9f2 Merge pull request #726 from getredash/fix/lazy_load_oauth_app
Fix: lazy load the oauth app
2015-12-28 15:15:43 +02:00
Arik Fraimovich
1a748c2141 Fix expected path in test 2015-12-28 15:10:42 +02:00
Arik Fraimovich
99ed076c0c To speed up builds, install npm & pack only on master branch. 2015-12-28 15:06:12 +02:00
Arik Fraimovich
8a7dd3b46a Fix: lazy load the oauth app 2015-12-28 14:52:33 +02:00
Arik Fraimovich
6e28f949fb Merge pull request #725 from akariv/master
Fix: Google OAuth - support for next
2015-12-28 12:07:34 +02:00
Adam Kariv
a9ccfb8b42 Fix next for Google oauth 2015-12-27 13:48:59 +02:00
Arik Fraimovich
1aba777b61 Change output path for junit.xml. 2015-12-27 10:12:19 +02:00
Arik Fraimovich
1894df49fa Use XUnit reports in CircleCI tests. 2015-12-27 09:46:45 +02:00
Arik Fraimovich
200131bb45 Silence metrics collection in tests. 2015-12-27 09:43:36 +02:00
Arik Fraimovich
5e25ba0cf6 Merge pull request #722 from ninneko/721-chart-right-axis
Fix: use second y axis for line charts while stacking
2015-12-24 17:39:52 +02:00
Arik Fraimovich
184d208020 Merge pull request #723 from getredash/feature/metrics
Feature: collect metrics on query time & request time
2015-12-24 17:33:18 +02:00
Arik Fraimovich
610fe2a8a2 Feature: collect metrics on query time & request time 2015-12-24 16:35:41 +02:00
yohei.naruse
068ce57b24 make right axis enabled if there are stacked bars on right axis and lines on right axis. 2015-12-24 17:34:29 +09:00
Arik Fraimovich
af61784a28 Merge pull request #664 from akariv/master
Feature: ability to embed visualizations in external sites
2015-12-21 22:07:32 +02:00
Arik Fraimovich
871d8d6b6a Merge pull request #716 from getredash/fix/perf
Fix #708: dashboard breaks when removing widgets and adding again
2015-12-21 16:34:13 +02:00
Adam Kariv
ea1fac76a3 Adapt to changes in upstream 2015-12-21 09:01:44 +02:00
Adam Kariv
ed380fefaa CR fixes 2015-12-21 09:01:44 +02:00
Adam Kariv
cc9e89bb69 Fix allowAllToEditQueries not bound to settings 2015-12-21 09:01:44 +02:00
Adam Kariv
e9aeb11685 Embedding of visualizations in external sites 2015-12-21 09:01:44 +02:00
Arik Fraimovich
cc2dcb25b6 Merge pull request #714 from erans/mongodb-schema-support
Feature: load schema for MongoDB data source
2015-12-20 15:38:36 +02:00
Arik Fraimovich
bfb73166c6 Merge pull request #713 from alexanderlz/master
Fix: don't add "Copy of" when saving a query
2015-12-20 14:36:46 +02:00
Arik Fraimovich
30adfccd79 Fix #708: dashboard breaks when removing widgets and adding again 2015-12-20 13:15:58 +02:00
Eran Sandler
c3b6de55c0 added an extra check when a collection is empty and there are no documents to merge to show as fields 2015-12-20 09:58:29 +02:00
Eran Sandler
fa2cae1753 added schema support for MongoDB. Collections will be shown as tables and we merge the first and last documents (sorted by Natural order) to show the properties of the document. Since MongoDB is document based it might miss a few fields but it should give a good enough reference 2015-12-20 09:55:26 +02:00
Alexander Leibzon
b337a50fcc fix queryname when forking, add forked query_id to the name 2015-12-20 01:24:24 +02:00
Arik Fraimovich
3d178f9a60 Merge pull request #711 from alexanderlz/master
Feature: update forked query name
2015-12-16 20:56:06 +02:00
Arik Fraimovich
a0219bf354 Merge pull request #706 from alonho/fix/692_3
#692: Enable scrolling for pie charts with long legend
2015-12-16 17:41:02 +02:00
Ryota Arai
ec41077dc1 Run apt-get clean to reduce image size. 2015-12-17 00:07:56 +09:00
Ryota Arai
15f9a063ae Install nodejs, build assets and uninstall it in one instruction. 2015-12-17 00:07:56 +09:00
Ryota Arai
a15085dc93 Run supervisord as root. 2015-12-17 00:07:56 +09:00
Ryota Arai
78ae9ac647 Build dependencies during building Docker image. 2015-12-17 00:07:56 +09:00
Ryota Arai
f31ec7b1dd Stop to install bower and grunt-cli globally. 2015-12-17 00:07:56 +09:00
Arik Fraimovich
85916efa81 Merge pull request #710 from ryotarai/bq-max-mb-processed
Feature: BigQuery: limit amount of MB processed per query
2015-12-16 16:30:47 +02:00
Alexander Leibzon
31b6e6ff0f Merge remote-tracking branch 'upstream/master' 2015-12-16 15:17:58 +02:00
Ryota Arai
f20774b6c2 Rename maximumTotalMBytesProcessed to totalMBytesProcessedLimit. 2015-12-16 20:25:18 +09:00
Ryota Arai
dac6cabd1e Extract code into a method _get_query_result. 2015-12-16 20:19:35 +09:00
Ryota Arai
51949230d6 Extract code into a method _get_total_bytes_processed. 2015-12-16 20:19:31 +09:00
Ryota Arai
81386bcf37 If maximumTotalMBytesProcessed is set, do dryrun and check data size. 2015-12-16 20:04:33 +09:00
Alexander Leibzon
67118ee1aa add 'Copy of' to forked query 2015-12-15 01:15:03 +02:00
Alon Horev
e863d83bf4 #692: Enable scrolling for pie charts with long legend 2015-12-14 11:24:56 +02:00
Arik Fraimovich
d958817b10 Update 0014_add_alert_rearm_seconds.py 2015-12-14 10:47:46 +02:00
Arik Fraimovich
450631d6ce Merge pull request #680 from alexanderlz/master
Feature: show rows count per table
2015-12-14 10:31:08 +02:00
Arik Fraimovich
8b5a0206c2 Merge pull request #705 from alonho/fix/692_2
#692: Fix scrolling issue with plotly charts (didn't always work)
2015-12-13 17:25:02 +02:00
Alon Horev
49848a193a #692: Fix scrolling issue with plotly charts (didn't always work) 2015-12-13 17:06:07 +02:00
Alexander Leibzon
0f9d5219ef add setting for global enable/disable of table size estimations for schema 2015-12-13 15:13:14 +02:00
Alexander Leibzon
3cb14786f5 Bug 704: fix 2015-12-13 12:22:58 +02:00
Alexander Leibzon
8e432200aa Merge remote-tracking branch 'upstream/master' 2015-12-12 12:10:35 +02:00
Arik Fraimovich
30dd030a9d Merge pull request #703 from alonho/fix/area_stacking_hover
Chart: regular area stacking (not percent) now shows both the value and sum per point.
2015-12-12 07:46:22 +02:00
Alon Horev
fc3fc0e84a Chart: pie chart colors should use our custom palette and not the default plotly palette 2015-12-12 01:02:22 +02:00
Alon Horev
24b70e66af Chart: regular area stacking (not percent) now shows both the value and sum per point. 2015-12-11 23:22:22 +02:00
Arik Fraimovich
76a1b9fdbe Merge pull request #701 from alonho/fix/694_2
Fix: #694: When stacking is enabled show both the relative value (in %) and the absolute value (attempt #2)
2015-12-11 17:02:34 +02:00
Arik Fraimovich
e310f9d522 Merge pull request #700 from alonho/fix/692
Fix: #692: Chart legend was cut off with a large number of series. The wrapping div now scrolls to make it visible.
2015-12-11 14:18:19 +02:00
Alon Horev
86a0e74db8 #694: When stacking is enabled show both the relative value (in %) and the absolute value 2015-12-10 23:00:49 +02:00
Alon Horev
30a70338ba #692: Chart legend was cut off with a large number of series. The wrapping div now scrolls to make it visible. 2015-12-10 22:16:58 +02:00
Arik Fraimovich
b242dbb531 Merge pull request #698 from alonho/fix/694
Fix: When stacking is enabled show both the relative value (in %) and the absolute value
2015-12-10 21:59:38 +02:00
Arik Fraimovich
ca47b0e6f7 Merge pull request #699 from alonho/fix/695
Fix: Charts: when stacking is enabled we should use one yaxis otherwise they overlap
2015-12-10 18:57:14 +02:00
Alon Horev
7c992c53eb #694: When stacking is enabled show both the relative value (in %) and the absolute value 2015-12-10 17:28:47 +02:00
Alon Horev
4deb150a89 #695: Charts: when stacking is enabled we should use one yaxis otherwise they overlap 2015-12-10 16:18:32 +02:00
Arik Fraimovich
63f0a8cc20 Merge pull request #631 from brickx/master
Feature: alert rearm setting which allows periodic resending of alert messages.
2015-12-10 09:19:58 +02:00
Arik Fraimovich
7e4f5e1e03 Merge pull request #687 from alonho/feature/plotly
Feature: replace HighCharts with Plotly
2015-12-09 10:17:40 +02:00
Arik Fraimovich
6f1fed47b3 Merge pull request #691 from VirtualPaul/patch-1
Docs: add TreasureData to the list of datasources
2015-12-09 10:17:26 +02:00
Arik Fraimovich
4505437097 Bump version. 2015-12-09 10:16:15 +02:00
Paul Lacey
2ea2df5943 Update datasources.rst
Add Treasure Data to list of supported data sources
2015-12-08 15:31:58 -08:00
Alon Horev
135ffd693a Add an option to disable chart legend.
A user can disable it if he has tons of series.
Now that we explicitly enable it, it's also visible for a single series.
2015-12-07 19:07:04 +02:00
Alon Horev
0f82d4e17b Remove highcharts as it's not used anymore 2015-12-06 21:05:35 +02:00
Arik Fraimovich
32c0d3eb3d Merge pull request #688 from Xangis/patch-1
Docs: Add Greenplum to Postgresql section since it works with same settings.
2015-12-06 09:22:49 +02:00
Jason Champion
1bee22a578 Add Greenplum to Postgresql section since it works with same settings. 2015-12-05 15:24:55 -08:00
Arik Fraimovich
6bb57508e1 Merge pull request #686 from scottkrager/patch-1
Docs: Update bootstrap.sh link to getredash repo
2015-12-05 22:15:32 +02:00
Alon Horev
b7a43feeca #273: Replace highcharts with plotly (it's free!) 2015-12-05 03:01:44 +02:00
Arik Fraimovich
2d34bf1c54 Typo fix in task name. 2015-12-04 17:09:01 +02:00
Arik Fraimovich
7e3856b4f5 Unify deployment sections in CirlceCI config. 2015-12-04 16:18:58 +02:00
Scott Krager
189e105c68 Update bootstrap.sh link to getredash repo 2015-12-03 16:30:06 -08:00
Arik Fraimovich
378459d64f Merge pull request #685 from getredash/fix/alert_sub_migration
Feature: add settings to query results cleanup
2015-12-03 11:20:51 +02:00
Arik Fraimovich
ab72531889 Add settings to query results cleanup (closes #683) 2015-12-03 11:10:02 +02:00
Arik Fraimovich
51deb8f75d Merge pull request #684 from getredash/fix/alert_sub_migration
Fix: add migration for AlertSubscriber table
2015-12-03 11:04:31 +02:00
Arik Fraimovich
68f6e9b5e5 Add migration for AlertSubscriber table 2015-12-03 11:03:38 +02:00
Arik Fraimovich
fbfa76f4d6 Merge pull request #682 from alonho/master
Fix: bug with new version of ui-select and 'track by ' on choices
2015-12-02 20:12:42 +02:00
Alon Horev
28e8e049eb fix bug with new version of ui-select and 'track by ' on choices 2015-12-02 20:10:19 +02:00
Alon Horev
47dcead383 #273: as a preparation for adding plotly, remove date range picker in the chart (plotly supports it within the chart) 2015-12-02 11:08:25 +02:00
Arik Fraimovich
f1f9597998 Bump version. 2015-12-02 11:03:50 +02:00
Alexander Leibzon
0da39edf1a Merge branch 'master' of github.com:alexanderlz/redash
Conflicts:
	redash/models.py
	redash/query_runner/__init__.py
2015-12-01 16:32:03 +02:00
Alexander Leibzon
7845ad5ff7 refresh param 2015-12-01 16:27:35 +02:00
Alexander Leibzon
3808b451c6 add param to allow skipping table row count 2015-12-01 16:27:34 +02:00
Alexander Leibzon
c78789a670 modify hive/impala/oracle to use BaseSQLQueryRunner 2015-12-01 16:27:34 +02:00
Alexander Leibzon
2cd08d25a0 improve code, create BaseSQLQueryRunner class, adapt postgres/mysql 2015-12-01 16:27:34 +02:00
Alexander Leibzon
09ed4d5ede feature #674 2015-12-01 16:23:28 +02:00
Alexander Leibzon
1e97a0ce9f add param to allow skipping table row count 2015-12-01 15:18:25 +02:00
Alexander Leibzon
61cb203ce7 modify hive/impala/oracle to use BaseSQLQueryRunner 2015-12-01 13:38:17 +02:00
Alexander Leibzon
58c0c5c099 improve code, create BaseSQLQueryRunner class, adapt postgres/mysql 2015-12-01 13:30:39 +02:00
blu35ky
8072b06246 Merge with upstream/master. 2015-12-01 20:50:42 +11:00
Niels Draaisma
65f2c2136b Added handling of empty rearm settings 2015-12-01 20:47:42 +11:00
Niels Draaisma
8b9a9e9ac4 Added alert rearm setting 2015-12-01 20:43:49 +11:00
Arik Fraimovich
0b389d51aa Merge pull request #644 from toyama0919/feature/alert-to-hipchat
Feature: send alert notifications to HipChat or web hook
2015-12-01 10:50:53 +02:00
toyama0919
46f3e82571 Apply reviews. fix redash.utils instead of bson. 2015-12-01 10:36:21 +09:00
toyama0919
5b64918379 Apply reviews. fix, post json nested data for webhook. 2015-12-01 10:36:21 +09:00
toyama0919
7549f32d9a Apply reviews. fix http client library httplib2 to requests. 2015-12-01 10:36:21 +09:00
toyama0919
6f51776cbb fix, basic auth for webhook. 2015-12-01 10:36:21 +09:00
toyama0919
ad0afd8f3e add, alert notification to webhook. 2015-12-01 10:36:21 +09:00
toyama0919
8863282e58 Apply reviews from arikfr 2015-12-01 10:34:56 +09:00
toyama0919
9c1fda488c fix, alert notification to hipchat. 2015-12-01 10:33:01 +09:00
blu35ky
30a494dab0 Changes based on PR 2015-12-01 11:22:19 +11:00
Arik Fraimovich
995659ee0d Merge pull request #679 from alonho/table_pagination
Improve table widget pagination UI
2015-11-30 23:39:06 +02:00
Alon Horev
ad2642e9e5 Improve table widget pagination UI 2015-11-30 23:37:56 +02:00
Arik Fraimovich
740b305910 Merge pull request #676 from getredash/feature/version_check
Feature: re:dash version check
2015-11-30 22:37:20 +02:00
Arik Fraimovich
ca8cca0a8c Merge pull request #678 from alonho/655
Fix: Dashboard shouldn't crash with empty queries
2015-11-30 22:34:00 +02:00
Arik Fraimovich
7c4410ac63 Use ng-cloak to hide the new version message until relevant 2015-11-30 22:31:06 +02:00
Alon Horev
91a209ae82 #655: Dashboard shouldn't crash with empty queries 2015-11-30 18:17:37 +02:00
Arik Fraimovich
60cdb85cc4 Move all version check logic into a module of its own 2015-11-30 17:06:21 +02:00
Arik Fraimovich
becb4decf1 Show in UI if new version available 2015-11-30 16:38:42 +02:00
Arik Fraimovich
5f33e7ea18 Perform daily version check 2015-11-30 16:31:49 +02:00
Arik Fraimovich
7675de4ec7 Merge pull request #675 from alonho/redash_link
Add link to redash.io
2015-11-30 16:16:10 +02:00
Alon Horev
fe2aa71349 Add link to redash.io 2015-11-30 16:10:33 +02:00
Arik Fraimovich
b7720f7001 Merge pull request #672 from alonho/chart_editor
Feature: Improved chart editor UI/UX
2015-11-30 12:38:01 +02:00
Alon Horev
3b24f56eba #671: Improve chart editor UI/UX 2015-11-30 12:37:00 +02:00
Alexander Leibzon
06065badd4 feature #674 2015-11-29 01:16:27 +02:00
Arik Fraimovich
52b8e98b1a Merge pull request #620 from getredash/docker
Reorganize setup files & update Docker configurations
2015-11-26 11:27:52 +02:00
Arik Fraimovich
5fe9c2fcf0 Update Ubuntu with docker readme 2015-11-26 10:39:42 +02:00
Arik Fraimovich
816142aa54 Update evn files 2015-11-26 10:38:06 +02:00
Arik Fraimovich
f737be272f Update GitHub repo url (EverythingMe -> GetRedash) 2015-11-26 10:34:16 +02:00
Arik Fraimovich
0343fa7980 Merge pull request #661 from hudl/fix-cancelquery
Fix cancelling queries for Redshift/Postgres
2015-11-24 15:18:58 +02:00
Arik Fraimovich
0f9f9a24a0 Remove spaces in export command. 2015-11-24 15:10:27 +02:00
Alex DeBrie
5b9b18639b Move signal handler 2015-11-23 14:02:09 +00:00
Arik Fraimovich
ce46295dd3 Update location of config files 2015-11-23 15:46:00 +02:00
Arik Fraimovich
3781b0758e Fix nginx conf mounting 2015-11-23 15:39:48 +02:00
Arik Fraimovich
8d20180d40 Update mail setup guide. 2015-11-23 14:24:43 +02:00
Arik Fraimovich
a7b41327c6 Update docker hub organization 2015-11-23 11:41:45 +02:00
Arik Fraimovich
4d415c0246 WIP: bootstrap for docker 2015-11-23 11:38:17 +02:00
Arik Fraimovich
5331008e78 add docker-compose.yml 2015-11-23 11:38:17 +02:00
Arik Fraimovich
80783feda6 Bootstrap files for Docker image 2015-11-23 11:38:17 +02:00
Arik Fraimovich
2f308c3fa6 Remove test file 2015-11-23 11:38:17 +02:00
Arik Fraimovich
a63055f7f0 Fix build step 2015-11-23 11:38:17 +02:00
Arik Fraimovich
ce884ba6d3 Update CircleCI config to build images 2015-11-23 11:38:17 +02:00
Arik Fraimovich
63765281fe Fix path in bootstrap script 2015-11-23 11:38:16 +02:00
Arik Fraimovich
47e79003e5 Update packer config 2015-11-23 11:38:16 +02:00
Arik Fraimovich
541060c62e Remove latest_release_url.py - docker images will be created with current code base as context 2015-11-23 11:38:16 +02:00
Arik Fraimovich
3ba19fa80f update readme for ubuntu bootstrap 2015-11-23 11:38:16 +02:00
Arik Fraimovich
f3ec0448f5 Updates to Dockerfile:
- No need to pg client anymore.
- Fix path to supervisord.conf.
2015-11-23 11:38:16 +02:00
Arik Fraimovich
654349a7ae Better arrangement of setup directory 2015-11-23 11:38:16 +02:00
Arik Fraimovich
2b32de184e Change suffix of docker-compose file to .yml as suggested by docker-compose 2015-11-23 11:38:15 +02:00
Arik Fraimovich
1fb57edd1f Remove old Vagrant file 2015-11-23 11:38:15 +02:00
Arik Fraimovich
f6c65d139a Move Amazon Linux bootstrap into folder of its own 2015-11-23 11:38:15 +02:00
Arik Fraimovich
4e59472238 Fix .dockerignore file:
Allow sending rd_ui/dist, remove rd_ui/nodemodules.
2015-11-23 11:38:15 +02:00
Arik Fraimovich
feabc46da4 Merge pull request #668 from cou929/fix-all_models
Fix: AlertSubscription missing in all_models
2015-11-23 11:13:49 +02:00
Kosei Moriyama
51a10e5a20 Add AlertSubscription to all_models 2015-11-23 02:06:39 +09:00
Arik Fraimovich
5bf370d0f0 Merge pull request #660 from hudl/fix-regexanchors
Fix: strings that start with a date wrongly treated as date fields
2015-11-21 20:41:56 +02:00
Arik Fraimovich
5beec581d8 Merge pull request #667 from getredash/docs_alerts
Docs: add instructions on setting up email server
2015-11-20 21:32:20 +02:00
Arik Fraimovich
70080df534 Add instructions on setting up email server 2015-11-20 21:31:50 +02:00
Arik Fraimovich
0d4c3c329e Merge pull request #666 from alonho/patch-1
Fix: Specifying field type in the field name using __ didn't work
2015-11-20 16:39:06 +02:00
Alon Horev
76dfbad971 Specifying field type in the field name using __ didn't work
It works for '::' but probably didn't work for '__' due to a a copy-paste
2015-11-20 14:20:26 +02:00
Alex DeBrie
45a85c110f Add SIGINT signal 2015-11-18 18:30:54 +00:00
Alex DeBrie
f77c0aeb1d Add InterruptException to __all__ 2015-11-18 18:07:47 +00:00
Alex DeBrie
b23e328f69 Add sigint signal handler to BaseQueryRunner 2015-11-18 17:20:39 +00:00
Alex DeBrie
165d782b98 Add end of string anchor to date parsing regex 2015-11-18 16:15:10 +00:00
Arik Fraimovich
1bdc1bef73 Merge pull request #653 from hakobera/fix-date-range-selector
Fix date range selector does not show data of last day when user timezone is not UTC
2015-11-18 17:58:20 +02:00
Arik Fraimovich
e3b41b15d7 Update links in README. 2015-11-18 17:49:11 +02:00
Arik Fraimovich
7a95dec33b Merge pull request #659 from getredash/fixes_151118
Add footer to the layout, to have links to docs & GitHub
2015-11-18 17:45:55 +02:00
Arik Fraimovich
a3d059041c Add footer 2015-11-18 17:36:24 +02:00
Arik Fraimovich
3a6c1599f3 Update index.rst 2015-11-18 17:35:06 +02:00
Arik Fraimovich
f92aa7b15f Merge pull request #658 from getredash/fixes_151118
Charts: remove "Show Total %" menu option and the yellow color
2015-11-18 16:51:41 +02:00
Arik Fraimovich
d823506e5b Remove menu option and yellow color 2015-11-18 16:50:59 +02:00
Arik Fraimovich
fc93de7aa2 Merge pull request #657 from getredash/fixes_151118
Fix: Change user create button from Save to Create
2015-11-18 16:49:19 +02:00
Arik Fraimovich
a0cc25d174 Change user create button from Save to Create 2015-11-18 16:45:15 +02:00
Arik Fraimovich
df24bc3aae Merge pull request #656 from enriquesaid/header-gravatar-src
Fix: load user avatar image with ng-src
2015-11-17 23:19:23 +02:00
Enrique Marques Junior
60c2cb0a75 using ng-src 2015-11-17 14:53:43 -02:00
Kazuyuki Honda
ad19f2d304 Treat dateRange as UTC 2015-11-17 11:03:07 +09:00
Arik Fraimovich
3aa59a8152 Update README links. 2015-11-16 16:12:41 +02:00
Arik Fraimovich
32638aebed Merge pull request #650 from alonho/mql
Feature: MQL query runner
2015-11-15 17:21:44 +02:00
Arik Fraimovich
346ea66c9d Merge pull request #651 from alonho/datasource_defaults
Support default values in data source creation forms
2015-11-15 17:17:26 +02:00
Arik Fraimovich
d14b74b683 Merge pull request #654 from EverythingMe/fix-graphite-verify
Fix: verify is optional value of Graphite's config
2015-11-15 17:10:46 +02:00
Arik Fraimovich
5d879ce358 Update circle.yml 2015-11-15 17:02:43 +02:00
Arik Fraimovich
b4da4359a8 Fix: verify is optional value of Graphite's config 2015-11-14 23:35:37 +02:00
Kazuyuki Honda
7e08518a31 Fix date range selector when user timezone is not UTC 2015-11-14 13:03:14 +09:00
Alon Horev
bea0e9aad0 Add support for MQL (a propietery SQL implementation for MongoDB by digdata.io) 2015-11-13 23:35:34 +02:00
Alon Horev
a87179b68b Support default values in data source creation forms 2015-11-13 23:28:33 +02:00
Arik Fraimovich
91806eda44 Merge pull request #647 from runa/patch-3
Fix: bind Redis to localhost
2015-11-11 06:04:58 +02:00
martin sarsale
d1fe3d63fd bind redis to localhost
Having it bound to the public addresses is a security problem.
See http://antirez.com/news/96
2015-11-10 23:03:53 -03:00
Arik Fraimovich
8408409ce2 Merge pull request #642 from tjwudi/patch-3
Docs: make migrating Vagrant box command a one-liner
2015-11-10 20:43:59 +02:00
John Wu
6bbdd5eb44 Make migrating command one-liner 2015-11-09 14:54:45 -08:00
Arik Fraimovich
34ba54397d Merge pull request #638 from underdogio/dev/show.db.select.mobile.sqwished
Removed `rd-hidden-xs` to make everything visible on mobile
2015-11-08 22:59:14 +02:00
Arik Fraimovich
ec79ce74d0 Merge pull request #639 from hudl/Feature-ScheduleQueryPermission
Feature: permission to schedule query
2015-11-07 23:11:38 +02:00
Alex DeBrie
f324f1bf6f Add schedule_query permission 2015-11-07 17:52:32 +00:00
Todd Wolfson
47cfb7d620 Removed rd-hidden-xs to make everything visible on mobile 2015-11-05 18:55:40 -06:00
Arik Fraimovich
dab1a21b40 Merge pull request #637 from underdogio/dev/explore.regression.sqwished
Reverted pivottable upgrade to remove XSS vulnerability
2015-11-05 20:36:05 +02:00
Arik Fraimovich
aa04a6e4a5 Merge pull request #630 from gissehel/sqlite_query_runner
Feature: SQLite query runner
2015-11-05 09:19:13 +02:00
gissehel
e0a43a32ab * Removed commented lines
* Renamed "Database Name"/dbname to "Database Path"/dbpath
2015-11-04 07:17:58 +01:00
gissehel
68001ae0f1 sqlite support 2015-11-04 07:17:58 +01:00
Todd Wolfson
9d9501b158 Reverted pivottable upgrade to remove XSS vulnerability 2015-11-03 16:49:30 -06:00
Arik Fraimovich
67aecc0201 Merge pull request #594 from tjwudi/diwu/feature/date-range-selector
Feature: date range selector support for charts
2015-11-03 23:16:04 +02:00
Arik Fraimovich
0bc9fc1ed5 Merge pull request #575 from Wondermall/feature/support_for_basic_auth_on_elastic_queries
Feature: new ElasticSearch datasource, and rename previous one to Kibana
2015-11-03 22:01:51 +02:00
Arik Fraimovich
b548cb1d8f Merge pull request #625 from essence-tech/oracle-support
Feature: Oracle query runner
2015-11-03 21:56:38 +02:00
Arik Fraimovich
eb5c4dd5f3 Merge pull request #623 from stanhu/support-mysql-ssl
Feature: support MySQL over SSL
2015-11-03 21:54:58 +02:00
Stan Hu
a07a9b9390 Normalize SSL titles 2015-11-03 10:16:48 -08:00
Arik Fraimovich
56ade4735c Merge pull request #634 from tjwudi/patch-1
Document APIs exposed to Python scripts
2015-11-03 10:17:52 +02:00
John Wu
b8a9f1048a Document APIs exposed to Python scripts 2015-11-02 13:52:39 -08:00
Niels Draaisma
3dc62e3c85 Added handling of empty rearm settings 2015-10-30 16:18:15 +11:00
Niels Draaisma
73b2c5d38e Added alert rearm setting 2015-10-30 16:01:21 +11:00
Arik Fraimovich
5b3bcff4f5 Update README.md 2015-10-26 12:54:21 +02:00
Arik Fraimovich
b41b21c69e Update README.md 2015-10-26 12:53:32 +02:00
Arik Fraimovich
172d57e82c Update README.md 2015-10-26 12:51:58 +02:00
Arik Fraimovich
f507da9df7 Update README about re:dash future. 2015-10-26 12:51:20 +02:00
Stan Hu
2e27e43357 Support MySQL over SSL 2015-10-21 16:21:17 -07:00
Josh Fyne
8a0c287d05 Updated datasources docs 2015-10-21 12:06:47 -04:00
Josh Fyne
664a1806bc Better number handling 2015-10-21 10:05:38 -04:00
Josh Fyne
9a0ccd1bb5 Added cx_Oracle requirement 2015-10-20 15:40:18 -04:00
Josh Fyne
076fca0c5a Initial Oracle pass 2015-10-20 15:27:07 -04:00
Arik Fraimovich
59f099418a Merge pull request #617 from EverythingMe/fix/timezone
Improve timezone handling:
2015-10-20 16:29:47 +03:00
Arik Fraimovich
b9a0760d7e Improve timezone handling:
1. Load all date/datetime values with moment.utc() which doesn't apply
   current timezone to them.
2. Don't use toLocaleString to format strings (which was converting them
   to current timezone as well).

Ref #411.
2015-10-20 16:17:57 +03:00
Arik Fraimovich
a0c26c64f0 Bump version. 2015-10-20 15:50:27 +03:00
Arik Fraimovich
5f47689553 Update AWS/GCE image links. 2015-10-19 23:01:43 +03:00
Arik Fraimovich
a5bc90c816 Merge pull request #615 from EverythingMe/fix_y_axis
Fix: y axis settings should take into account two axes
2015-10-19 11:33:12 +03:00
Arik Fraimovich
39b8f40ad4 Fix: y axis settings should take into account two axes 2015-10-19 11:32:47 +03:00
Arik Fraimovich
070caa6976 Gruntfile.js: copy image files. 2015-10-18 23:45:21 +03:00
Arik Fraimovich
56b51f68bc Merge pull request #614 from EverythingMe/fix/caching
Fix: don't cache /results API endpoint
2015-10-18 14:20:52 +03:00
Arik Fraimovich
799ce3e718 Fix: don't cache /results API endpoint 2015-10-16 23:11:19 +03:00
Arik Fraimovich
9b47f0d08a Fix: test shouldn't depend on currnet time 2015-10-16 23:10:50 +03:00
Arik Fraimovich
4f4dc135f5 Merge pull request #607 from tlpham/master
Docs: Remove trailing spaces
2015-10-14 13:26:48 +03:00
Lior Rozner
4eb490a839 Code review fix.
Added migration to change all existing elasticsearch datasource to kibana datasource.
2015-10-13 20:14:58 -07:00
John Wu
410c5671f0 Revert: python data source in setting 2015-10-13 11:42:42 -07:00
John Wu
fad8bd47e8 Remove commented code
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-13 11:35:56 -07:00
John Wu
89f5074054 Prevent unneccesary call to setDateRangeToExtreme
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-13 11:33:20 -07:00
John Wu
5826fbd05f Use moment.min and moment.max 2015-10-13 11:20:36 -07:00
John Wu
ddab1c9493 Update angular-moment and moment 2015-10-13 11:19:19 -07:00
John Wu
f9d5fe235b Always use _addPointToSeriesIfInDateRange 2015-10-13 11:01:21 -07:00
tlpham
afe64fe981 Update upgrade.rst
Trailing spaces.
2015-10-13 12:25:55 +08:00
tlpham
99efe497ee Update results_format.rst
Trailing spaces.
2015-10-13 12:25:11 +08:00
Arik Fraimovich
9e183f1500 Merge pull request #588 from tjwudi/diwu/feature/docker-deployment
Docker deployment support
2015-10-11 23:13:22 +03:00
Arik Fraimovich
4b17b9869e Merge pull request #551 from ElJoche:hidden_widgets
Feature: allow adding hidden text box widgets.
2015-10-11 22:56:41 +03:00
Arik Fraimovich
872d58688f Update the hidden widgets code (only use for textbox, ng-hide) 2015-10-11 22:54:24 +03:00
Arik Fraimovich
37272dc2d9 Capitalize logout link 2015-10-11 15:54:08 +03:00
Arik Fraimovich
1a3df37940 Merge pull request #605 from EverythingMe/small_fixes_11_10_2015
Feature: allow setting HighChart's turbo threshold value
2015-10-11 15:30:58 +03:00
Arik Fraimovich
ddbf264020 Close #572: allow setting the HighCharts turbo threshold value 2015-10-11 15:29:50 +03:00
Arik Fraimovich
e93b71af85 Don't sanitize non string values 2015-10-11 15:16:23 +03:00
Arik Fraimovich
13184519c3 Merge pull request #604 from EverythingMe/small_fixes_11_10_2015
Fix #597: MongoDB date parsing logic improvement
2015-10-11 15:00:23 +03:00
Arik Fraimovich
0f8da884f9 Fix #597: MongoDB date parsing logic improvement 2015-10-11 14:44:12 +03:00
Arik Fraimovich
21de1d90e3 Merge pull request #599 from EverythingMe/fix/passwords
Fix: don't send passwords back to the UI
2015-10-11 12:33:33 +03:00
Arik Fraimovich
ed9eb691c1 Merge pull request #603 from EverythingMe/small_fixes_11_10_2015
Feature: allow setting only the additional query runners you need
2015-10-11 12:29:46 +03:00
Arik Fraimovich
d6c229759f Update docs 2015-10-11 12:20:59 +03:00
Arik Fraimovich
f0b8dfb449 Allow setting only the additional query runners instead of overriding whole list 2015-10-11 12:17:28 +03:00
Arik Fraimovich
6f335d34b9 Merge pull request #602 from EverythingMe/small_fixes_11_10_2015
Close #564: support setting API key with headers
2015-10-11 12:10:04 +03:00
Arik Fraimovich
bed63083a7 Close #564: support setting API key in headers 2015-10-11 11:54:21 +03:00
Arik Fraimovich
9886f5b13b Merge pull request #601 from EverythingMe/small_fixes_11_10_2015
Fix #581: execute_query permission ignored by UI
2015-10-11 11:26:50 +03:00
Arik Fraimovich
f0ee7a67d2 Fix #581: execute_query permission ignored by UI 2015-10-11 11:26:11 +03:00
Arik Fraimovich
9c43e1540e Merge pull request #600 from EverythingMe/small_fixes_11_10_2015
Fix: cohort visulization had infinte digest loop
2015-10-11 11:24:37 +03:00
Arik Fraimovich
b0cb2d3f1c Fix: cohort visulization had infinte digest loop 2015-10-11 11:16:49 +03:00
Arik Fraimovich
b525ad0622 Fix: don't require uploading file again when editing BQ/GS data source 2015-10-11 10:29:05 +03:00
Arik Fraimovich
602b9128a7 Stop sending passwords to the UI 2015-10-11 09:27:51 +03:00
Arik Fraimovich
45d3b18c0c Update comment 2015-10-11 08:26:57 +03:00
Arik Fraimovich
b1918743f2 Merge pull request #596 from Oneross/master
Docs: added notes about Python query runner configuration
2015-10-10 11:41:26 +03:00
qjo744
716f36ef9c updated python datasources note to reflect preference for setting environ variable over editing settings.py 2015-10-09 07:54:25 -04:00
qjo744
62aa21cdc8 updated python datasources note to reflect preference for setting environ variable over editing settings.py 2015-10-09 07:53:36 -04:00
qjo744
4e30fc1054 updated python datasources note to reflect preference for setting environ variable over editing settings.py 2015-10-09 07:52:48 -04:00
Arik Fraimovich
5a1d38c572 Merge pull request #593 from hudl/chartColourPalette
Chart colour palette updated
2015-10-09 06:43:14 +03:00
qjo744
360b0da159 added notes for python query runner configuration to docs #595 2015-10-08 19:09:03 -04:00
John Wu
cc91981845 Naming stuff
`seriesCollection` -> `allSeries` (shorter)
`s` -> `series`

Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-08 14:49:45 -07:00
John Wu
e19962d4e3 Remove unnecessary ENV line
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-08 13:40:03 -07:00
John Wu
99b6f8955e Add some mandatory nginx directives
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-08 13:25:44 -07:00
John Wu
cf6ce0599b Use volume to store postgres data
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-08 12:14:07 -07:00
John Wu
a699c04ee1 Download and build from latest source instead 2015-10-08 12:09:24 -07:00
John Wu
a8d7547dc7 Rename folder 2015-10-08 12:09:07 -07:00
John Wu
72804e6d80 Add redash-nginx repo content
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-08 11:57:44 -07:00
John Wu
e51db087c5 Remove unnecessarily exposed ports
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-08 11:46:16 -07:00
John Wu
0e9607205b Add nginx frontend in docker-compose
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-08 11:43:33 -07:00
John Wu
9f799f4bfe Use built image in docker-compose
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-08 11:38:17 -07:00
atharva.inamdar
17e0bd4cd2 hudl/fulla#140 new chart colours added to palette 2015-10-08 16:27:44 +01:00
atharva.inamdar
102038b129 hudl/fulla#140 new chart colours added to palette 2015-10-08 16:21:51 +01:00
Arik Fraimovich
c01d88cbea Merge pull request #591 from hudl/master
Feature: export pivot table as TSV
2015-10-08 08:35:28 +03:00
John Wu
9d6d88ebff Remove "export" in **.env**
Since we add `export` using `sed` in `bin/run`, there is no need to add
`export` in **.env** anymore. Also, docker-compose's `env_file` option
does not agree with `export`.

Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-07 17:26:14 -07:00
John Wu
3f429ebcb7 Don't use bin/run in docker
`bin/run` exports environment variables, which can override environment
variables provided by docker-compose.

Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-07 17:22:58 -07:00
John Wu
c854ce3c10 Remove postgres user
Also changed **docker_init_postgres.sh**. Since we don't have postgres
user now, then we cannot use `sudo -u postgres`. The alternative will be
running `psql --username=blahblah`.

Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-07 17:04:27 -07:00
John Wu
ab6cc3f146 Run celery using redash user 2015-10-07 16:21:37 -07:00
John Wu
97d0035f4a Group supervisord installation commands
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-07 11:16:49 -07:00
John Wu
8108bc7cb1 Group relevant commands
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-07 11:07:33 -07:00
John Wu
690cb2fccd Group all apt-get commands
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-07 10:58:52 -07:00
Arik Fraimovich
515c45776e Merge pull request #590 from underdogio/dev/select.last.data.source.sqwished
Added "Select last used data source" to query view
2015-10-07 19:50:15 +03:00
Todd Wolfson
fc44dba2ef Added "Select last used data source" to query view 2015-10-07 11:43:28 -05:00
Ben Cook
5329fe547c Merge pull request #1 from hudl/ExportPivotTable
Upgrade PivotTable.js and enable TSV export
2015-10-07 09:02:19 -05:00
John Wu
d6bb6d33a3 Expose ports in Dockerfile
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 16:30:18 -07:00
John Wu
9832b7f72a Use more descriptive name for series collection
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 15:04:34 -07:00
John Wu
2a6ed3ca52 Use bind(this) instead of creating that
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 15:04:02 -07:00
John Wu
2e78ef0128 Use more descriptive method name
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 14:50:15 -07:00
John Wu
d2d52d44f7 Postgres&Redis version consistency
Use Postgres 9.3 and Redis 2.8 images. This is to keep it consistent
with the version we use in provision script.

Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 14:38:24 -07:00
John Wu
987f4bd356 Use .env file through Dockefile
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 14:38:05 -07:00
John Wu
0c8c196d65 Group apt-get instructions
Given how docker caching works, it is better the group multiple
`apt-get` instructions into one when possible because it prevents docker
from building too many layers.

Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 14:13:53 -07:00
John Wu
9d703b44de Create postgres user
Create postgres user because we are now using `postgres-client` packages
which does not create postgres user by default. We need this user when
running `docker_init_postgres.sh`, so let's create it by hand.

Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 14:12:48 -07:00
John Wu
fb00350c58 Migrate stuff in bootstrap_docker.sh into Dockerfile
By using Dockerfile `RUN` command, we can enable docker to cache our
build. Also, much more easier to maintain.

Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 13:21:09 -07:00
jbencook
6cccd30553 Upgrade PivotTable.js and enable TSV export 2015-10-06 20:14:05 +00:00
John Wu
0bbcb69197 Remove redis build + use postgres-client package instead of postgres
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 11:43:35 -07:00
John Wu
b0eaffdf6c tag postgres & redis version in docker-compose.yaml
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 11:42:36 -07:00
John Wu
407a649d17 Use ubuntu instead
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 11:42:19 -07:00
John Wu
73bd83a527 Revert TCP listening address
Instead of binding to `0.0.0.0`, use `127.0.0.1` instead for security
concerns. "The Python Web server is more
vulnerable than nginx that proxies it."

Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 11:17:48 -07:00
John Wu
72e48a191b Remove Node.js infra 2015-10-06 11:12:13 -07:00
John Wu
11682b3779 Remove redundant database migration scripts
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-06 10:35:54 -07:00
Arik Fraimovich
a15d7964fa Merge pull request #585 from matthew-sochor/add-d3js-boxplot
Feautre: d3.js based Box Plot visualization.
2015-10-06 17:14:33 +03:00
Matt Sochor
2feb8b81f5 fixup! Removed unused function and options 2015-10-06 10:11:19 -04:00
Arik Fraimovich
6286024350 Merge pull request #589 from shyamgopal/master
Fix: Google spreadsheet data source: cast values to their actual type from string
2015-10-06 17:08:53 +03:00
Matt Sochor
0b5dce0ebf Removed unused function and options 2015-10-06 09:26:33 -04:00
Arik Fraimovich
32311c55e6 Merge pull request #587 from matthew-sochor/add-logarithmic-scale-to-chart
Feature: logarithmic scale support in chart
2015-10-06 15:26:46 +03:00
Shyamgopal Kundapurkar
2ac795d6f7 Fixed non-plotting of charts for Google spreadsheet data source 2015-10-06 10:00:32 +05:30
John Wu
d50af7dec9 Use dateRangeEnabled to decided whether we should display the data range selector
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-05 17:35:41 -07:00
John Wu
20159a1c2a Separate setDateRangeToExtreme function
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-05 17:32:46 -07:00
John Wu
06400ed840 Refactor addPointToSeries
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-05 17:13:36 -07:00
John Wu
0ddc6cf135 Use null to state empty object instead
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-05 17:13:04 -07:00
John Wu
46a008346f Use standalone supervisord.conf for docker deployment
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-05 15:00:52 -07:00
John Wu
21c413f699 Add CMD to start service since docker doesn't support init scripts
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-05 14:59:52 -07:00
Matt Sochor
e7222944a5 Added logarithmic option to chart x axis type 2015-10-05 17:47:23 -04:00
Matt Sochor
f49839eadf Add logarithmic y-axis option to chart 2015-10-05 17:42:16 -04:00
John Wu
aa1b72908b Do not ignore .env file
Signed-off-by: John Wu <webmaster@leapoahead.com>
2015-10-05 14:33:20 -07:00
Matt Sochor
5dd457e5f1 fixup! Added d3 box plot visualization 2015-10-05 15:55:07 -04:00
Matt Sochor
a471134e07 Added X and Y axis labels 2015-10-05 15:53:06 -04:00
Matt Sochor
8a8f91ee8f Added ggplot style gridlines 2015-10-05 14:39:54 -04:00
Matt Sochor
59aa218b24 Added axes to boxplot 2015-10-05 10:44:59 -04:00
Matt Sochor
5fd8dbe523 fixup! Added variable width for box plots 2015-10-04 23:35:13 -04:00
Matt Sochor
a08f3c7cd0 fixup! Added variable width for box plots 2015-10-04 23:30:49 -04:00
Matt Sochor
824d053ddd Added variable width for box plots 2015-10-04 23:10:49 -04:00
Matt Sochor
b6e61deb24 Added d3 box plot visualization 2015-10-04 21:43:28 -04:00
Matt Sochor
4f40b28120 Added d3js 2015-10-04 21:43:28 -04:00
Arik Fraimovich
5d1c75df1c Merge pull request #576 from joaofraga/fix/deduplicate-column-names
Fix: support for duplicate columns for MySQL query runner
2015-10-01 19:01:49 +03:00
John Wu
28ccaedfff Ignore .env file 2015-09-30 17:11:56 -07:00
John Wu
1ee05e12fd Docker support 2015-09-30 14:19:22 -07:00
John Wu
6f91849419 Bind to 0.0.0.0 instead of 127.0.0.1 2015-09-30 10:38:51 -07:00
Joao Fraga
65cc67d1dd Changed duplicated column name formating 2015-09-30 10:47:49 -03:00
Joao Fraga
a8f6d9e45b Moved columns full data to BaseQueryRunner to avoid unnecessary loops 2015-09-29 14:56:18 -03:00
Joao Fraga
2c39a2faae Improved column name formater 2015-09-29 14:53:39 -03:00
Arik Fraimovich
1052528a5f Merge pull request #577 from EverythingMe/fix/get_key
Fix: getKeyFromObject was failing if key had dot in name
2015-09-29 09:38:06 +03:00
Arik Fraimovich
92cd2f1367 Fix: getKeyFromObject was failing if key had dot in name
This is due to incorrect use of `_.include` instead of `_.has`.

#571
2015-09-29 09:30:00 +03:00
Joao Fraga
990717a43d run_query now uses fetch_column to get column names 2015-09-29 01:29:00 -03:00
Joao Fraga
a2608d6a44 Added fetch_columns method to avoid columns duplications 2015-09-29 01:28:39 -03:00
John Wu
dedae03c8c Remove imagemin grunt task
grunt-contrib-imagemin seems to be broken because several dependencies
are quite obsolete and cannot be downloaded.
2015-09-28 17:14:49 -07:00
John Wu
61f2be02b7 Redundant filter removed 2015-09-28 15:06:09 -07:00
John Wu
9eca43801a Fix: date range does not update in dashboard
Replace the whole dateRange object in scope instead of changing min and max properties one-by-one. Given how angular `$watch` works with Moment.js object, I wrote some comment to clarify the right way to update dateRange.
2015-09-28 15:00:55 -07:00
John Wu
bcaefda600 Clearfix date-range-selector 2015-09-28 14:58:26 -07:00
Lior Rozner
42b0430866 Added support for ElasticSearch with basic auth.
Initial support for full blown ElasticSearch Search API (https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html)
2015-09-28 08:56:38 -07:00
Arik Fraimovich
445dbb5ade Merge pull request #573 from easytaxibr/PR/feature/logout_link_for_admin_UI
Feature: Add logout link to Admin UI
2015-09-25 08:18:36 +03:00
John Wu
40ee0d8a6e Add date-range-selector to chart 2015-09-24 15:06:35 -07:00
wesleybatista
a5b738a035 Feature: Add logout link to Admin UI 2015-09-24 18:24:48 -03:00
Arik Fraimovich
e893ab4519 Merge pull request #556 from nathanlubchenco/paramaterized_cohorts
Feature: options for Cohort visualization
2015-09-24 21:44:30 +03:00
Arik Fraimovich
8b569379bc Merge pull request #570 from toru-takahashi/feature/treasuredata
Add TreasureData query runner
2015-09-21 14:23:08 +03:00
toru-takahashi
bff3e7c3b2 Add TreasureData query runner 2015-09-21 16:12:34 +09:00
Arik Fraimovich
3fbd0d9579 Merge pull request #560 from stanhu/add-yaxis-label
Feature: add ability to configure y-Axis title
2015-09-20 15:27:39 +03:00
Arik Fraimovich
00f4ec16f8 Merge pull request #569 from EverythingMe/fix/remove_warnings
Remove import warnings from query runners
2015-09-20 12:39:46 +03:00
Arik Fraimovich
6f24b31858 Update setup.rst 2015-09-20 12:39:29 +03:00
Arik Fraimovich
7a8844180b Updated cloud images to latest version. 2015-09-20 12:38:06 +03:00
Arik Fraimovich
aefaf204a3 Merge pull request #568 from EverythingMe/fix/bq_timeout
Add timeout setting for BigQuery query runner
2015-09-20 12:32:18 +03:00
Arik Fraimovich
1527ea36b1 Remove import warnings from query runners 2015-09-20 12:32:04 +03:00
Arik Fraimovich
a71b83d98a Add timeout setting for BigQuery query runner 2015-09-20 12:27:58 +03:00
Arik Fraimovich
7add6287dc Merge pull request #567 from EverythingMe/fixes
Remove page title from navbar & limit # of recent entries to 20
2015-09-20 12:02:16 +03:00
Arik Fraimovich
d37b5ed075 Remove title from navbar 2015-09-20 11:18:43 +03:00
Arik Fraimovich
23b8b77feb Don't send log entries to Sentry. 2015-09-20 11:13:35 +03:00
Arik Fraimovich
46f1478e0d Make sure only 20 dashboards/queries returned in recent call. 2015-09-20 11:12:44 +03:00
Arik Fraimovich
ec46312bf6 Bump version. 2015-09-20 11:05:56 +03:00
Arik Fraimovich
7c308bee09 Merge pull request #563 from stanhu/allow-admin-to-edit-all
Fix: allow admins to edit everything.
2015-09-20 09:46:05 +03:00
Arik Fraimovich
5f656f3868 Fix: upload assets url changed 2015-09-20 09:22:41 +03:00
Arik Fraimovich
4e27331d56 Move vertica requirement to correct requirements file. 2015-09-20 08:52:33 +03:00
Stan Hu
8f28c52b8d Allow admins to edit everything
Closes #562
2015-09-17 17:24:12 -07:00
Stan Hu
47e6960b83 Add ability to configure y-Axis title 2015-09-17 15:57:44 -07:00
nathanlubchenco
0990d93b03 allow defaults for existing visualizations, link time label to time interval 2015-09-16 10:34:22 -06:00
nathanlubchenco
bf88d8b578 explicitly pass in just timeInterval and timeLabel from visualization.options to be watched 2015-09-15 14:57:27 -06:00
nathanlubchenco
384e756817 don't pass data as an argument to scope 2015-09-15 14:52:10 -06:00
nathanlubchenco
d2c46c99eb actually pass in visualization options 2015-09-15 14:46:40 -06:00
nathanlubchenco
9c2858191f typo fix 2015-09-15 14:28:51 -06:00
nathanlubchenco
0473de7392 add editor directive 2015-09-15 14:23:33 -06:00
nathanlubchenco
faece4f2c4 fixing mistakes, adding editTemplate and defaultOptions to visualization registration 2015-09-14 16:40:25 -06:00
Arik Fraimovich
c9e74104b1 Merge pull request #549 from shinjiikeda/master
Feature: Vertica query runner
2015-09-14 22:58:39 +03:00
nathanlubchenco
d100c915f4 changed text to select and replaced original cohort directive 2015-09-11 13:29:40 -06:00
nathanlubchenco
ef3636145c Revert "weekly cohort visualization modeled after chort.js"
This reverts commit 6210d6ab80.
2015-09-10 15:29:17 -06:00
nathanlubchenco
6bd7dc9237 paramaterized cohort visualization 2015-09-10 15:10:31 -06:00
nathanlubchenco
6210d6ab80 weekly cohort visualization modeled after chort.js 2015-09-10 14:34:15 -06:00
ike_s
864a12a3be Merge https://github.com/EverythingMe/redash 2015-09-10 15:40:52 +09:00
Arik Fraimovich
f48c47712d Merge pull request #553 from EverythingMe/sentry
Feature: optional Sentry support
2015-09-10 08:30:44 +03:00
Arik Fraimovich
2c90fb3fa9 Sentry support in Celery 2015-09-10 07:29:44 +03:00
jvasquez
176fd16e95 Adding behavior into the controller. 2015-09-09 16:33:51 -03:00
jvasquez
75d3a63070 Removing extra class from dashboard.html 2015-09-09 14:56:50 -03:00
jvasquez
8c4a5a644e Clean up branch. 2015-09-09 14:55:14 -03:00
jvasquez
5b024a3518 Hidden widgets 2015-09-09 14:39:43 -03:00
jvasquez
d474267934 Adding hidden options for widgets. 2015-09-09 14:14:27 -03:00
ike_s
9429314b6e update 2015-09-10 00:57:41 +09:00
EC2 Default User
7cd132b47d update 2015-09-09 12:17:17 +00:00
EC2 Default User
89661990e7 add vertica query runner 2015-09-09 10:59:37 +00:00
EC2 Default User
01564d7e10 add vertica query runner 2015-09-09 10:59:21 +00:00
Arik Fraimovich
98307aec0d Make the counter migration safer. 2015-09-09 09:57:54 +03:00
Arik Fraimovich
5de3de12f0 Remove details about datasources, as they're managed through the web UI now. 2015-09-08 12:19:13 +03:00
Arik Fraimovich
dea64734d6 Update instructions on how to flush Redis. 2015-09-08 12:17:30 +03:00
Arik Fraimovich
98857ea64c Feature: Support for Sentry 2015-09-07 10:51:51 +03:00
Arik Fraimovich
3181f28509 Merge pull request #547 from EverythingMe/fix/counter_vis
Fix: allow to control if to render script tags from user input
2015-09-07 09:14:35 +03:00
Arik Fraimovich
37745ad1c0 Fix: allow to control if to render script tags 2015-09-07 08:59:20 +03:00
Arik Fraimovich
5fe5c94b3d Merge pull request #546 from EverythingMe/fix/counter_vis
Improvements to counter visualization:
2015-09-07 08:58:55 +03:00
Arik Fraimovich
59cbafa724 Fix migration - always set target row number 2015-09-07 08:49:04 +03:00
Arik Fraimovich
1d99da5a32 Improvements to counter visualization:
1. Ability to take target value from different row.
2. Ability to clear target column name.
3. Use explicit default configuration values instead of "magic" defaults.
2015-09-06 23:30:02 +03:00
Arik Fraimovich
8dfa1ca7bd Merge pull request #543 from quaninte/fix_gte_mongo
Fix $gte mongodb query fail
2015-09-06 11:20:02 +03:00
Arik Fraimovich
1fb6860ee2 Merge pull request #545 from EverythingMe/feature/users_admin
Fix: logout wasn't working in Angluar context
2015-09-06 11:18:47 +03:00
Arik Fraimovich
99c50c1f64 Fix: logout wasn't working in Angluar context 2015-09-06 11:18:20 +03:00
Arik Fraimovich
b1576b5a91 Merge pull request #531 from EverythingMe/feature/users_admin
Feature: users admin in the web interface
2015-09-06 10:25:18 +03:00
Arik Fraimovich
6f2ee2c0bb Update vagrant instructions 2015-09-06 10:18:33 +03:00
Arik Fraimovich
eec5e3290b Return dashboard after archive 2015-09-06 10:17:38 +03:00
Arik Fraimovich
aaac5928c4 Fix: tests w/ celery breaking 2015-09-06 10:15:26 +03:00
Arik Fraimovich
b97b35d9b5 Update icons size in navbar 2015-09-06 10:15:26 +03:00
Arik Fraimovich
6955514ec3 Update documentation re. users admin 2015-09-06 10:15:26 +03:00
Arik Fraimovich
c8d5267bc7 Bump version 2015-09-06 10:15:25 +03:00
Arik Fraimovich
993a861c78 Users UI. 2015-09-06 10:15:25 +03:00
Arik Fraimovich
a11e100050 Tests for users API 2015-09-06 10:15:25 +03:00
Arik Fraimovich
470ec4924c Remove redash.cache module 2015-09-06 10:15:25 +03:00
Arik Fraimovich
cdb6aaac6e Split the giant redash.controllers module into a package 2015-09-06 10:15:25 +03:00
Arik Fraimovich
580d33a6f8 API for users resource 2015-09-06 10:14:56 +03:00
Arik Fraimovich
8686694be9 Merge pull request #544 from EverythingMe/fix/archived_dashboard_in_recent
Fix: archived dashboards were shown in recent list (and move archive button)
2015-09-03 08:44:10 +03:00
Arik Fraimovich
795a9fe011 Move dashboard archive to dashboard page. 2015-09-03 08:31:51 +03:00
Arik Fraimovich
4b08a3a5f2 Fix #541: archived dashboards appear in recent list. 2015-09-03 08:31:17 +03:00
Quan MT
d9e8a81655 Fix $gte mongodb query fail 2015-08-28 10:06:18 +07:00
Arik Fraimovich
7000547419 Merge pull request #537 from ekampf/patch-3
Docs: Missing --source-uri in command
2015-08-25 23:46:45 +03:00
Arik Fraimovich
e0100543cd Merge pull request #538 from ekampf/patch-4
Docs: Space-separated list of scopes is deprecated. Need to use comma-seper…
2015-08-25 23:46:07 +03:00
Arik Fraimovich
7ea640927f Merge pull request #539 from ekampf/patch-5
Docs: Misc. UI fixes because Google changed their console
2015-08-25 23:45:48 +03:00
Eran Kampf
db26cafc41 Misc. UI fixes because Google changed their console 2015-08-24 17:07:11 -07:00
Eran Kampf
100b9e7c71 Space-separated list of scopes is deprecated. Need to use comma-seperated 2015-08-24 16:53:29 -07:00
Eran Kampf
d3391db8f0 Missing --source-uri in command 2015-08-24 16:50:36 -07:00
Arik Fraimovich
1ad01d8394 Warn about using the bootstrap script with existing machines. 2015-08-19 21:25:36 +03:00
Arik Fraimovich
3ef3f2c01b Merge pull request #529 from rm420/fix/multifilters_for_bq
Enables multi-filtering for big-query.
2015-08-16 11:07:02 +03:00
Ryan McClarnon
371422a9ae Merge multi-filter check into one statement 2015-08-10 23:58:46 +01:00
Ryan McClarnon
f4af650292 Enables multi-filtering for big-query. Before had issue with hyphen in field name 2015-08-10 16:17:39 +01:00
Arik Fraimovich
5f38e87f01 Fix images links. 2015-08-09 13:26:23 +03:00
Arik Fraimovich
b98e4a27ce Update images. 2015-08-09 13:25:25 +03:00
Arik Fraimovich
9ff8db31d2 Merge pull request #528 from EverythingMe/chore/packer_update
Cleanup packer.json (no longer building GCE image with it).
2015-08-09 11:40:07 +03:00
Arik Fraimovich
446148d07f Run dist-upgrade before apt-get install 2015-08-09 11:29:01 +03:00
Arik Fraimovich
2d6ca50568 Remove google compute 2015-08-09 11:29:01 +03:00
Arik Fraimovich
650ccac501 Merge pull request #527 from EverythingMe/fix/filters_for_bq
Fix: support for filters in BigQuery.
2015-08-09 11:09:21 +03:00
Arik Fraimovich
ab507f0fd5 Update path to tarball. 2015-08-09 11:09:05 +03:00
Arik Fraimovich
7187b5ffee Fix: support for filters in BigQuery.
BigQuery doesn't support :: in column names, so using __ to split instead of ::.
2015-08-09 11:00:35 +03:00
Arik Fraimovich
5e73da1df4 Fix link to tarball (it changes on every build). 2015-08-07 19:34:00 +03:00
Arik Fraimovich
244d25b12c Fix #524: use v0.7.1 in bootstrap.sh. 2015-08-07 19:18:18 +03:00
Arik Fraimovich
2dcf676cf2 Fix #525: make sure we're in right path for requirements_all_ds.txt 2015-08-07 19:14:46 +03:00
Arik Fraimovich
e07af676a5 Fix #526: install latest setuptools in bootstrap.sh. 2015-08-07 19:12:17 +03:00
Arik Fraimovich
3dea6302de Merge pull request #523 from EverythingMe/feature/new_home
Fix: global_recent isnt set if user has enough recents
2015-08-06 16:58:44 +03:00
Arik Fraimovich
b1ceb60360 Fix: global_recent isnt set if user has enough recents 2015-08-06 16:58:15 +03:00
Arik Fraimovich
1ef94b77e9 Merge pull request #522 from EverythingMe/feature/new_home
Feature: "personalized" homepage with recent queries and dashboards
2015-08-06 16:48:29 +03:00
Arik Fraimovich
292d31e490 Improve /personal and use it as default home 2015-08-06 16:42:29 +03:00
Arik Fraimovich
6f0ac1e730 Merge pull request #521 from kataring/update-doc
Update docs about data sources for Presto
2015-08-06 10:16:39 +03:00
Noriaki Katayama
9f82e5850d Update docs about data sources for Presto 2015-08-06 16:02:18 +09:00
Arik Fraimovich
4a18fa07ec Merge pull request #518 from massaru129/feature/bootstrap_amazon_linux
Other: created bootstrap script for amazon linux
2015-08-04 16:17:18 +03:00
Arik Fraimovich
05d1886467 Merge pull request #520 from EverythingMe/docs-datasources
Docs: update documentation about data sources
2015-08-02 10:49:57 +03:00
Arik Fraimovich
6e45706825 Update docs about data sources 2015-08-02 10:15:11 +03:00
Arik Fraimovich
464402a233 Merge pull request #519 from EverythingMe/feature/disable_collaborative_editing
Feature: ability to disable the ability to edit anyone's query by everyone
2015-08-01 16:41:08 +03:00
Arik Fraimovich
3a56b9ded7 Don't set last_modified_by if only changing ref to last result 2015-08-01 16:36:56 +03:00
Arik Fraimovich
142295671b Feature flag to control if everyone can edit queries 2015-08-01 16:30:03 +03:00
masaru
0e46a24112 fixed config file pathes 2015-07-31 19:21:36 +09:00
masaru
a3cb698be0 fixed file path
the fixed pathes will work if my original files are uploaded
2015-07-31 14:34:25 +09:00
masaru
08730ad113 created bootstrap script for amazon linux 2015-07-31 14:05:48 +09:00
Arik Fraimovich
d155f166d7 Merge pull request #517 from EverythingMe/cleanup
Fix: URL query runner was failing without base URL
2015-07-30 21:27:00 +03:00
Arik Fraimovich
ca95e9252f Fix: URL query runner was failing without base URL 2015-07-30 21:26:14 +03:00
Arik Fraimovich
d078e80e79 Grammar fix. 2015-07-30 14:50:52 +03:00
Arik Fraimovich
8ad1d2672c Clarify about -i. 2015-07-30 14:49:55 +03:00
Arik Fraimovich
735130efc9 Merge pull request #510 from rghose/patch-1
for aws based and password less logins to boxes
2015-07-30 14:46:44 +03:00
Arik Fraimovich
7e6b7398a4 Remove confusing exception logging 2015-07-30 14:36:27 +03:00
Arik Fraimovich
edf8f5b1fd Fix tests post field name change in #515 2015-07-30 14:36:01 +03:00
Arik Fraimovich
08c09d896a Merge pull request #516 from EverythingMe/cleanup
Fix: multi-filter was broken in newer version of angular-ui-select
2015-07-30 13:36:50 +03:00
Arik Fraimovich
58403634cf Fix: multi-filter was broken in newer version of angular-ui-select 2015-07-30 13:35:50 +03:00
Arik Fraimovich
2eb171e40d Merge pull request #515 from moyomot/fix/only_email_authentication
Fix: change wording on login screen "username or email" -> "email"
2015-07-30 12:25:37 +03:00
moyomot
3753f58980 authentication are allowed e-mail only. 2015-07-30 17:56:57 +09:00
Arik Fraimovich
fe1cc78ab3 Merge pull request #514 from alexanderlz/master
Feature: Support Hive as datasource
2015-07-30 08:48:26 +03:00
Alexander Leibzon
c140668648 minor fixes. working version of Hive datasource. 2015-07-29 23:39:39 +03:00
Arik Fraimovich
41ca1321cf Merge pull request #513 from EverythingMe/cleanup
Cleanup: remove select2 and use ui-select.
2015-07-29 09:36:13 +03:00
Alexander Leibzon
d88340158a add Hive as datasource 2015-07-29 02:01:22 +03:00
Arik Fraimovich
52f335edd5 Cleanup: remove select2 and use ui-select. 2015-07-28 10:03:56 +03:00
Arik Fraimovich
22200ec7b2 Merge pull request #511 from stanhu/add-primary-key-to-flask-admin
Add the primary key to Flask admin to make it possible to lookup queries
2015-07-27 23:40:15 +03:00
Arik Fraimovich
e458ed03c8 Bump version. 2015-07-27 23:38:10 +03:00
Arik Fraimovich
e9f1e3a189 Merge pull request #512 from johnkearney/tidier-requirements
Move datasource requirements from bootstrap to own requirements file
2015-07-27 23:32:44 +03:00
John Kearney
d202570b0d Move datasource requirements from bootstrap to own requirements file 2015-07-27 11:46:53 -07:00
Stan Hu
9b6edde5c8 Add the primary key to Flask admin to make it possible to lookup queries 2015-07-27 10:24:34 -07:00
Rahul Ghose
975c92d40d for aws based and password less logins to boxes 2015-07-27 13:23:38 +05:30
Arik Fraimovich
27639f83c7 Update index.rst 2015-07-26 22:38:37 +03:00
Arik Fraimovich
c08e6791df Remove version info from conf.py -- rtd doesn't use it 2015-07-26 15:54:56 +03:00
Arik Fraimovich
5c7158b6ae Update vagrant instructions 2015-07-26 15:46:26 +03:00
Arik Fraimovich
b886067a9f Merge pull request #509 from EverythingMe/docs
Moving documentation to ReatTheDocs
2015-07-26 15:25:29 +03:00
Arik Fraimovich
2421de8819 Add Sphinx based documentation to the project. 2015-07-26 15:24:16 +03:00
Arik Fraimovich
9e87e42400 Merge pull request #508 from EverythingMe/cleanup
Some cleanup (updated settings and bootstrap script)
2015-07-26 12:30:31 +03:00
Arik Fraimovich
8c750826e3 Install dependencies for new sources 2015-07-26 11:49:23 +03:00
Arik Fraimovich
b14b6d1773 Give permission to read user(id, name) to redash_reader 2015-07-26 11:45:58 +03:00
Arik Fraimovich
76cb73f4ce Add description to the server param of elastic search 2015-07-26 11:45:25 +03:00
Arik Fraimovich
8854a45598 Update to settings:
1. Enable API key auth by default.
2. Enable query results cleanup by default.
3. Add ElasticSearch to the enabled query runners list.
2015-07-26 11:44:11 +03:00
Arik Fraimovich
228b8c7614 Merge pull request #507 from EverythingMe/cleanup
Fix: when editing alerts show correct column
2015-07-26 11:39:55 +03:00
Arik Fraimovich
5de79213ae Fix: when editing alerts show correct column 2015-07-26 11:39:22 +03:00
Arik Fraimovich
c7d30c8b87 Merge pull request #498 from EverythingMe/feature/ds_admin
Feature: datasources web admin (closes #193)
2015-07-26 11:35:52 +03:00
Arik Fraimovich
076710f0c6 Bump version 2015-07-26 10:24:09 +03:00
Arik Fraimovich
a9172dac00 Fix: if connection fails connection isn't set 2015-07-26 10:24:08 +03:00
Arik Fraimovich
accca51f39 Feature: web interface to edit datasources
* Web interface to add and delete data sources, without the need to ssh
into the server.
* Ability to safely delete datasources -- query results from this data sources
are deleted, while queries get assigned null datasource.
* Updated the BigQuery datasource to use the JSON key file from Google Developer
console. Also both BigQuery and the Google Spreadsheets datasource no longer store
their key on the filesystem, but rather in the DB.
* Minor updates to the Flask Admin.
2015-07-26 10:24:08 +03:00
Arik Fraimovich
5f5774d01b Merge pull request #506 from EverythingMe/small_fixes
Fix: makes sure the totals series is sorted
2015-07-23 15:03:36 +03:00
Arik Fraimovich
00e99d858c Fix: makes sure the totals series is sorted 2015-07-23 15:03:18 +03:00
Arik Fraimovich
da56dc883f Merge pull request #505 from EverythingMe/small_fixes
Fix: Update URL after creating an alert
2015-07-22 20:38:52 +03:00
Arik Fraimovich
02582cab65 Update URL after creating an alert 2015-07-22 20:38:22 +03:00
Arik Fraimovich
bff4d31ada Read HOST from env. 2015-07-22 18:19:27 +03:00
Arik Fraimovich
83554207e1 Merge pull request #504 from EverythingMe/fix/python_result_set
Fix: cohort was wrong if values were not sorted
2015-07-22 18:06:41 +03:00
Arik Fraimovich
1c0c3e0b93 Fix: cohort was wrong if values were not sorted 2015-07-22 18:05:54 +03:00
Arik Fraimovich
5feb563dc9 Merge pull request #503 from EverythingMe/fix/python_result_set
Fix: if you change the result object, python runner wouldn't return any results
2015-07-22 18:03:29 +03:00
Arik Fraimovich
07b88d0b53 Fix: log results were lost 2015-07-22 17:56:49 +03:00
Arik Fraimovich
21f33462d5 Anoter try in removing optipng from build 2015-07-22 17:43:05 +03:00
Arik Fraimovich
6a9d95f1ac Fix: if you change the result object, python runner wouldn't return any results 2015-07-22 17:36:46 +03:00
Arik Fraimovich
36b80fc4ef Remove optipng from build artifacts 2015-07-22 17:21:50 +03:00
Arik Fraimovich
d89dd2c9af Merge pull request #502 from EverythingMe/feature/alerts
Feature: alerts on query results
2015-07-22 17:14:29 +03:00
Arik Fraimovich
658af526c7 Add alerts to menu 2015-07-22 17:05:31 +03:00
Arik Fraimovich
3d859ec5f3 Feature: alerts for query results.
This is basic implementation for alerts feature, where you can
define a simple rule on the last query result to send an alert.

As part of the implementation added Flask-Mail to the project,
to send emails. Should be useful to make re:dash more "self aware"
(notify users about potential issues, when queries done executing
and more).
2015-07-22 17:05:31 +03:00
Arik Fraimovich
fdff799d23 ng_smart_table: support for inline templates 2015-07-22 17:05:09 +03:00
Arik Fraimovich
5fc0b88b23 ng_smart_table: support for nested objects 2015-07-22 17:05:09 +03:00
Alexander Leibzon
63de247478 add datasources 2015-07-22 14:55:26 +03:00
Arik Fraimovich
5d3caac1b5 Merge pull request #499 from alexanderlz/master
Feature: Support Impala as DataSource
2015-07-22 14:23:55 +03:00
Alexander Leibzon
e4b9d23dfe minor fixes 2015-07-22 14:21:40 +03:00
Alexander Leibzon
890f59a4c9 add get_schema ability to impala 2015-07-22 13:54:00 +03:00
Arik Fraimovich
d4a18ba611 Merge pull request #501 from johnkearney/all_pg_queries_with_no_results
All pg queries with no results
2015-07-21 06:47:33 +03:00
John Kearney
c4502b2925 Add a more use-friendly message when redshift returns no rows 2015-07-20 14:17:51 -07:00
Alexander Leibzon
1d5efdd93f fixes in accordance with pull req spec 2015-07-20 23:21:02 +03:00
John Kearney
2b95da102e Remove unused exports for env examples 2015-07-20 12:36:10 -07:00
Arik Fraimovich
d512cd0c1d Merge pull request #500 from EverythingMe/feature/login_events
Feature: add event for users logining in
2015-07-20 18:30:57 +03:00
Arik Fraimovich
3dc9c84a98 Feature: add event for users logining in 2015-07-20 18:26:45 +03:00
Alexander Leibzon
4a33b987b8 datasource rename 2015-07-20 02:07:17 +03:00
Alexander Leibzon
f7041977d5 impala datasource fixes 2015-07-20 02:06:15 +03:00
Alexander Leibzon
83bc38579e impala data source 2015-07-19 01:44:48 +03:00
Arik Fraimovich
4b8a94e795 Merge pull request #495 from EverythingMe/fix/bq_param
Fix: Update BigQuery configuration parameter name to avoid confusion.
2015-07-15 19:49:56 +03:00
Arik Fraimovich
406010a7a6 Fix: Update BigQuery configuration parameter name to avoid confusion. 2015-07-15 19:45:55 +03:00
Arik Fraimovich
4f11f28efa Merge pull request #494 from erans/master
MongoDB query runner: cleanup
2015-07-15 18:24:28 +03:00
Eran Sandler
c919602b20 cleanups and shit. 2015-07-15 18:17:55 +03:00
Arik Fraimovich
7702b05635 Merge pull request #493 from erans/master
Fix: a generic way to parse all the input JSON and make sure we replace ISODate to Python date times.
2015-07-15 17:50:21 +03:00
Eran Sandler
5fc7c499a3 stupid auto merge. 2015-07-15 17:48:03 +03:00
Eran Sandler
628240906e Fix: a generic way to parse all the input JSON and make sure we replace ISODate to Python date times. 2015-07-15 17:44:33 +03:00
Arik Fraimovich
41b9b21a20 Merge pull request #492 from erans/master
Fix: MongoDB: Date parsing and dates in aggregation $match
2015-07-15 17:03:17 +03:00
Eran Sandler
dbd3f754ba - Fixed parsing dates in the format of YYYY-MM-DDTHH:mm
- Added handling dates in the aggregate $match
2015-07-15 16:58:10 +03:00
Arik Fraimovich
4ef3c27fe6 Merge pull request #489 from kataring/suport-presto
Feature: Support Presto
2015-07-15 16:50:51 +03:00
Arik Fraimovich
58a005c71b Merge pull request #484 from alexanderlz/master
Feature: Google Spreadsheets support (alpha)
2015-07-14 12:14:57 +03:00
Alexander Leibzon
9d7ff31178 replace camelcase vars 2015-07-14 12:13:04 +03:00
Noriaki Katayama
93d6b01fbf add bigint 2015-07-14 16:59:25 +09:00
Arik Fraimovich
7d57f9d0f1 Merge pull request #488 from EverythingMe/fix/mongo-support-sandbox
Fix: Drop database name check in MongoDB queries  to support sandboxed environments
2015-07-14 08:56:47 +03:00
Arik Fraimovich
e80f470255 Mongo: Drop database name check to support sandboxed environments 2015-07-14 08:51:31 +03:00
Arik Fraimovich
5636cec0eb Merge pull request #487 from erans/master
Fix: Support newer as well as older PyMongo versions
2015-07-14 08:23:58 +03:00
Eran Sandler
912bbc1a4a Added backwards compatibility mode with older versions of PyMongo.
It appears that older versions would return a dictionary from an aggregate operation that had the cursor inside the "result" key.
Newer versions return a new type of cursor called CommandCursor.
2015-07-14 08:19:25 +03:00
Arik Fraimovich
d3bb58167e Merge pull request #486 from EverythingMe/fix/mysql-noerror-onconnect
Fix: no error when failing to connect to a MySQL data source
2015-07-13 19:04:16 +03:00
Arik Fraimovich
2911fa8af7 Bump version. 2015-07-13 18:31:31 +03:00
Arik Fraimovich
4503c6af66 Move the MySQL connect to the try/except block 2015-07-13 18:31:00 +03:00
Arik Fraimovich
7fc2d5ee0b Update bootstrap.sh to use 0.6.3. 2015-07-13 12:00:28 +03:00
Arik Fraimovich
3c9c1466a3 Merge pull request #483 from erans/master
Feature: Updated more fine grained support for CORS in QueryResultAPI
2015-07-13 11:04:10 +03:00
Eran Sandler
4a7c066bf0 Too many languages... :-( 2015-07-13 10:05:07 +03:00
Alexander Leibzon
b850da52a2 remove .nojekyll, naming convention 2015-07-13 09:56:11 +03:00
Eran Sandler
1a3657572e Added fine grind control of CORS header for QueryResultAPI and possibly future APIs. 2015-07-13 09:42:23 +03:00
Arik Fraimovich
666e3281e4 Merge pull request #482 from erans/master
Feature: CORS support for the Query Result API to allow embedding in other domains
2015-07-13 08:41:38 +03:00
Eran Sandler
66084b1a3b minor fixes 2015-07-12 23:07:06 +03:00
Eran Sandler
421470666a use set_from_string. 2015-07-12 23:06:00 +03:00
Eran Sandler
f8e2bc9eca Added configurable CORS support for the Query Result API (to export data as JSON or CSV). Configuration is via an environment variable that is comma separated to include one or more domains (REDASH_QUERIES_RESULT_CORS) 2015-07-12 23:00:50 +03:00
Alexander Leibzon
079fbf33f4 don't execute query if the query string is empty (when changing datasource) 2015-07-12 22:53:08 +03:00
Arik Fraimovich
c195362710 Merge pull request #479 from erans/master
Feature: improved error reporting and new log information support for the Python query runner
2015-07-12 22:30:21 +03:00
Arik Fraimovich
b671dd0431 Merge pull request #480 from EverythingMe/feature/multiple-domains
Feature: support for multiple domains with Google OAuth
2015-07-12 13:36:17 +03:00
Arik Fraimovich
7793f3b257 Feature: support for multiple Google Auth domains 2015-07-12 12:51:45 +03:00
Arik Fraimovich
e09aa6f81a Show message for wrong user/password (closes #275) 2015-07-12 12:43:37 +03:00
Eran Sandler
780e0c0418 - refactored the Python query runner
- Improved error handling to show the real error (including indentation and syntax errors - it should show the right row number)
- Added support for "print" statements which becomes log messages show in a single query window (where you edit). It's on by default. To remove it simply called 'disable_print_log()'
2015-07-12 12:14:46 +03:00
Alexander Leibzon
43edb009d6 safer handling of worksheet num 2015-07-12 01:28:52 +03:00
Alexander Leibzon
81978c5049 jekyll disable 2015-07-11 22:51:31 +03:00
Alexander Leibzon
239813e195 modify google spreadsheed datasource params, only the credentials file needed 2015-07-11 22:43:07 +03:00
Alexander Leibzon
28dd571a03 google spreadsheets working version 2015-07-10 21:27:16 +03:00
Alexander Leibzon
808126cf91 forgot type 2015-07-09 01:22:08 +03:00
Alexander Leibzon
69a8295f4c forgot type 2015-07-09 01:18:31 +03:00
Arik Fraimovich
a692e3f664 Merge pull request #476 from EverythingMe/feature/api
Feature: support for per user API keys
2015-07-08 21:34:06 +03:00
Arik Fraimovich
6860dde1f7 Set api_key to be unique 2015-07-08 21:29:32 +03:00
Arik Fraimovich
e183affdd0 Feature: support for per user api keys 2015-07-08 20:59:07 +03:00
Noriaki Katayama
6338be3811 modified response 2015-07-08 10:33:55 +09:00
Alexander Leibzon
3ee6371250 initial work on google spreadsheets 2015-07-07 01:39:59 +03:00
Noriaki Katayama
4f38d42182 add presto 2015-07-06 18:22:23 +09:00
Arik Fraimovich
39db74ff20 Merge pull request #475 from hakobera/support-infuxdb
Feature: Support InfluxDB v0.9+
2015-07-05 22:39:40 +03:00
Arik Fraimovich
05c2c21a85 Bump version. 2015-07-05 22:39:12 +03:00
Kazuyuki Honda
00edc29e50 Support influxdb 0.9+ 2015-07-06 01:15:43 +09:00
Arik Fraimovich
3771af0a8c Update bootstrap.sh to use 0.6.2. 2015-07-05 08:30:11 +03:00
Arik Fraimovich
c32c2d43f7 Bump version. 2015-07-04 10:41:06 +03:00
Arik Fraimovich
4e2e3f9077 Merge pull request #472 from BrunoSalerno/map_visualization_options_fixed
map visualization: options fixed
2015-07-04 10:23:55 +03:00
Bruno Salerno
2a27422df9 map visualization: draw_options to scope 2015-07-03 18:02:22 -03:00
Bruno Salerno
f9e0ce8e9c map visualization: options fixed 2015-07-03 16:45:55 -03:00
Arik Fraimovich
a1d49f13d3 Merge pull request #471 from EverythingMe/fix/visualization_api
Fix: opening viz editor resets its options
2015-07-02 13:17:50 +03:00
Arik Fraimovich
26aa199f9c Fix: opening viz editor resets its options 2015-07-02 13:17:32 +03:00
Arik Fraimovich
4c77f3f914 Merge pull request #470 from EverythingMe/fix/visualization_api
Increase limit of tables for showing search.
2015-07-02 11:06:19 +03:00
Arik Fraimovich
d6be792595 Increase limit of tables for showing search. 2015-07-02 11:05:45 +03:00
Arik Fraimovich
59c1ea7f16 Merge pull request #469 from EverythingMe/fix/visualization_api
Fix: map - HTTPS support in tiles/marker
2015-07-02 11:05:25 +03:00
Arik Fraimovich
4d24005eff Fix: map - HTTPS support in tiles/marker 2015-07-02 11:02:44 +03:00
Arik Fraimovich
2dab35b614 Merge pull request #468 from EverythingMe/fix/visualization_api
Fix: visualizations API fixes
2015-07-02 08:51:09 +03:00
Arik Fraimovich
0b61b88f5f Fix: make default options apply to new visualizations 2015-07-02 08:38:08 +03:00
Arik Fraimovich
e5cb58207c Fix: vis title wasn't updating when changing type 2015-07-02 08:26:10 +03:00
Arik Fraimovich
fc17d1af81 Don't cache static assets in debug mode 2015-07-02 08:25:51 +03:00
Arik Fraimovich
e6650e1e2d Merge pull request #467 from BrunoSalerno/leaflet-visualization-marker-path-bug-fixed
leaflet visualization: marker path bug handled
2015-07-01 22:49:12 +03:00
Bruno Salerno
3aa1cd0133 leaflet visualization: marker path bug handled 2015-07-01 16:40:56 -03:00
Arik Fraimovich
e04833c327 Merge pull request #466 from BrunoSalerno/leaflet-visualization
Feature: Map visualization (using Leaflet)
2015-07-01 20:58:43 +03:00
Bruno Salerno
b743cceb60 leaflet visualization: map template margins fixed 2015-07-01 14:53:31 -03:00
Bruno Salerno
a0e134d3b5 leaflet visualization: dinamic height 2015-07-01 14:15:17 -03:00
Bruno Salerno
d7fb2d7458 leaflet-visualization: div size fixed and bounds storting improved 2015-07-01 12:30:48 -03:00
Bruno Salerno
b913ce6022 leaflet visualization: color series named properly 2015-07-01 10:03:43 -03:00
Bruno Salerno
1eb7945d16 leaflet visualization: map bounds are stored and kept 2015-06-30 18:18:34 -03:00
Bruno Salerno
37d0026ee4 leaflet-visualization: point feature 2015-06-30 17:34:31 -03:00
Arik Fraimovich
9cdc2cb2f7 Merge pull request #465 from EverythingMe/fix/time_field_serialize
Feature: ability to control series order in charts.
2015-06-30 09:26:26 +03:00
Arik Fraimovich
a9bff9063e Feature: cli to get status. 2015-06-30 09:25:32 +03:00
Arik Fraimovich
380126ee44 Feature: ability to control series index in charts. 2015-06-30 09:15:00 +03:00
Arik Fraimovich
d8377375b8 Merge pull request #461 from myinsiders/saml
Added SAML authentication support, eg for OneLogin or Okta
2015-06-30 08:25:44 +03:00
Arik Fraimovich
98ff701f9a Merge pull request #464 from EverythingMe/fix/time_field_serialize
Fix #463: support for datetime.time and datetime.timedelta fields
2015-06-29 18:06:25 +03:00
Arik Fraimovich
f5ea3e97d3 Fix: support for datetime.time and datetime.timedelta fields 2015-06-29 18:01:36 +03:00
Mark White
719e96dd2f Added SAML login option to login form 2015-06-28 17:19:57 +01:00
Arik Fraimovich
6c6c0256ba Merge pull request #462 from EverythingMe/fix_codemirror_resize_issue
Fix: refresh CodeMirror size when schema browser appears
2015-06-28 13:46:12 +03:00
Arik Fraimovich
723df51cdd Fix: refresh CodeMirror size when schema browser appears 2015-06-28 13:45:49 +03:00
Arik Fraimovich
a0f4e263b2 Merge pull request #459 from olgakogan/patch-2
Fixed an error in case a query doesn't have last_modified_date
2015-06-28 10:27:04 +03:00
Arik Fraimovich
4706bf8060 Merge pull request #458 from erans/master
Initial and very early support for ElasticSearch query runner
2015-06-28 10:26:26 +03:00
Mark White
f96a9f659a Added Apache license to code taken from Okta 2015-06-26 11:45:24 +01:00
Mark White
63c273f896 Fixed issue in saml login 2015-06-26 11:12:27 +01:00
Mark White
622ac6d781 Fixes to saml callback server name code 2015-06-26 10:26:59 +01:00
Mark White
8dc564a8bc Added configuration of flask server name 2015-06-26 09:06:50 +01:00
Mark White
3ae5baef22 Added OneLogin support 2015-06-25 17:52:00 +01:00
olga
8d819068b5 Fixed an error in case a query doesn't have last_modified_date 2015-06-25 11:31:22 +03:00
Eran Sandler
585e056265 Initial very early release of an ElasticSearch query runner. It only support Lucene style queries (single line, similar to what Kibana uses but without aggregations). 2015-06-24 09:53:09 +03:00
Arik Fraimovich
1914ed7c7c Merge pull request #456 from bells17/master
Changed the README's 'Setting up re:dash instance' url to a new url
2015-06-19 10:25:11 +01:00
bells17
bd216e93e7 Changed the README's 'Setting up re:dash instance' url to a new url 2015-06-19 10:20:41 +09:00
Arik Fraimovich
5e351de896 Merge pull request #455 from erans/master
added Mongo JSON serializer to correctly serialize ObjectId + datetime.datetime serialization
2015-06-17 10:59:42 +03:00
Eran Sandler
de0e534c77 removed the unnecessary check for datetime.datetime in the JSON encoder. 2015-06-17 10:58:12 +03:00
Eran Sandler
5fa1f9440d duh! 2015-06-16 11:50:20 +03:00
Eran Sandler
b3ddc5f8b9 removed old conversion of ObjectId to string since it is now part of the new JSON serializer 2015-06-16 11:34:19 +03:00
Eran Sandler
8cde5f9673 added Mongo JSON serializer to correctly serialize ObjectId 2015-06-16 11:27:23 +03:00
Arik Fraimovich
1bb53ca497 Merge pull request #451 from EverythingMe/fix/unicode_in_annotation
Fix: charts with category X axis were not sorted properly
2015-06-11 21:46:26 +03:00
Arik Fraimovich
0a3cd9267f Fix: charts with category x axis were not sorted properly 2015-06-11 21:45:45 +03:00
Arik Fraimovich
075d843354 Merge pull request #449 from EverythingMe/fix/unicode_in_annotation
Fix: schema browser chokes on large schemas
2015-06-10 13:36:53 +03:00
Arik Fraimovich
b14e5e8c0e Fix: schema browser chokes on large schemas 2015-06-10 13:36:05 +03:00
Arik Fraimovich
c9da4be422 Merge pull request #442 from EverythingMe/fix/timezone
Fix: when the server has non UTC timezone, timestamps were wrong
2015-06-07 22:23:46 +03:00
Arik Fraimovich
276ee7c27a Merge pull request #448 from olgakogan/master
supervisord default config: separate queue for ad-hoc and scheduled queries
2015-06-07 17:38:53 +03:00
olga
334040532a changed default concurrency level to 2 per queue 2015-06-07 17:36:24 +03:00
olga
335a3a98b5 separated the queue for ad-hoc and for scheduled queries (someone who runs an ad-hoc query should not wait because there scheduled queries are being refreshed at that time) 2015-06-07 17:28:57 +03:00
Arik Fraimovich
b17080a7f5 Merge pull request #446 from EverythingMe/fix/unicode_in_annotation
Fix #443: open table when searching & don't hide columns
2015-06-05 18:13:05 +03:00
Arik Fraimovich
8441c12b01 Fix #443: open table when searching & don't hide columns 2015-06-05 18:08:06 +03:00
Arik Fraimovich
3b4af1b6fa Merge pull request #445 from EverythingMe/fix/unicode_in_annotation
Fix #444: unicode characters in username fail query execution
2015-06-05 16:58:00 +03:00
Arik Fraimovich
c3deb8e2fa Fix #444: unicode characters in username fail query execution 2015-06-05 16:49:25 +03:00
Arik Fraimovich
a60b1686da Fix: when the server has non UTC timezone, timestamps were wrong 2015-06-03 07:58:28 +03:00
Arik Fraimovich
b56e87ceb2 Merge pull request #440 from EverythingMe/fix_ui
Fix: python query runner didn't allow iterating lists
2015-05-31 10:20:32 +03:00
Arik Fraimovich
fc89bcdaf3 Fix: python query runner didn't allow accessing dicts 2015-05-31 10:15:48 +03:00
Arik Fraimovich
15ec8321bb Merge pull request #437 from EverythingMe/fix_ui
Feature: ability to disable x axis labels
2015-05-19 22:24:36 +03:00
Arik Fraimovich
e6ba62485c Merge pull request #436 from EverythingMe/fix_ui
Fix: sorting not working for columns with special characters
2015-05-19 22:15:21 +03:00
Arik Fraimovich
9077b01fb9 Feature: ability to disable x axis labels 2015-05-19 22:15:08 +03:00
Arik Fraimovich
f45281be96 Fix: annotation was failing if query had unicode in it 2015-05-19 22:01:02 +03:00
Arik Fraimovich
a1c8ef9037 Merge pull request #435 from EverythingMe/fix_ui
Fix: string columns with date/time values failed to render.
2015-05-19 22:00:37 +03:00
Arik Fraimovich
f46e8af23f Fix: sorting not working for columns with special characters 2015-05-19 22:00:15 +03:00
Arik Fraimovich
30a89bfd2c Fix: string columns with dates failed to render. 2015-05-19 21:43:50 +03:00
Arik Fraimovich
6312f8738d Merge pull request #433 from stanhu/make-query-link-obvious
Make it obvious that the query link is clickable.
2015-05-17 08:18:19 +03:00
Stan Hu
9e3d5c10c5 Make it obvious that the query link is clickable: underline when hovering and add glyphicon 2015-05-16 22:06:04 -07:00
Arik Fraimovich
59b87ec4fd Merge pull request #434 from erans/master
MongoDB aggregation support + mongo documentation (as comments)
2015-05-17 07:49:20 +03:00
Eran Sandler
27ecf5f25c Merged the older MongoDB code into the new mongodb query runner to support aggregation 2015-05-16 22:22:33 +03:00
Arik Fraimovich
105971c4c8 Merge pull request #432 from stanhu/allow-undefined-max-age
Allow undefined max_age parameter in query_results endpoint
2015-05-15 11:25:24 +03:00
Stan Hu
690f8323c3 Allow undefined max_age parameter in query_results endpoint
An Error 500 would be returned by the endpoint if you attempted to
pass a query parameter to the dashboard since maxAge was undefined in JavaScript.
2015-05-14 22:00:08 -07:00
Arik Fraimovich
20eb110ce3 Fix: update_release_commit_sha should return json 2015-05-14 10:09:57 +03:00
Arik Fraimovich
571c9d0aee Update release manager: update tag commit sha on new release 2015-05-14 09:59:21 +03:00
Arik Fraimovich
0ee7292f16 Merge pull request #431 from EverythingMe/feature/additional_refresh_rates
Feature: additional refresh times (5, 10, 15, 30 minutes)
2015-05-14 09:25:35 +03:00
Arik Fraimovich
8c28392dfd Feature: additional refersh times (5,10,15,30 minutes) 2015-05-13 20:59:39 +03:00
Arik Fraimovich
671f1f4478 Merge pull request #428 from olgakogan/master
Feature: support for column types in MySQL query runner
2015-05-12 13:55:56 +03:00
olga
557d3748be added support to column types in mysql 2015-05-12 12:01:47 +03:00
Arik Fraimovich
f00d080ed2 Install optipng in CircleCI. 2015-05-12 10:33:11 +03:00
Arik Fraimovich
4e76c1305f Merge pull request #425 from EverythingMe/new_logo
New logo
2015-05-12 10:27:01 +03:00
Arik Fraimovich
36ef388e92 Bump version 2015-05-12 10:26:16 +03:00
Arik Fraimovich
2e1ee7f76c New logo 2015-05-12 10:25:57 +03:00
Arik Fraimovich
fc1e38772d New logo! 2015-05-11 23:13:15 +03:00
Arik Fraimovich
0e631a5121 Merge pull request #422 from EverythingMe/feature/288_bq_instance_auth
Feature: BigQueryGCE query runner that uses instance auth (fixes #288)
2015-05-10 23:18:45 +03:00
Arik Fraimovich
d74175efca Feature: BigQueryGCE query runner that uses instance auth 2015-05-10 08:46:41 +03:00
Arik Fraimovich
bf5fe7d2c7 Merge pull request #421 from EverythingMe/fix/issue_417
Feature: show visualization name next to query name (#418)
2015-05-08 22:28:12 +03:00
Arik Fraimovich
0f022aba92 Feature: show visualization name next to query name. 2015-05-07 21:58:12 +03:00
Arik Fraimovich
0b6e55e55a Remove unused code 2015-05-07 21:58:08 +03:00
Arik Fraimovich
e1c409366c Merge pull request #420 from EverythingMe/fix/issue_417
Fix: Make query editor auto resize again to prevent scroll issues
2015-05-07 21:52:07 +03:00
Arik Fraimovich
3b942118e9 Make query editor auto resize again to prevent scroll issues 2015-05-07 21:39:25 +03:00
Arik Fraimovich
7f1543db8f Merge pull request #419 from EverythingMe/fix/issue_417
Fix #417: integer columns treated as floats
2015-05-07 21:38:54 +03:00
Arik Fraimovich
74a5121be2 Fix #417: integer columns treated as floats 2015-05-07 21:25:30 +03:00
Arik Fraimovich
26fe136a1a Merge pull request #416 from daamien/patch-1
Upgrade to requests 2.3.0
2015-05-07 09:30:43 +03:00
damien clochard
83fb189b05 Update requirements.txt
The bootstrap.sh script fails on Debian 7.8

I solved the problem with :

$ sudo pip install requests==2.3.0

Check this bug for more details :
https://github.com/kennethreitz/requests/issues/2028
2015-05-06 18:36:24 +02:00
Arik Fraimovich
5e8d0d36c0 Merge pull request #409 from erans/master
Fix: minor fixes for MongoDB, script and Python query runners
2015-04-26 11:07:33 +03:00
Eran Sandler
4ae4cffa04 Removed a copy-paste duplication. Hmpf. 2015-04-26 11:05:40 +03:00
Eran Sandler
bc433e88fe Fix for _getitem_ error when accessing a dictionary directly. 2015-04-26 11:03:53 +03:00
Arik Fraimovich
513ef501a4 Merge pull request #410 from stanhu/sort-by-y-values
Feature: sort by Y values charts that have a single value per series
2015-04-26 10:23:06 +03:00
Stan Hu
f2bdcbedfb Simplify code and remove sortY option to avoid confusion 2015-04-26 00:18:03 -07:00
Stan Hu
fd056edb2a Support sort by y values for charts that have a single value per series 2015-04-21 22:52:14 -07:00
Eran Sandler
0f0acfdd12 Fix which prevented MongoDB connections to execute queries due to a faulty json schema configuration. 2015-04-22 00:18:28 +03:00
Eran Sandler
1e3b507b2b For for the script data source when command line parameters are passed as part of the query. 2015-04-21 09:36:05 +03:00
Arik Fraimovich
84d95272f3 Comment out active tasks cleanup, as it sometimes fails. 2015-04-20 10:05:04 +03:00
Arik Fraimovich
3b08e9e214 Merge pull request #408 from alexanderlz/master
Feature: additional metadata in query annotation (username, query id, queue name)
2015-04-20 08:48:59 +03:00
Arik Fraimovich
f4be83b06f Use query id from UI & annotate scheduled queries 2015-04-20 08:46:01 +03:00
Alexander Leibzon
4918d0430c add redash username/query_id to query for easier backtracking 2015-04-20 02:16:12 +03:00
Arik Fraimovich
e25b86b10d Merge pull request #398 from lenguyenthedat/data_sources_name_unique
Fix: make the data_sources' name unique
2015-04-18 22:51:12 +03:00
Arik Fraimovich
d3d305a843 Make sure data sources have unique names in tests 2015-04-18 22:46:42 +03:00
Arik Fraimovich
825b93bfe9 Fix migration numbering (there is 0007 already) 2015-04-18 22:46:42 +03:00
Arik Fraimovich
8c98282200 Rename only data sources with duplicates 2015-04-18 22:46:42 +03:00
Dat Le
768ac9eb04 Fix: make the data_sources's name unique
Also added migration script.
2015-04-18 22:46:42 +03:00
Arik Fraimovich
71011d2fca Merge pull request #407 from stanhu/add-flask-admin 2015-04-18 22:23:10 +03:00
Arik Fraimovich
9683a8ed82 Dedicated view for data source 2015-04-18 22:21:58 +03:00
Arik Fraimovich
10a6ac9313 Dedicated view for User model 2015-04-18 18:48:44 +03:00
Arik Fraimovich
dba325e9a2 Use ArrayListField for Array fields. 2015-04-18 18:47:54 +03:00
Arik Fraimovich
fcd9ab533c Fix: correctly call CustomModelConverter __init__. 2015-04-18 18:46:32 +03:00
Arik Fraimovich
68e3e8e1c5 Update name in admin screens 2015-04-18 18:00:52 +03:00
Arik Fraimovich
7f8b738b9e Fix requirements.txt (peewee was specified twice) 2015-04-18 16:58:05 +03:00
Arik Fraimovich
8a35dcedfa Merge pull request #406 from stanhu/add-mysql-port
Add support for configuring MySQL port
2015-04-18 16:14:26 +03:00
Stan Hu
ef763b7157 Use Flask-Admin to provide basic Web-based /admin page 2015-04-18 04:11:30 -07:00
Stan Hu
498e1d4474 Add support for configuring MySQL port 2015-04-17 22:57:34 -07:00
Arik Fraimovich
73de936c75 Merge pull request #405 from EverythingMe/feature/syntax_highglight
Feature: use correct syntax highlighting for Python/Mongo data sources
2015-04-14 17:53:46 +03:00
Arik Fraimovich
e32b709a41 Typo fix in the python query runner 2015-04-14 17:50:36 +03:00
Arik Fraimovich
60652f63c4 Use correct syntax highlighting for Python/Mongo sources 2015-04-14 17:48:36 +03:00
Arik Fraimovich
d0d4101f90 Merge pull request #404 from erans/master
Improvement: make Python datasource to use the RestrictedPython sandbox
2015-04-13 16:13:00 +03:00
Eran Sandler
646875794f Per request by Arik - the BDFL :-) 2015-04-13 15:27:28 +03:00
Eran Sandler
cdad4be0d5 Removed the try..catch block in the import of RestrictedPython since we are putting it in the requirements.txt file. 2015-04-13 15:23:49 +03:00
Eran Sandler
8f4285be62 Minor fixes from code review. 2015-04-13 15:21:43 +03:00
Eran Sandler
acfa55e2d0 Python datasource that uses RestrictedPython. Only modules listed in "allowedImportModules" (command separated) will be allowed to be imported and the code assume they are installed on the server running the actual code. 2015-04-13 11:22:22 +03:00
Arik Fraimovich
0b7cd07db0 Merge pull request #403 from EverythingMe/chore/release_process
Fix: schema browser styles
2015-04-08 16:14:30 +03:00
Arik Fraimovich
6297ffd523 Fix: schema browser styles 2015-04-08 16:13:03 +03:00
Arik Fraimovich
368f4fdbef Merge pull request #402 from EverythingMe/chore/release_process
New release process.
2015-04-06 12:51:12 +03:00
Arik Fraimovich
f52044a209 New release process 2015-04-06 12:50:17 +03:00
Arik Fraimovich
9fb33cf746 Merge pull request #399 from EverythingMe/feature/schema
Feature: schema browser and simple autocomplete
2015-04-02 17:10:07 +03:00
Arik Fraimovich
e3c5da5bc5 Fix tests to use correct data 2015-04-02 17:05:16 +03:00
Arik Fraimovich
e675690cc6 Sort schema by name 2015-04-02 16:56:00 +03:00
Arik Fraimovich
edc1622cf5 Schema support for MySQL 2015-04-02 16:55:52 +03:00
Arik Fraimovich
5ab3d4a40d Basic autocomplete functionality 2015-04-02 16:12:33 +03:00
Arik Fraimovich
cb29d87b63 Improve formatting of schema browser 2015-04-02 15:40:43 +03:00
Arik Fraimovich
6ff6bdad9f Use the correct redis connection in tests 2015-04-02 11:25:42 +03:00
Arik Fraimovich
e3cc3ef9a4 Move schema fetching to DataSource + tests 2015-04-02 11:25:42 +03:00
Arik Fraimovich
1fe4f291f2 Flush test redis db after each test 2015-04-02 11:25:22 +03:00
Arik Fraimovich
a54119f4a2 Show schema along side the query 2015-04-02 11:25:22 +03:00
Arik Fraimovich
c5b7fe5321 Use codemirror directly without ui-codemirror 2015-04-02 11:24:47 +03:00
Arik Fraimovich
d487ec9153 Upgrade codemirror to latest version 2015-04-02 11:24:18 +03:00
Arik Fraimovich
fa19b1ddc8 Endpoint to return data source schema 2015-04-02 11:23:52 +03:00
Arik Fraimovich
267c32b390 Merge pull request #401 from EverythingMe/fix/wrong_time_zone
Fix: use correct date when converting to UTC to get correct timezone.
2015-04-02 07:40:27 +03:00
Arik Fraimovich
aeff3f1494 Fix: use correct date when converting to UTC to get correct timezone. 2015-04-02 07:39:37 +03:00
Arik Fraimovich
e80e52f6c9 Add annotations for the injector. 2015-04-01 20:23:18 +03:00
Arik Fraimovich
fe41a70602 Merge pull request #400 from EverythingMe/feature/better_scheduler
Improved query scheduling option
2015-04-01 17:28:02 +03:00
Arik Fraimovich
976d9abe2d Disable UI tests, as they are no longer maintained :-( 2015-04-01 17:23:08 +03:00
Arik Fraimovich
041bc1100a New UI for query schedule setting 2015-04-01 17:07:19 +03:00
Arik Fraimovich
5d095ff6ab Resolve #113: upgrade to latest ui-bootstrap 2015-04-01 12:48:24 +03:00
Arik Fraimovich
ef01b61b29 Fix: refresh selector had empty option 2015-04-01 12:11:14 +03:00
Arik Fraimovich
faad6b656b Change query ttl field to be a string and named schedule.
This to allow other types of scheduling than just repeat every X seconds.
The first supported option will be: repeat every day at hour X.
2015-04-01 11:23:26 +03:00
Arik Fraimovich
0bc775584b Merge pull request #397 from EverythingMe/feature/edit_others_queries
Fix: forking broken
2015-03-22 17:32:13 +02:00
Arik Fraimovich
f2d96d61a1 Fix: forking broken 2015-03-22 17:28:47 +02:00
Arik Fraimovich
09bf2dd608 Merge pull request #396 from EverythingMe/feature/edit_others_queries
Feature: allow editing others' queries
2015-03-22 14:53:02 +02:00
Arik Fraimovich
ad1b9b06cf Fix test. 2015-03-22 14:42:08 +02:00
Arik Fraimovich
a4bceae60b Allow anyone to edit any query & show who edited it 2015-03-22 13:22:11 +02:00
Arik Fraimovich
9385449feb Add updated_at timestamp to visualization, query, dashboard and users models 2015-03-22 12:58:26 +02:00
Arik Fraimovich
562e1bb8c9 Merge pull request #395 from EverythingMe/feature/post_to_create_a_query
Convert additional dates to user's formatting
2015-03-19 08:54:54 +02:00
Arik Fraimovich
082b718303 Convert additional dates to user's formatting 2015-03-19 08:54:04 +02:00
Arik Fraimovich
c0872899e9 Merge pull request #394 from EverythingMe/feature/post_to_create_a_query
Fix: column definitions weren't updated.
2015-03-19 08:43:17 +02:00
Arik Fraimovich
086bbf129d Fix: column definitions weren't udpated 2015-03-19 08:40:21 +02:00
Arik Fraimovich
4b7561e538 Merge pull request #393 from EverythingMe/feature/post_to_create_a_query
Fix: allow Unicode and other special chars in column names
2015-03-19 08:34:06 +02:00
Arik Fraimovich
407c5a839b Fix: allow Unicode and other special chars in column names
Stopped using Angular's $parse and just accessing the property directly.
2015-03-19 08:33:16 +02:00
Arik Fraimovich
b8aefd26b8 Merge pull request #392 from EverythingMe/feature/post_to_create_a_query
Support posting to /queries/new to create a new query.
2015-03-18 13:42:55 +02:00
Arik Fraimovich
85a762bcd2 Support posting to /queries/new to create a new query. 2015-03-18 13:28:23 +02:00
Arik Fraimovich
4f1b3d5beb Merge pull request #391 from EverythingMe/feature/api_key_auth
Fix: allow dots in column name
2015-03-16 15:08:00 +02:00
Arik Fraimovich
9218a7c437 Fix: allow dots in column name 2015-03-16 14:59:51 +02:00
Arik Fraimovich
71a3f066a5 Ignore gh-pages branch in CircleCI. 2015-03-16 09:03:52 +02:00
Arik Fraimovich
89436d779c Merge pull request #390 from fedex1/patch-1
Update bootstrap.sh
2015-03-16 05:37:33 +02:00
Ralph Yozzo
3631e938da Update bootstrap.sh
# modified by @fedex1 3/15/2015 seems to be the latest version at this point in time.
2015-03-15 23:27:45 -04:00
Arik Fraimovich
c0a9db68f0 Merge pull request #389 from EverythingMe/feature/api_key_auth
Fix: show date/time with respect to user's locale
2015-03-15 18:53:31 +02:00
Arik Fraimovich
bec9c9e14e Fix: show date/time in user's locale 2015-03-15 18:53:02 +02:00
Arik Fraimovich
47bbc25277 Merge pull request #388 from EverythingMe/feature/api_key_auth
Make it possible to set enabled query runners from env
2015-03-12 12:00:26 +02:00
Arik Fraimovich
f02c2588d2 Make it possible to set enabled query runners from env 2015-03-12 11:52:31 +02:00
Arik Fraimovich
7db5449dad Merge pull request #387 from EverythingMe/feature/api_key_auth
Record event when accessing query result from API
2015-03-12 11:46:35 +02:00
Arik Fraimovich
7f6c7f0634 Record event when accessing query result from API 2015-03-12 11:43:21 +02:00
Arik Fraimovich
73955c74f7 Merge pull request #386 from EverythingMe/feature/api_key_auth
Code cleanup (remove "worker's status" dead link & unused settings)
2015-03-11 11:30:15 +02:00
Arik Fraimovich
7de85da8ef Remove unused settings 2015-03-11 07:50:49 +02:00
Arik Fraimovich
0aab35252a Remove broken "Worker's Status" page 2015-03-11 07:47:10 +02:00
Arik Fraimovich
141dbc9e70 Merge pull request #385 from EverythingMe/feature/api_key_auth
Feature: optional API Key authentication instead of HMAC
2015-03-10 18:29:01 +02:00
Arik Fraimovich
2e513c347c Cleanup 2015-03-10 18:21:51 +02:00
Arik Fraimovich
335c136ec2 Show API Key button in query view 2015-03-10 18:08:02 +02:00
Arik Fraimovich
df1170eb9b Feature: optional api key only authentication 2015-03-10 17:51:17 +02:00
Arik Fraimovich
69bcaddbe0 Fix: migrations stopped working due to peewee upgrade 2015-03-09 16:55:55 +02:00
Arik Fraimovich
67958cc27b MySQL query runner: make configuration access safer 2015-03-09 10:16:06 +02:00
Arik Fraimovich
6c716f23d9 Fix migration & query runner for mysql 2015-03-09 08:58:03 +02:00
Arik Fraimovich
bea11b0ac2 Merge pull request #384 from EverythingMe/feature/python_query_runner
Experimental Python query runner
2015-03-08 15:03:59 +02:00
Arik Fraimovich
4927386299 Experimental Python query runner 2015-03-08 15:02:57 +02:00
Arik Fraimovich
30a8550f6b Merge pull request #383 from EverythingMe/fix/migration
Fix: make migration work with new peewee
2015-03-08 14:37:42 +02:00
Arik Fraimovich
0389a45be4 Fix: make migration work with new peewee 2015-03-08 13:28:18 +02:00
Arik Fraimovich
707c169867 Merge pull request #382 from EverythingMe/feature/datasources_v2
Fix: import should be global
2015-03-08 12:27:34 +02:00
Arik Fraimovich
fca034ac0d Fix: import should be global 2015-03-08 12:23:51 +02:00
Arik Fraimovich
97691ea5ee Merge pull request #380 from EverythingMe/feature/datasources_v2
Refactor datasources (query runners)
2015-03-08 11:50:09 +02:00
Arik Fraimovich
40335a0e21 Fix: add missing option flags 2015-03-08 11:00:56 +02:00
Arik Fraimovich
9344cbd078 Update bootstrap script to support new format 2015-03-08 10:38:50 +02:00
Arik Fraimovich
9442fd9465 Update logging messages 2015-03-02 09:49:17 +02:00
Arik Fraimovich
c816f1003d Bump version 2015-03-02 09:45:29 +02:00
Arik Fraimovich
2107b79a80 Use validation for data source editing 2015-03-02 09:44:55 +02:00
Arik Fraimovich
8fae6de8c7 Update datasource CLI to use new format 2015-03-02 09:40:15 +02:00
Arik Fraimovich
d798c77574 Support for already valid data source config 2015-03-02 07:34:06 +02:00
Arik Fraimovich
0abce27381 Set configuration in base ctor 2015-02-24 07:50:10 +02:00
Arik Fraimovich
8a171ba39a Use JSON Schema for data source configuration 2015-02-24 07:50:10 +02:00
Arik Fraimovich
20af276772 Updated configuration spec to include friendly name and more 2015-02-24 07:50:10 +02:00
Arik Fraimovich
4058342763 WIP: configuration object 2015-02-24 07:50:10 +02:00
Arik Fraimovich
af64657260 Migration to update all data source options 2015-02-24 07:50:09 +02:00
Arik Fraimovich
b6bd46e59e New query runners implementation 2015-02-24 07:50:09 +02:00
Arik Fraimovich
31fe547e03 Merge pull request #378 from EverythingMe/feature/variables
Fix #263: timestamp fields should be with time zone
2015-02-23 11:10:20 +02:00
Arik Fraimovich
aff324071e Update peewee version 2015-02-23 09:19:39 +02:00
Arik Fraimovich
131266e408 Fix #263: timestamp fields should be with time zone 2015-02-23 09:02:16 +02:00
Arik Fraimovich
b1f97e8c8d Merge pull request #377 from olgakogan/master
'Download Dataset' fix - error in case of big numeric values
2015-02-21 15:21:18 +02:00
Arik Fraimovich
9783d6e839 Merge pull request #374 from akariv/master
Support unicode queries in search API
2015-02-21 14:48:36 +02:00
akariv
8eea2fb367 Support unicode queries in search API
Modify query test case to use unicode strings
2015-02-20 23:49:37 +02:00
olgakogan
b585480c81 removed redundant handling of large numbers when generating a csv file (causes ValueError: timestamp out of range) 2015-02-20 22:33:02 +02:00
Arik Fraimovich
89e307daba Merge pull request #373 from EverythingMe/feature/variables
UI Fixes
2015-02-08 18:18:37 +02:00
Arik Fraimovich
a5eb0e293c Fix: don't lock query editing while executing 2015-02-08 18:17:08 +02:00
Arik Fraimovich
48d1113225 Fix #371: show notification when query fails. 2015-02-08 18:08:24 +02:00
Arik Fraimovich
d82d5c3bdc Merge pull request #372 from EverythingMe/feature/variables
Several UI fixes
2015-02-08 18:05:05 +02:00
Arik Fraimovich
dfe58b3953 Give the user the option to disable sorting of chart data 2015-02-08 18:02:36 +02:00
Arik Fraimovich
44019b8357 Variables: allow nesting variables 2015-02-08 17:07:20 +02:00
Arik Fraimovich
3c15a44faf Fix: keyboard shortcuts were not unbinded 2015-02-08 17:07:06 +02:00
Arik Fraimovich
8d113dadd2 Revert "Fix #242: handle the case there is no connection to the server"
This reverts commit 3960005002.

Conflicts:
	rd_ui/app/index.html
	rd_ui/bower.json
2015-02-02 18:02:42 +02:00
Arik Fraimovich
c1dd26aee7 Merge pull request #370 from alexanderlz/master
add ISO datetime to filename when saving chart as image
2015-02-02 10:52:00 +02:00
Alexander Leibzon
b2228c2a39 replace 'possibly dangerous for some OSs' characters 2015-02-01 15:29:46 +02:00
Alexander Leibzon
d9618cb09c add ISO datetime to filename when saving chart as image 2015-02-01 14:52:58 +02:00
Arik Fraimovich
c8ca683d3a Merge pull request #368 from alexanderlz/master
Issue #168. Visualization: save as image.
2015-02-01 13:22:40 +02:00
Alexander Leibzon
888963ffaa Merge branch 'master' of https://github.com/alexanderlz/redash
Conflicts:
	rd_ui/app/index.html
	rd_ui/bower.json
2015-02-01 13:20:26 +02:00
Alexander Leibzon
ae947a8310 removing unwanted commit 2015-02-01 13:18:57 +02:00
Alexander Leibzon
bee9cde347 removing unwanted commit 2015-02-01 12:00:23 +02:00
Arik Fraimovich
c131dab125 Merge pull request #369 from EverythingMe/fix/dashboard_filters
Fix: filters got linked when they shouldn't have.
2015-02-01 11:57:46 +02:00
Arik Fraimovich
e113642ae4 Fix: filters got linked when they shouldn't have.
- Make a copy of the first filter, to prevent it controlling the other filters.
- If no query string value given or dashboard filters enabled, don't link filters.
2015-02-01 11:51:07 +02:00
Arik Fraimovich
b76906b168 Merge pull request #367 from EverythingMe/feature/offline
Fix #242: handle the case there is no connection to the server
2015-01-29 20:46:32 +02:00
Arik Fraimovich
3960005002 Fix #242: handle the case there is no connection to the server 2015-01-29 20:43:03 +02:00
Arik Fraimovich
3dde578b86 Only try to render params if they are required. 2015-01-29 15:33:08 +02:00
Arik Fraimovich
813f0e74ff Merge pull request #366 from EverythingMe/fix/mget_error
Several chart editor fixes and additions
2015-01-27 22:49:41 +02:00
Arik Fraimovich
1e4e37c2ce Ability to set y axis min/max (closes #257) 2015-01-27 22:45:16 +02:00
Arik Fraimovich
a00c80eab2 Don't change zIndex if it was already set 2015-01-27 22:30:26 +02:00
Arik Fraimovich
496e5ebe8c Fix: if new series was created in result set, it wasn't using the default chart type 2015-01-27 22:23:10 +02:00
Arik Fraimovich
18cc8434a0 Merge pull request #365 from EverythingMe/fix/mget_error
Fix: when no queries are being run, cleanup job fails with error
2015-01-27 18:39:26 +02:00
Arik Fraimovich
5eba318019 Fix: when no queries are being run, cleanup job fails with error 2015-01-27 18:23:21 +02:00
Arik Fraimovich
63274dbb17 Merge pull request #363 from EverythingMe/feature/query_parameters
Feature: support for query parameters
2015-01-27 18:22:29 +02:00
Arik Fraimovich
4c73e788ae Ability to set ttl (max age) from query string 2015-01-27 17:17:58 +02:00
Arik Fraimovich
b71a2b3651 Enable query params in dashboard 2015-01-27 17:00:21 +02:00
Arik Fraimovich
521a32dfff Merge pull request #364 from EverythingMe/fix/missing_text_widgets
Remove unneeded where clause which was preventing from text widgets to show.
2015-01-27 12:59:58 +02:00
Arik Fraimovich
fd6ebe6e12 Remove unneeded where clause which was preventing from text widgets to show. 2015-01-27 12:52:17 +02:00
Arik Fraimovich
6fb97675ad Add mustache to Karma conf 2015-01-27 11:28:51 +02:00
Arik Fraimovich
c0c102207d Initial work on support for query parameters 2015-01-27 10:28:11 +02:00
Arik Fraimovich
3b9d9ac75d Merge pull request #362 from joeysim/ctrl-s-for-save
added support for saving query with ctrl+s
2015-01-26 07:31:53 +02:00
Joey Simhon
2536fd57ed added support for saving query with cmd+s 2015-01-25 22:52:31 +02:00
Arik Fraimovich
d941e5e5b1 Merge pull request #361 from EverythingMe/DAT-825
Fix: fail with 403 when user not allowed to archive query.
2015-01-25 17:44:58 +02:00
Arik Fraimovich
039b0a89bb Merge pull request #359 from alexanderlz/master
add 'autoclose' to notifications (i.e. close after 3 seconds)
2015-01-25 17:35:53 +02:00
Arik Fraimovich
febf9939c8 Fix: fail with 403 when user not allowed to archive query. 2015-01-25 17:30:10 +02:00
Arik Fraimovich
bb84c6dab8 Merge pull request #360 from EverythingMe/DAT-825
Fix Gruntfile.js settings to copy font files.
2015-01-25 17:29:57 +02:00
Arik Fraimovich
cddc00e2cc Fix Gruntfile.js settings to copy font files. 2015-01-25 17:28:41 +02:00
Alexander Leibzon
091e3d41e1 add 'autoclose' to notifications (i.e. close after 3 seconds) 2015-01-25 17:14:06 +02:00
Arik Fraimovich
9dc3a35c1a Merge pull request #357 from alexanderlz/master
Bug #303: 'Show Total' duplicates values on multiple runs
2015-01-25 16:27:24 +02:00
Arik Fraimovich
f8878d3006 Merge pull request #358 from EverythingMe/DAT-825
Feature: archive query
2015-01-25 16:24:32 +02:00
Arik Fraimovich
1c0d596f26 Bump version due to migration. 2015-01-25 16:23:58 +02:00
Arik Fraimovich
1afd2ab388 Refactoring of @christophervalles work on query delete feature:
- Change delete into archive.
- Safely remove widgets.
- Make sure archived queries don't get scheduled, or show up in search.
- If direct link to query used, show notification.
- Tests.
- Some more.
2015-01-25 16:17:52 +02:00
Christopher Valles
4aa9500402 Working on delete query 2015-01-25 16:16:31 +02:00
Alexander Leibzon
4a8a4482fc add {} for readability 2015-01-25 15:29:45 +02:00
Alexander Leibzon
d83849a1b5 fix to apply with the original logic 2015-01-25 14:44:02 +02:00
Alexander Leibzon
44272f5d66 Bug #303: 'Show Total' duplicates values on multiple runs 2015-01-24 22:02:13 +02:00
Arik Fraimovich
83727ae931 Merge pull request #356 from alexanderlz/master
Bug #307 Fix: Notifications stopped working
2015-01-22 12:01:30 +02:00
Alexander Leibzon
0b0b88a255 remove unused line 2015-01-22 00:27:01 +02:00
Alexander Leibzon
f23d709f4e Bug #307 fix. Notifications stopped working 2015-01-22 00:16:31 +02:00
Arik Fraimovich
88abbc7ea6 Merge pull request #355 from EverythingMe/feature/personal_home
Several small fixes
2015-01-20 16:36:32 +02:00
Arik Fraimovich
16f0413af8 Fix: don't show dashboard filters where it's not enabled 2015-01-20 16:35:55 +02:00
Arik Fraimovich
f47020a64d Report personal page as different page 2015-01-20 16:32:31 +02:00
Arik Fraimovich
55e1ef81f7 Add activity_log to list of tables redash_reader can query 2015-01-20 16:32:31 +02:00
Arik Fraimovich
6bb43d0411 Merge pull request #354 from EverythingMe/feature/personal_home
Feature: personal home with recent queries & dashboards
2015-01-19 12:15:13 +02:00
Arik Fraimovich
f51c2328c9 Feature: personal home with recent queries & dashboards 2015-01-19 12:09:06 +02:00
Arik Fraimovich
fd37188ace Merge pull request #353 from EverythingMe/bug/dashboard_auto_refresh
Fix: nulls converted to strings in UI
2015-01-19 10:51:44 +02:00
Arik Fraimovich
758e27ce91 Fix: nulls converted to strings in UI 2015-01-19 10:49:39 +02:00
Arik Fraimovich
9a3b25eb50 Merge pull request #352 from EverythingMe/bug/dashboard_auto_refresh
Fix: dashboard auto refresh stopped working
2015-01-19 09:14:32 +02:00
Arik Fraimovich
6da890dfb8 FIX: dashboard auto refresh stopped working 2015-01-19 08:32:40 +02:00
Arik Fraimovich
0d35ec7139 Merge pull request #349 from erans/master
Minor bug fixes + supprot for limit and skip in simple query
2015-01-18 10:11:27 +02:00
Arik Fraimovich
dc0f9a63cb Merge pull request #351 from joeysim/search_improvements
Search improvements
2015-01-18 09:22:41 +02:00
Arik Fraimovich
21c042996e Merge pull request #350 from joeysim/ctrl_enter_exec
Added support for Cmd+Enter query execution for PCs
2015-01-18 09:21:32 +02:00
Joey Simhon
5f22adadf2 ordering all_queries by created_at desc for better relevancy with big lists 2015-01-17 21:19:22 +02:00
Joey Simhon
4e8888ce2f sort searched queries by creation time, assuming the newer queries are usually more relevant 2015-01-17 21:14:56 +02:00
Joey Simhon
0a69609d38 Added support for Cmd+Enter query execution for PCs 2015-01-17 00:32:21 +02:00
Eran Sandler
2dbcd88313 added support for skip and limit 2015-01-15 17:14:48 +02:00
Eran Sandler
6b0775f7c7 fixed an issue where 'query' element is missing as well as a bad sort order in simple queries 2015-01-15 17:11:32 +02:00
Arik Fraimovich
e85d3c3c9f Merge pull request #348 from EverythingMe/feature/additional_manage_commands
Feature: new data source management commands in manage.py
2015-01-14 12:35:13 +02:00
Arik Fraimovich
e20f57bba8 Added edit & delete commands to data source cli 2015-01-14 12:23:53 +02:00
Arik Fraimovich
933ace2e38 Split CLI commands to several files for easier editing and naming. 2015-01-14 10:52:11 +02:00
Arik Fraimovich
4c1e5aed6b Remove import from settings command (obsolete). 2015-01-14 10:27:53 +02:00
Arik Fraimovich
77d982b4aa Merge pull request #347 from barnash/query-params-for-filters
Query params for filters
2015-01-13 22:35:32 +02:00
barnash
02c8163265 Changed the query param to something more url friendly 2015-01-12 18:56:44 +02:00
Arik Fraimovich
ef868dbb6e Merge pull request #346 from erans/master
Initial support for Mongo's aggregation framework.
2015-01-12 18:17:41 +02:00
Iftach Bar
b2bab33baa added support for deep links to dashboards with saved filters 2015-01-12 09:23:27 +02:00
Iftach Bar
149e0835f8 fixed jshint stuff - semicolon in different places 2015-01-12 09:22:53 +02:00
Eran Sandler
50bed1d8f2 Initial support for Mongo's aggregation framework. 2015-01-11 12:37:37 +02:00
Eran Sandler
d4b5d78743 Perform a JSON.stringify on values who's type is "object" 2015-01-11 12:28:21 +02:00
Arik Fraimovich
7fc82a2562 Merge pull request #345 from EverythingMe/vagrant_dev
Developer Vagrant box for easier contribution
2014-12-30 07:52:07 +02:00
Arik Fraimovich
92fb138c2c Vagrant file to use the redash/dev box 2014-12-30 07:45:30 +02:00
Arik Fraimovich
71b4b45a3c Merge pull request #344 from EverythingMe/feature/query_results_cleanup
Job to cleanup unused query results
2014-12-25 15:58:10 +02:00
Arik Fraimovich
07f4a1b227 Fix: wiredep failing after version upgrade 2014-12-25 15:52:52 +02:00
Arik Fraimovich
e116e88e98 Job to cleanup unused query results 2014-12-25 15:39:49 +02:00
Arik Fraimovich
2278a181ca Merge pull request #339 from EverythingMe/counter-vis
bugfix: Counter visualization font size issues
2014-11-11 18:21:29 +02:00
Amir Nissim
98dc75a404 bugfix: Counter visualization was not watching for filter changes 2014-11-11 13:04:45 +02:00
Amir Nissim
536918aab3 bugfix: Counter visualization font size issues 2014-11-10 15:21:03 +02:00
Arik Fraimovich
c75ac80c7a Merge pull request #333 from EverythingMe/fix/import
Fix: mixed number columns was wrongly detected as integer
2014-11-05 11:33:46 +02:00
Arik Fraimovich
522d8542e9 Fix: mixed number columns was wrongly detected as integer 2014-11-05 11:30:17 +02:00
Arik Fraimovich
562df44c22 Merge pull request #331 from EverythingMe/fix/import
Fixes and improvements to import dashboard command:
2014-11-04 07:34:59 +02:00
Arik Fraimovich
86e6798c96 manage.py: better output for list data sources command 2014-11-04 07:26:32 +02:00
Arik Fraimovich
db7a287e82 manage.py: list all users command 2014-11-04 07:26:16 +02:00
Arik Fraimovich
518206f208 Fixes and imporvements to import dashboard:
- Update it to not expect query result.
- Add support for specifying data source.
- Create mapping file if it doesn't exist yet.
2014-11-04 07:24:51 +02:00
Arik Fraimovich
bcee1e12b4 Merge pull request #325 from EverythingMe/feature/search-by-id
Add support for searching for query by id
2014-10-30 08:23:41 +02:00
Arik Fraimovich
410f4f35e2 Add support for searching for query by id 2014-10-30 07:58:53 +02:00
Arik Fraimovich
84ea9fec43 Merge pull request #323 from EverythingMe/counter-vis
Counter visualization
2014-10-27 13:58:58 +02:00
Amir Nissim
cda82b7adc #27: use <select> for columns names 2014-10-27 11:47:38 +02:00
Amir Nissim
f2d8c2020b #27: counter and target as query params, change UI 2014-10-27 11:34:56 +02:00
Amir Nissim
1b82ecbc46 #27: Counter visualization draft 2014-10-26 15:42:57 +02:00
Arik Fraimovich
e381331c36 Merge pull request #319 from EverythingMe/bug_292
#292: Customizable series colors
2014-10-23 14:44:02 +03:00
Amir Nissim
ff58247987 #292: move color palette to ng_highcharts 2014-10-23 14:36:30 +03:00
Amir Nissim
dcf0d2cbe3 #292: Customizable series colors 2014-10-23 13:46:43 +03:00
Arik Fraimovich
eb99fa5671 Merge pull request #318 from EverythingMe/docs_setup
Packer: make re:dash version configurable
2014-10-22 12:01:32 +03:00
Arik Fraimovich
ce3e19f212 Make redash version configurable 2014-10-22 11:55:17 +03:00
Arik Fraimovich
44dca6da01 Spelling mistakes. 2014-10-21 19:02:17 +03:00
Arik Fraimovich
34c9fee540 Link to new setup instructions. 2014-10-21 19:01:40 +03:00
Arik Fraimovich
e0b13b2ffa Merge pull request #316 from EverythingMe/feature_users_cli
Add commands to change user's password and grant admin
2014-10-21 18:57:40 +03:00
Arik Fraimovich
df362c12b6 Add commands to change user password and grant admin 2014-10-21 18:51:23 +03:00
Arik Fraimovich
0d1f8c948a Merge pull request #309 from EverythingMe/docs_setup
Setup script for Ubuntu/Debian + packer configuration
2014-10-21 18:42:26 +03:00
Arik Fraimovich
f523378326 Setup script for Ubuntu/Debian + packer configuration
This script is intended to work on Ubuntu 12.04, Ubuntu 14.04 and Debian Wheezy (for GCE users).
To make sure we use the same version of Redis across all distributions we install from source,
and to make sure we use the same version of PostgreSQL we install it from PostgreSQL's apt.

Also included Packer configuration to generate GCE & AWS images.
2014-10-21 18:28:39 +03:00
Arik Fraimovich
b0f9e49709 Merge pull request #313 from erans/master
Forced setting a script execution path
2014-10-21 14:32:03 +03:00
Eran Sandler
b6dbb4e3f8 forced setting a script execution path 2014-10-21 11:20:31 +03:00
Arik Fraimovich
3f6a0e8ffa Merge pull request #312 from erans/master
MongoDB ReplicaSet support and a new connection string format.
2014-10-21 10:21:49 +03:00
Eran Sandler
a7bcc6d31e Added support for MongoDB ReplicaSet as well as changed the connection string format to a JSON based one (like BigQuery). Check the wiki for an example. 2014-10-21 10:16:48 +03:00
Arik Fraimovich
8aa2d8e70a landscape.io configuration file 2014-10-19 13:41:29 +03:00
Arik Fraimovich
4720e12be7 add angular-ui-select to list of dependencies 2014-10-15 17:56:32 +03:00
Arik Fraimovich
5463591f0d Merge branch 'feature/dashboard_add_query_by_name' 2014-10-15 17:45:57 +03:00
Arik Fraimovich
2a0198fba8 Make search expect at least 2 characters 2014-10-15 17:45:39 +03:00
Arik Fraimovich
652f214b25 Updated bower dependencies:
- Angular 1.2.7 -> 1.2.18 (to support angular-ui-select).
- angular-resource and angular-route to match Angular version.
- angular-growl to latest version that supports ~1.2.
- Change version of angular-ui-select to specific one.
2014-10-15 17:42:08 +03:00
Arik Fraimovich
aa49780134 Use unminified version of angular-ui-select 2014-10-15 17:41:55 +03:00
Raymond
f483b61cfb add global html sanitizer 2014-10-15 20:55:29 +08:00
Arik Fraimovich
38a189b671 Merge pull request #306 from raymoondtang/fix/clomun_type_ingeter
Client fix, clomun type support ingeter
2014-10-15 15:46:15 +03:00
Raymond
c2331988db use selected_query for ng-show of visualisation form 2014-10-15 20:32:15 +08:00
Raymond
eff5bdb454 Merge branch 'master' of github-yalo:EverythingMe/redash into fix/clomun_type_ingeter 2014-10-15 19:29:01 +08:00
Raymond
bd1babec3a Add query to dashboard based on name not query id, issue #171 2014-10-15 14:46:55 +08:00
Raymond
d43c2bbf62 table column type handle both integer and float 2014-10-13 12:57:42 +08:00
Arik Fraimovich
87db8099d6 Fix: need to group by runtime and retrieved_at 2014-10-06 09:53:02 +03:00
Arik Fraimovich
ebea118c7d Merge pull request #300 from EverythingMe/feature_google_oauth
Remove query stats (runtime, last retrieve) from search as it was too slow
2014-10-06 09:45:03 +03:00
Arik Fraimovich
297ac5c9bd Fix markdown filter (failing for undefined) 2014-10-06 09:41:56 +03:00
Arik Fraimovich
9b23fb4235 Remove query stats from search, as it was too slow 2014-10-06 09:41:40 +03:00
Arik Fraimovich
0a71f5e22d Merge pull request #298 from erans/master
Initial support for MongoDB.
2014-10-06 08:26:03 +03:00
Arik Fraimovich
0a8aaceb85 Merge pull request #299 from EverythingMe/feature_google_oauth
Show last execution time & runtime in search results + event tracking
2014-10-06 08:25:17 +03:00
Arik Fraimovich
00979f3ad7 Event tracking for search 2014-10-06 08:00:56 +03:00
Arik Fraimovich
c7b48837f2 Show last execution time & runtime in search results 2014-10-06 07:55:17 +03:00
Eran Sandler
418c5322c1 added extra error handling for invalid query and invalid database name 2014-10-02 12:42:46 +03:00
Arik Fraimovich
dc5b4c26a3 Updated README: link to new demo instance. 2014-10-02 07:57:52 +03:00
Eran Sandler
9ed0a5ba85 removed a debug message and change to a better error message when collection is not specified. 2014-09-30 18:43:40 +03:00
Eran Sandler
db0770fc17 Initial support for MongoDB.
Support simple queries using the a JSON format:
{
	"collection" : THE NAME OF THE COLLECTION TO QUERY,
	"query" : {
		A DICTIONARY FOR QUERYING FIELDS (similar to what you would find in PyMongo
	},
	"fields" : {
		LIST OF FIELDS TO RETURN IN THE SPECIFIED ORDER
	},
	"sort" : {
		LIST OF FIELDS TO SORT BY (1 - Ascending, -1 - descending)
	}
}

For example:
{
	"collection" : "mycoolcollection",
	"query" : {
		"fieldA" : { "$gte" : 5 },
		"created" : { "$lt" : "ISODate(\"2014-09-01 23:43\")" }
	},
	"fields" : {
		"fieldA" : 1,
		"created" : 2
	},
	"sort" : {
		"created" : -1
	}
}
2014-09-30 18:34:35 +03:00
Arik Fraimovich
9bb58e71d2 Merge pull request #296 from EverythingMe/feature_google_oauth
Feature: basic search page for queries
2014-09-30 08:43:16 +03:00
Arik Fraimovich
560598eaad Search UI. 2014-09-30 08:39:13 +03:00
Arik Fraimovich
f9144fc927 Naive search implementation. 2014-09-30 08:37:59 +03:00
Arik Fraimovich
883bf173c0 Merge pull request #295 from EverythingMe/feature_google_oauth
Feature: support markdown in query description (fixes #293)
2014-09-29 18:15:24 +03:00
Arik Fraimovich
3f2bb65b32 Show markdown in query view too 2014-09-29 18:10:17 +03:00
Arik Fraimovich
3917af019a Feature: support markdown in query description 2014-09-29 17:59:40 +03:00
Arik Fraimovich
e88837e835 Merge pull request #291 from EverythingMe/feature_google_oauth
Move event recording to Celery/database instead of log file
2014-09-27 17:45:55 +03:00
Arik Fraimovich
7abdc2543e update manage.py to use new Event.record method. 2014-09-27 17:45:04 +03:00
Arik Fraimovich
91ab90a6fe Move event recording to Celery/database instead of log file 2014-09-27 17:41:50 +03:00
Arik Fraimovich
7fd2bd3d24 Merge pull request #290 from EverythingMe/feature_google_oauth
Clearer google login button
2014-09-27 16:26:02 +03:00
Arik Fraimovich
3ed1ea1e33 Clearer google login button 2014-09-26 13:13:05 +03:00
Arik Fraimovich
a4486c56b9 Merge pull request #289 from EverythingMe/feature_google_oauth
Fix: add necessary scope to get user's name
2014-09-26 00:40:11 +03:00
Arik Fraimovich
3da0ecf36c Fix: add necessary scope to get user's name 2014-09-25 17:55:43 +03:00
Arik Fraimovich
11a1095b18 Merge pull request #284 from EverythingMe/feature_google_oauth
Feature: Google OAuth support (instead of deprecated OpenID)
2014-09-24 18:13:45 +03:00
Arik Fraimovich
b43485f322 Update tests 2014-09-21 10:11:03 +03:00
Arik Fraimovich
d83675326b Only enable google oauth if client id & secret provided 2014-09-21 09:07:52 +03:00
Arik Fraimovich
8d7b9a552e Google OAuth support (fixes #223) 2014-09-21 08:53:41 +03:00
Arik Fraimovich
e1eb75b786 Add to requirements flask-oauth and remove flask-googleopenid 2014-09-21 08:48:15 +03:00
Arik Fraimovich
34a3c9e91c Link to wiki in readme 2014-09-17 16:14:49 +03:00
Arik Fraimovich
e007a2891d Fix build status image in readme 2014-09-17 16:06:15 +03:00
Arik Fraimovich
febe6e4aa7 Update readme 2014-09-17 16:04:30 +03:00
Arik Fraimovich
8099dafc68 Merge pull request #283 from EverythingMe/fix_stuck_jobs
Update psycopg2 to 2.5.2.
2014-09-15 09:28:47 +03:00
Arik Fraimovich
ce3d5e637f Update psycopg2 to 2.5.2.
In 2.5.1 they had an issue, where OperationalError exception was causing SEGFAULT
when being pickled. This was crashing the Celery worker, causing the jobs to be lost.
2014-09-15 07:25:35 +03:00
Arik Fraimovich
4a52ccd4fa Gitter integration for CircleCI. 2014-09-14 18:23:02 +03:00
Arik Fraimovich
a0c81f8a31 Merge pull request #281 from EverythingMe/fix_stuck_jobs
Several fixes to reduce cases of stuck jobs
2014-09-11 07:50:35 +03:00
Arik Fraimovich
ce13b79bdc Use correct logging level 2014-09-11 07:47:30 +03:00
Arik Fraimovich
c580db277d Add cleanup_tasks job.
Enumerates all locks and removes those of non existing jobs. Useful
for case the worker is being cold restarted, and jobs are finished
properly.
2014-09-11 07:42:36 +03:00
Arik Fraimovich
5e944e9a8f If found lock is for a ready job, ignore it.
ready - revoked, finished or failed.
2014-09-11 07:41:43 +03:00
Arik Fraimovich
4b94cf706a Set default locks expiry time to 12 hours 2014-09-11 07:41:23 +03:00
Arik Fraimovich
364c51456d Set expiry time to locks, just in case for some reason they get stuck. 2014-09-11 07:40:20 +03:00
Arik Fraimovich
1274d36abc Merge pull request #280 from EverythingMe/fix_stuck_jobs
Fix #261: cancelling jobs sends them to limbo
2014-09-06 18:12:03 +03:00
Arik Fraimovich
f6bd562dd2 Remove cleanup_tasks, as it's not stable 2014-09-06 18:09:04 +03:00
Arik Fraimovich
065d2bc2c6 Schedule removal of dead tasks 2014-09-06 14:18:35 +03:00
Arik Fraimovich
653ed1c57a Add cleanup task to remove locks of dead jobs 2014-09-06 14:18:15 +03:00
Arik Fraimovich
7dc1176628 Fix #261: cancelling jobs sends them to limbo 2014-09-06 13:56:36 +03:00
Arik Fraimovich
365b8a8c93 Merge pull request #279 from EverythingMe/json-results
API - query results in JSON format. fixes #278
2014-09-03 12:07:36 +03:00
Arik Fraimovich
6e1e0a9967 Merge QueryResultAPI with CSVQueryResultAPI 2014-09-03 11:55:17 +03:00
Amir Nissim
170640a63f API - query results in JSON format. fixes #278 2014-09-02 17:52:04 +03:00
Arik Fraimovich
5e970b73d5 Merge pull request #270 from olgakogan/master
added handling for querying strings with non standard characters
2014-08-25 12:00:02 +03:00
olgakogan
a4643472a5 added handling for querying strings with non standard characters 2014-08-24 19:08:10 +03:00
Arik Fraimovich
7aa01f2bd2 Comment out filters url sync tests. 2014-08-20 09:07:08 +03:00
Arik Fraimovich
cb4b0e0296 Merge pull request #269 from EverythingMe/257-chart-editor
Disable filters url syncing
2014-08-20 08:59:22 +03:00
Arik Fraimovich
2c05e921c4 Disable filters url syncing 2014-08-20 08:58:56 +03:00
Arik Fraimovich
c4877f254e Merge pull request #268 from EverythingMe/257-chart-editor
[#257] chart editor: global series type
2014-08-19 19:51:57 +03:00
Arik Fraimovich
9fc59de35f remove throttling of redrawData 2014-08-19 18:37:32 +03:00
Amir Nissim
eb50f3fc94 [#257] chart editor: use globalSeriesType when creating new series 2014-08-19 14:44:53 +03:00
Arik Fraimovich
12fe59827f Merge pull request #267 from EverythingMe/257-chart-editor
[#257] chart editor: global series type
2014-08-19 14:04:44 +03:00
Arik Fraimovich
d32caff31d Merge pull request #266 from EverythingMe/265-db-reloads
disable reloadOnSearch for /dashboard. fixes #265
2014-08-19 13:17:17 +03:00
Amir Nissim
ba540ff380 [#257] chart editor: global series type 2014-08-19 13:14:24 +03:00
Amir Nissim
2112faab02 disable reloadOnSearch for /dashboard. fixes #265 2014-08-19 12:01:23 +03:00
Arik Fraimovich
34c6be398a Merge pull request #264 from EverythingMe/fix_data_error
Treat all psycopg2.DatabaseError the same.
2014-08-19 09:53:38 +03:00
Arik Fraimovich
3f9c2a5592 Treat all psycopg2.DatabaseError the same.
Sometimes division by zero are reported as OperationalError rather than
DataError.
2014-08-19 09:47:31 +03:00
Arik Fraimovich
8076b7f0b7 Gruntfile.js: add login.html back to minified files. 2014-08-12 13:34:39 +03:00
Arik Fraimovich
8940d66b0b Merge pull request #253 from EverythingMe/146-filter-sync
rd_ui: sync filters with location.search [closes #146]
2014-08-07 14:28:06 +03:00
Amir Nissim
948e2247e4 rd_ui: sync filters with location.search [closes #146] 2014-08-07 14:11:43 +03:00
Arik Fraimovich
eba2ba1918 Merge pull request #260 from EverythingMe/fix_queue_name
Fix: dashboard filters broken after #252
2014-08-07 08:20:01 +03:00
Arik Fraimovich
59d5ba9273 Use promises to create dashboard filters. 2014-08-06 23:39:30 +03:00
Arik Fraimovich
4aba24a976 Add promise support to QueryResult. 2014-08-06 23:39:09 +03:00
Arik Fraimovich
762c331ddf Merge pull request #259 from EverythingMe/fix_queue_name
Fix events import code
2014-08-06 17:58:28 +03:00
Amir Nissim
9592610f8b update .gitignore 2014-08-06 16:19:09 +03:00
Arik Fraimovich
8b7399ddc9 Fix events import code 2014-08-06 09:31:19 +03:00
Arik Fraimovich
f6221da9dc Merge pull request #256 from EverythingMe/fix_queue_name
Fix: series options not showing up when first running the query.
2014-08-05 12:42:43 +03:00
Arik Fraimovich
10c84d2cd0 Fix: series options not showing up when first running the query. 2014-08-05 12:39:35 +03:00
Arik Fraimovich
60d784d7bc Cleanup Query.prototype.getQueryResult and make sure it caches result by id. 2014-08-05 12:38:53 +03:00
Arik Fraimovich
b28e4be8d7 Sort data sources by id. 2014-08-05 12:30:51 +03:00
Arik Fraimovich
e74b36996f Merge pull request #255 from EverythingMe/fix_queue_name
Fix: use correct queue name for scheduled queries
2014-08-04 22:40:16 +03:00
Arik Fraimovich
4c28d11259 Fix: use correct queue name for scheduled queries 2014-08-04 22:31:13 +03:00
Arik Fraimovich
b1e1a32f37 Merge pull request #252 from EverythingMe/perf
perf: HTTP caching headers for /api/query_results [fixes #228]
2014-08-04 16:55:39 +03:00
Amir Nissim
a12b43265d perf: HTTP caching headers for /api/query_results [fixes #228] 2014-08-04 16:50:56 +03:00
Arik Fraimovich
c2d621ae0f Merge pull request #247 from EverythingMe/245-refresh-btn
[#245] Add refresh button to query view page
2014-08-03 14:51:06 +03:00
Amir Nissim
d93e07061b [#245] Add refresh button to query view page 2014-08-03 13:14:17 +03:00
Arik Fraimovich
cb59973b9a Merge pull request #251 from EverythingMe/tests
setup Karma unit tests
2014-08-03 11:27:38 +03:00
Amir Nissim
72e41a94e4 update ci config 2014-08-03 11:15:02 +03:00
Amir Nissim
9013497fc7 rd_ui: fix failing unit test 2014-08-03 11:15:00 +03:00
Amir Nissim
a74ae32122 testing infra: basic QueryViewCtrl tests 2014-07-31 16:11:37 +03:00
Amir Nissim
9cfae349da testing infra: updated Karma and Grunt 2014-07-30 14:28:00 +03:00
Arik Fraimovich
a16718917b Merge pull request #248 from EverythingMe/243-db-requests
#243 dashboards api will not return query results by default
2014-07-29 16:14:08 +03:00
Amir Nissim
e2e365d9ff Query.to_dict never with results 2014-07-29 11:11:40 +03:00
Amir Nissim
5310498d0f [#241] fix textbox widget layout 2014-07-28 17:17:20 +03:00
Amir Nissim
bb1d2f8805 [#243] dashboards api will not return query results by default 2014-07-28 16:52:19 +03:00
Amir Nissim
0d5f001d38 fix migration add_text_to_widgets 2014-07-28 16:27:23 +03:00
Amir Nissim
236f7f9c04 fix add_global_filters_to_dashboard migration script 2014-07-28 12:15:08 +03:00
Amir Nissim
74bf8e5239 ignore celery files 2014-07-28 12:08:59 +03:00
Arik Fraimovich
71e125b4b0 Update Procfile.dev to use celery. 2014-07-20 12:08:08 +03:00
Arik Fraimovich
6a8befc641 Merge pull request #239 from EverythingMe/feature_outdated_queries_monitor
Model and import script for events
2014-07-09 18:55:53 +03:00
Arik Fraimovich
a79aa382d7 command to import events 2014-07-09 18:33:29 +03:00
Arik Fraimovich
5698f9692a Events model 2014-07-09 18:33:21 +03:00
Arik Fraimovich
b2381f6933 Merge pull request #238 from EverythingMe/feature_outdated_queries_monitor
Show outdated queries count and queue size in status
2014-07-08 21:51:13 +03:00
Arik Fraimovich
9a732a4dbf Show outdated queries count and queue size in status 2014-07-08 18:54:25 +03:00
Arik Fraimovich
17eb7e4146 Fix: when updating visualization need to ignore query_id 2014-07-07 16:59:18 +03:00
Arik Fraimovich
16a6c96c22 Use correct instance of queryResult 2014-07-06 18:34:26 +03:00
Arik Fraimovich
bc0a5160ac Fix: view going into infinite loop of calling getQueryResult. 2014-07-06 18:17:23 +03:00
Arik Fraimovich
62ab1fda80 Fix: UI hanging when saving query.
Clone query object, before modifying/sending over the wire.
2014-07-06 14:38:37 +03:00
Arik Fraimovich
b5309833ee Add logging to saveQuery 2014-07-06 13:59:51 +03:00
Arik Fraimovich
7b932507a6 Merge pull request #237 from EverythingMe/feature_column_editor
Feature: chart editor (no more "::x", "::y", "::series") + a lot more
2014-07-05 12:50:18 +03:00
Arik Fraimovich
c9fda5e6f1 Improve layout 2014-07-05 12:19:59 +03:00
Arik Fraimovich
a274bde092 Fix: after saving the column type mapping is empty 2014-07-05 12:19:48 +03:00
Arik Fraimovich
b4024ec880 Settings for chart options. 2014-07-05 12:02:51 +03:00
Arik Fraimovich
6367943d31 Make sure all paths of getQueryResult return same object. 2014-07-05 12:02:51 +03:00
Arik Fraimovich
eaa83556c3 Settings for second y axis. 2014-07-05 12:02:51 +03:00
Arik Fraimovich
7e720bcecd Chart columns type mapping. 2014-07-05 12:02:51 +03:00
Arik Fraimovich
003c285d11 Fix: dashboard view event 2014-07-05 12:02:51 +03:00
Arik Fraimovich
54687e72bd Merge pull request #236 from EverythingMe/fix_234
Fix #234: when converting value to moment, also set the column type
2014-07-05 11:37:00 +03:00
Arik Fraimovich
8c59386dc9 Fix #234: when converting value to moment, also set the column type 2014-07-05 11:35:10 +03:00
Arik Fraimovich
0369c557a4 Merge pull request #235 from shayel/master
Add Emacs (The One True Editor(TM)) backup files to .gitignore
2014-06-30 13:56:08 +03:00
Shay Elkin
1ca95dc497 Add Emacs (The One True Editor(TM)) backup files to .gitignore 2014-06-30 13:53:20 +03:00
Arik Fraimovich
85ea9060b0 Merge pull request #232 from jeremi/feature-bigquery-types
Add support for types in BigQuery
2014-06-27 16:31:29 +03:00
Arik Fraimovich
19b4ec7102 Merge pull request #233 from jeremi/fix-boolean-support-table
when the value is false, display false instead of empty cell
2014-06-27 16:29:46 +03:00
jeremi
b2fea7f2fe Add support for timestamps
Fix the type field
2014-06-27 15:48:52 +08:00
jeremi
d5947669ab when the value is false, display false instead of empty cell 2014-06-27 15:43:30 +08:00
jeremi
4cb97db98e Add support for types in BigQuery 2014-06-25 18:05:34 +08:00
Arik Fraimovich
9b5d43067a Revert "Merge pull request #231 from erans/master"
This introduced some unicode issues. Reverting until resolved.

This reverts commit 8731a8d273, reversing
changes made to 90157157df.
2014-06-24 14:00:21 +03:00
Arik Fraimovich
8731a8d273 Merge pull request #231 from erans/master
Force the use of JSON in Celery
2014-06-24 12:47:19 +03:00
Eran Sandler
08a06b0792 only use json in celery for serialization. pickle is going to be deprecated soon 2014-06-24 12:29:44 +03:00
Arik Fraimovich
90157157df Merge pull request #229 from jeremi/fix-heroku-procfile
fix starting of celery in Heroku
2014-06-24 11:24:54 +03:00
Arik Fraimovich
f5ea1f1559 Merge pull request #230 from jeremi/fix-default-groups
Add default group when user is created
2014-06-24 11:24:20 +03:00
jeremi
cf89e6b184 Make sure when users are created that it is with the default groups and not permissions. 2014-06-24 09:54:22 +08:00
jeremi
5920747122 fix starting of celery in Heroku 2014-06-24 09:46:40 +08:00
Arik Fraimovich
2fff4f4036 Merge pull request #227 from EverythingMe/feature_celery_status
Show Celery Flower in an iframe.
2014-06-20 15:32:49 +03:00
Arik Fraimovich
442ece5a4f Show celery flower url inside an iframe. 2014-06-20 15:29:02 +03:00
Arik Fraimovich
4bbf04b68a Update migration for new structure 2014-06-18 20:24:53 +03:00
Arik Fraimovich
f74af231ce Merge pull request #226 from EverythingMe/feature_toggle_series
Progress indicator for requests and reload on failure for dashboards
2014-06-11 18:06:26 +03:00
Arik Fraimovich
ffa679e04b Add reload in case of error for dashboards 2014-06-11 17:54:42 +03:00
Arik Fraimovich
8f1d267c00 Add pace, to indicate while things are loading (#24) 2014-06-11 17:54:21 +03:00
Arik Fraimovich
af61517384 Merge pull request #225 from hailocab/spelling-mistake-1
Spelling mistake 1
2014-06-10 15:53:38 +03:00
Zach Yewman
15a7374a4b Fixed spelling mistake of "Visualation" to "Visualization" 2014-06-10 12:55:03 +01:00
Arik Fraimovich
c0fe4a7c84 Merge pull request #224 from EverythingMe/feature_toggle_series
Feature: additional chart controls - toggle all, show total
2014-06-10 09:31:38 +03:00
Arik Fraimovich
2a18c4493b Update to latest pivottable. (fixes #211) 2014-06-10 09:27:14 +03:00
Arik Fraimovich
fc60c1b86a Additional chart controls: toggle all, show total 2014-06-10 09:26:59 +03:00
Arik Fraimovich
5b998269b3 Merge pull request #222 from EverythingMe/feature_download_from_dashboard
Feature download from dashboard
2014-05-19 16:31:53 +03:00
Arik Fraimovich
914378cc65 Remove debug printing 2014-05-19 16:29:31 +03:00
Arik Fraimovich
30f98e9796 Feature: download dataset button in dashboard 2014-05-19 16:28:25 +03:00
Arik Fraimovich
2b524075d9 Fix: indention 2014-05-19 16:16:04 +03:00
Arik Fraimovich
3641e332b0 Merge pull request #221 from EverythingMe/ui_fixes
Several bug fixes (#211, #209 and more)
2014-05-18 17:01:11 +03:00
Arik Fraimovich
4ce3f4eaa9 Include data source id in job "lock" 2014-05-18 16:35:47 +03:00
Arik Fraimovich
0b173e67a5 When changing data source, save query only if it was saved 2014-05-18 16:29:01 +03:00
Arik Fraimovich
2af234d180 Reset new dashboard form after saving (fixes #209) 2014-05-18 15:44:23 +03:00
Arik Fraimovich
d751fd8c8c Make sure table/pivot doesn't overflow 2014-05-18 15:01:40 +03:00
Arik Fraimovich
35552f9b77 Update to latest pivottable. (fixes #211) 2014-05-18 15:00:55 +03:00
Arik Fraimovich
1cc36b481a When formatting datge/time, if value is null, ignore 2014-05-18 14:36:46 +03:00
Arik Fraimovich
c9b95bc359 Fix: if column named only ::x the table was broken 2014-05-18 14:34:13 +03:00
Arik Fraimovich
86d64c35ab Add favicon to the project 2014-05-18 14:28:08 +03:00
Arik Fraimovich
8712c8567c Add /\ to escpaed characters in column name 2014-05-18 14:25:54 +03:00
Arik Fraimovich
b0cc646b5e Merge pull request #220 from EverythingMe/celery
Reconnect to database on every task.
2014-05-18 13:59:42 +03:00
Arik Fraimovich
8e1c852b0d Reset the database lock if pid changed 2014-05-18 13:57:08 +03:00
Arik Fraimovich
349f67337d Merge pull request #219 from EverythingMe/celery
Split __init__ into several modules and remove flask-peewee dependency.
2014-05-18 10:21:38 +03:00
Arik Fraimovich
4af979d3eb Split __init__ into several modules and remove flask-peewee dependency.
This should make imports more sensible and with less side effects. Also might reduce the memory footprint of the workers.
2014-05-18 10:19:07 +03:00
Arik Fraimovich
727cc67f19 Merge pull request #218 from EverythingMe/celery
Fix: queries were enqueued more than once because lock wasn't saved
2014-05-17 18:16:09 +03:00
Arik Fraimovich
f51df00564 Fix: queries were enqueued >1 because lock wasn't saved 2014-05-17 18:12:39 +03:00
Arik Fraimovich
8d7044a81a Merge pull request #217 from EverythingMe/celery
Use celery to replace our home grown background workers
2014-05-17 17:21:55 +03:00
Arik Fraimovich
d1c62b106d Fix: refresh fails if no status was previously set 2014-05-17 17:17:18 +03:00
Arik Fraimovich
a1dcf94d4d Update tests 2014-05-17 17:11:46 +03:00
Arik Fraimovich
53fc9bbf54 Use data source's queue name. 2014-05-17 16:50:44 +03:00
Arik Fraimovich
7755e9859d Add queue name to data source 2014-05-17 16:44:30 +03:00
Arik Fraimovich
21f3a80940 Use cls instead of explicit class name 2014-05-17 16:22:55 +03:00
Arik Fraimovich
06910d9002 Remove unused dependencies. 2014-05-17 16:19:32 +03:00
Arik Fraimovich
5777070bec Schedule refresh_queries using celery_beat. 2014-05-16 18:36:42 +03:00
Arik Fraimovich
8e3adcd283 Update .gitignore. 2014-05-16 18:36:21 +03:00
Arik Fraimovich
381ab62505 Move outdated queries selection logic to model. 2014-05-16 18:34:53 +03:00
Arik Fraimovich
93491004e2 Fix test due to refactor. 2014-05-16 18:19:01 +03:00
Arik Fraimovich
d1f0ae9538 Remove tests for old Job class. 2014-05-16 18:14:42 +03:00
Arik Fraimovich
94bb55d66b Remove the data.Manager as it's not needed anymore. 2014-05-16 18:13:37 +03:00
Arik Fraimovich
9de6996dc8 Deprecate old runworkers command. 2014-05-16 17:57:43 +03:00
Arik Fraimovich
9636359497 Update controllers to use new Job class. 2014-05-16 17:57:14 +03:00
Arik Fraimovich
9a6b40aff9 Enqueue jobs to celery. 2014-05-16 17:56:57 +03:00
Arik Fraimovich
82dee49a43 Remove old workers code. 2014-05-16 17:56:28 +03:00
Arik Fraimovich
9b4482f25d Move result storing logic to models. 2014-05-16 17:56:04 +03:00
Arik Fraimovich
4caf1ac3d3 Create celery app object. 2014-05-16 17:54:14 +03:00
Arik Fraimovich
0cda4a6632 Bump version to 0.4 2014-05-16 14:37:20 +03:00
Arik Fraimovich
a80618fbe2 Celery related settings 2014-05-16 14:37:11 +03:00
Arik Fraimovich
310808f1fb Add celery to requirements.txt 2014-05-16 14:26:54 +03:00
Christopher Valles
939168773a Merge remote-tracking branch 'upstream/master' 2014-05-14 11:10:43 +01:00
Arik Fraimovich
c6a415535e Merge pull request #213 from EverythingMe/feature_auto_links
Feature: auto link URLs in table
2014-05-13 20:17:26 +03:00
Arik Fraimovich
ce87c7b736 Apply cell contents as html. 2014-05-13 20:15:00 +03:00
Arik Fraimovich
036eb46ea4 Apply linking filter to string columns. 2014-05-13 20:14:45 +03:00
Arik Fraimovich
95ad15057b Filter to convert URLs into <a> elements. 2014-05-13 20:14:23 +03:00
Arik Fraimovich
459309ee4e Merge branch 'feature_group_permissions' (updated version of #208) 2014-05-13 19:42:04 +03:00
Arik Fraimovich
4e0069810e Bump version to 0.3.7 2014-05-13 19:41:50 +03:00
Arik Fraimovich
5a62e90f17 Fix migration code 2014-05-13 19:36:04 +03:00
Arik Fraimovich
cf689c424f Fix user creation in manage.py 2014-05-13 18:34:19 +03:00
Arik Fraimovich
dad9eb21a0 Create user groups in test setup. 2014-05-13 18:29:59 +03:00
Arik Fraimovich
8b581368dc Use the User.permissions property instead of groups. 2014-05-13 18:29:39 +03:00
Arik Fraimovich
ca093ec235 Move permissions logic back to a property on User model. 2014-05-13 18:18:10 +03:00
Arik Fraimovich
c6e210f107 Use new SQLMetadata class to check table permissions. 2014-05-13 18:17:39 +03:00
Arik Fraimovich
e2d0285496 Feature flag for enabling table permission checking. 2014-05-13 18:17:08 +03:00
Arik Fraimovich
16125327b1 Class for SQL metadata logic (tables, ddl, dml statements) 2014-05-13 18:16:30 +03:00
Arik Fraimovich
d8d666c971 Update the migration to use the admin permission too 2014-05-13 17:13:05 +03:00
Arik Fraimovich
772ea94b59 Fix: move the groups creation to init function 2014-05-13 16:47:58 +03:00
Yosi Taguri
e499e8099d aligned the file. added sleep to job status retry and fixed the error message when HttpError is raised 2014-05-13 16:26:17 +03:00
Yosi Taguri
75bc9bb318 support monitoring a long running job. 2014-05-13 16:26:16 +03:00
Christopher Valles
f79362c7a3 Merge remote-tracking branch 'upstream/master' 2014-05-13 14:06:37 +01:00
Arik Fraimovich
2c34ecde35 Merge pull request #210 from yosit/master-yosit
support monitoring a long running job.
2014-05-13 09:07:11 +03:00
Yosi Taguri
1610d9b782 aligned the file. added sleep to job status retry and fixed the error message when HttpError is raised 2014-05-13 09:03:30 +03:00
Yosi Taguri
17dd4efb27 support monitoring a long running job. 2014-05-12 19:31:29 +03:00
Christopher Valles
7a2af73bea Fix table case sensitive for permissions 2014-05-12 14:15:11 +01:00
Christopher Valles
81d027611f Remove is_admin flag 2014-05-09 18:12:34 +01:00
Christopher Valles
9ef941bc63 Adding default groups to manage.py database create_tables command 2014-05-09 18:02:22 +01:00
Christopher Valles
cb0d27e691 Fix errors 2014-05-09 14:44:26 +01:00
Christopher Valles
03767bbc0a Adding logging for permission denied situations 2014-05-09 13:19:23 +01:00
Christopher Valles
0042b73cd9 Fixes 2014-05-09 13:06:01 +01:00
Christopher Valles
1c095bcd99 Fix tests 2014-05-09 12:43:29 +01:00
Christopher Valles
4287d9a2e2 Remove gemfiles from gitignore 2014-05-08 19:54:12 +01:00
Christopher Valles
e297faab7c Fixing more tests 2014-05-08 19:29:50 +01:00
Christopher Valles
c0329cc0ef Fixed tests; 2014-05-08 19:19:23 +01:00
Christopher Valles
dc7050d4ef Fix manage.py permission reference 2014-05-08 18:43:59 +01:00
Christopher Valles
3a2f2be95d Merge stuff 2014-05-08 18:38:44 +01:00
Christopher Valles
b4432ee21d Merge branch 'master' of https://github.com/hailocab/redash 2014-05-08 18:22:40 +01:00
Christopher Valles
d9b0e84bbe Remove ADMIN env variable 2014-05-08 12:40:58 +01:00
Arik Fraimovich
e8c946b88b Merge pull request #205 from joeysim/keyboard-shortcut
added support for cmd+enter execution
2014-05-08 10:57:30 +03:00
Joey Simhon
7b94260135 added support for cmd+enter execution 2014-05-07 22:45:39 +03:00
Christopher Valles
51c59dad63 Put back jquery-ui reference 2014-05-07 17:00:52 +01:00
Christopher Valles
2d398696d0 Update from upstream 2014-05-07 15:36:42 +01:00
Christopher Valles
ceb08808f8 Merge pull request #5 from hailocab/permission_system
Permission system
2014-05-07 15:28:52 +01:00
Arik Fraimovich
e7c6ba8c1d Merge pull request #204 from EverythingMe/performance
Add Bucky (client side metrics client).
2014-05-07 17:28:19 +03:00
Arik Fraimovich
3cee9c9b3a Merge pull request #204 from EverythingMe/performance
Add Bucky (client side metrics client).
2014-05-07 17:28:19 +03:00
Arik Fraimovich
509edf651b Add bucky (client side metrics client). 2014-05-07 17:25:43 +03:00
Arik Fraimovich
28224a0ba1 Add bucky (client side metrics client). 2014-05-07 17:25:43 +03:00
Christopher Valles
4e8cd93905 Fix conflict 2014-05-07 15:24:49 +01:00
Christopher Valles
069fe38354 Merge pull request #2 from hailocab/add/requirement
Add gunicorn to the requirements
2014-05-07 15:20:15 +01:00
Arik Fraimovich
05c915cf00 Fix indendentation 2014-05-07 15:48:29 +03:00
Arik Fraimovich
37512b5fdd Fix indendentation 2014-05-07 15:48:29 +03:00
Arik Fraimovich
0fa22500be Merge pull request #203 from EverythingMe/performance
Report to statsd request render time
2014-05-07 15:15:56 +03:00
Arik Fraimovich
3fbc73d181 Merge pull request #203 from EverythingMe/performance
Report to statsd request render time
2014-05-07 15:15:56 +03:00
Arik Fraimovich
4d4f41733d Report to statsd request render time 2014-05-07 15:13:29 +03:00
Arik Fraimovich
113821cc97 Report to statsd request render time 2014-05-07 15:13:29 +03:00
Christopher Valles
3f9ba7ff00 Fix cohort visualization 2014-05-06 14:28:35 +01:00
Arik Fraimovich
37bf79c9eb Merge pull request #201 from EverythingMe/feature_dashboard_filters
Use column type data (if available) to properly render data table.
2014-05-05 19:48:05 +03:00
Arik Fraimovich
073deb8315 Merge pull request #201 from EverythingMe/feature_dashboard_filters
Use column type data (if available) to properly render data table.
2014-05-05 19:48:05 +03:00
Arik Fraimovich
38293fc155 Fix: query save fails if query has queryResult property. 2014-05-05 19:45:07 +03:00
Arik Fraimovich
7793b3fe41 Fix: query save fails if query has queryResult property. 2014-05-05 19:45:07 +03:00
Arik Fraimovich
52f44588e6 Use column type (if available) to better render tables. 2014-05-05 19:44:52 +03:00
Arik Fraimovich
25de0303a1 Use column type (if available) to better render tables. 2014-05-05 19:44:52 +03:00
Arik Fraimovich
0ffda9d002 Populate the column type field. 2014-05-05 19:44:28 +03:00
Arik Fraimovich
a37aa11baf Populate the column type field. 2014-05-05 19:44:28 +03:00
Arik Fraimovich
e7331633a4 Fix indentation. 2014-05-05 19:32:17 +03:00
Arik Fraimovich
1ae40981fe Fix indentation. 2014-05-05 19:32:17 +03:00
Arik Fraimovich
19743f387b Merge pull request #200 from EverythingMe/feature_dashboard_filters
Feature: dashboard filters
2014-05-05 18:49:52 +03:00
Arik Fraimovich
17bb5eac91 Merge pull request #200 from EverythingMe/feature_dashboard_filters
Feature: dashboard filters
2014-05-05 18:49:52 +03:00
Arik Fraimovich
77d628d2db Support for dashboard filters in the UI. 2014-05-05 18:46:38 +03:00
Arik Fraimovich
e5348bcf9f Support for dashboard filters in the UI. 2014-05-05 18:46:38 +03:00
Arik Fraimovich
bcce69904d Global filters flag for dashboard. 2014-05-05 18:42:49 +03:00
Arik Fraimovich
ee7e452c70 Global filters flag for dashboard. 2014-05-05 18:42:49 +03:00
Arik Fraimovich
7b4c04024c Use new getQuery accessor. 2014-05-05 18:36:12 +03:00
Arik Fraimovich
73402a4f3c Use new getQuery accessor. 2014-05-05 18:36:12 +03:00
Arik Fraimovich
a40da45b1e Show filters in dashboards (if available). 2014-05-05 18:35:07 +03:00
Arik Fraimovich
42a3309731 Show filters in dashboards (if available). 2014-05-05 18:35:07 +03:00
Arik Fraimovich
638fb123ec Query: cache QueryResult so each call gets the same one. 2014-05-05 18:34:54 +03:00
Arik Fraimovich
f2e06e6191 Query: cache QueryResult so each call gets the same one. 2014-05-05 18:34:54 +03:00
Arik Fraimovich
f95a09a015 Widget: accessor function to get Query object. 2014-05-05 18:34:29 +03:00
Arik Fraimovich
a10a38575b Widget: accessor function to get Query object. 2014-05-05 18:34:29 +03:00
Arik Fraimovich
b74f4639a0 Merge pull request #199 from EverythingMe/feature_dashboard_filters
Fix: set was messing up column order
2014-05-04 16:02:53 +03:00
Arik Fraimovich
c7efe3a99f Merge pull request #199 from EverythingMe/feature_dashboard_filters
Fix: set was messing up column order
2014-05-04 16:02:53 +03:00
Arik Fraimovich
a7b10db3f4 Fix: set was messing up column order 2014-05-04 16:00:57 +03:00
Arik Fraimovich
cc544e9343 Fix: set was messing up column order 2014-05-04 16:00:57 +03:00
Arik Fraimovich
0a301bd997 Merge pull request #198 from EverythingMe/fixes
Fix version name in tarball
2014-05-04 15:01:18 +03:00
Arik Fraimovich
2abffff9fd Merge pull request #198 from EverythingMe/fixes
Fix version name in tarball
2014-05-04 15:01:18 +03:00
Arik Fraimovich
174eb2408e Fix version name in tarball 2014-05-04 15:00:20 +03:00
Arik Fraimovich
e91c9a00b1 Fix version name in tarball 2014-05-04 15:00:20 +03:00
Arik Fraimovich
3b6af18009 Merge pull request #197 from EverythingMe/fixes
Small fixes (show version in admin/status, open the visualization editor by default in new visualizations)
2014-05-04 14:27:44 +03:00
Arik Fraimovich
c9608dfa4f Merge pull request #197 from EverythingMe/fixes
Small fixes (show version in admin/status, open the visualization editor by default in new visualizations)
2014-05-04 14:27:44 +03:00
Arik Fraimovich
ab2fa1e352 Show version in admin/status 2014-05-04 14:25:20 +03:00
Arik Fraimovich
bd0b5c7136 Show version in admin/status 2014-05-04 14:25:20 +03:00
Arik Fraimovich
9a025a7e05 Fix the pack make command 2014-05-04 14:02:20 +03:00
Arik Fraimovich
d198a99419 Fix the pack make command 2014-05-04 14:02:20 +03:00
Arik Fraimovich
96081de51f update makefile to set version" 2014-05-04 13:46:11 +03:00
Arik Fraimovich
16c461c15f update makefile to set version" 2014-05-04 13:46:11 +03:00
Arik Fraimovich
1bf56899f3 Open visualization editor when adding a new visualization. 2014-05-04 13:23:18 +03:00
Arik Fraimovich
c874a2218b Open visualization editor when adding a new visualization. 2014-05-04 13:23:18 +03:00
Arik Fraimovich
79b4c86520 Improve latest_release utility 2014-05-04 13:14:49 +03:00
Arik Fraimovich
d92d994532 Improve latest_release utility 2014-05-04 13:14:49 +03:00
Christopher Valles
1704914d6b Add stuff to gitignore 2014-05-01 18:36:01 +01:00
Arik Fraimovich
9c43b55668 Merge pull request #196 from EverythingMe/fixes
Bug fixes (#91, #195)
2014-05-01 17:56:34 +03:00
Arik Fraimovich
cddd7e909d Merge pull request #196 from EverythingMe/fixes
Bug fixes (#91, #195)
2014-05-01 17:56:34 +03:00
Arik Fraimovich
9a6852db78 Fix #195: When two columns have the same name their values get overriden 2014-05-01 17:52:42 +03:00
Arik Fraimovich
2270042c0f Fix #195: When two columns have the same name their values get overriden 2014-05-01 17:52:42 +03:00
Arik Fraimovich
6ae3a7552a Fix #91: better filtering of bad tokens in column names 2014-05-01 17:45:35 +03:00
Arik Fraimovich
8e5e37ee1b Fix #91: better filtering of bad tokens in column names 2014-05-01 17:45:35 +03:00
Christopher Valles
146131761f DAT-768 2014-04-30 17:04:24 +01:00
Arik Fraimovich
855aecd85f Merge pull request #194 from EverythingMe/feature_markdown_widget
Several small fixes (#186, #120, #174)
2014-04-29 16:06:38 +03:00
Arik Fraimovich
cdf6a1994b Merge pull request #194 from EverythingMe/feature_markdown_widget
Several small fixes (#186, #120, #174)
2014-04-29 16:06:38 +03:00
Arik Fraimovich
a7ce5246a6 Fix: return last cached result for ttl=-1 (fix #174) 2014-04-29 16:02:17 +03:00
Arik Fraimovich
6efd830bd4 Fix: return last cached result for ttl=-1 (fix #174) 2014-04-29 16:02:17 +03:00
Arik Fraimovich
a8ea811fed Make job expiry time configurable. 2014-04-29 12:13:33 +03:00
Arik Fraimovich
f39a848aa2 Make job expiry time configurable. 2014-04-29 12:13:33 +03:00
Arik Fraimovich
a71b99a873 Workaround for cases when widget is missing but referenced in a dashboard layout (re. #120) 2014-04-29 12:09:38 +03:00
Arik Fraimovich
9f2fc1f90a Workaround for cases when widget is missing but referenced in a dashboard layout (re. #120) 2014-04-29 12:09:38 +03:00
Arik Fraimovich
391c220604 Show error message if failed deleting a visualization 2014-04-29 11:57:16 +03:00
Arik Fraimovich
fd9d71b927 Show error message if failed deleting a visualization 2014-04-29 11:57:16 +03:00
Arik Fraimovich
e5bf431987 Fix: Chart type resets to Date/Time when editing #186 2014-04-29 11:37:42 +03:00
Arik Fraimovich
ba8a39db57 Fix: Chart type resets to Date/Time when editing #186 2014-04-29 11:37:42 +03:00
Arik Fraimovich
f23b434972 Merge pull request #192 from EverythingMe/feature_markdown_widget
Feature: text box widget that supports markdown
2014-04-29 11:30:32 +03:00
Arik Fraimovich
191ad19cac Merge pull request #192 from EverythingMe/feature_markdown_widget
Feature: text box widget that supports markdown
2014-04-29 11:30:32 +03:00
Arik Fraimovich
ef366df1fb Remove unused dependencies 2014-04-29 11:23:32 +03:00
Arik Fraimovich
14112fd45b Remove unused dependencies 2014-04-29 11:23:32 +03:00
Arik Fraimovich
2caf02b4e0 Markdown support for textbox. 2014-04-29 11:15:19 +03:00
Arik Fraimovich
676cf32c22 Markdown support for textbox. 2014-04-29 11:15:19 +03:00
Arik Fraimovich
b7a0b7454a Add textbox widget support. 2014-04-29 10:36:56 +03:00
Arik Fraimovich
289d38b2a6 Add textbox widget support. 2014-04-29 10:36:56 +03:00
Arik Fraimovich
fa2986a154 Add underscore.string lib. 2014-04-29 10:36:00 +03:00
Arik Fraimovich
850ac9f4c8 Add underscore.string lib. 2014-04-29 10:36:00 +03:00
Arik Fraimovich
084e9f8394 Migration to add text column to widgets and make visualization_id nullable. 2014-04-29 10:35:47 +03:00
Arik Fraimovich
4ffd21be09 Migration to add text column to widgets and make visualization_id nullable. 2014-04-29 10:35:47 +03:00
Christopher Valles
3e87fff8b1 Merge branch 'master' into permission_system 2014-04-28 17:57:43 +01:00
Christopher Valles
a37c1eb589 Merge pull request #4 from hailocab/capistrano
cap initial commit - DON'T MERGE
2014-04-28 17:56:41 +01:00
Arik Fraimovich
7d0324be91 Merge pull request #181 from EverythingMe/feature_imrpove_updater
Switch to multiprocessing instead of threading
2014-04-27 18:21:50 +03:00
Arik Fraimovich
63c85deb5c Merge pull request #181 from EverythingMe/feature_imrpove_updater
Switch to multiprocessing instead of threading
2014-04-27 18:21:50 +03:00
Arik Fraimovich
2938e57980 Cleaner shutdown (#8) 2014-04-27 18:14:15 +03:00
Arik Fraimovich
ac89584083 Cleaner shutdown (#8) 2014-04-27 18:14:15 +03:00
Arik Fraimovich
413dd61491 Remove atfork (it's not needed anymore) 2014-04-27 18:13:43 +03:00
Arik Fraimovich
74f9d85752 Remove atfork (it's not needed anymore) 2014-04-27 18:13:43 +03:00
Arik Fraimovich
08d6a90469 Switch to multiprocessing instead of threading. 2014-04-27 18:13:43 +03:00
Arik Fraimovich
b85c535c6f Switch to multiprocessing instead of threading. 2014-04-27 18:13:43 +03:00
Christopher Valles
f50799cc7b Working on permissions 2014-04-25 16:44:33 +01:00
Arik Fraimovich
e8aba6b682 Merge pull request #191 from EverythingMe/fix_185_null_values
Fix: job variable was used before assignment
2014-04-25 17:21:36 +03:00
Arik Fraimovich
a2dbc76116 Merge pull request #191 from EverythingMe/fix_185_null_values
Fix: job variable was used before assignment
2014-04-25 17:21:36 +03:00
Arik Fraimovich
163ee33ae6 Fix: job variable was used before assignment 2014-04-25 17:18:39 +03:00
Arik Fraimovich
83933e24ac Fix: job variable was used before assignment 2014-04-25 17:18:39 +03:00
Arik Fraimovich
a9f24669b7 Merge pull request #190 from EverythingMe/fix_185_null_values
Fix #185: when y value is null, convert it to 0.
2014-04-25 17:16:56 +03:00
Arik Fraimovich
638df29d95 Merge pull request #190 from EverythingMe/fix_185_null_values
Fix #185: when y value is null, convert it to 0.
2014-04-25 17:16:56 +03:00
Arik Fraimovich
73d99031b7 Fix #185: when y value is null, convert it to 0. 2014-04-25 17:14:05 +03:00
Arik Fraimovich
2e01d57c9b Fix #185: when y value is null, convert it to 0. 2014-04-25 17:14:05 +03:00
Arik Fraimovich
6f6c1678ff Merge pull request #182 from EverythingMe/feature_events_throtle
Make sure events are reported at most once per second
2014-04-22 16:40:34 +03:00
Arik Fraimovich
d26b822f6c Merge pull request #182 from EverythingMe/feature_events_throtle
Make sure events are reported at most once per second
2014-04-22 16:40:34 +03:00
Arik Fraimovich
976dc1e496 Report event for viewing widget/visualization/query 2014-04-22 16:35:40 +03:00
Arik Fraimovich
c49fbe1ac2 Report event for viewing widget/visualization/query 2014-04-22 16:35:40 +03:00
Arik Fraimovich
6a7e322b97 Report events at most once per second 2014-04-22 16:35:22 +03:00
Arik Fraimovich
4b6b1984aa Report events at most once per second 2014-04-22 16:35:22 +03:00
Arik Fraimovich
0e564bc8f8 Merge pull request #180 from EverythingMe/feature_imrpove_updater
Fix: support for .env files without EXPORT
2014-04-20 09:51:27 +03:00
Arik Fraimovich
8a546b4193 Merge pull request #180 from EverythingMe/feature_imrpove_updater
Fix: support for .env files without EXPORT
2014-04-20 09:51:27 +03:00
Arik Fraimovich
6fe733aeaa Fix: support for .env files without EXPORT 2014-04-20 09:43:17 +03:00
Arik Fraimovich
31c09dd7ce Fix: support for .env files without EXPORT 2014-04-20 09:43:17 +03:00
Arik Fraimovich
af18670131 Merge pull request #179 from EverythingMe/feature_imrpove_updater
CLI for data sources management
2014-04-19 17:22:46 +03:00
Arik Fraimovich
98f0bc0188 Merge pull request #179 from EverythingMe/feature_imrpove_updater
CLI for data sources management
2014-04-19 17:22:46 +03:00
Arik Fraimovich
362e5b820e CLI for data sources. 2014-04-19 17:06:47 +03:00
Arik Fraimovich
36d27dfd74 CLI for data sources. 2014-04-19 17:06:47 +03:00
Arik Fraimovich
2204c437a2 Merge pull request #178 from EverythingMe/feature_imrpove_updater
Typo fix in import code.
2014-04-19 15:41:49 +03:00
Arik Fraimovich
9edd8313ec Merge pull request #178 from EverythingMe/feature_imrpove_updater
Typo fix in import code.
2014-04-19 15:41:49 +03:00
Arik Fraimovich
95bcffc28a Use exec in bin/run. 2014-04-19 15:39:26 +03:00
Arik Fraimovich
790cbd95b1 Use exec in bin/run. 2014-04-19 15:39:26 +03:00
Arik Fraimovich
efdaf4cf3a Typo fix. 2014-04-19 15:39:09 +03:00
Arik Fraimovich
5dd8b102e1 Typo fix. 2014-04-19 15:39:09 +03:00
Arik Fraimovich
04d92ce14b Merge pull request #176 from EverythingMe/feature_imrpove_updater
Fix: selection of true/false values in filters wasn't working.
2014-04-16 17:01:21 +03:00
Arik Fraimovich
43496ecdb2 Merge pull request #176 from EverythingMe/feature_imrpove_updater
Fix: selection of true/false values in filters wasn't working.
2014-04-16 17:01:21 +03:00
Arik Fraimovich
fec6c8b6a7 Fix: selection of true/false values in filters wasn't working. 2014-04-16 14:25:40 +03:00
Arik Fraimovich
ff099b4314 Fix: selection of true/false values in filters wasn't working. 2014-04-16 14:25:40 +03:00
Christopher Valles
78da5ae92e First refactor of permissions; 2014-04-14 18:14:01 +01:00
Arik Fraimovich
6ab4c4551a Fix upload version script. 2014-04-13 16:49:57 +03:00
Arik Fraimovich
59a8c0c2c2 Fix upload version script. 2014-04-13 16:49:57 +03:00
Arik Fraimovich
851c080c13 Merge pull request #172 from EverythingMe/feature_imrpove_updater
Feature imrpove updater
2014-04-13 16:38:14 +03:00
Arik Fraimovich
cb800c5907 Merge pull request #172 from EverythingMe/feature_imrpove_updater
Feature imrpove updater
2014-04-13 16:38:14 +03:00
Arik Fraimovich
0daf715152 Utility to get last redash release url 2014-04-13 16:35:45 +03:00
Arik Fraimovich
31cc6fdaeb Utility to get last redash release url 2014-04-13 16:35:45 +03:00
Arik Fraimovich
e335398ba7 Set select2 options via object 2014-04-13 16:11:42 +03:00
Arik Fraimovich
1a8611a3c0 Set select2 options via object 2014-04-13 16:11:42 +03:00
Arik Fraimovich
8178900d56 Copy select2 assets, as the grunt pipeline skips them 2014-04-13 16:11:21 +03:00
Arik Fraimovich
258e3c957d Copy select2 assets, as the grunt pipeline skips them 2014-04-13 16:11:21 +03:00
Arik Fraimovich
9f9d78fd7a Update upload script to include checksums 2014-04-13 14:14:55 +03:00
Arik Fraimovich
1d83021ab3 Update upload script to include checksums 2014-04-13 14:14:55 +03:00
Arik Fraimovich
d9af5d3943 Fix: user should be able to cancel query even if process not existing already (#8). 2014-04-12 16:43:40 +03:00
Arik Fraimovich
7ed9dc90d3 Fix: user should be able to cancel query even if process not existing already (#8). 2014-04-12 16:43:40 +03:00
Arik Fraimovich
433e004295 Set TTL on finishsed jobs (fix #106) 2014-04-12 16:36:20 +03:00
Arik Fraimovich
f3628f7bba Set TTL on finishsed jobs (fix #106) 2014-04-12 16:36:20 +03:00
Christopher Valles
314a75f8a2 Update from upstream + adding venv to gitignore 2014-04-10 16:05:07 +01:00
Arik Fraimovich
185b1c9df0 Merge pull request #170 from EverythingMe/feature_usage_tracking
Feature: basic usage tracking
2014-04-10 16:11:10 +03:00
Arik Fraimovich
a686baa372 Merge pull request #170 from EverythingMe/feature_usage_tracking
Feature: basic usage tracking
2014-04-10 16:11:10 +03:00
Arik Fraimovich
881e44fbb6 Fix: access query after it's assigned 2014-04-10 15:10:39 +03:00
Arik Fraimovich
a4518dc2aa Fix: access query after it's assigned 2014-04-10 15:10:39 +03:00
Arik Fraimovich
d7e1328fc0 Make it possible to log events to stdout without logging to file. 2014-04-10 13:04:03 +03:00
Arik Fraimovich
9b8c3872c6 Make it possible to log events to stdout without logging to file. 2014-04-10 13:04:03 +03:00
Arik Fraimovich
2c7a6004c0 Pass timestamp with event. 2014-04-10 13:02:52 +03:00
Arik Fraimovich
5a0f524b5e Pass timestamp with event. 2014-04-10 13:02:52 +03:00
Arik Fraimovich
6d62f0d2c9 Setup events logging from settings. 2014-04-10 13:02:40 +03:00
Arik Fraimovich
0551e992fa Setup events logging from settings. 2014-04-10 13:02:40 +03:00
Arik Fraimovich
8615429e0c Logging setup for events. 2014-04-10 13:02:24 +03:00
Arik Fraimovich
1b0d315b30 Logging setup for events. 2014-04-10 13:02:24 +03:00
Arik Fraimovich
bd67c2ff21 Bump version (about time...) 2014-04-10 12:55:31 +03:00
Arik Fraimovich
577fdffc7f Bump version (about time...) 2014-04-10 12:55:31 +03:00
Arik Fraimovich
65e8bef22c Improved logging output. 2014-04-10 12:55:02 +03:00
Arik Fraimovich
241d31f608 Improved logging output. 2014-04-10 12:55:02 +03:00
Arik Fraimovich
c84f18449b Events end point. 2014-04-10 12:29:21 +03:00
Arik Fraimovich
57a23a1181 Events end point. 2014-04-10 12:29:21 +03:00
Arik Fraimovich
718577f565 Events reporting from client side. 2014-04-10 12:29:07 +03:00
Arik Fraimovich
c2e4e19004 Events reporting from client side. 2014-04-10 12:29:07 +03:00
Christopher Valles
69f14c3a61 Merge remote-tracking branch 'upstream/master' 2014-04-10 10:15:55 +01:00
Arik Fraimovich
52441ec5b4 Merge pull request #169 from EverythingMe/feature_filter_imporvements
Feature: improved ::filter
2014-04-09 16:30:45 +03:00
Arik Fraimovich
fcda122107 Merge pull request #169 from EverythingMe/feature_filter_imporvements
Feature: improved ::filter
2014-04-09 16:30:45 +03:00
Arik Fraimovich
01b908539b Show filter name 2014-04-09 16:27:16 +03:00
Arik Fraimovich
d7f6b589cd Show filter name 2014-04-09 16:27:16 +03:00
Arik Fraimovich
eca62cd1f2 Use select2 for filters, for autocomplete and multiple selection (#161, #160) 2014-04-09 15:25:49 +03:00
Arik Fraimovich
4de9bf2d61 Use select2 for filters, for autocomplete and multiple selection (#161, #160) 2014-04-09 15:25:49 +03:00
Arik Fraimovich
67ec5614e1 Add multi-filter option (#161) 2014-04-09 15:25:22 +03:00
Arik Fraimovich
599f12fdc2 Add multi-filter option (#161) 2014-04-09 15:25:22 +03:00
Arik Fraimovich
a92ef02b07 Add select2 to the project 2014-04-09 15:24:33 +03:00
Arik Fraimovich
18d16bb92d Add select2 to the project 2014-04-09 15:24:33 +03:00
Arik Fraimovich
45d11d3227 Merge pull request #167 from EverythingMe/fix_small_stuff
Fix: pie charts display (all categories were named "Slice X")
2014-04-08 11:21:26 +03:00
Arik Fraimovich
26365054bf Merge pull request #167 from EverythingMe/fix_small_stuff
Fix: pie charts display (all categories were named "Slice X")
2014-04-08 11:21:26 +03:00
Arik Fraimovich
3cefa004cd Fix pie charts display 2014-04-08 11:20:52 +03:00
Arik Fraimovich
58a22c0a97 Fix pie charts display 2014-04-08 11:20:52 +03:00
Arik Fraimovich
d3852db164 Merge pull request #166 from EverythingMe/fix_small_stuff
Control over xAxis type & fix for a bug when deleting a visualization
2014-04-07 21:02:55 +03:00
Arik Fraimovich
cce4a08b54 Merge pull request #166 from EverythingMe/fix_small_stuff
Control over xAxis type & fix for a bug when deleting a visualization
2014-04-07 21:02:55 +03:00
Arik Fraimovich
b242295de0 Feature: Control over xAxis type. 2014-04-07 20:50:46 +03:00
Arik Fraimovich
f80a940ff4 Feature: Control over xAxis type. 2014-04-07 20:50:46 +03:00
Arik Fraimovich
a37142426c Fix: when deleting visualization it would fail because DEFAULT_TAB is undefined 2014-04-07 20:50:06 +03:00
Arik Fraimovich
794d8ddfcf Fix: when deleting visualization it would fail because DEFAULT_TAB is undefined 2014-04-07 20:50:06 +03:00
Arik Fraimovich
271d577074 Merge pull request #165 from erans/master
Make sure qr serialization will always be in JSON
2014-04-07 13:44:21 +03:00
Arik Fraimovich
7adf4bf763 Merge pull request #165 from erans/master
Make sure qr serialization will always be in JSON
2014-04-07 13:44:21 +03:00
Eran Sandler
2fd3033418 Make sure qr serialization will always be in JSON - in the case we do end up serializing big objects - so that other parts of the system can be written in languages other than Python 2014-04-07 12:14:10 +03:00
Eran Sandler
e50aa536c2 Make sure qr serialization will always be in JSON - in the case we do end up serializing big objects - so that other parts of the system can be written in languages other than Python 2014-04-07 12:14:10 +03:00
Arik Fraimovich
74de143636 Merge pull request #164 from EverythingMe/feature_view_query_permission
Feature: "view_query" permission
2014-04-06 20:31:20 +03:00
Arik Fraimovich
2d3348b1a9 Merge pull request #164 from EverythingMe/feature_view_query_permission
Feature: "view_query" permission
2014-04-06 20:31:20 +03:00
Arik Fraimovich
81ca8b9012 More control over creating users from CLI 2014-04-06 20:26:35 +03:00
Arik Fraimovich
df733d3e9c More control over creating users from CLI 2014-04-06 20:26:35 +03:00
Arik Fraimovich
0167bebf04 Create stub User object for API to use permissions model 2014-04-06 20:05:43 +03:00
Arik Fraimovich
b1d6a5a45a Create stub User object for API to use permissions model 2014-04-06 20:05:43 +03:00
Arik Fraimovich
5de1795380 Don't show links to queries in the UI. 2014-04-06 19:32:46 +03:00
Arik Fraimovich
3bb26c5906 Don't show links to queries in the UI. 2014-04-06 19:32:46 +03:00
Arik Fraimovich
99a9fdde25 Use view_query permission in controllers 2014-04-06 19:16:30 +03:00
Arik Fraimovich
e2f9b7565b Use view_query permission in controllers 2014-04-06 19:16:30 +03:00
Arik Fraimovich
3e6dd8e929 Migration for new permission 2014-04-06 19:16:18 +03:00
Arik Fraimovich
6556f22e91 Migration for new permission 2014-04-06 19:16:18 +03:00
Arik Fraimovich
c0fc7c8222 new permission: view_query 2014-04-06 19:16:10 +03:00
Arik Fraimovich
e5377abf0f new permission: view_query 2014-04-06 19:16:10 +03:00
Amir Nissim
1eb2d562a5 Merge pull request #156 from EverythingMe/90-ui-issues
90 ui issues
2014-04-03 15:21:54 +03:00
Amir Nissim
b4625f1c78 Merge pull request #156 from EverythingMe/90-ui-issues
90 ui issues
2014-04-03 15:21:54 +03:00
Amir Nissim
82f5f15c2a [#90] edit vis. form touchup 2014-04-03 15:14:27 +03:00
Amir Nissim
63037c62a0 [#90] edit vis. form touchup 2014-04-03 15:14:27 +03:00
Amir Nissim
a696e10ef7 [#90] visualization edit mode 2014-04-03 15:05:17 +03:00
Amir Nissim
617bbc213f [#90] visualization edit mode 2014-04-03 15:05:17 +03:00
Amir Nissim
87933bd8ac rename: QueryEditCtrl -> QuerySourceCtrl
'edit' is confusing since it is also possible to make changes in the QueryViewCtrl
2014-04-03 15:05:17 +03:00
Amir Nissim
9e3cb6e581 rename: QueryEditCtrl -> QuerySourceCtrl
'edit' is confusing since it is also possible to make changes in the QueryViewCtrl
2014-04-03 15:05:17 +03:00
Amir Nissim
29f01a5780 [#90] clear visualization hash when redirecting to forked query 2014-04-03 15:05:17 +03:00
Amir Nissim
d4dfc67059 [#90] clear visualization hash when redirecting to forked query 2014-04-03 15:05:17 +03:00
Arik Fraimovich
23a3a7f20e Merge pull request #157 from EverythingMe/fix_dashboard_watch
Fix: some dashboards get into infinite loop of watches
2014-03-30 18:03:48 +03:00
Arik Fraimovich
5ec2d2fe97 Merge pull request #157 from EverythingMe/fix_dashboard_watch
Fix: some dashboards get into infinite loop of watches
2014-03-30 18:03:48 +03:00
Arik Fraimovich
b2e7813d87 Fix: some dashboards get into infinite loop of watches 2014-03-30 17:30:32 +03:00
Arik Fraimovich
0b093415ca Fix: some dashboards get into infinite loop of watches 2014-03-30 17:30:32 +03:00
Arik Fraimovich
ff9fadd55a Merge pull request #154 from EverythingMe/90-ui-issues
[#90] save only modified fields when changing query name/description
2014-03-26 18:02:38 +02:00
Arik Fraimovich
77f226e4a2 Merge pull request #154 from EverythingMe/90-ui-issues
[#90] save only modified fields when changing query name/description
2014-03-26 18:02:38 +02:00
Amir Nissim
40adba4242 [#90] query-link: use ng-href as @arikfr suggested 2014-03-26 17:52:07 +02:00
Amir Nissim
71a4d5288d [#90] query-link: use ng-href as @arikfr suggested 2014-03-26 17:52:07 +02:00
Amir Nissim
d4d118af17 update angular-resource (adds .$promise support) 2014-03-26 17:27:18 +02:00
Amir Nissim
72c74101da update angular-resource (adds .$promise support) 2014-03-26 17:27:18 +02:00
Amir Nissim
ace657d95a [#90] handle widget creation failures 2014-03-26 16:42:56 +02:00
Amir Nissim
1bb12b87ac [#90] handle widget creation failures 2014-03-26 16:42:56 +02:00
Amir Nissim
fd3e9e3fcb query links: no underline 2014-03-26 13:30:50 +02:00
Amir Nissim
ec40436a65 query links: no underline 2014-03-26 13:30:50 +02:00
Amir Nissim
3243f277f2 [#90] query link: style, link to #table, 'query' attr required 2014-03-26 13:25:21 +02:00
Amir Nissim
7cd129db52 [#90] query link: style, link to #table, 'query' attr required 2014-03-26 13:25:21 +02:00
Amir Nissim
7ac76c2996 dashboard_directives.js 2014-03-26 12:19:02 +02:00
Amir Nissim
904c54003d dashboard_directives.js 2014-03-26 12:19:02 +02:00
Amir Nissim
84b0590ec5 move DashboardCtrl and WidgetCtrl to dashboard.js 2014-03-26 12:14:23 +02:00
Amir Nissim
ba63048fc0 move DashboardCtrl and WidgetCtrl to dashboard.js 2014-03-26 12:14:23 +02:00
Arik Fraimovich
a46c651dad Merge pull request #155 from EverythingMe/vis-fix
[#144] Allow users to edit raw JSON visualization options
2014-03-26 10:06:04 +02:00
Arik Fraimovich
ecb80df10a Merge pull request #155 from EverythingMe/vis-fix
[#144] Allow users to edit raw JSON visualization options
2014-03-26 10:06:04 +02:00
Amir Nissim
11ba93cc80 [#90] query links in widget title 2014-03-25 17:58:38 +02:00
Amir Nissim
782919788d [#90] query links in widget title 2014-03-25 17:58:38 +02:00
Amir Nissim
23760ffa86 [#90] switch to new visualization tab on save 2014-03-25 17:29:19 +02:00
Amir Nissim
37dbdf494f [#90] switch to new visualization tab on save 2014-03-25 17:29:19 +02:00
Amir Nissim
5ad2bd048c [#90] perf: don't render (ngIf) the table visualization tab instead of hiding (ngHide) 2014-03-25 17:12:54 +02:00
Amir Nissim
9717a686be [#90] perf: don't render (ngIf) the table visualization tab instead of hiding (ngHide) 2014-03-25 17:12:54 +02:00
Amir Nissim
839abe627e [#144] Allow users to edit raw JSON visualization options 2014-03-25 17:06:28 +02:00
Amir Nissim
55167adef6 [#144] Allow users to edit raw JSON visualization options 2014-03-25 17:06:28 +02:00
Amir Nissim
9305b76b85 [#90] save only modified fields when changing query name/description 2014-03-25 15:25:37 +02:00
Amir Nissim
001e2a8887 [#90] save only modified fields when changing query name/description 2014-03-25 15:25:37 +02:00
Arik Fraimovich
61a196fafc Merge pull request #150 from EverythingMe/query-refactor
#138: Query controllers refactor
2014-03-25 14:34:15 +02:00
Arik Fraimovich
a503e20c92 Merge pull request #150 from EverythingMe/query-refactor
#138: Query controllers refactor
2014-03-25 14:34:15 +02:00
Arik Fraimovich
0a05d31b17 Fix: only save query on meta+s if user can edit query 2014-03-25 14:30:07 +02:00
Arik Fraimovich
80a5804c9c Fix: only save query on meta+s if user can edit query 2014-03-25 14:30:07 +02:00
Amir Nissim
001950a116 Revert "Navigation service"
This reverts commit 3dc8d9a842.
2014-03-25 14:11:29 +02:00
Amir Nissim
89cbaf0ac5 Revert "Navigation service"
This reverts commit 3dc8d9a842.
2014-03-25 14:11:29 +02:00
Amir Nissim
3670c7c3a7 [#138] onQuerySave callback 2014-03-25 14:04:18 +02:00
Amir Nissim
f2f61a1fc9 [#138] onQuerySave callback 2014-03-25 14:04:18 +02:00
Amir Nissim
3dc8d9a842 Navigation service 2014-03-25 12:28:18 +02:00
Amir Nissim
b93132e5d9 Navigation service 2014-03-25 12:28:18 +02:00
Amir Nissim
fbb8943eeb [#138] update queryText when query is saved 2014-03-25 11:38:52 +02:00
Amir Nissim
156bf96788 [#138] update queryText when query is saved 2014-03-25 11:38:52 +02:00
Arik Fraimovich
84d07903f6 Merge pull request #153 from EverythingMe/feature_data_source
Shell wrapper to source env before running command
2014-03-25 10:25:12 +02:00
Arik Fraimovich
4d1908dceb Merge pull request #153 from EverythingMe/feature_data_source
Shell wrapper to source env before running command
2014-03-25 10:25:12 +02:00
Arik Fraimovich
1571676d7a Shell wrapper to source env before running command 2014-03-25 10:22:50 +02:00
Arik Fraimovich
870cc142a9 Shell wrapper to source env before running command 2014-03-25 10:22:50 +02:00
Arik Fraimovich
8cb0472497 Add manage.py command to print settings 2014-03-25 10:22:21 +02:00
Arik Fraimovich
eade74ffb0 Add manage.py command to print settings 2014-03-25 10:22:21 +02:00
Arik Fraimovich
de41dc84af Remove migrate make command 2014-03-25 10:19:11 +02:00
Arik Fraimovich
880412da94 Remove migrate make command 2014-03-25 10:19:11 +02:00
Arik Fraimovich
5ae2b88cec Merge pull request #152 from EverythingMe/feature_data_source
Make task to run a migration
2014-03-25 09:34:19 +02:00
Arik Fraimovich
a9dae21483 Merge pull request #152 from EverythingMe/feature_data_source
Make task to run a migration
2014-03-25 09:34:19 +02:00
Arik Fraimovich
0a22fb61dc Make task to run a migration 2014-03-25 09:33:44 +02:00
Arik Fraimovich
0578273f7e Make task to run a migration 2014-03-25 09:33:44 +02:00
Amir Nissim
5d37f1a34b KeyboardShortcuts service 2014-03-24 17:51:57 +02:00
Amir Nissim
cf9fe300fe KeyboardShortcuts service 2014-03-24 17:51:57 +02:00
Amir Nissim
bbe17f3a09 [#138] fix ui-codemirror bug when used as directive 2014-03-24 16:13:59 +02:00
Amir Nissim
1bea6a9627 [#138] fix ui-codemirror bug when used as directive 2014-03-24 16:13:59 +02:00
Amir Nissim
21ad5bbb4a [#138] simplify saveQuery, drop $route dependency 2014-03-24 16:07:24 +02:00
Amir Nissim
5ce4fcb974 [#138] simplify saveQuery, drop $route dependency 2014-03-24 16:07:24 +02:00
Amir Nissim
977193b009 fix getColumns failures when QueryResult has no data 2014-03-24 14:33:03 +02:00
Amir Nissim
028a3e9d62 fix getColumns failures when QueryResult has no data 2014-03-24 14:33:03 +02:00
Amir Nissim
16a83f6134 getQueryResult only if query.data_source_id exists 2014-03-24 14:33:03 +02:00
Amir Nissim
fa2438f40d getQueryResult only if query.data_source_id exists 2014-03-24 14:33:03 +02:00
Amir Nissim
e0af1f20af [#138] cherry pick rebase conflicts:
366cdbf616 Remove reference to query result when changing data source
 872cee2228 Unless data source set already, set it to the first one.
 8ae41c0b6a Show query's data source.
2014-03-24 14:33:02 +02:00
Amir Nissim
10bccfb4ad [#138] cherry pick rebase conflicts:
366cdbf616 Remove reference to query result when changing data source
 872cee2228 Unless data source set already, set it to the first one.
 8ae41c0b6a Show query's data source.
2014-03-24 14:33:02 +02:00
Amir Nissim
ca415c50ad [#138] store original query text to detect changes 2014-03-24 14:33:02 +02:00
Amir Nissim
3c0972b8ac [#138] store original query text to detect changes 2014-03-24 14:33:02 +02:00
Amir Nissim
c4cbe06c12 [#138] Query.newQuery 2014-03-24 14:33:02 +02:00
Amir Nissim
98ac23a843 [#138] Query.newQuery 2014-03-24 14:33:02 +02:00
Amir Nissim
34fb58d403 typo: cancelInterval -> clearInterval 2014-03-24 14:33:02 +02:00
Amir Nissim
df458c1052 typo: cancelInterval -> clearInterval 2014-03-24 14:33:02 +02:00
Amir Nissim
cddf69e422 [#138] rebase fixes (cherry pick f3d4635) 2014-03-24 14:33:02 +02:00
Amir Nissim
dd86711b32 [#138] rebase fixes (cherry pick f3d4635) 2014-03-24 14:33:02 +02:00
Amir Nissim
6a1c5aeae7 [#138] move saveQuery to ViewCtrl 2014-03-24 14:33:02 +02:00
Amir Nissim
4493d22ec9 [#138] move saveQuery to ViewCtrl 2014-03-24 14:33:02 +02:00
Amir Nissim
f3411a46a5 [#138] alert-unsaved-changes directive 2014-03-24 14:33:02 +02:00
Amir Nissim
5ffd2615e7 [#138] alert-unsaved-changes directive 2014-03-24 14:33:02 +02:00
Amir Nissim
7616738fc6 [#138] QueryEditCtrl cleanup 2014-03-24 14:33:02 +02:00
Amir Nissim
e996b4fa22 [#138] QueryEditCtrl cleanup 2014-03-24 14:33:02 +02:00
Amir Nissim
5d03ce6b50 [#138] QueryViewCtrl cleanup and formatting 2014-03-24 14:33:02 +02:00
Amir Nissim
bcca2aa341 [#138] QueryViewCtrl cleanup and formatting 2014-03-24 14:33:02 +02:00
Amir Nissim
3ad8114a28 [#138] query directives 2014-03-24 14:33:02 +02:00
Amir Nissim
602d935559 [#138] query directives 2014-03-24 14:33:02 +02:00
Amir Nissim
37d56a2bf6 [#138] editCtrl inheriting viewCtrl 2014-03-24 14:33:02 +02:00
Amir Nissim
af9318fbd1 [#138] editCtrl inheriting viewCtrl 2014-03-24 14:33:02 +02:00
Arik Fraimovich
cff07a3e3d Merge pull request #151 from EverythingMe/feature_data_source
Fix issue with serializing unicode queries.
2014-03-24 14:31:13 +02:00
Arik Fraimovich
2ba4bcd98e Merge pull request #151 from EverythingMe/feature_data_source
Fix issue with serializing unicode queries.
2014-03-24 14:31:13 +02:00
Arik Fraimovich
a1f81705dd Unicode test case for Job 2014-03-24 14:26:57 +02:00
Arik Fraimovich
fac9082a03 Unicode test case for Job 2014-03-24 14:26:57 +02:00
Arik Fraimovich
b8dba48759 Fix issue with serializing unicode queries 2014-03-24 14:18:03 +02:00
Arik Fraimovich
9ac335116c Fix issue with serializing unicode queries 2014-03-24 14:18:03 +02:00
Arik Fraimovich
ae8706ab85 Merge pull request #149 from EverythingMe/feature_data_source
Feature: Support multiple data sources (databases) for querying (#12)
2014-03-23 17:02:55 +02:00
Arik Fraimovich
fbc325bf07 Merge pull request #149 from EverythingMe/feature_data_source
Feature: Support multiple data sources (databases) for querying (#12)
2014-03-23 17:02:55 +02:00
Arik Fraimovich
af85943c08 Add comment about moving logic to the model 2014-03-23 12:52:22 +02:00
Arik Fraimovich
cad34f63bf Add comment about moving logic to the model 2014-03-23 12:52:22 +02:00
Arik Fraimovich
d7a453e8b1 Fix tests (were rightfully failing on system with clock set to utc) 2014-03-20 20:57:35 +02:00
Arik Fraimovich
d9964d84b3 Fix tests (were rightfully failing on system with clock set to utc) 2014-03-20 20:57:35 +02:00
Arik Fraimovich
725a8f2bb5 Reverse comparison 2014-03-20 20:16:23 +02:00
Arik Fraimovich
9379f76562 Reverse comparison 2014-03-20 20:16:23 +02:00
Arik Fraimovich
5979d91875 Reduce Peewee's logging level to INFO in tests. 2014-03-20 19:45:16 +02:00
Arik Fraimovich
21e02ee04e Reduce Peewee's logging level to INFO in tests. 2014-03-20 19:45:16 +02:00
Arik Fraimovich
86b95a404a Apply filters only when available 2014-03-20 19:38:05 +02:00
Arik Fraimovich
214806d31b Apply filters only when available 2014-03-20 19:38:05 +02:00
Arik Fraimovich
366cdbf616 Remove reference to query result when changing data source 2014-03-20 19:30:05 +02:00
Arik Fraimovich
cea1a73ad6 Remove reference to query result when changing data source 2014-03-20 19:30:05 +02:00
Arik Fraimovich
addaf97489 Add results verification 2014-03-20 18:49:38 +02:00
Arik Fraimovich
e37fa7e5a0 Add results verification 2014-03-20 18:49:38 +02:00
Arik Fraimovich
6989c7d2fd Script to test concurrency issues 2014-03-20 18:16:09 +02:00
Arik Fraimovich
b079b27875 Script to test concurrency issues 2014-03-20 18:16:09 +02:00
Arik Fraimovich
166b1a7c6b Switch to using peewee models in Manager + fix bugs + add tests (#8). 2014-03-20 13:22:37 +02:00
Arik Fraimovich
3c895310f4 Switch to using peewee models in Manager + fix bugs + add tests (#8). 2014-03-20 13:22:37 +02:00
Arik Fraimovich
2d3a0cc917 Update peewee version to be able to use window functions. 2014-03-20 13:18:32 +02:00
Arik Fraimovich
ae9e80d6a8 Update peewee version to be able to use window functions. 2014-03-20 13:18:32 +02:00
Arik Fraimovich
f58ffd884b Remove data.manager.QueryResult class. 2014-03-20 10:47:07 +02:00
Arik Fraimovich
9f0abd0bc6 Remove data.manager.QueryResult class. 2014-03-20 10:47:07 +02:00
Arik Fraimovich
afb1b3f16f Merge pull request #147 from EverythingMe/fix_141_digest_called_every_second
Fix #141: prevent the timer directive call digest loop every second
2014-03-20 09:33:46 +02:00
Arik Fraimovich
3bedfe75a8 Merge pull request #147 from EverythingMe/fix_141_digest_called_every_second
Fix #141: prevent the timer directive call digest loop every second
2014-03-20 09:33:46 +02:00
Arik Fraimovich
93f87f0922 Fix #141: prevent the timer directive call digest loop every second
By using setInterval & $scope.$digest instead of $timeout which uses
$scope.$apply, which in turn calls $rootScope.$digest.
2014-03-20 09:29:27 +02:00
Arik Fraimovich
76ce8b0876 Fix #141: prevent the timer directive call digest loop every second
By using setInterval & $scope.$digest instead of $timeout which uses
$scope.$apply, which in turn calls $rootScope.$digest.
2014-03-20 09:29:27 +02:00
Arik Fraimovich
872cee2228 Unless data source set already, set it to the first one. 2014-03-20 09:21:01 +02:00
Arik Fraimovich
fcebbb4856 Unless data source set already, set it to the first one. 2014-03-20 09:21:01 +02:00
Arik Fraimovich
99b7e3126b When updating query result, set the data source id. 2014-03-20 09:20:41 +02:00
Arik Fraimovich
1b02f58247 When updating query result, set the data source id. 2014-03-20 09:20:41 +02:00
Arik Fraimovich
8d8dafade3 Allow updating data source when updating query. 2014-03-20 09:20:27 +02:00
Arik Fraimovich
687b3be784 Allow updating data source when updating query. 2014-03-20 09:20:27 +02:00
Arik Fraimovich
ee3150fc6b Update query results for same data source only 2014-03-19 14:58:13 +02:00
Arik Fraimovich
4922be1422 Update query results for same data source only 2014-03-19 14:58:13 +02:00
Arik Fraimovich
515eb28d4d No need to pass connection string to workers 2014-03-19 13:52:19 +02:00
Arik Fraimovich
062e65732a No need to pass connection string to workers 2014-03-19 13:52:19 +02:00
Arik Fraimovich
f186c8cb5f Remove get_query_result_by_id from data.Manager. 2014-03-19 13:50:52 +02:00
Arik Fraimovich
c40a73726e Remove get_query_result_by_id from data.Manager. 2014-03-19 13:50:52 +02:00
Arik Fraimovich
193587dcfb Move QUeyrResult logic from data.Manager to QueryResult. 2014-03-19 13:48:48 +02:00
Arik Fraimovich
e8d453e2d4 Move QUeyrResult logic from data.Manager to QueryResult. 2014-03-19 13:48:48 +02:00
Arik Fraimovich
3f91ebea5f Fix QueryResult factory. 2014-03-19 13:48:11 +02:00
Arik Fraimovich
0c4d0cb5c5 Fix QueryResult factory. 2014-03-19 13:48:11 +02:00
Arik Fraimovich
7f118635b4 Fix import job to use data source with query result. 2014-03-19 13:47:35 +02:00
Arik Fraimovich
7efa48b3d7 Fix import job to use data source with query result. 2014-03-19 13:47:35 +02:00
Arik Fraimovich
0c199431a9 Add data source to QueryResult 2014-03-19 12:57:42 +02:00
Arik Fraimovich
000c482f1b Add data source to QueryResult 2014-03-19 12:57:42 +02:00
Arik Fraimovich
4fffcab8aa Fix tests to use data source 2014-03-19 12:53:51 +02:00
Arik Fraimovich
c919648412 Fix tests to use data source 2014-03-19 12:53:51 +02:00
Arik Fraimovich
7eb849affb Data Source factory 2014-03-19 12:53:39 +02:00
Arik Fraimovich
6b57d4a2f7 Data Source factory 2014-03-19 12:53:39 +02:00
Arik Fraimovich
579ca28d6d Fix importer to use data source 2014-03-19 12:53:30 +02:00
Arik Fraimovich
21b52e0b80 Fix importer to use data source 2014-03-19 12:53:30 +02:00
Arik Fraimovich
679921dc8e Add DataSource to models list 2014-03-19 11:45:38 +02:00
Arik Fraimovich
7bd5604607 Add DataSource to models list 2014-03-19 11:45:38 +02:00
Arik Fraimovich
259ea39d55 Move Highcharts color definitions to highchart's code file 2014-03-19 11:44:50 +02:00
Arik Fraimovich
bb83157cbe Move Highcharts color definitions to highchart's code file 2014-03-19 11:44:50 +02:00
Arik Fraimovich
f637ddf8ca Remove definition of QueryFIddleCtrl. 2014-03-19 11:42:36 +02:00
Arik Fraimovich
ca7af014ae Remove definition of QueryFIddleCtrl. 2014-03-19 11:42:36 +02:00
Arik Fraimovich
08b92e1f3d Remove QueryFiddle ctrl. 2014-03-19 11:39:08 +02:00
Arik Fraimovich
a429487894 Remove QueryFiddle ctrl. 2014-03-19 11:39:08 +02:00
Arik Fraimovich
d4e4afb97d Put deprecation comment for data source settings. 2014-03-19 11:37:07 +02:00
Arik Fraimovich
12f2dc8795 Put deprecation comment for data source settings. 2014-03-19 11:37:07 +02:00
Arik Fraimovich
dad207912e Fix: query wasn't saving. 2014-03-19 11:34:26 +02:00
Arik Fraimovich
ec76ea307f Fix: query wasn't saving. 2014-03-19 11:34:26 +02:00
Arik Fraimovich
6c9322624d Use datasource when executing queries. 2014-03-19 11:23:38 +02:00
Arik Fraimovich
499909e09e Use datasource when executing queries. 2014-03-19 11:23:38 +02:00
Arik Fraimovich
8ae41c0b6a Show query's data source. 2014-03-19 11:22:51 +02:00
Arik Fraimovich
baad4742ef Show query's data source. 2014-03-19 11:22:51 +02:00
Arik Fraimovich
b6dbc3356d dict representation for DataSource. 2014-03-19 11:22:15 +02:00
Arik Fraimovich
a8773a9582 dict representation for DataSource. 2014-03-19 11:22:15 +02:00
Arik Fraimovich
2e078294c9 Update angular-resource to 1.2.7 2014-03-19 11:19:43 +02:00
Arik Fraimovich
efbb78ad7f Update angular-resource to 1.2.7 2014-03-19 11:19:43 +02:00
Arik Fraimovich
1d001407a0 Move query runner creation to worker based on data source in Job. 2014-03-18 20:45:03 +02:00
Arik Fraimovich
8d41180f4c Move query runner creation to worker based on data source in Job. 2014-03-18 20:45:03 +02:00
Arik Fraimovich
0b994de531 Refactor Job class to be easier to extend.
Moved the Redis logic out of it.
2014-03-18 17:48:37 +02:00
Arik Fraimovich
5a07ac38da Refactor Job class to be easier to extend.
Moved the Redis logic out of it.
2014-03-18 17:48:37 +02:00
Arik Fraimovich
caa198964c Move logging setup to __init__.py so it's always available 2014-03-18 17:48:37 +02:00
Arik Fraimovich
163f483a56 Move logging setup to __init__.py so it's always available 2014-03-18 17:48:37 +02:00
Arik Fraimovich
c7ded66057 Data sources model 2014-03-18 17:48:37 +02:00
Arik Fraimovich
e2ce0809da Data sources model 2014-03-18 17:48:37 +02:00
Arik Fraimovich
8c80e99d3b Merge pull request #139 from erans/master
Added support for running scripts as queries
2014-03-18 17:45:09 +02:00
Arik Fraimovich
bea85d0f62 Merge pull request #139 from erans/master
Added support for running scripts as queries
2014-03-18 17:45:09 +02:00
Christopher Valles
f87119e31a Merge pull request #3 from hailocab/fix/bower
Fix ECMDERR
2014-03-18 12:08:36 +00:00
Arik Fraimovich
3f2ac6ab76 Merge pull request #143 from EverythingMe/fix_stacking
Feature: import query from json file
2014-03-17 21:29:49 +02:00
Arik Fraimovich
6a5b3a89d9 Merge pull request #143 from EverythingMe/fix_stacking
Feature: import query from json file
2014-03-17 21:29:49 +02:00
Arik Fraimovich
b97c9ee3c9 Feature: import query from json file 2014-03-17 21:28:48 +02:00
Arik Fraimovich
48b0c60cf1 Feature: import query from json file 2014-03-17 21:28:48 +02:00
Arik Fraimovich
f9fbff3fa5 Merge pull request #142 from EverythingMe/fix_stacking
Fix stacking
2014-03-17 21:24:39 +02:00
Arik Fraimovich
9b31e193ee Merge pull request #142 from EverythingMe/fix_stacking
Fix stacking
2014-03-17 21:24:39 +02:00
Arik Fraimovich
cdac5fbf52 Remove console.log 2014-03-17 21:24:18 +02:00
Arik Fraimovich
20d12c0498 Remove console.log 2014-03-17 21:24:18 +02:00
Arik Fraimovich
aa7e010342 Fix: when having categories chart and not all series had values
it wouldn't draw the chart with stacking other than none.
2014-03-17 21:22:07 +02:00
Arik Fraimovich
fec57ecf59 Fix: when having categories chart and not all series had values
it wouldn't draw the chart with stacking other than none.
2014-03-17 21:22:07 +02:00
Arik Fraimovich
74d667b942 Merge pull request #140 from EverythingMe/query_filters
Feature: filters for all visualizations and not only tables
2014-03-17 21:08:58 +02:00
Arik Fraimovich
1c52d533d4 Merge pull request #140 from EverythingMe/query_filters
Feature: filters for all visualizations and not only tables
2014-03-17 21:08:58 +02:00
Arik Fraimovich
9a04535e6b Reset filterFreeze when updating data. 2014-03-17 20:25:58 +02:00
Arik Fraimovich
c26fdb5dad Reset filterFreeze when updating data. 2014-03-17 20:25:58 +02:00
Arik Fraimovich
f3d46355af Because we draw the table without VisualizationRenderer we need to explicitly add filters here too. 2014-03-17 20:23:12 +02:00
Arik Fraimovich
db35b6f4e8 Because we draw the table without VisualizationRenderer we need to explicitly add filters here too. 2014-03-17 20:23:12 +02:00
Arik Fraimovich
44621e4f37 Switch to $watchCollection to resolve the issue of chart not updating when length of series stays the same. 2014-03-17 20:22:49 +02:00
Arik Fraimovich
690d4b8f50 Switch to $watchCollection to resolve the issue of chart not updating when length of series stays the same. 2014-03-17 20:22:49 +02:00
Arik Fraimovich
a99e290bc5 Store filters on QueryResult object and use them in getQueryData. 2014-03-17 20:22:24 +02:00
Arik Fraimovich
5b0f124307 Store filters on QueryResult object and use them in getQueryData. 2014-03-17 20:22:24 +02:00
Arik Fraimovich
2b5291900d Show filters directive on all visualizations. 2014-03-17 20:21:39 +02:00
Arik Fraimovich
cc9d10b12b Show filters directive on all visualizations. 2014-03-17 20:21:39 +02:00
Arik Fraimovich
19209d16aa Filters directive. 2014-03-17 20:20:49 +02:00
Arik Fraimovich
5ee924a770 Filters directive. 2014-03-17 20:20:49 +02:00
Eran Sandler
a2257999a7 moved to use the query_runner.annotate_query flag so we won't get the SQL comment 2014-03-17 18:56:50 +02:00
Eran Sandler
d6337ec472 moved to use the query_runner.annotate_query flag so we won't get the SQL comment 2014-03-17 18:56:50 +02:00
Eran Sandler
d3e87a3d28 added support for a 'url' source where you can supply a URL to retrieve the same JSON result used in other query runners 2014-03-17 18:44:31 +02:00
Eran Sandler
05f1a6b7ea added support for a 'url' source where you can supply a URL to retrieve the same JSON result used in other query runners 2014-03-17 18:44:31 +02:00
Eran Sandler
d435d122eb Added support for running scripts as queries 2014-03-17 16:36:51 +02:00
Eran Sandler
dc364981c8 Added support for running scripts as queries 2014-03-17 16:36:51 +02:00
Arik Fraimovich
362c899632 Merge pull request #136 from EverythingMe/logout
Logout button
2014-03-13 12:37:06 +02:00
Arik Fraimovich
dd8478fe0a Merge pull request #136 from EverythingMe/logout
Logout button
2014-03-13 12:37:06 +02:00
Amir Nissim
a80ed6998e logout button. closes #125 2014-03-13 12:29:25 +02:00
Amir Nissim
97d614659a logout button. closes #125 2014-03-13 12:29:25 +02:00
Arik Fraimovich
c7540ba87b Fix minification issue 2014-03-12 16:53:22 +02:00
Arik Fraimovich
3b11f010b5 Fix minification issue 2014-03-12 16:53:22 +02:00
Alessio Garofalo
06e282102c Fix ECMDERR 2014-03-12 12:42:37 +00:00
Arik Fraimovich
0b0d2bcdfc Reduce expire time to 1800, to reduce changes of test failing 2014-03-12 13:41:42 +02:00
Arik Fraimovich
607123e67a Reduce expire time to 1800, to reduce changes of test failing 2014-03-12 13:41:42 +02:00
Arik Fraimovich
3451deee03 Merge pull request #135 from EverythingMe/feature_roles
Fix: create table only if it doesn't exists.
2014-03-12 13:35:14 +02:00
Arik Fraimovich
67e4d24c11 Merge pull request #135 from EverythingMe/feature_roles
Fix: create table only if it doesn't exists.
2014-03-12 13:35:14 +02:00
Arik Fraimovich
2d995d0935 Create table only if it doesn't exists 2014-03-12 13:32:28 +02:00
Arik Fraimovich
0e3c6ac275 Create table only if it doesn't exists 2014-03-12 13:32:28 +02:00
Arik Fraimovich
3b34b1c2d9 Merge pull request #134 from EverythingMe/feature_roles
Feature: control the system name
2014-03-12 13:24:45 +02:00
Arik Fraimovich
549f9288a1 Merge pull request #134 from EverythingMe/feature_roles
Feature: control the system name
2014-03-12 13:24:45 +02:00
Arik Fraimovich
ae3151d3a7 Feature: control the system name 2014-03-12 13:22:37 +02:00
Arik Fraimovich
86ba16fbb8 Feature: control the system name 2014-03-12 13:22:37 +02:00
Arik Fraimovich
f07428a0df Merge pull request #133 from EverythingMe/feature_roles
Feature: basic permissions system
2014-03-12 13:17:41 +02:00
Arik Fraimovich
cb74a2c6ae Merge pull request #133 from EverythingMe/feature_roles
Feature: basic permissions system
2014-03-12 13:17:41 +02:00
Arik Fraimovich
0ab59033b5 Update manage.py to use permissions 2014-03-12 13:13:06 +02:00
Arik Fraimovich
97b163bc95 Update manage.py to use permissions 2014-03-12 13:13:06 +02:00
Arik Fraimovich
09f2e89bc4 Update tests for /status.json 2014-03-12 13:08:19 +02:00
Arik Fraimovich
13f3a5e172 Update tests for /status.json 2014-03-12 13:08:19 +02:00
Arik Fraimovich
3066327b0e Use permissions in the UI 2014-03-12 12:59:05 +02:00
Arik Fraimovich
3bcd8bf2d5 Use permissions in the UI 2014-03-12 12:59:05 +02:00
Arik Fraimovich
52d7650d61 send user's permissions to the view 2014-03-12 12:46:05 +02:00
Arik Fraimovich
b0c50bd817 send user's permissions to the view 2014-03-12 12:46:05 +02:00
Arik Fraimovich
aaa38689b3 Change roles to permissions 2014-03-12 12:45:12 +02:00
Arik Fraimovich
3d95d6b8c9 Change roles to permissions 2014-03-12 12:45:12 +02:00
Arik Fraimovich
bf62b52183 Require admin role when asking for admin resource 2014-03-12 11:40:40 +02:00
Arik Fraimovich
cff710ee52 Require admin role when asking for admin resource 2014-03-12 11:40:40 +02:00
Arik Fraimovich
0961d13ac2 require_role(s) decorators 2014-03-12 11:40:40 +02:00
Arik Fraimovich
5003f36337 require_role(s) decorators 2014-03-12 11:40:40 +02:00
Arik Fraimovich
e976f39d2b Add roles field to user 2014-03-12 11:40:40 +02:00
Arik Fraimovich
2854a1c8c0 Add roles field to user 2014-03-12 11:40:40 +02:00
Arik Fraimovich
c34889ced9 Remove unneeded wrapper function. 2014-03-12 11:40:40 +02:00
Arik Fraimovich
5eeaf6853e Remove unneeded wrapper function. 2014-03-12 11:40:40 +02:00
Arik Fraimovich
a569a2c2c1 Merge pull request #132 from EverythingMe/feature_import
Fix overflow CSS to be auto instead of scroll
2014-03-12 11:38:44 +02:00
Arik Fraimovich
08b6141d06 Merge pull request #132 from EverythingMe/feature_import
Fix overflow CSS to be auto instead of scroll
2014-03-12 11:38:44 +02:00
Arik Fraimovich
356128fbf5 Fix overflow CSS to be auto instead of scroll 2014-03-12 11:38:21 +02:00
Arik Fraimovich
6cbc2736d8 Fix overflow CSS to be auto instead of scroll 2014-03-12 11:38:21 +02:00
Arik Fraimovich
a1ac2d512b Merge pull request #131 from EverythingMe/feature_import
Feature: import dashboard (along with widgets, visualization and queries) from JSON
2014-03-11 19:23:24 +02:00
Arik Fraimovich
2db600b8d7 Merge pull request #131 from EverythingMe/feature_import
Feature: import dashboard (along with widgets, visualization and queries) from JSON
2014-03-11 19:23:24 +02:00
Arik Fraimovich
c3fc9879e0 Fix: use relative file path 2014-03-11 19:15:44 +02:00
Arik Fraimovich
5df3dbde1a Fix: use relative file path 2014-03-11 19:15:44 +02:00
Arik Fraimovich
126d6f7f60 Update importer to use mappings 2014-03-11 18:51:41 +02:00
Arik Fraimovich
417571ecd6 Update importer to use mappings 2014-03-11 18:51:41 +02:00
Arik Fraimovich
3d726fe7b0 Update importer to update existing objects 2014-03-11 18:40:42 +02:00
Arik Fraimovich
6fa5668cbc Update importer to update existing objects 2014-03-11 18:40:42 +02:00
Arik Fraimovich
c6ba21ad4c Update Widget and QueryResult to inherit from BaseModel 2014-03-11 18:40:24 +02:00
Arik Fraimovich
07b8d3d157 Update Widget and QueryResult to inherit from BaseModel 2014-03-11 18:40:24 +02:00
Arik Fraimovich
be3bad7b90 Move import functions into a class, to have state 2014-03-11 18:23:25 +02:00
Arik Fraimovich
d6bd19438c Move import functions into a class, to have state 2014-03-11 18:23:25 +02:00
Arik Fraimovich
2f53c7924d Import functions to import JSON representation of a dashboard 2014-03-11 18:23:25 +02:00
Arik Fraimovich
0f29506dda Import functions to import JSON representation of a dashboard 2014-03-11 18:23:25 +02:00
Arik Fraimovich
08d46bbbe3 Merge pull request #126 from EverythingMe/query-view-page
Fixes #121: redesign query page (have separate page for editing and viewing)
2014-03-11 18:22:31 +02:00
Arik Fraimovich
f420c91909 Merge pull request #126 from EverythingMe/query-view-page
Fixes #121: redesign query page (have separate page for editing and viewing)
2014-03-11 18:22:31 +02:00
Arik Fraimovich
db94db2957 Add support for ESC key in edit-in-place 2014-03-11 18:16:15 +02:00
Arik Fraimovich
6c00b8a853 Add support for ESC key in edit-in-place 2014-03-11 18:16:15 +02:00
Arik Fraimovich
c87dcf8aac Fix tab size 2014-03-11 18:09:12 +02:00
Arik Fraimovich
38f20d7eba Fix tab size 2014-03-11 18:09:12 +02:00
Arik Fraimovich
0e1dbc9624 Change fork button to default 2014-03-11 18:08:24 +02:00
Arik Fraimovich
19b97f63e5 Change fork button to default 2014-03-11 18:08:24 +02:00
Amir Nissim
0b90b7ea79 #121 fixes:
* fork your own query
* better redirect after saving new query
* UI fixes
2014-03-11 17:16:58 +02:00
Amir Nissim
fa4258f75c #121 fixes:
* fork your own query
* better redirect after saving new query
* UI fixes
2014-03-11 17:16:58 +02:00
Amir Nissim
2b652cac1f rd-time-ago directive 2014-03-11 16:35:19 +02:00
Amir Nissim
583546a7ca rd-time-ago directive 2014-03-11 16:35:19 +02:00
Amir Nissim
6c40610d34 #121 More UI issues:
* source as link instead of button
* fix source link when url has a hash
* new query uses the new layout
* rename url /src => /source...
* when deleting a visualization update the hash
* don't submit title/description if it hasn't changed
* mobile: fix description field wrapping
2014-03-11 15:21:53 +02:00
Amir Nissim
a6f527bd51 #121 More UI issues:
* source as link instead of button
* fix source link when url has a hash
* new query uses the new layout
* rename url /src => /source...
* when deleting a visualization update the hash
* don't submit title/description if it hasn't changed
* mobile: fix description field wrapping
2014-03-11 15:21:53 +02:00
Amir Nissim
f1aec05835 #121: source button to play nice with hashes - cont'd 2014-03-11 15:20:13 +02:00
Amir Nissim
56672a862f #121: source button to play nice with hashes - cont'd 2014-03-11 15:20:13 +02:00
Arik Fraimovich
4860ea1b4e Revert to urls without slash when not needed 2014-03-11 15:20:13 +02:00
Arik Fraimovich
b5e5fb2bde Revert to urls without slash when not needed 2014-03-11 15:20:13 +02:00
Arik Fraimovich
53dcd8b7b2 Fix routes 2014-03-11 15:20:13 +02:00
Arik Fraimovich
cf82b4899a Fix routes 2014-03-11 15:20:13 +02:00
Amir Nissim
e8e2aab8e3 #121: source button to play nice with hashes 2014-03-11 15:20:13 +02:00
Amir Nissim
554b21241b #121: source button to play nice with hashes 2014-03-11 15:20:13 +02:00
Amir Nissim
8d1b523b94 #121: alerts 2014-03-11 15:20:13 +02:00
Amir Nissim
d6068395fa #121: alerts 2014-03-11 15:20:13 +02:00
Amir Nissim
31c59467db #121: editing query name, description, ttl triggers save 2014-03-11 15:20:13 +02:00
Amir Nissim
4836e5c239 #121: editing query name, description, ttl triggers save 2014-03-11 15:20:13 +02:00
Amir Nissim
54c5a7dcb3 #121: /src url 2014-03-11 15:20:13 +02:00
Amir Nissim
0ff4de1e10 #121: /src url 2014-03-11 15:20:13 +02:00
Amir Nissim
d4287558f9 #121: use resolve in RouteProvider to get query and instantiate controller when resolved 2014-03-11 15:20:12 +02:00
Amir Nissim
c91368229a #121: use resolve in RouteProvider to get query and instantiate controller when resolved 2014-03-11 15:20:12 +02:00
Amir Nissim
da496975bc #121: more layout changes 2014-03-11 15:20:12 +02:00
Amir Nissim
324205ed37 #121: more layout changes 2014-03-11 15:20:12 +02:00
Amir Nissim
aaafb0f465 #121: routing new views 2014-03-11 15:20:12 +02:00
Amir Nissim
950989b139 #121: routing new views 2014-03-11 15:20:12 +02:00
Amir Nissim
7618fc97d2 #121: mobile tweaks 2014-03-11 15:20:12 +02:00
Amir Nissim
498027301e #121: mobile tweaks 2014-03-11 15:20:12 +02:00
Amir Nissim
f01d224bdf #121: layout change - query editor on top 2014-03-11 15:20:12 +02:00
Amir Nissim
35f4be1abc #121: layout change - query editor on top 2014-03-11 15:20:12 +02:00
Amir Nissim
08355ff8af #121: edit refresh schedule, move alerts to right column 2014-03-11 15:20:12 +02:00
Amir Nissim
c9a8f7bd82 #121: edit refresh schedule, move alerts to right column 2014-03-11 15:20:12 +02:00
Arik Fraimovich
f2ebfaba3e Fix: no more flickering when switching visualization tabs. 2014-03-11 15:20:12 +02:00
Arik Fraimovich
7ad20ccff6 Fix: no more flickering when switching visualization tabs. 2014-03-11 15:20:12 +02:00
Amir Nissim
67f4c78d61 #121: editable query name and description 2014-03-11 15:20:12 +02:00
Amir Nissim
1d4d5b4c1f #121: editable query name and description 2014-03-11 15:20:12 +02:00
Amir Nissim
02cf984711 #121: 'show query' button for non-owners 2014-03-11 15:20:12 +02:00
Amir Nissim
2fa37a9732 #121: 'show query' button for non-owners 2014-03-11 15:20:12 +02:00
Amir Nissim
ef86f44215 organizing /app files 2014-03-11 15:20:12 +02:00
Amir Nissim
51db8346d3 organizing /app files 2014-03-11 15:20:12 +02:00
Amir Nissim
315803dde2 #121: QueryView page edit mode 2014-03-11 15:20:11 +02:00
Amir Nissim
e0c330fb29 #121: QueryView page edit mode 2014-03-11 15:20:11 +02:00
Amir Nissim
f8280552a0 #121: QueryViewCtrl with 'strict mode' 2014-03-11 15:20:11 +02:00
Amir Nissim
61316c40e5 #121: QueryViewCtrl with 'strict mode' 2014-03-11 15:20:11 +02:00
Amir Nissim
4adfc4353b #121 query view page 2014-03-11 15:20:11 +02:00
Amir Nissim
e57fabbd1d #121 query view page 2014-03-11 15:20:11 +02:00
Arik Fraimovich
7d9a7eafc6 Merge pull request #130 from EverythingMe/fix_category_chart_sorting
Fix: (in category charts) don't sort values when there is more than one category
2014-03-11 15:16:51 +02:00
Arik Fraimovich
6ee4e6cd8e Merge pull request #130 from EverythingMe/fix_category_chart_sorting
Fix: (in category charts) don't sort values when there is more than one category
2014-03-11 15:16:51 +02:00
Arik Fraimovich
97b727dcc0 Fix: don't sort values when there is more than one category 2014-03-11 15:14:32 +02:00
Arik Fraimovich
2cbee1bf82 Fix: don't sort values when there is more than one category 2014-03-11 15:14:32 +02:00
Arik Fraimovich
81525fa61b Fix: compile all views. 2014-03-09 12:52:33 +02:00
Arik Fraimovich
30b4628593 Fix: compile all views. 2014-03-09 12:52:33 +02:00
Arik Fraimovich
87bb092c9d Merge pull request #128 from EverythingMe/fix_visualizations_issues
Several visualizations related fixes.
2014-03-06 22:09:43 +02:00
Arik Fraimovich
5e72cc61b6 Merge pull request #128 from EverythingMe/fix_visualizations_issues
Several visualizations related fixes.
2014-03-06 22:09:43 +02:00
Arik Fraimovich
02f376b6d3 Hackish way to show dates as dates in the table and timestamps
as date+timestamp.
2014-03-06 19:58:04 +02:00
Arik Fraimovich
db1df07337 Hackish way to show dates as dates in the table and timestamps
as date+timestamp.
2014-03-06 19:58:04 +02:00
Arik Fraimovich
10f2bc3df5 Fix: custom visualization name was ignored (ref #127) 2014-03-06 19:23:56 +02:00
Arik Fraimovich
ceb2e0cfb3 Fix: custom visualization name was ignored (ref #127) 2014-03-06 19:23:56 +02:00
Arik Fraimovich
3e7b1cdc15 Pie chart: show value and not only % 2014-03-06 19:21:13 +02:00
Arik Fraimovich
5e981a579b Pie chart: show value and not only % 2014-03-06 19:21:13 +02:00
Arik Fraimovich
234b15765c Fix: the pivot table visualization was messing up other visualizations
by changing the data.
2014-03-06 19:18:07 +02:00
Arik Fraimovich
2b03973cf0 Fix: the pivot table visualization was messing up other visualizations
by changing the data.
2014-03-06 19:18:07 +02:00
Alessio Garofalo
53d81aebed Add gunicorn to the requirements
So when we install it is already there.
2014-03-06 12:17:02 +00:00
Arik Fraimovich
462aaad9c0 Merge pull request #124 from erans/master
BigQuery support
2014-03-05 14:40:28 +02:00
Arik Fraimovich
afac41d3e6 Merge pull request #124 from erans/master
BigQuery support
2014-03-05 14:40:28 +02:00
Eran Sandler
4f72a61ea6 Added try..except to handle missing imports 2014-03-05 09:05:33 +02:00
Eran Sandler
f54d08a628 Added try..except to handle missing imports 2014-03-05 09:05:33 +02:00
Eran Sandler
bc1ae8b496 Bigquery support 2014-03-05 08:46:27 +02:00
Eran Sandler
5b42a4b36e Bigquery support 2014-03-05 08:46:27 +02:00
Eran Sandler
98ee88c1bb No need to use github style authenticated URLs, it can just break things. 2014-03-05 08:46:09 +02:00
Eran Sandler
7c89ff5c1b No need to use github style authenticated URLs, it can just break things. 2014-03-05 08:46:09 +02:00
Arik Fraimovich
bd8abbbdbd Merge pull request #122 from hailocab/DAT-706
Adding a new table called activity_log to log who runs what and when
2014-03-04 17:41:08 +02:00
Arik Fraimovich
9249dfee4c Merge pull request #122 from hailocab/DAT-706
Adding a new table called activity_log to log who runs what and when
2014-03-04 17:41:08 +02:00
Christopher Valles
1ac945ad66 Adding a constant to activity model 2014-03-04 14:36:57 +00:00
Christopher Valles
e270d2534f Adding a constant to activity model 2014-03-04 14:36:57 +00:00
Arik Fraimovich
c2b038c1c0 Merge pull request #123 from ekampf/feature/fixmyql
Handle empty data returned by queries
2014-03-04 15:36:00 +02:00
Arik Fraimovich
d5862f476b Merge pull request #123 from ekampf/feature/fixmyql
Handle empty data returned by queries
2014-03-04 15:36:00 +02:00
Eran Kampf
02b5179eb3 Handle empty data returned by queries 2014-03-04 15:21:03 +02:00
Eran Kampf
100fd2c9f0 Handle empty data returned by queries 2014-03-04 15:21:03 +02:00
Christopher Valles
a2f55b9838 Removing unneeded imports in migration script 2014-03-04 13:12:43 +00:00
Christopher Valles
4fef4a8d33 Removing unneeded imports in migration script 2014-03-04 13:12:43 +00:00
Christopher Valles
933f799952 Merge branch 'master' into DAT-706 2014-03-04 13:10:34 +00:00
Christopher Valles
3018f8c521 Merge branch 'master' into DAT-706 2014-03-04 13:10:34 +00:00
Christopher Valles
826fccbc94 Adding a new table called activity_log to log who runs what and when 2014-03-04 13:04:55 +00:00
Christopher Valles
54453ee9e5 Adding a new table called activity_log to log who runs what and when 2014-03-04 13:04:55 +00:00
Amir Nissim
be0b5bb0d1 Merge pull request #100 from EverythingMe/feature_visualization_options
Visualizations refactor
2014-03-04 11:42:57 +02:00
Amir Nissim
cc957cc3e8 Merge pull request #100 from EverythingMe/feature_visualization_options
Visualizations refactor
2014-03-04 11:42:57 +02:00
Arik Fraimovich
2b274b706e Set default name when creating 2014-03-04 11:38:00 +02:00
Arik Fraimovich
dd5fd72bd2 Set default name when creating 2014-03-04 11:38:00 +02:00
Arik Fraimovich
3ab1f9b5a3 Fixes #81: reset query when saving widget 2014-03-04 11:33:11 +02:00
Arik Fraimovich
9d4655cc00 Fixes #81: reset query when saving widget 2014-03-04 11:33:11 +02:00
Arik Fraimovich
e512fef78c Switch to config object instead of millions of params 2014-03-04 11:09:04 +02:00
Arik Fraimovich
3320de07f2 Switch to config object instead of millions of params 2014-03-04 11:09:04 +02:00
Arik Fraimovich
448e82108d Fix: reset visualization form after saving visualization 2014-03-04 10:59:07 +02:00
Arik Fraimovich
68482afa5c Fix: reset visualization form after saving visualization 2014-03-04 10:59:07 +02:00
Arik Fraimovich
be93e77b2f Rename Visaulization to VisualizationProvider 2014-03-04 10:19:28 +02:00
Arik Fraimovich
bfeded207a Rename Visaulization to VisualizationProvider 2014-03-04 10:19:28 +02:00
Arik Fraimovich
5aed2b6baf typo fix 2014-03-04 10:17:09 +02:00
Arik Fraimovich
a5971b0c69 typo fix 2014-03-04 10:17:09 +02:00
Arik Fraimovich
00b5aba88a Remove the need to declare each visualization module in app dependencies. 2014-03-04 10:17:08 +02:00
Arik Fraimovich
6d93ccc0d0 Remove the need to declare each visualization module in app dependencies. 2014-03-04 10:17:08 +02:00
Arik Fraimovich
9c0edfdb9d Fix chart editor declaration. 2014-03-04 10:17:08 +02:00
Arik Fraimovich
69f5de6478 Fix chart editor declaration. 2014-03-04 10:17:08 +02:00
Arik Fraimovich
b40e2e0a6f Fix switch regular expression. 2014-03-04 10:17:08 +02:00
Arik Fraimovich
4630a8d18d Fix switch regular expression. 2014-03-04 10:17:08 +02:00
Arik Fraimovich
d73130ebac Refactor visualizations:
The main code doesn't know about individual visualizations and each visualization is contained in its own module. Should make adding/editing/removing visualizations easier.
2014-03-04 10:17:08 +02:00
Arik Fraimovich
79e40a667b Refactor visualizations:
The main code doesn't know about individual visualizations and each visualization is contained in its own module. Should make adding/editing/removing visualizations easier.
2014-03-04 10:17:08 +02:00
Arik Fraimovich
13016c7476 Remove unused dependency. 2014-03-04 10:16:32 +02:00
Arik Fraimovich
2c904641a5 Remove unused dependency. 2014-03-04 10:16:32 +02:00
Arik Fraimovich
667eb3035b Merge pull request #119 from EverythingMe/fix_chart_name
Set the chart name by default to chart type.
2014-03-03 20:47:21 +02:00
Arik Fraimovich
1303163aee Merge pull request #119 from EverythingMe/fix_chart_name
Set the chart name by default to chart type.
2014-03-03 20:47:21 +02:00
Arik Fraimovich
13f2ee2ae8 Fix: set the chart name by default to chart type. 2014-03-03 20:40:50 +02:00
Arik Fraimovich
14ecfd2cc8 Fix: set the chart name by default to chart type. 2014-03-03 20:40:50 +02:00
Arik Fraimovich
1b46c39a27 typo fix 2014-03-03 20:29:43 +02:00
Arik Fraimovich
a91eb9435b typo fix 2014-03-03 20:29:43 +02:00
Arik Fraimovich
5d19096e0c merge conflict fix & bump version 2014-03-03 20:27:04 +02:00
Arik Fraimovich
b5d2285b99 merge conflict fix & bump version 2014-03-03 20:27:04 +02:00
Arik Fraimovich
3f79189410 Merge pull request #118 from EverythingMe/feature_statsd
Feature: StatsD integration
2014-03-03 20:25:05 +02:00
Arik Fraimovich
fece24a50a Merge pull request #118 from EverythingMe/feature_statsd
Feature: StatsD integration
2014-03-03 20:25:05 +02:00
Arik Fraimovich
1940099d3c Merge pull request #112 from hailocab/DAT-741
PR to fix Issue 82
2014-03-03 20:17:54 +02:00
Arik Fraimovich
7d77da8339 Merge pull request #112 from hailocab/DAT-741
PR to fix Issue 82
2014-03-03 20:17:54 +02:00
Arik Fraimovich
240e0780a0 Basic stats reporting. 2014-03-03 20:17:25 +02:00
Arik Fraimovich
e43366f422 Basic stats reporting. 2014-03-03 20:17:25 +02:00
Arik Fraimovich
3e38ef959b Use integers instead of uuid for workers id. 2014-03-03 20:16:42 +02:00
Arik Fraimovich
c7af5bdce9 Use integers instead of uuid for workers id. 2014-03-03 20:16:42 +02:00
Arik Fraimovich
9e2af21d5e Statsd settings. 2014-03-03 20:15:14 +02:00
Arik Fraimovich
3f302ee4a3 Statsd settings. 2014-03-03 20:15:14 +02:00
Arik Fraimovich
3aa4d4c36c Add statsd client requirements. 2014-03-03 20:15:02 +02:00
Arik Fraimovich
53ef0f3f2d Add statsd client requirements. 2014-03-03 20:15:02 +02:00
Christopher Valles
81866cb6d3 Resolve conflicts 2014-03-03 17:35:01 +00:00
Christopher Valles
c6dbb8d7c8 Resolve conflicts 2014-03-03 17:35:01 +00:00
Christopher Valles
bee20a5478 Merge remote-tracking branch 'upstream/master' 2014-03-03 17:33:40 +00:00
Christopher Valles
f4088e0b38 Merge remote-tracking branch 'upstream/master' 2014-03-03 17:33:40 +00:00
Christopher Valles
b43e32169b Merge branch 'master' into DAT-741 2014-03-03 17:18:15 +00:00
Christopher Valles
d3d46aa023 Merge branch 'master' into DAT-741 2014-03-03 17:18:15 +00:00
Christopher Valles
4d99541f7c Fixing PR #112 as discussed with Arik 2014-03-03 17:11:38 +00:00
Christopher Valles
55cc3dd90e Fixing PR #112 as discussed with Arik 2014-03-03 17:11:38 +00:00
Christopher Valles
089b67c40e Fixing PR #112 as discussed with Arik 2014-03-03 17:08:07 +00:00
Christopher Valles
0822789002 Fixing PR #112 as discussed with Arik 2014-03-03 17:08:07 +00:00
Christopher Valles
9ca0f4a4fa Fixing PR #112 as discussed with Arik 2014-03-03 16:45:45 +00:00
Christopher Valles
ffb2ec9bd1 Fixing PR #112 as discussed with Arik 2014-03-03 16:45:45 +00:00
Christopher Valles
0e1a0b4798 Fixing PR #112 as discussed with Arik 2014-03-03 16:41:53 +00:00
Christopher Valles
2bcb56d249 Fixing PR #112 as discussed with Arik 2014-03-03 16:41:53 +00:00
Arik Fraimovich
467ae5c8fa Update the refresh queries query 2014-03-03 18:26:15 +02:00
Arik Fraimovich
8ccbe9c069 Update the refresh queries query 2014-03-03 18:26:15 +02:00
Arik Fraimovich
a3bf50e15e Merge pull request #116 from EverythingMe/fix_category_graphs
Fixes to category charts
2014-03-03 15:31:30 +02:00
Arik Fraimovich
85f98f7405 Merge pull request #116 from EverythingMe/fix_category_graphs
Fixes to category charts
2014-03-03 15:31:30 +02:00
Arik Fraimovich
9d44a73d02 Feature: sort category charts by y value. 2014-03-03 15:27:39 +02:00
Arik Fraimovich
ac946fd014 Feature: sort category charts by y value. 2014-03-03 15:27:39 +02:00
Arik Fraimovich
8e9d537882 Fix: graphs with category as x axis were shown as datetime
graphs, because drawChart is called twice and on second pass
there is no x attribute on point object.
2014-03-03 15:21:49 +02:00
Arik Fraimovich
3680d0c65d Fix: graphs with category as x axis were shown as datetime
graphs, because drawChart is called twice and on second pass
there is no x attribute on point object.
2014-03-03 15:21:49 +02:00
Christopher Valles
774b9cc368 Merge remote-tracking branch 'upstream/master' 2014-03-03 11:52:55 +00:00
Christopher Valles
8130d28442 Merge remote-tracking branch 'upstream/master' 2014-03-03 11:52:55 +00:00
Arik Fraimovich
00e3b06004 Merge pull request #114 from EverythingMe/feature_login_form
Feature: non OpenID users & login screen
2014-03-03 13:10:40 +02:00
Arik Fraimovich
9cac38d5da Merge pull request #114 from EverythingMe/feature_login_form
Feature: non OpenID users & login screen
2014-03-03 13:10:40 +02:00
Arik Fraimovich
3014ba8eec Fix: create_user_and_login should accept user 2014-03-03 13:07:57 +02:00
Arik Fraimovich
81122c9865 Fix: create_user_and_login should accept user 2014-03-03 13:07:57 +02:00
Arik Fraimovich
823f0b8db5 user management commands 2014-03-03 12:18:15 +02:00
Arik Fraimovich
b8a0077b1d user management commands 2014-03-03 12:18:15 +02:00
Arik Fraimovich
af1b1c0edb Set is_admin of user based on ADMINS list. 2014-03-03 11:53:49 +02:00
Arik Fraimovich
62108e3dac Set is_admin of user based on ADMINS list. 2014-03-03 11:53:49 +02:00
Arik Fraimovich
dd4c3f152a Build assets for login page 2014-03-03 11:49:31 +02:00
Arik Fraimovich
0c9fa8b51b Build assets for login page 2014-03-03 11:49:31 +02:00
Arik Fraimovich
0a511e4f8a Ability to disable openid or password login 2014-03-02 21:54:50 +02:00
Arik Fraimovich
aa2bf4fe22 Ability to disable openid or password login 2014-03-02 21:54:50 +02:00
Arik Fraimovich
524c2b8203 BaseResource.current_user wrapper to get real user object. 2014-03-02 18:30:06 +02:00
Arik Fraimovich
e82f561c03 BaseResource.current_user wrapper to get real user object. 2014-03-02 18:30:06 +02:00
Arik Fraimovich
578d9c6785 Logout controller 2014-03-02 18:27:05 +02:00
Arik Fraimovich
d348fe9012 Logout controller 2014-03-02 18:27:05 +02:00
Arik Fraimovich
c7efad2197 Login view 2014-03-02 17:59:08 +02:00
Arik Fraimovich
7271b7a5f0 Login view 2014-03-02 17:59:08 +02:00
Arik Fraimovich
adda8707ba CircleCi: install dev_requirements.txt 2014-03-02 15:46:29 +02:00
Arik Fraimovich
522536cfe0 CircleCi: install dev_requirements.txt 2014-03-02 15:46:29 +02:00
Arik Fraimovich
640d0082da Tests for authentication functions 2014-03-02 15:41:38 +02:00
Arik Fraimovich
f557b53ce2 Tests for authentication functions 2014-03-02 15:41:38 +02:00
Arik Fraimovich
f5bd7f113f Chagne logging not to depend on app context 2014-03-02 15:41:20 +02:00
Arik Fraimovich
1277da7e92 Chagne logging not to depend on app context 2014-03-02 15:41:20 +02:00
Arik Fraimovich
8b1978fb26 Add mock to dev_requirements 2014-03-02 15:37:33 +02:00
Arik Fraimovich
f334122e41 Add mock to dev_requirements 2014-03-02 15:37:33 +02:00
Arik Fraimovich
812e8cca9a Add flask_login and use it for managing authentication 2014-03-02 14:42:13 +02:00
Arik Fraimovich
269cbe839b Add flask_login and use it for managing authentication 2014-03-02 14:42:13 +02:00
Arik Fraimovich
63bc04e800 Bump version. 2014-02-27 12:55:06 +02:00
Arik Fraimovich
2a3bcc2ecb Bump version. 2014-02-27 12:55:06 +02:00
Arik Fraimovich
7eb776bc3f Remove milestone v0.2 from README. 2014-02-27 12:45:56 +02:00
Arik Fraimovich
5babab85c8 Remove milestone v0.2 from README. 2014-02-27 12:45:56 +02:00
Arik Fraimovich
56981a5333 Merge pull request #105 from EverythingMe/feature_user_object
Resolve #17: User model
2014-02-27 12:44:30 +02:00
Arik Fraimovich
8debd01a36 Merge pull request #105 from EverythingMe/feature_user_object
Resolve #17: User model
2014-02-27 12:44:30 +02:00
Arik Fraimovich
54cd4723ba Fix: saving new query. 2014-02-27 10:24:28 +02:00
Arik Fraimovich
51a37cae3d Fix: saving new query. 2014-02-27 10:24:28 +02:00
Christopher Valles
c9f8b04a12 UX/UI issues with visualizations fixed 2014-02-25 19:59:14 +00:00
Christopher Valles
3c24e76eb4 UX/UI issues with visualizations fixed 2014-02-25 19:59:14 +00:00
Christopher Valles
11e970ee8a Merge branch 'master' into DAT-741 2014-02-25 18:15:48 +00:00
Christopher Valles
6dc9f8ea2b Merge branch 'master' into DAT-741 2014-02-25 18:15:48 +00:00
Christopher Valles
3d7367aa04 Merge remote-tracking branch 'upstream/master' 2014-02-25 18:15:24 +00:00
Christopher Valles
157b1ca0b4 Merge remote-tracking branch 'upstream/master' 2014-02-25 18:15:24 +00:00
Christopher Valles
2bcf5b2fc5 DAT-741 2014-02-25 18:14:47 +00:00
Christopher Valles
8be95262d4 DAT-741 2014-02-25 18:14:47 +00:00
Arik Fraimovich
39bc4d7151 Merge pull request #111 from EverythingMe/fix_graphite_settings
Fix: added JSON parsing of the Graphite settings
2014-02-25 08:38:32 +02:00
Arik Fraimovich
3cbdae6e5c Merge pull request #111 from EverythingMe/fix_graphite_settings
Fix: added JSON parsing of the Graphite settings
2014-02-25 08:38:32 +02:00
Arik Fraimovich
f08e58a301 Fix: add parsing of graphite settings 2014-02-25 08:37:19 +02:00
Arik Fraimovich
edcf0661a6 Fix: add parsing of graphite settings 2014-02-25 08:37:19 +02:00
Arik Fraimovich
a49270630c Fix graphite settings example 2014-02-25 08:36:59 +02:00
Arik Fraimovich
6d14c5c555 Fix graphite settings example 2014-02-25 08:36:59 +02:00
Arik Fraimovich
f703517f70 Remove outdated vagrant file 2014-02-25 08:17:16 +02:00
Arik Fraimovich
a0662d5323 Remove outdated vagrant file 2014-02-25 08:17:16 +02:00
Arik Fraimovich
6c1ca3036b Make sure visualization don't overflow 2014-02-25 08:16:36 +02:00
Arik Fraimovich
cbd1cf7c25 Make sure visualization don't overflow 2014-02-25 08:16:36 +02:00
Arik Fraimovich
6ed80a9b92 Merge pull request #110 from ekampf/feature/fixmyql
Fixed mysql error handling
2014-02-24 20:20:20 +02:00
Arik Fraimovich
a55225b5e8 Merge pull request #110 from ekampf/feature/fixmyql
Fixed mysql error handling
2014-02-24 20:20:20 +02:00
Eran Kampf
42fa5c2ee7 Fixed MySQL Errors 2014-02-24 16:44:08 +02:00
Eran Kampf
b81c3ba614 Fixed MySQL Errors 2014-02-24 16:44:08 +02:00
Arik Fraimovich
8f34b241d4 Update Getting Started instructions. 2014-02-24 14:40:47 +02:00
Arik Fraimovich
2d0998a995 Update Getting Started instructions. 2014-02-24 14:40:47 +02:00
Arik Fraimovich
b0d6ce61b0 Fix tests 2014-02-22 14:52:04 +02:00
Arik Fraimovich
766840de68 Fix tests 2014-02-22 14:52:04 +02:00
Arik Fraimovich
9defa45428 Use of user object (fix views, update migrations and some). 2014-02-22 14:43:00 +02:00
Arik Fraimovich
791f2e0b34 Use of user object (fix views, update migrations and some). 2014-02-22 14:43:00 +02:00
Arik Fraimovich
52bcb8dfb6 User model & migration (ref #17) 2014-02-18 11:15:46 +02:00
Arik Fraimovich
9241a7c35d User model & migration (ref #17) 2014-02-18 11:15:46 +02:00
Arik Fraimovich
1f90f13b81 Merge pull request #103 from EverythingMe/refresh_button
Use database number from redis url if available.
2014-02-17 18:02:22 +02:00
Arik Fraimovich
dda92477cf Merge pull request #103 from EverythingMe/refresh_button
Use database number from redis url if available.
2014-02-17 18:02:22 +02:00
Arik Fraimovich
0a522863dc Use database number from redis url if available. 2014-02-17 18:01:44 +02:00
Arik Fraimovich
07455e5821 Use database number from redis url if available. 2014-02-17 18:01:44 +02:00
Arik Fraimovich
e8a974813d Merge pull request #102 from EverythingMe/refresh_button
Only refresh widgets that have their query data updated.
2014-02-17 17:59:27 +02:00
Arik Fraimovich
1b9aae0137 Merge pull request #102 from EverythingMe/refresh_button
Only refresh widgets that have their query data updated.
2014-02-17 17:59:27 +02:00
Arik Fraimovich
50da387936 Only refresh widgets that have their query data updated. 2014-02-17 17:57:26 +02:00
Arik Fraimovich
30b86ea781 Only refresh widgets that have their query data updated. 2014-02-17 17:57:26 +02:00
Arik Fraimovich
489869ee42 Merge pull request #101 from EverythingMe/refresh_button
Auto-refresh button for dashboards & every minute refresh rate
2014-02-17 17:22:22 +02:00
Arik Fraimovich
a186d44d8f Merge pull request #101 from EverythingMe/refresh_button
Auto-refresh button for dashboards & every minute refresh rate
2014-02-17 17:22:22 +02:00
Arik Fraimovich
316b2a1b1c Option to set every minute refresh rate. 2014-02-17 17:19:48 +02:00
Arik Fraimovich
574f75b293 Option to set every minute refresh rate. 2014-02-17 17:19:48 +02:00
Arik Fraimovich
a1625f7125 Auto-refresh button for dashboards. 2014-02-17 17:19:32 +02:00
Arik Fraimovich
252ae7455a Auto-refresh button for dashboards. 2014-02-17 17:19:32 +02:00
Christopher Valles
63379d9b24 Adding .ruby-version to .gitignore 2014-02-14 11:57:42 +00:00
Christopher Valles
d73dbdeee0 Adding .ruby-version to .gitignore 2014-02-14 11:57:42 +00:00
Arik Fraimovich
d812f26e81 Merge pull request #99 from EverythingMe/feature_allow_external_users
Procfile changes:
2014-02-13 20:21:08 +02:00
Arik Fraimovich
72065c0ee2 Merge pull request #99 from EverythingMe/feature_allow_external_users
Procfile changes:
2014-02-13 20:21:08 +02:00
Arik Fraimovich
4ba3152a99 Procfile changes:
1. Renamed Honchofile -> Procfile.heroku and changed it to work better with Heroku.
2. Added Procfile.dev for development.
2014-02-13 20:16:36 +02:00
Arik Fraimovich
07caee1d12 Procfile changes:
1. Renamed Honchofile -> Procfile.heroku and changed it to work better with Heroku.
2. Added Procfile.dev for development.
2014-02-13 20:16:36 +02:00
Arik Fraimovich
d4f48cdc21 Merge pull request #98 from EverythingMe/feature_allow_external_users
Feature: allow external users
2014-02-13 20:15:54 +02:00
Arik Fraimovich
4c3904760c Merge pull request #98 from EverythingMe/feature_allow_external_users
Feature: allow external users
2014-02-13 20:15:54 +02:00
Arik Fraimovich
dc0cc3af65 If only domain specified and not external users, use federated login. 2014-02-13 20:13:08 +02:00
Arik Fraimovich
8ad2c2a59e If only domain specified and not external users, use federated login. 2014-02-13 20:13:08 +02:00
Arik Fraimovich
27031c96b5 Bring back the ability to set allowed external users & publicly open re:dash. 2014-02-13 20:04:28 +02:00
Arik Fraimovich
e5a365ba41 Bring back the ability to set allowed external users & publicly open re:dash. 2014-02-13 20:04:28 +02:00
Arik Fraimovich
b1ca28fbb5 Merge pull request #96 from EverythingMe/fix_description_nullable
Fix: allow queries.description to be null (+ migration)
2014-02-13 19:18:39 +02:00
Arik Fraimovich
fc0b118188 Merge pull request #96 from EverythingMe/fix_description_nullable
Fix: allow queries.description to be null (+ migration)
2014-02-13 19:18:39 +02:00
Arik Fraimovich
1b7bfb42fc Fix: allow queries.description to be null. 2014-02-13 19:08:35 +02:00
Arik Fraimovich
a207b93d0d Fix: allow queries.description to be null. 2014-02-13 19:08:35 +02:00
Arik Fraimovich
ea65204eaa Merge pull request #95 from EverythingMe/feature_stacking_selection
Allow user to set the stacking of the chart.
2014-02-13 16:24:39 +02:00
Arik Fraimovich
b1d588b1f2 Merge pull request #95 from EverythingMe/feature_stacking_selection
Allow user to set the stacking of the chart.
2014-02-13 16:24:39 +02:00
Arik Fraimovich
4351e5a642 Allow user to set the stacking of the chart. 2014-02-13 16:19:15 +02:00
Arik Fraimovich
95a6bab8b5 Allow user to set the stacking of the chart. 2014-02-13 16:19:15 +02:00
Arik Fraimovich
f35289624c CirlceCI: no longer need to delete settings.py. 2014-02-13 14:50:42 +02:00
Arik Fraimovich
c82433e6b4 CirlceCI: no longer need to delete settings.py. 2014-02-13 14:50:42 +02:00
Arik Fraimovich
47c322cb31 Merge pull request #94 from EverythingMe/fix_query_hash_not_updating
Fix: when updating query text the hash should change.
2014-02-13 13:13:38 +02:00
Arik Fraimovich
2e84852519 Merge pull request #94 from EverythingMe/fix_query_hash_not_updating
Fix: when updating query text the hash should change.
2014-02-13 13:13:38 +02:00
Arik Fraimovich
88f1237990 Fix: when updating query text the hash should change. 2014-02-13 13:08:48 +02:00
Arik Fraimovich
da746d15a0 Fix: when updating query text the hash should change. 2014-02-13 13:08:48 +02:00
Arik Fraimovich
4740a8b520 Merge pull request #93 from EverythingMe/feature_env
Feature: better Heroku support - move configuration to environment variables & Procfile
2014-02-13 12:15:52 +02:00
Arik Fraimovich
1b519269d8 Merge pull request #93 from EverythingMe/feature_env
Feature: better Heroku support - move configuration to environment variables & Procfile
2014-02-13 12:15:52 +02:00
Arik Fraimovich
521b6ab851 Fix CircleCI configuration 2014-02-12 21:37:56 +02:00
Arik Fraimovich
5ffaf1aead Fix CircleCI configuration 2014-02-12 21:37:56 +02:00
Arik Fraimovich
9e328551e4 Example .env file. 2014-02-12 20:53:32 +02:00
Arik Fraimovich
b704406164 Example .env file. 2014-02-12 20:53:32 +02:00
Arik Fraimovich
44eaffd110 Bump version. 2014-02-12 20:52:36 +02:00
Arik Fraimovich
5c9fe40702 Bump version. 2014-02-12 20:52:36 +02:00
Arik Fraimovich
cb964b5888 Fix: allow passing relative path for assets. 2014-02-12 20:52:19 +02:00
Arik Fraimovich
fe7c4f96aa Fix: allow passing relative path for assets. 2014-02-12 20:52:19 +02:00
Arik Fraimovich
81cbc7b87c Read settings from environment variables instead of a settings file.
This is mostly done to make it easier to run re:dash on Heroku but should be convenient in other platforms too.
2014-02-12 20:43:41 +02:00
Arik Fraimovich
83909a07fa Read settings from environment variables instead of a settings file.
This is mostly done to make it easier to run re:dash on Heroku but should be convenient in other platforms too.
2014-02-12 20:43:41 +02:00
Arik Fraimovich
8fa45749a9 Add Honcho (foreman alternative in Python) file(s).
The reason we have both Procfile and Honchofile is to be able to run both the workers and the web server in a single dyno on Heroku.
2014-02-12 20:42:32 +02:00
Arik Fraimovich
cd99927881 Add Honcho (foreman alternative in Python) file(s).
The reason we have both Procfile and Honchofile is to be able to run both the workers and the web server in a single dyno on Heroku.
2014-02-12 20:42:32 +02:00
Arik Fraimovich
910ea4caec Rename test files to test_. 2014-02-12 20:41:36 +02:00
Arik Fraimovich
8bbb485d5b Rename test files to test_. 2014-02-12 20:41:36 +02:00
Arik Fraimovich
0bff263c4b Merge pull request #89 from EverythingMe/feature_pie_chart
Feature: pie charts
2014-02-11 16:46:12 +02:00
Arik Fraimovich
b2ec77668e Merge pull request #89 from EverythingMe/feature_pie_chart
Feature: pie charts
2014-02-11 16:46:12 +02:00
Arik Fraimovich
38f85d3cc8 Better support for single series tooltips. 2014-02-11 16:30:41 +02:00
Arik Fraimovich
f8302ab65a Better support for single series tooltips. 2014-02-11 16:30:41 +02:00
Arik Fraimovich
83002d09a4 Support for pie charts. 2014-02-11 16:30:23 +02:00
Arik Fraimovich
e632cf1c42 Support for pie charts. 2014-02-11 16:30:23 +02:00
Arik Fraimovich
a567178987 Merge pull request #88 from EverythingMe/feature_graphite_v2
Feature: graphite query runner
2014-02-11 11:47:11 +02:00
Arik Fraimovich
640557df4f Merge pull request #88 from EverythingMe/feature_graphite_v2
Feature: graphite query runner
2014-02-11 11:47:11 +02:00
Arik Fraimovich
13c47639da Make the default newOptions apply to all but the chart vis 2014-02-11 11:42:37 +02:00
Arik Fraimovich
9b7227a88b Make the default newOptions apply to all but the chart vis 2014-02-11 11:42:37 +02:00
Arik Fraimovich
74b0535b31 Graphite query runner support 2014-02-11 11:38:34 +02:00
Arik Fraimovich
aabc912862 Graphite query runner support 2014-02-11 11:38:34 +02:00
Arik Fraimovich
cbd7799b44 Imrpove (?) line chart settings 2014-02-11 11:38:01 +02:00
Arik Fraimovich
02d6567347 Imrpove (?) line chart settings 2014-02-11 11:38:01 +02:00
Arik Fraimovich
98a8c4752b Merge pull request #87 from EverythingMe/fix_viz
Some more visualizations UI updates
2014-02-10 21:11:13 +02:00
Arik Fraimovich
6f8767d1fc Merge pull request #87 from EverythingMe/fix_viz
Some more visualizations UI updates
2014-02-10 21:11:13 +02:00
Arik Fraimovich
b2debb32d1 Show delete/edit/create new visualization only to query owner.
This is a temporary solution until we have owners for visualizations.
2014-02-10 21:06:52 +02:00
Arik Fraimovich
bc787efc86 Show delete/edit/create new visualization only to query owner.
This is a temporary solution until we have owners for visualizations.
2014-02-10 21:06:52 +02:00
Arik Fraimovich
098f3f6e4c When clicking on widget in dashboard, it should take to the correct visualization tab. 2014-02-10 19:38:23 +02:00
Arik Fraimovich
e0d46c3942 When clicking on widget in dashboard, it should take to the correct visualization tab. 2014-02-10 19:38:23 +02:00
Arik Fraimovich
e8c7f728a2 Merge pull request #86 from EverythingMe/fix_viz
Fixes and improvements (most related to visualizations)
2014-02-10 10:29:40 +02:00
Arik Fraimovich
5a2bed29aa Merge pull request #86 from EverythingMe/fix_viz
Fixes and improvements (most related to visualizations)
2014-02-10 10:29:40 +02:00
Arik Fraimovich
387ffbb0fc Performance improvements for chart rendering:
1. Don't redraw when adding or removing a single series, but redraw at the end.
2. Use $timeout to postpone high charts rendering until DOM is ready.
2014-02-10 10:05:56 +02:00
Arik Fraimovich
8fbcd0c34d Performance improvements for chart rendering:
1. Don't redraw when adding or removing a single series, but redraw at the end.
2. Use $timeout to postpone high charts rendering until DOM is ready.
2014-02-10 10:05:56 +02:00
Arik Fraimovich
d2d4f6186f Remove SERIES_TYPES from Visualization. 2014-02-10 09:55:49 +02:00
Arik Fraimovich
97df37536c Remove SERIES_TYPES from Visualization. 2014-02-10 09:55:49 +02:00
Arik Fraimovich
d5cd02cab3 Bring back logging level setting 2014-02-09 21:03:24 +02:00
Arik Fraimovich
373b9c6a97 Bring back logging level setting 2014-02-09 21:03:24 +02:00
Arik Fraimovich
d831710b0a Fix for high charts bug with stacked areas. 2014-02-09 20:42:01 +02:00
Arik Fraimovich
009726c62d Fix for high charts bug with stacked areas. 2014-02-09 20:42:01 +02:00
Arik Fraimovich
d5316b2c4d Make tooltip work for all chart types. 2014-02-09 20:28:37 +02:00
Arik Fraimovich
69c07a41e9 Make tooltip work for all chart types. 2014-02-09 20:28:37 +02:00
Arik Fraimovich
7c4bedf371 Add scatter plot type.
cc: @christophervalles
2014-02-09 20:17:29 +02:00
Arik Fraimovich
64afd62a1f Add scatter plot type.
cc: @christophervalles
2014-02-09 20:17:29 +02:00
Arik Fraimovich
7018ed28fb There is no bar chart type -- it's column. 2014-02-09 20:03:32 +02:00
Arik Fraimovich
4318468957 There is no bar chart type -- it's column. 2014-02-09 20:03:32 +02:00
Arik Fraimovich
7213e62937 After duplicating a query, put user back on table tab. 2014-02-09 20:02:58 +02:00
Arik Fraimovich
1af3fc1c96 After duplicating a query, put user back on table tab. 2014-02-09 20:02:58 +02:00
Arik Fraimovich
219ea98f33 Set description of default table visualization to "". 2014-02-09 20:02:38 +02:00
Arik Fraimovich
1e11f8032a Set description of default table visualization to "". 2014-02-09 20:02:38 +02:00
Arik Fraimovich
f6cbc36112 Set Visualization.description to nullable. 2014-02-09 19:38:41 +02:00
Arik Fraimovich
a1a7ca8a0a Set Visualization.description to nullable. 2014-02-09 19:38:41 +02:00
Arik Fraimovich
93bc54e275 Return query with visualizations when saving. 2014-02-09 19:38:24 +02:00
Arik Fraimovich
52758fa66e Return query with visualizations when saving. 2014-02-09 19:38:24 +02:00
Arik Fraimovich
44cd109ba3 Set default visualization description to ''. 2014-02-09 19:34:43 +02:00
Arik Fraimovich
fa43ff1365 Set default visualization description to ''. 2014-02-09 19:34:43 +02:00
Arik Fraimovich
482168f98e Merge pull request #84 from EverythingMe/refactor_flask
Big refactor: flask, peewee, tests, structure changes and more
2014-02-09 19:11:59 +02:00
Arik Fraimovich
bd15162fb7 Merge pull request #84 from EverythingMe/refactor_flask
Big refactor: flask, peewee, tests, structure changes and more
2014-02-09 19:11:59 +02:00
Arik Fraimovich
f9b9c7136e Remove coveralls.io integration as it's breaking builds. 2014-02-09 19:07:56 +02:00
Arik Fraimovich
cc980edc66 Remove coveralls.io integration as it's breaking builds. 2014-02-09 19:07:56 +02:00
Arik Fraimovich
84ec26f648 Tests for HMAC authentication. 2014-02-09 18:51:04 +02:00
Arik Fraimovich
7fd094ba39 Tests for HMAC authentication. 2014-02-09 18:51:04 +02:00
Arik Fraimovich
fcfe5da506 Add dev_requirements.txt file. 2014-02-09 17:37:47 +02:00
Arik Fraimovich
68ef489d8c Add dev_requirements.txt file. 2014-02-09 17:37:47 +02:00
Arik Fraimovich
1e4bdb367e Change coveralls badge to point at master branch 2014-02-09 17:37:37 +02:00
Arik Fraimovich
21ff1d7482 Change coveralls badge to point at master branch 2014-02-09 17:37:37 +02:00
Arik Fraimovich
d3ee55a971 Switch to Flask-Script. 2014-02-09 17:09:07 +02:00
Arik Fraimovich
669b1d9a63 Switch to Flask-Script. 2014-02-09 17:09:07 +02:00
Arik Fraimovich
3a967c5985 Move version information into python package. 2014-02-09 16:46:32 +02:00
Arik Fraimovich
29531a361c Move version information into python package. 2014-02-09 16:46:32 +02:00
Arik Fraimovich
92f5df4704 Improve visualizations migration 2014-02-09 16:40:39 +02:00
Arik Fraimovich
c40cf2e7e8 Improve visualizations migration 2014-02-09 16:40:39 +02:00
Arik Fraimovich
2e8789de3b Set automatic releases as 'prerelease'. 2014-02-09 15:20:58 +02:00
Arik Fraimovich
7bf391e772 Set automatic releases as 'prerelease'. 2014-02-09 15:20:58 +02:00
Arik Fraimovich
b7827f3eea Update visualizations migration. 2014-02-09 15:14:46 +02:00
Arik Fraimovich
fbb84af955 Update visualizations migration. 2014-02-09 15:14:46 +02:00
Arik Fraimovich
8c101a1bbf Update getting started instructions in the README. 2014-02-09 15:00:42 +02:00
Arik Fraimovich
d954eb63ef Update getting started instructions in the README. 2014-02-09 15:00:42 +02:00
Arik Fraimovich
ee216dbf64 Show query name in dashboard editor 2014-02-09 14:48:15 +02:00
Arik Fraimovich
1b14161535 Show query name in dashboard editor 2014-02-09 14:48:15 +02:00
Arik Fraimovich
54675117de Fix: bring back TABLE renderer to VisualizationRenderer. 2014-02-09 14:37:48 +02:00
Arik Fraimovich
bcf854604b Fix: bring back TABLE renderer to VisualizationRenderer. 2014-02-09 14:37:48 +02:00
Arik Fraimovich
30d5b46daf Fix: POST api/queries fields cleanup logic 2014-02-09 14:34:27 +02:00
Arik Fraimovich
f265d9174a Fix: POST api/queries fields cleanup logic 2014-02-09 14:34:27 +02:00
Arik Fraimovich
45ec489080 Fix: format_sql api call wasn't working. 2014-02-09 14:33:52 +02:00
Arik Fraimovich
970e0e2d04 Fix: format_sql api call wasn't working. 2014-02-09 14:33:52 +02:00
Arik Fraimovich
93fe613a9a Migratino to set Widget.type and Widget.query_id to nullables 2014-02-09 14:33:05 +02:00
Arik Fraimovich
9055865e1c Migratino to set Widget.type and Widget.query_id to nullables 2014-02-09 14:33:05 +02:00
Arik Fraimovich
704f2c176d Prefetching for widgets/visualizations/queries/query resutls when getting dashboard. 2014-02-08 21:16:36 +02:00
Arik Fraimovich
f9b6aca8e8 Prefetching for widgets/visualizations/queries/query resutls when getting dashboard. 2014-02-08 21:16:36 +02:00
Arik Fraimovich
d538134bb9 Bring back type to Widget definition. 2014-02-08 21:01:48 +02:00
Arik Fraimovich
d084b5a03c Bring back type to Widget definition. 2014-02-08 21:01:48 +02:00
Arik Fraimovich
6e38050ac4 Fix unicode representatino of Widget and Visualization models. 2014-02-08 21:01:21 +02:00
Arik Fraimovich
a6ab0ff2aa Fix unicode representatino of Widget and Visualization models. 2014-02-08 21:01:21 +02:00
Arik Fraimovich
f3c87ef313 Readme formatting 2014-02-06 21:27:43 +02:00
Arik Fraimovich
1bce924d83 Readme formatting 2014-02-06 21:27:43 +02:00
Arik Fraimovich
09a2136f02 Fix build status image link 2014-02-06 21:26:51 +02:00
Arik Fraimovich
f571e8ac6e Fix build status image link 2014-02-06 21:26:51 +02:00
Arik Fraimovich
5c7331d0a4 Coveralls badge 2014-02-06 21:25:18 +02:00
Arik Fraimovich
27bf2e642b Coveralls badge 2014-02-06 21:25:18 +02:00
Arik Fraimovich
187ea86c24 CirlceCI badge 2014-02-06 21:21:52 +02:00
Arik Fraimovich
d4ca903a07 CirlceCI badge 2014-02-06 21:21:52 +02:00
Arik Fraimovich
48639adc42 Create default visualization. 2014-02-06 21:12:02 +02:00
Arik Fraimovich
0f8bbdc9f2 Create default visualization. 2014-02-06 21:12:02 +02:00
Arik Fraimovich
509412dee6 Visualization API tests. 2014-02-06 21:02:14 +02:00
Arik Fraimovich
fb9f814b00 Visualization API tests. 2014-02-06 21:02:14 +02:00
Arik Fraimovich
44a95c4888 Use same database name in tests as CircleCI (until we add config for tests). 2014-02-06 21:02:13 +02:00
Arik Fraimovich
b4f88196dc Use same database name in tests as CircleCI (until we add config for tests). 2014-02-06 21:02:13 +02:00
Arik Fraimovich
0f3400a6b7 Update circle config to create settings.py file. 2014-02-06 21:02:13 +02:00
Arik Fraimovich
78e748548c Update circle config to create settings.py file. 2014-02-06 21:02:13 +02:00
Arik Fraimovich
a55bbc5e8c Tests for Query, Widget and Dashboard controllers. 2014-02-06 21:02:13 +02:00
Arik Fraimovich
199cddfbdb Tests for Query, Widget and Dashboard controllers. 2014-02-06 21:02:13 +02:00
Arik Fraimovich
8dad478a19 Factories for all models for tests. 2014-02-06 21:02:13 +02:00
Arik Fraimovich
c0ca602017 Factories for all models for tests. 2014-02-06 21:02:13 +02:00
Arik Fraimovich
31208c2af1 Update circle config to run python tests & cache packages. 2014-02-06 21:02:13 +02:00
Arik Fraimovich
3471b9853e Update circle config to run python tests & cache packages. 2014-02-06 21:02:13 +02:00
Arik Fraimovich
11f57b02e6 Migrations folder 2014-02-06 21:02:13 +02:00
Arik Fraimovich
6765d7d89f Migrations folder 2014-02-06 21:02:13 +02:00
Arik Fraimovich
86a99e2337 Fix: bring back support for MySQL 2014-02-06 21:02:13 +02:00
Arik Fraimovich
250aa17e63 Fix: bring back support for MySQL 2014-02-06 21:02:13 +02:00
Arik Fraimovich
3470d38d7c Visualization handlers. 2014-02-06 20:56:00 +02:00
Arik Fraimovich
2942d20ac3 Visualization handlers. 2014-02-06 20:56:00 +02:00
Arik Fraimovich
e6959e75f9 Add Visualization model. 2014-02-06 20:56:00 +02:00
Arik Fraimovich
d32799b2dc Add Visualization model. 2014-02-06 20:56:00 +02:00
Arik Fraimovich
1e4f70747b More tests (Dasboard API). 2014-02-06 20:56:00 +02:00
Arik Fraimovich
ff62fbbcf4 More tests (Dasboard API). 2014-02-06 20:56:00 +02:00
Arik Fraimovich
6ee3bc099d Fix: make sure all dashboard slug are unique 2014-02-06 20:56:00 +02:00
Arik Fraimovich
69ec362a8d Fix: make sure all dashboard slug are unique 2014-02-06 20:56:00 +02:00
Arik Fraimovich
13d44ee3e8 Create db task instead of SQL tables. 2014-02-06 20:56:00 +02:00
Arik Fraimovich
41d00543d0 Create db task instead of SQL tables. 2014-02-06 20:56:00 +02:00
Arik Fraimovich
fc9bffddbd Updated requirements.txt (flask-peewee). 2014-02-06 20:56:00 +02:00
Arik Fraimovich
f890e590e1 Updated requirements.txt (flask-peewee). 2014-02-06 20:56:00 +02:00
Arik Fraimovich
64d573e28e Add created_at to all models. (#10) 2014-02-06 20:56:00 +02:00
Arik Fraimovich
2aec982577 Add created_at to all models. (#10) 2014-02-06 20:56:00 +02:00
Arik Fraimovich
b2781a1ea6 Set needed fields as indexed. 2014-02-06 20:56:00 +02:00
Arik Fraimovich
b66d5daad0 Set needed fields as indexed. 2014-02-06 20:56:00 +02:00
Arik Fraimovich
04cdc75841 Remove MAX_CONNECTIONS from example settings 2014-02-06 20:56:00 +02:00
Arik Fraimovich
6ff07b99dc Remove MAX_CONNECTIONS from example settings 2014-02-06 20:56:00 +02:00
Arik Fraimovich
bb7bb40e76 Use peewee in data.Manager. 2014-02-06 20:56:00 +02:00
Arik Fraimovich
1586860e15 Use peewee in data.Manager. 2014-02-06 20:56:00 +02:00
Arik Fraimovich
a4055364e4 Remove Django from requirements.txt 2014-02-06 20:56:00 +02:00
Arik Fraimovich
99dac8f6fd Remove Django from requirements.txt 2014-02-06 20:56:00 +02:00
Arik Fraimovich
71da6e4528 Remove Django from config 2014-02-06 20:56:00 +02:00
Arik Fraimovich
5fb910b886 Remove Django from config 2014-02-06 20:56:00 +02:00
Arik Fraimovich
5c113284e2 Remove Django models 2014-02-06 20:56:00 +02:00
Arik Fraimovich
fb826ec838 Remove Django models 2014-02-06 20:56:00 +02:00
Arik Fraimovich
b2cb3bcf1d peewee based models 2014-02-06 20:55:14 +02:00
Arik Fraimovich
5198cc17d3 peewee based models 2014-02-06 20:55:14 +02:00
Arik Fraimovich
1821f90664 make test command 2014-02-06 20:55:14 +02:00
Arik Fraimovich
261ecfcb11 make test command 2014-02-06 20:55:14 +02:00
Arik Fraimovich
a66a8982ee Exclude settings.py from coverage report. 2014-02-06 20:55:14 +02:00
Arik Fraimovich
6582bce0d3 Exclude settings.py from coverage report. 2014-02-06 20:55:14 +02:00
Arik Fraimovich
0a83a1f168 Coverage & coveralls.io support 2014-02-06 20:55:14 +02:00
Arik Fraimovich
db91ca82c1 Coverage & coveralls.io support 2014-02-06 20:55:14 +02:00
Arik Fraimovich
e97d3172eb Initial version of tests. 2014-02-06 20:55:14 +02:00
Arik Fraimovich
cb7fbc16b0 Initial version of tests. 2014-02-06 20:55:14 +02:00
Arik Fraimovich
7c838bf54e Add .coverage file to gitignore 2014-02-06 20:55:14 +02:00
Arik Fraimovich
c6c639f16f Add .coverage file to gitignore 2014-02-06 20:55:14 +02:00
Arik Fraimovich
4a5c5143b3 Cleanup manage.py. 2014-02-06 20:55:14 +02:00
Arik Fraimovich
cb5968bc5f Cleanup manage.py. 2014-02-06 20:55:14 +02:00
Arik Fraimovich
c02afbb4f9 Remove commented out code. 2014-02-06 20:55:14 +02:00
Arik Fraimovich
693b25efc5 Remove commented out code. 2014-02-06 20:55:14 +02:00
Arik Fraimovich
b647bc9b41 This version of GoogleAuth has no force_auth_on_every_request option. 2014-02-06 20:55:14 +02:00
Arik Fraimovich
6eddaeda61 This version of GoogleAuth has no force_auth_on_every_request option. 2014-02-06 20:55:14 +02:00
Arik Fraimovich
c36b90db0f Remove debug print. 2014-02-06 20:55:13 +02:00
Arik Fraimovich
349bfa9139 Remove debug print. 2014-02-06 20:55:13 +02:00
Arik Fraimovich
ddf3959d4d Real HAMC authentication 2014-02-06 20:55:13 +02:00
Arik Fraimovich
b0f75678ee Real HAMC authentication 2014-02-06 20:55:13 +02:00
Arik Fraimovich
b5f88c199c Add API authentication support 2014-02-06 20:55:13 +02:00
Arik Fraimovich
0a0f7d7365 Add API authentication support 2014-02-06 20:55:13 +02:00
Arik Fraimovich
a0586457da Make manage.py executable. 2014-02-06 20:55:13 +02:00
Arik Fraimovich
6d1ff98bda Make manage.py executable. 2014-02-06 20:55:13 +02:00
Arik Fraimovich
288d1f7e5a Fix import issues (renamed api to controllers). 2014-02-06 20:55:13 +02:00
Arik Fraimovich
065324d256 Fix import issues (renamed api to controllers). 2014-02-06 20:55:13 +02:00
Arik Fraimovich
38c28bccdb Add server starting option to manage.py. 2014-02-06 20:55:13 +02:00
Arik Fraimovich
69f7c3417e Add server starting option to manage.py. 2014-02-06 20:55:13 +02:00
Arik Fraimovich
e8b0178ae4 Update requirements.txt. 2014-02-06 20:55:13 +02:00
Arik Fraimovich
806f57c627 Update requirements.txt. 2014-02-06 20:55:13 +02:00
Arik Fraimovich
9eeebf93fa Remove code duplications 2014-02-06 20:55:13 +02:00
Arik Fraimovich
e4c7844cae Remove code duplications 2014-02-06 20:55:13 +02:00
Arik Fraimovich
c1ccf02ff9 Move manage cli into top level 2014-02-06 20:55:13 +02:00
Arik Fraimovich
6ebfa16740 Move manage cli into top level 2014-02-06 20:55:13 +02:00
Arik Fraimovich
6533aa2826 Cleanup the api module 2014-02-06 20:55:13 +02:00
Arik Fraimovich
43cfdb8727 Cleanup the api module 2014-02-06 20:55:13 +02:00
Arik Fraimovich
ece1a51530 Replace Tornado with Flask 2014-02-06 20:55:13 +02:00
Arik Fraimovich
b31c5be70e Replace Tornado with Flask 2014-02-06 20:55:13 +02:00
Arik Fraimovich
1d4a407161 Rename rd_service to redash. 2014-02-06 20:51:51 +02:00
Arik Fraimovich
d84d047470 Rename rd_service to redash. 2014-02-06 20:51:51 +02:00
Arik Fraimovich
9f5678c711 Merge pull request #83 from EverythingMe/viz
Visualization Followups + workers bugfix
2014-02-06 19:46:28 +02:00
Arik Fraimovich
42a0659012 Merge pull request #83 from EverythingMe/viz
Visualization Followups + workers bugfix
2014-02-06 19:46:28 +02:00
Amir Nissim
819ac84c2a fix issue where start_workers failed when settings.CONNECTION_ADAPTER does not exist 2014-02-06 16:40:58 +02:00
Amir Nissim
6386f0f9aa fix issue where start_workers failed when settings.CONNECTION_ADAPTER does not exist 2014-02-06 16:40:58 +02:00
Amir Nissim
fe90f3703e Fixes #80:
* Create default 'Table' visualization for all queries
 * remove 'Table' type when creating new visualization
 * Set type as the default visualization name (instead of the query name)
 * Remove description field and advanced mode
 * Remove section for adding new visualization in new widget dialog
2014-02-06 16:35:29 +02:00
Amir Nissim
9aaf17d478 Fixes #80:
* Create default 'Table' visualization for all queries
 * remove 'Table' type when creating new visualization
 * Set type as the default visualization name (instead of the query name)
 * Remove description field and advanced mode
 * Remove section for adding new visualization in new widget dialog
2014-02-06 16:35:29 +02:00
Arik Fraimovich
0e956a605f Merge pull request #79 from EverythingMe/viz
fix migration to set 'bars' as default
2014-02-05 17:55:23 +02:00
Arik Fraimovich
1f908f9040 Merge pull request #79 from EverythingMe/viz
fix migration to set 'bars' as default
2014-02-05 17:55:23 +02:00
Amir Nissim
32210d89f8 fix migration to set 'bars' as default 2014-02-05 17:54:12 +02:00
Amir Nissim
b51ef059f5 fix migration to set 'bars' as default 2014-02-05 17:54:12 +02:00
Arik Fraimovich
18a77c995f Exclude venv dir from the release package 2014-02-05 09:48:11 +02:00
Arik Fraimovich
a9e135c94f Exclude venv dir from the release package 2014-02-05 09:48:11 +02:00
Arik Fraimovich
9f36234c52 Add query_id back to widgets in tables.sql until we remove it from Model 2014-02-05 09:47:51 +02:00
Arik Fraimovich
212ade2da7 Add query_id back to widgets in tables.sql until we remove it from Model 2014-02-05 09:47:51 +02:00
Arik Fraimovich
0b74d9e998 Merge pull request #76 from EverythingMe/fix_75
Fix #75: Large numbers shown as NaN/NaN/NaN NaN:NaN
2014-02-04 23:45:01 -08:00
Arik Fraimovich
54d545094f Remove backward compatability workaround (fixes #75) 2014-02-05 09:41:03 +02:00
Arik Fraimovich
c239c476af Merge pull request #74 from EverythingMe/update_readme
Readme update (added reference to mailing list & IRC channel)
2014-02-04 07:37:04 -08:00
Arik Fraimovich
a382a0cd44 Small fix to README. 2014-02-04 17:02:24 +02:00
Arik Fraimovich
0fee59a6ed Merge pull request #73 from EverythingMe/viz
Visualization Support
2014-02-04 07:01:40 -08:00
Arik Fraimovich
e18226d108 Readme update (added reference to mailing list & IRC channel) 2014-02-04 16:58:36 +02:00
Amir Nissim
b079952491 version bump 0.2 2014-02-04 16:56:35 +02:00
Amir Nissim
d2da71c22a migrating Widgets to Visualizations 2014-02-04 16:11:48 +02:00
Amir Nissim
9eb2a6a535 Visualization.name length to 255 (should match Query.name length) 2014-02-04 15:16:07 +02:00
Amir Nissim
dd5ef7ec72 add Visualization and SERIES types 2014-02-03 16:35:16 +02:00
Amir Nissim
c2cbcd3727 Dashboard visualizations 2014-02-03 16:12:29 +02:00
Amir Nissim
5c7baf9e05 QueryFiddle: Live chart type editing 2014-02-03 15:01:41 +02:00
Amir Nissim
e5f5e18ecc Live visualization config POC (title only) 2014-02-02 18:20:18 +02:00
Amir Nissim
dae30037b6 delete visualizations 2014-02-02 13:23:01 +02:00
Amir Nissim
30eba3bfae edit and create visualizations 2014-02-02 13:23:01 +02:00
Amir Nissim
77c0486f8c create Visualization cont. 2014-02-02 13:23:01 +02:00
Amir Nissim
e00475520a create Visualization [WIP] 2014-02-02 13:23:01 +02:00
Amir Nissim
bf90a6247e Visualization models 2014-02-02 13:23:01 +02:00
Amir Nissim
3185cc041a Visualization UI:
* queryfiddle page
 * new widget form
2014-02-02 13:23:01 +02:00
Arik Fraimovich
f64b9084f5 Merge pull request #69 from ekampf/feature/mysql
MySQL Support
2014-01-30 06:20:58 -08:00
Eran Kampf
dc09561f30 Fixed MySQL Runner 2014-01-30 16:15:03 +02:00
Eran Kampf
e154cbe1ba Redshift shouldn't be here 2014-01-30 16:03:58 +02:00
Eran Kampf
1f9ac49e27 Removed unnecessary logging 2014-01-30 11:28:49 +02:00
Eran Kampf
a7de923cea Returned redshift code 2014-01-30 11:28:11 +02:00
Eran Kampf
a75430106e Merge branch 'refs/heads/master' into feature/mysql 2014-01-30 11:21:33 +02:00
Eran Kampf
bc816100a0 Removed unecessary logging 2014-01-29 21:02:12 +02:00
Eran Kampf
33de209497 Separated query runners to diff files 2014-01-29 20:57:09 +02:00
Eran Kampf
8401e25504 Include MySQL example 2014-01-29 19:30:59 +02:00
Eran Kampf
db14c695e6 MySQL query runner 2014-01-29 19:02:21 +02:00
Arik Fraimovich
7a61b2ec80 Merge pull request #66 from EverythingMe/bug-9
Dashboard: update layout editor when adding/removing widgets. fixes #9
2014-01-26 07:28:54 -08:00
Arik Fraimovich
1e16e58f37 Fix to upload script 2014-01-26 17:04:12 +02:00
Arik Fraimovich
e84ca44178 Use only filename; without path 2014-01-26 16:59:59 +02:00
Arik Fraimovich
644c03503b More explicit python version 2014-01-26 16:54:32 +02:00
Arik Fraimovich
d88288302a Set Python version 2014-01-26 16:51:07 +02:00
Arik Fraimovich
42e0797b5b Install requests in CircleCI 2014-01-26 16:34:31 +02:00
Arik Fraimovich
8826d41922 Cirlce: upload file to GitHub when done. 2014-01-26 16:30:16 +02:00
Arik Fraimovich
26d2d6f403 Add version to gzip file 2014-01-26 16:26:46 +02:00
Arik Fraimovich
438386de5d Upload version to github script 2014-01-26 16:26:32 +02:00
Arik Fraimovich
99197396f1 Merge pull request #67 from EverythingMe/circleci
CircleCI configuration & makefile.
2014-01-25 23:28:15 -08:00
Arik Fraimovich
3770463499 CircleCI configuration & makefile. 2014-01-26 09:23:39 +02:00
Amir Nissim
d3979a5a5a Dashboard: update layout editor when adding/removing widgets. fixes #9 2014-01-23 18:12:44 +02:00
Arik Fraimovich
e5bba73ea8 Merge pull request #65 from EverythingMe/bug-33
QueryFiddle: reset sorting when executing query. fixes #33
2014-01-23 05:35:34 -08:00
Arik Fraimovich
cd925d1896 Merge pull request #56 from EverythingMe/feature-queryform
queryFiddle: reset form state if changes have been reverted to original values (no ngForm)
2014-01-23 05:35:11 -08:00
Amir Nissim
82fe6f6fa7 QueryFiddle: reset sorting when executing query. fixes #33 2014-01-23 14:57:38 +02:00
Arik Fraimovich
c05cf29a37 Pass the widget options object as is. 2014-01-22 09:27:01 +02:00
Arik Fraimovich
160f491cc5 Option to control chart type 2014-01-22 08:56:54 +02:00
Amir Nissim
d652013572 queryFiddle: reset form state if changes have been reverted to original values (no ngForm) 2014-01-16 16:10:12 +02:00
Arik Fraimovich
c970503f61 Merge pull request #55 from EverythingMe/feature-queryform
use ngForm in queryFiddle page for detecting pristine and dirty states
2014-01-16 04:07:12 -08:00
Amir Nissim
5218f4f182 use ngForm in queryFiddle page for detecting pristine and dirty states 2014-01-16 13:44:13 +02:00
Amir Nissim
9230a77f96 edit-in-place: set ng-class inside directive 2014-01-15 17:02:23 +02:00
Arik Fraimovich
f8cc78eca5 Show link button on dashboard 2014-01-15 15:05:19 +02:00
Arik Fraimovich
a9f9af3cb8 Merge pull request #53 from EverythingMe/feature_description
Updates to edit-in-place directive & showing description in dashboard
2014-01-15 04:42:36 -08:00
Arik Fraimovich
ec71621d93 Make margin margin after description smaller 2014-01-15 14:35:56 +02:00
Amir Nissim
52376993df edit-in-place: editable attr 2014-01-15 13:59:11 +02:00
Arik Fraimovich
74a5253c69 Show description in dashboard. 2014-01-15 11:38:38 +02:00
Arik Fraimovich
2aebc023d1 Show edit-in-place only if the user can edit. 2014-01-15 11:38:30 +02:00
Arik Fraimovich
8dfd453381 Change look of edit in place text area. 2014-01-15 11:15:35 +02:00
Arik Fraimovich
899cb9d4cf Merge pull request #52 from EverythingMe/dev
Upgrade angular + editing query description
2014-01-14 11:33:38 -08:00
Amir Nissim
e34021c0be Add ability to edit query description (FED #22) 2014-01-14 17:10:55 +02:00
Arik Fraimovich
041d5da13b Fix: default predicate should be undefined and not empty string 2014-01-14 17:10:55 +02:00
Amir Nissim
d421848795 upgrade: angular v1.2.7 2014-01-14 17:10:55 +02:00
Arik Fraimovich
96185e9c60 Add semicolon 2014-01-14 09:32:23 +02:00
Arik Fraimovich
5bd8ef2e5d Fix: homepage was skipping dashboards in other group 2014-01-14 09:24:17 +02:00
Arik Fraimovich
3dae7e9523 use currentUser.canEdit in more places 2014-01-14 09:11:19 +02:00
Arik Fraimovich
7d4660173e Show warning of leaving the page only if the user can edit the query. 2014-01-14 09:03:04 +02:00
Arik Fraimovich
612c6a331b Only unbind save shortcut if we're actually leaving the page. 2014-01-14 09:02:10 +02:00
Arik Fraimovich
0c852a145e Only save query if the user can edit it. 2014-01-14 09:01:42 +02:00
Arik Fraimovich
ed2d3a27e7 Add canEdit function to user object.
Checks if currentUser included in the user string the provided object. The reason I check inclusion and not equality, is to support scenario of multiple users.
2014-01-14 09:01:20 +02:00
Arik Fraimovich
de162817af Add the option to specify analytics code to inject into the template. 2014-01-13 16:52:35 +02:00
Arik Fraimovich
fd1acd6533 Save query when pressing Cmd+S. 2014-01-11 20:04:27 +02:00
Arik Fraimovich
7282f61133 Fix: don't show save warning, when switching tabs. 2014-01-11 20:04:12 +02:00
Arik Fraimovich
0687d9ed98 Merge pull request #48 from EverythingMe/feature_query_api_key
Feature: allow downloading CSV of a query by using an API key
2014-01-04 02:00:15 -08:00
Arik Fraimovich
e45a3ebdb4 Allow downloading CSV for unauthenticated users with api_key. 2014-01-04 11:53:45 +02:00
Arik Fraimovich
b72f9f054d Allow downloading CSV by query id and not just query_result id. 2014-01-04 11:21:52 +02:00
Arik Fraimovich
92b9fb60e9 Add api_key field to queries. 2014-01-04 11:09:13 +02:00
Arik Fraimovich
08951ab515 Add BaseAuthenticatedHandler and move authentication logic there. 2014-01-04 10:55:40 +02:00
Arik Fraimovich
c2d2bd0ea1 Fix cookbook path 2014-01-04 10:52:21 +02:00
Arik Fraimovich
ff6204c98e Move vagrant related files to top level 2014-01-04 10:51:05 +02:00
Timor Raiman
c08831ca13 In Vagrantfile, support skiping tarball download, and graft the current development tree in stead 2014-01-04 10:51:04 +02:00
Timor Raiman
c8ef72e4d2 Correct postgresql encrypted vs cleartext passwords 2014-01-04 10:51:04 +02:00
Timor Raiman
b1bd52423a Use md5 digest of readable pg password postgres user 2014-01-04 10:51:04 +02:00
Timor Raiman
4b980b8076 Force postgresql::server in Vagrant 2014-01-04 10:51:04 +02:00
Timor Raiman
63baa20403 Improve Vagrantfile 2014-01-04 10:51:04 +02:00
Timor Raiman
612aca217c Code review by Yoni 2014-01-04 10:51:04 +02:00
Timor Raiman
92b56c99a3 Remove chef cookbooks (migrated to separate repo) 2014-01-04 10:51:04 +02:00
Timor Raiman
349b18d63a Cleanup 2014-01-04 10:51:04 +02:00
Timor Raiman
11d331c051 Still hitting the encoding conversion error 2014-01-04 10:51:04 +02:00
Timor Raiman
63851b16af Add .DS_Store to .gitignore 2014-01-04 10:51:04 +02:00
Timor
4384eed09f add vanila vagrant configuration 2014-01-04 10:51:04 +02:00
Arik Fraimovich
e746805eaa Merge pull request #47 from EverythingMe/fed-issue1
FED issue #1 [r=arikfr]
2013-12-31 01:05:04 -08:00
Amir Nissim
6c480178fe Show confirm box, when trying to leave the page before saving the query (FED #1) 2013-12-30 16:34:48 +02:00
Amir Nissim
7e94cc7ff8 Show indication when query has unsaved changes (FED #1) 2013-12-30 15:11:49 +02:00
Amir Nissim
db20eeb555 Show error notification when saving a query fails (FED #1) 2013-12-30 14:32:07 +02:00
Amir Nissim
9794f12a9b harcode dependencies 2013-12-29 18:25:50 +02:00
Arik Fraimovich
9af88076e6 Limit page title size 2013-12-26 14:09:59 +02:00
Arik Fraimovich
290ae85128 You can't have dashes in object properties. Fixes #42 2013-12-23 21:59:01 +02:00
Arik Fraimovich
5c78760649 Prevent from setting a blank query title. Fixes #34 2013-12-23 21:56:01 +02:00
Arik Fraimovich
3cb8365ef3 Escape % in column names. Fixes #42 2013-12-23 21:33:11 +02:00
Arik Fraimovich
38e95a7f07 Dashboard menu has sub-menus now 2013-12-23 21:23:52 +02:00
Arik Fraimovich
6d392b1c91 having values ordered by Y, messes up the data so removing this 2013-12-22 17:23:39 +02:00
Arik Fraimovich
a8f7028c22 Merge branch 'bug_workers_dying' 2013-12-22 17:05:44 +02:00
Arik Fraimovich
35c7366b96 Fix: need to make sure that each category has a value 2013-12-22 17:05:40 +02:00
Arik Fraimovich
137bd43821 Add afork to mitigate issues of mixing threading and forking 2013-12-18 09:40:48 +02:00
Arik Fraimovich
08c9a0630d Take only needed vals for connection params 2013-12-17 12:46:06 +02:00
Arik Fraimovich
abdc9f75cc More places where I need to use redis_connection 2013-12-17 12:19:50 +02:00
Arik Fraimovich
ecaae1b934 Run annotated queries. 2013-12-17 12:03:10 +02:00
Arik Fraimovich
fc06f8c88e Change Job to use redis connection instead of data manager & use own redis connection in forked process. 2013-12-17 12:02:58 +02:00
Arik Fraimovich
0fc62f07cc Set proctitle for worker 2013-12-16 18:52:30 +02:00
Arik Fraimovich
4afb12669a Add support for refreshing a query once a week 2013-12-13 18:46:14 +02:00
Arik Fraimovich
030864b72b Humanize query runtime 2013-12-08 15:44:46 +02:00
Arik Fraimovich
0bf6e39c66 Improvements to queries page: (#6)
1. Search (client side).
2. Stats about queries.
3. Pagination.
2013-12-08 15:26:35 +02:00
Arik Fraimovich
0d6613b998 Return query stats (runtime and such) in API. 2013-12-08 15:25:44 +02:00
Arik Fraimovich
99875ff746 Bring back browser notifications (#1) 2013-12-07 14:18:39 +02:00
Arik Fraimovich
05bb0fcf43 Support for non date time x values. 2013-12-07 13:14:02 +02:00
Arik Fraimovich
bce60758e9 No more using connection pool in DataManager, as it used accross processes 2013-12-06 20:56:08 +02:00
Arik Fraimovich
7b85e78636 Add log_level to settings_example 2013-12-06 17:52:13 +02:00
Arik Fraimovich
4fa6ef828c More readable status 2013-12-06 15:50:02 +02:00
Arik Fraimovich
08ca3431ac Jobs done counter was updated in the wrong place 2013-12-06 15:32:36 +02:00
Arik Fraimovich
cfcc21b1cb Improved system status. 2013-12-06 15:14:39 +02:00
Arik Fraimovich
4ea54ef5ce Instead of killing the process, send SIGINT and cancel query on interupt. 2013-12-01 11:52:14 +02:00
Arik Fraimovich
fc65920462 Show cancel button in UI. 2013-11-29 21:30:03 +02:00
Arik Fraimovich
88a7ff62af Job: when cancelling send SIGKILL instead of SIGINT. 2013-11-29 21:30:03 +02:00
Arik Fraimovich
1c75ae08bc Job: support for old job that had no process id. 2013-11-29 21:30:03 +02:00
Arik Fraimovich
5ea63534f7 Naive implementation of job cancel 2013-11-29 21:30:03 +02:00
Arik Fraimovich
95805169dc Store job process id 2013-11-29 21:30:03 +02:00
Arik Fraimovich
bcd018d8de If worker forked process didn't exit cleanly, update job 2013-11-29 21:30:02 +02:00
Arik Fraimovich
34627f5e60 Don't use connection pool in query runner 2013-11-29 21:30:02 +02:00
Arik Fraimovich
0ae1692f99 Fix: child process wasn't exiting 2013-11-29 21:30:02 +02:00
Arik Fraimovich
6becbee27a Run query in forked process 2013-11-29 21:30:02 +02:00
Arik Fraimovich
78633b06de Log exception when refresh queries fails 2013-11-29 21:30:02 +02:00
Arik Fraimovich
78bf265d7a Fix: use String ctor function instead of toString to handle nulls 2013-11-29 21:30:02 +02:00
Arik Fraimovich
1690a25262 Fix: use String ctor function instead of toString to handle nulls 2013-11-24 16:06:01 +02:00
Arik Fraimovich
f76f284ce2 Add support for displaying cohorts in dashbaords 2013-11-17 13:41:54 +02:00
Arik Fraimovich
5080b754d4 Merge pull request #36 from shayel/master
Fixed installation dependencies, instructions
2013-11-07 10:09:23 -08:00
Arik Fraimovich
bdb97182e4 Fixes #38: getChartData returns sorted data by x 2013-11-06 15:24:41 +02:00
Arik Fraimovich
c668ed8a2b Show shared tooltip & percentage 2013-11-06 15:03:08 +02:00
Arik Fraimovich
10a1350bb3 Support multiple series on one row 2013-11-05 13:50:27 +02:00
Arik Fraimovich
c10fb2916f Fix: when series name was 0 (the number) it would use the y name instead 2013-11-05 13:27:28 +02:00
Arik Fraimovich
91185abb4c Update title to use | instead of : 2013-11-04 17:11:45 +02:00
Arik Fraimovich
e402b06c6c Make qr take redis connection params from the general redis connection 2013-11-04 15:52:48 +02:00
Shay Elkin
6a09adf11c Take specific grunt commit (that fixes gh-886) 2013-11-02 15:15:31 +02:00
Shay Elkin
ba7ba751fd Fixed installation dependencies, instructions
* rd_ui/package.json:
  * Add missing bower, grunt-cli dependencies
  * Take grunt from HEAD, as 0.4.1 has broken dependency: 08a3af53ff

* README.md:
  * Update instructions
2013-10-31 17:19:13 +02:00
Arik Fraimovich
ba3c02c912 Update README.md 2013-10-31 12:22:45 +02:00
Arik Fraimovich
6f6bd256b5 Update README.md 2013-10-30 18:25:17 +02:00
Arik Fraimovich
c8d1780ee8 Fix: columns with multiple spaces were not showing correctly 2013-10-30 17:45:26 +02:00
Arik Fraimovich
31e904c21a Fix: move utf deocding to proper place 2013-10-30 17:38:05 +02:00
Arik Fraimovich
6773488644 Fix: when query had unicode characters it was failling to execute 2013-10-30 17:11:00 +02:00
Arik Fraimovich
84b0d52510 Don't send query result when saving a query 2013-10-30 16:51:08 +02:00
Arik Fraimovich
db9aa4bc38 Fix #18: don't retrieve query results when already have them & ttl = -1. 2013-10-30 16:43:24 +02:00
Arik Fraimovich
04e1534001 Fix: stop sending latest_query_data back to the server. Fixes #31 2013-10-30 16:43:24 +02:00
Arik Fraimovich
74d4928fb0 Add getting started instructions. 2013-10-30 13:10:16 +02:00
Arik Fraimovich
d31d422eb0 Add screenshots to README. 2013-10-30 12:37:33 +02:00
Arik Fraimovich
eb5b62b670 Add dist folder to gitignore 2013-10-30 12:33:36 +02:00
Arik Fraimovich
53ef4fee1e Update README.md 2013-10-30 12:23:49 +02:00
Arik Fraimovich
b3cdc4f5fc Add link to demo instance. 2013-10-30 12:23:16 +02:00
Arik Fraimovich
63abb61248 Merge pull request #35 from amirnissim/patch-1
Update README.md
2013-10-30 01:13:07 -07:00
Amir Nissim
59e16866fb Update README.md
fixed broken Tornado link
2013-10-30 10:08:22 +02:00
Arik Fraimovich
9fc36bd6fa Group dashboards by category. 2013-10-29 19:08:11 +02:00
Arik Fraimovich
4051fae33b Enable cohorts to all users 2013-10-29 09:13:07 +02:00
Arik Fraimovich
b014dadfe3 Fix numbers format in grid. 2013-10-28 22:01:18 +02:00
Arik Fraimovich
900b084156 Fix: sorting on number/dates columns was wrong 2013-10-28 21:52:21 +02:00
Arik Fraimovich
fa96c94085 Move cookie secret to settings. #7 2013-10-28 19:48:20 +02:00
Arik Fraimovich
bd1d287c87 Fix use min configuration not to depend on the bower_components directory in dist. 2013-10-28 19:34:51 +02:00
Arik Fraimovich
b74f7e4eac Add resolutions to bower.json. 2013-10-28 18:24:41 +02:00
Arik Fraimovich
7a57132c1c updated roadmap 2013-10-28 16:51:49 +02:00
Arik Fraimovich
46c2367e50 README: fix link to new issue. 2013-10-28 15:23:10 +02:00
Arik Fraimovich
7378f85297 Link to the license file in README. 2013-10-28 15:21:03 +02:00
403 changed files with 43916 additions and 5517 deletions

3
.bowerrc Normal file
View File

@@ -0,0 +1,3 @@
{
"directory": "rd_ui/app/bower_components"
}

5
.coveragerc Normal file
View File

@@ -0,0 +1,5 @@
[report]
omit =
*/settings.py
*/python?.?/*
*/site-packages/nose/*

4
.dockerignore Normal file
View File

@@ -0,0 +1,4 @@
rd_ui/.tmp/
rd_ui/node_modules/
.git/
.vagrant/

5
.env.example Normal file
View File

@@ -0,0 +1,5 @@
REDASH_STATIC_ASSETS_PATH="../rd_ui/app/"
REDASH_LOG_LEVEL="INFO"
REDASH_REDIS_URL=redis://localhost:6379/1
REDASH_DATABASE_URL="postgresql://redash"
REDASH_COOKIE_SECRET=veryverysecret

24
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,24 @@
Welcome to Redash's GitHub repo! 👋🎉
Do you need help or have a question? Checkout the Support category in our discussion forum: https://discuss.redash.io/c/support.
Got an idea for a new feature? Check if it isn't on the roadmap already: http://bit.ly/redash-roadmap and start a new discussion in the features category: https://discuss.redash.io/c/feature-requests 🌟.
Found a bug? Please fill out the sections below... thank you 👍
### Issue Summary
A summary of the issue and the browser/OS environment in which it occurs.
### Steps to Reproduce
1. This is the first step
2. This is the second step, etc.
Any other info e.g. Why do you consider this to be a bug? What did you expect to happen instead?
### Technical details:
* Redash Version:
* Browser/OS:
* How did you install Redash:

23
.gitignore vendored
View File

@@ -1,10 +1,29 @@
.coveralls.yml
.idea
*.pyc
rd_service/settings.py
.coverage
rd_ui/dist
.DS_Store
celerybeat-schedule*
.#*
\#*#
*~
_build
# Vagrant related
.vagrant
Berksfile.lock
rd_service/dump.rdb
redash/dump.rdb
.env
.ruby-version
venv
dump.rdb
# Docker related
docker-compose.yml
node_modules
.tmp
.sass-cache
rd_ui/app/bower_components

2
.landscape.yaml Normal file
View File

@@ -0,0 +1,2 @@
ignore-paths:
- migrations

View File

@@ -1,3 +0,0 @@
cookbook 'apt'
cookbook 'postgresql'
cookbook 'redash', git: 'git@github.com:EverythingMe/chef-redash.git'

79
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,79 @@
# Contributing Guide
Thank you for taking the time to contribute! :tada::+1:
The following is a set of guidelines for contributing to Redash. These are guidelines, not rules, please use your best judgement and feel free to propose changes to this document in a pull request.
## Quick Links:
- [Feature Roadmap](https://trello.com/b/b2LUHU7A/re-dash-roadmap)
- [Feature Requests](https://discuss.redash.io/c/feature-requests)
- [Gitter Chat](https://gitter.im/getredash/redash) or [Slack](https://slack.redash.io)
- [Documentation](http://docs.redash.io)
- [Blog](http://blog.redash.io/)
- [Twitter](https://twitter.com/getredash)
---
:star: If you already here and love the project, please make sure to press the Star button. :star:
---
## Table of Contents
[How can I contribute?](#how-can-i-contribute)
- [Reporting Bugs](#reporting-bugs)
- [Suggesting Enhancements / Feature Requests](#suggesting-enhancements--feature-requests)
- [Pull Requests](#pull-requests)
- [Documentation](#documentation)
- Design?
[Addtional Notes](#additional-notes)
- [Release Method](#release-method)
- [Code of Conduct](#code-of-conduct)
## How can I contribute?
### Reporting Bugs
When creating a new bug report, please make sure to:
- Search for existing issues first. If you find a previous report of your issue, please update the existing issue with additional information instead of creating a new one.
- If you are not sure if your issue is really a bug or just some configuration/setup problem, please start a discussion in [the support forum](https://discuss.redash.io/c/support) first. Unless you can provide clear steps to reproduce, it's probably better to start with a thread in the forum and later to open an issue.
- If you still decide to open an issue, please review the template and guidelines and include as much details as possible.
### Suggesting Enhancements / Feature Requests
If you would like to suggest an enchancement or ask for a new feature:
- Please check [the roadmap](https://trello.com/b/b2LUHU7A/re-dash-roadmap) for existing Trello card for what you want to suggest/ask. If there is, feel free to upvote it to signal interest or add your comments.
- If there is no existing card, open a thread in [the forum](https://discuss.redash.io/c/feature-requests) to start a discussion about what you want to suggest. Try to provide as much details and context as possible and include information about *the problem you want to solve* rather only *your proposed solution*.
### Pull Requests
- **Code contributions are welcomed**. For big changes or significant features, it's usually better to reach out first and discuss what you want to implement and how (we recommend reading: [Pull Request First](https://medium.com/practical-blend/pull-request-first-f6bb667a9b6#.ozlqxvj36)). This to make sure that what you want to implement is aligned with our goals for the project and that no one else is already working on it.
- Include screenshots and animated GIFs in your pull request whenever possible.
- Please add [documentation](#documentation) for new features or changes in functionality along with the code.
- Please follow existing code style. We use PEP8 for Python and sensible style for Javascript.
### Documentation
The project's documentation can be found at [docs.redash.io](http://docs.redash.io/). The [documentation sources](https://github.com/getredash/redash/tree/master/docs) are managed along with the code and to contribute edits / new pages, you can use GitHub's interface. Click the "Edit on GitHub" link on the documentation page to quickly open the edit interface.
The pages are written in *reStructuredText* format, which is very similar to Markdown.
## Additional Notes
### Release Method
We publish a stable release every ~2 months, although the goal is to get to a stable release every month. You can see the change log on [GitHub releases page](http://github.com/getredash/redash/releases).
Every build of the master branch updates the latest *RC release*. These releases are usually stable, but might contain regressions and therefore recommended for "advanced users" only.
When we release a new stable release, we also update the *latest* Docker image tag, the EC2 AMIs and GCE images.
## Code of Conduct
This project adheres to the Contributor Covenant [code of conduct](http://redash.io/community/code_of_conduct). By participating, you are expected to uphold this code. Please report unacceptable behavior to team@redash.io.

53
Dockerfile Normal file
View File

@@ -0,0 +1,53 @@
FROM ubuntu:trusty
# Ubuntu packages
RUN apt-get update && \
apt-get install -y python-pip python-dev curl build-essential pwgen libffi-dev sudo git-core wget \
# Postgres client
libpq-dev \
# Additional packages required for data sources:
libssl-dev libmysqlclient-dev freetds-dev libsasl2-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Users creation
RUN useradd --system --comment " " --create-home redash
# Pip requirements for all data source types
RUN pip install -U setuptools==23.1.0 && \
pip install supervisor==3.1.2
COPY . /opt/redash/current
RUN chown -R redash /opt/redash/current
# Setting working directory
WORKDIR /opt/redash/current
ENV REDASH_STATIC_ASSETS_PATH="../rd_ui/dist/"
# Install project specific dependencies
RUN pip install -r requirements_all_ds.txt && \
pip install -r requirements.txt
RUN curl https://deb.nodesource.com/setup_4.x | bash - && \
apt-get install -y nodejs && \
sudo -u redash -H make deps && \
rm -rf node_modules rd_ui/node_modules /home/redash/.npm /home/redash/.cache && \
apt-get purge -y nodejs && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Setup supervisord
RUN mkdir -p /opt/redash/supervisord && \
mkdir -p /opt/redash/logs && \
cp /opt/redash/current/setup/docker/supervisord/supervisord.conf /opt/redash/supervisord/supervisord.conf
# Fix permissions
RUN chown -R redash /opt/redash
# Expose ports
EXPOSE 5000
EXPOSE 9001
# Startup script
CMD ["supervisord", "-c", "/opt/redash/supervisord/supervisord.conf"]

19
LICENSE
View File

@@ -1,4 +1,5 @@
Copyright 2013 DoAT. All rights reserved.
Copyright (c) 2013-2016, Arik Fraimovich.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
@@ -10,17 +11,13 @@ are permitted provided that the following conditions are met:
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED “AS IS” WITHOUT ANY WARRANTIES WHATSOEVER.
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF NON INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL DoAT OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those of
the authors and should not be interpreted as representing official policies,
either expressed or implied, of DoAT.

View File

@@ -1,16 +1,22 @@
NAME=redash
VERSION=0.2
FULL_VERSION=$(VERSION).$(CIRCLE_BUILD_NUM)
FILENAME=$(CIRCLE_ARTIFACTS)/$(NAME).$(FULL_VERSION).tar.gz
VERSION=`python ./manage.py version`
FULL_VERSION=$(VERSION)+b$(CIRCLE_BUILD_NUM)
BASE_VERSION=$(shell python ./manage.py version | cut -d + -f 1)
# VERSION gets evaluated every time it's referenced, therefore we need to use VERSION here instead of FULL_VERSION.
FILENAME=$(CIRCLE_ARTIFACTS)/$(NAME).$(VERSION).tar.gz
deps:
cd rd_ui && npm install
cd rd_ui && npm install grunt-cli bower
cd rd_ui && bower install
cd rd_ui && grunt build
if [ -d "./rd_ui/app" ]; then npm install; fi
if [ -d "./rd_ui/app" ]; then npm run bower install; fi
if [ -d "./rd_ui/app" ]; then npm run build; fi
pack:
tar -zcv -f $(FILENAME) --exclude=".git*" --exclude="*.pyc" --exclude="*.pyo" --exclude="rd_ui/node_modules" --exclude="rd_ui/dist/bower_components" --exclude="rd_ui/app" *
sed -ri "s/^__version__ = '([0-9.]*)'/__version__ = '$(FULL_VERSION)'/" redash/__init__.py
tar -zcv -f $(FILENAME) --exclude="optipng*" --exclude=".git*" --exclude="*.pyc" --exclude="*.pyo" --exclude="venv" --exclude="node_modules" --exclude="rd_ui/dist/bower_components" --exclude="rd_ui/app" *
upload:
python bin/upload_version.py $(FULL_VERSION) $(FILENAME)
python bin/release_manager.py $(CIRCLE_SHA1) $(BASE_VERSION) $(FILENAME)
test:
nosetests --with-coverage --cover-package=redash tests/
#grunt test

2
Procfile.dev Normal file
View File

@@ -0,0 +1,2 @@
web: ./manage.py runserver -p $PORT --host 0.0.0.0
worker: ./bin/run celery worker --app=redash.worker --beat -Qqueries,celery,scheduled_queries

2
Procfile.heroku Normal file
View File

@@ -0,0 +1,2 @@
web: ./manage.py runserver -d -r -p $PORT --host 0.0.0.0
worker: celery worker --app=redash.worker -c2 --beat -Q queries,celery,scheduled_queries

124
README.md
View File

@@ -1,118 +1,56 @@
# [_re:dash_](https://github.com/everythingme/redash)
More details about the future of re:dash : http://bit.ly/journey-first-step
---
<p align="center">
<img title="re:dash" src='http://redash.io/static/old_img/redash_logo.png' width="200px"/>
</p>
<p align="center">
<img title="Build Status" src='https://circleci.com/gh/getredash/redash.png?circle-token=8a695aa5ec2cbfa89b48c275aea298318016f040'/>
</p>
[![Join the chat at https://gitter.im/getredash/redash](https://badges.gitter.im/getredash/redash.svg)](https://gitter.im/getredash/redash?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Documentation](https://img.shields.io/badge/docs-redash.io-brightgreen.svg)](http://docs.redash.io)
**_re:dash_** is our take on freeing the data within our company in a way that will better fit our culture and usage patterns.
Prior to **_re:dash_**, we tried to use tranditional BI suites and discovered a set of bloated, technically challenged and slow tools/flows. What we were looking for was a more hacker'ish way to look at data, so we built one.
Prior to **_re:dash_**, we tried to use traditional BI suites and discovered a set of bloated, technically challenged and slow tools/flows. What we were looking for was a more hacker'ish way to look at data, so we built one.
**_re:dash_** was built to allow fast and easy access to billions of records, that we process and collect using Amazon Redshift ("petabyte scale data warehouse" that "speaks" PostgreSQL).
Today **_re:dash_** has support for querying multiple databases, including: Redshift, Google BigQuery, PostgreSQL, MySQL, Graphite,
Presto, Google Spreadsheets, Cloudera Impala, Hive and custom scripts.
**_re:dash_** consists of two parts:
1. **Query Editor**: think of [JS Fiddle](http://jsfiddle.net) for SQL queries. It's your way to share data in the organization in an open way, by sharing both the dataset and the query that generated it. This way everyone can peer review not only the resulting dataset but also the process that generated it. Also it's possible to fork it and generate new datasets and reach new insights.
2. **Dashboards/Visualizations**: once you have a dataset, you can create different visualizations out of it, and then combine several visualizations into a single dashboard. Currently it supports bar charts, pivot table and cohorts.
1. **Query Editor**: think of [JS Fiddle](http://jsfiddle.net) for SQL queries. It's your way to share data in the organization in an open way, by sharing both the dataset and the query that generated it. This way everyone can peer review not only the resulting dataset but also the process that generated it. Also it's possible to fork it and generate new datasets and reach new insights.
2. **Dashboards/Visualizations**: once you have a dataset, you can create different visualizations out of it, and then combine several visualizations into a single dashboard. Currently it supports charts, pivot table and cohorts.
This is the first release, which is more than usable but still has its rough edges and way to go to fulfill its full potential. The Query Editor part is quite solid, but the visualizations need more work to enrich them and to make them more user friendly.
**_re:dash_** is a work in progress and has its rough edges and way to go to fulfill its full potential. The Query Editor part is quite solid, but the visualizations need more work to enrich them and to make them more user friendly.
## Demo
![Screenshots](https://raw.github.com/EverythingMe/redash/screenshots/screenshots.gif)
<img src="https://cloud.githubusercontent.com/assets/71468/12611424/1faf4d6a-c4f5-11e5-89b5-31efc1155d2c.gif" width="60%"/>
You can try out the demo instance: http://rd-demo.herokuapp.com/ (login with any Google account).
Due to Heroku dev plan limits, it has a small database of flights (see schema [here](http://rd-demo.herokuapp.com/dashboard/schema)). Also due to another Heroku limitation, it is running with the regular user, hence you can DELETE or INSERT data/tables. Please be nice and don't do this.
## Getting help
* [Google Group (mailing list)](https://groups.google.com/forum/#!forum/redash-users): the best place to get updates about new releases or ask general questions.
* #redash IRC channel on [Freenode](http://www.freenode.net/).
## Technology
* [AngularJS](http://angularjs.org/)
* [Tornado](http://tornadoweb.org)
* [PostgreSQL](http://www.postgresql.org/) / [AWS Redshift](http://aws.amazon.com/redshift/)
* [Redis](http://redis.io)
PostgreSQL is used both as the operatinal database for the system, but also as the data store that is being queried. To be exact, we built this system to use on top of Amazon's Redshift, which supports the PG driver. But it's quite simple to add support for other datastores, and we do plan to do so.
This is our first large scale AngularJS project, and we learned a lot during the development of it. There are still things we need to iron out, and comments on the way we use AngularJS are more than welcome (and pull requests just as well).
### HighCharts
HighCharts is really great, but it's not free for commercial use. Please refer to their [licensing options](http://shop.highsoft.com/highcharts.html), to see what applies for your use.
It's very likely that in the future we will switch to [D3.js](http://d3js.org/) instead.
You can try out the demo instance: http://demo.redash.io/ (login with any Google account).
## Getting Started
1. Clone the repo:
```bash
git clone git@github.com:EverythingMe/redash.git
```
2. Create settings file from the example one (& update relevant settings):
```bash
cp rd_service/settings_example.py rd_service/settings.py
```
It's highly recommended that the user you use to connect to the data database (the one you query) is read-only.
3. Create the operational databases from rd_service/data/tables.sql
3. Install `npm` packages (mainly: Bower & Grunt):
```bash
cd rd_ui
npm install
```
4. Install `bower` packages:
```bash
bower install
```
5. Build the UI:
```bash
grunt build
```
6. Install PIP packages:
```bash
pip install -r ../rd_service/requirements.txt
```
6. Start the API server:
```bash
cd ../rd_service
python server.py
```
7. Start the workers:
```bash
python cli.py worker
```
8. Open `http://localhost:8888/` and query away.
* [Setting up re:dash instance](http://redash.io/deployment/setup.html) (includes links to ready made AWS/GCE images).
* [Documentation](http://docs.redash.io).
## Roadmap
We plan to release new minor version every 2-3 weeks. Of course, if we get additional help from contributors it will help speed things up.
## Getting Help
Below you can see the "big" features of the next 3 releases (for full list, click on the link):
### [v0.2](https://github.com/EverythingMe/redash/issues?milestone=1&state=open)
- Ability to generate multiple visualizations for a single query (dataset) in a more flexible way than today. Also easier extensbility points to add additional visualizations.
- Dashboard filters: ability to filter/slice the data you see in a single dashboard using filters (date or selectors).
- UI Improvements (better notifications & flows, improved queries page)
- Comments on queries.
### [v0.3](https://github.com/EverythingMe/redash/issues?milestone=2&state=open)
- Support for API access using API keys, instead of Google Login.
- Multiple databases support (including other database type than PostgreSQL).
- Scheduled reports by email.
### [v0.4](https://github.com/EverythingMe/redash/issues?milestone=3&state=open)
- Query versioning.
- More "realtime" UI (using websockets).
- More visualizations.
* Issues: https://github.com/getredash/redash/issues
* Discussion Forum: https://discuss.redash.io/
* Slack: http://slack.redash.io/
* Gitter (chat): https://gitter.im/getredash/redash
## Reporting Bugs and Contributing Code
* Want to report a bug or request a feature? Please open [an issue](https://github.com/everythingme/redash/issues/new).
* Want to help us build **_re:dash_**? Fork the project and make a pull request. We need all the help we can get!
* Want to report a bug or request a feature? Please open [an issue](https://github.com/getredash/redash/issues/new).
* Want to help us build **_re:dash_**? Fork the project, edit in a [dev environment](http://docs.redash.io/en/latest/dev/vagrant.html), and make a pull request. We need all the help we can get!
## License
See [LICENSE](https://github.com/EverythingMe/redash/blob/master/LICENSE) file.
See [LICENSE](https://github.com/getredash/redash/blob/master/LICENSE) file.

59
Vagrantfile vendored
View File

@@ -2,59 +2,14 @@
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = '2'
POSTGRES_PASSWORD = 'securepass'
# Currently, chef postgress cookbook works with cleartext paswords,
# unless the password begins with 'md5'
# See https://github.com/hw-cookbooks/postgresql/issues/95
require "digest/md5"
postgres_password_md5 = 'md5'+Digest::MD5.hexdigest(POSTGRES_PASSWORD+'postgres')
# After starting the vagrant machine, the application is accessible via the URL
# http://localhost:9999
HOST_PORT_TO_FORWARD_TO_REDASH = 9999
# Deploy direcly the code in parent dir; Don't download a release tarball
live_testing_deployment = true
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = 'ubuntu-precise-cloudimg-amd64'
config.vm.box_url = 'http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box'
if config.respond_to? :cache
config.cache.auto_detect = true
config.vm.box = "redash/dev"
config.vm.synced_folder "./", "/opt/redash/current"
config.vm.network "forwarded_port", guest: 5000, host: 9001
config.vm.provision "shell" do |s|
s.inline = "/opt/redash/current/setup/vagrant/provision.sh"
s.privileged = false
end
config.berkshelf.enabled = true
config.omnibus.chef_version = :latest
config.vm.network 'forwarded_port', guest: 8888, host: HOST_PORT_TO_FORWARD_TO_REDASH
if live_testing_deployment
config.vm.synced_folder "..", "/opt/redash"
end
config.vm.provision :chef_solo do |chef|
# run apt-get update before anything else (specifically postgresql)..
chef.add_recipe 'apt'
chef.add_recipe 'redash::redis_for_redash'
chef.add_recipe 'postgresql::client'
chef.add_recipe 'postgresql::server'
chef.add_recipe 'redash::redash_pg_schema'
chef.add_recipe 'redash::redash'
# chef.log_level = :debug
chef.json = {
'apt' => { 'compiletime' => true },
'postgresql' => { 'password' => {'postgres' => postgres_password_md5 } },
'redash' => { 'db' => {'host' => 'localhost',
'user' => 'postgres',
'password' => POSTGRES_PASSWORD },
'allow' => {'google_app_domain' => 'gmail.com',
'admins' => ['joe@egmail.com','jack@gmail.com']},
'install_tarball' => !live_testing_deployment,
'user' => live_testing_deployment ? 'vagrant' : 'redash'}
}
end
end

18
bin/pre_compile Normal file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
# Heroku pre_compile script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
pushd $DIR/..
# heroku requires cffi to be in requirements.txt in order for libffi to be installed.
# https://github.com/heroku/heroku-buildpack-python/blob/master/bin/steps/cryptography
# to avoid making it a requirement for other build systems, we'll inject it now
# into the requirements.txt file
# Remove Heroku unsupported Python packages:
grep -v -E "^(pymssql|thrift|sasl|pyhive)" requirements_all_ds.txt >> requirements.txt
# make the heroku Procfile the active one
cp Procfile.heroku Procfile
popd

147
bin/release_manager.py Normal file
View File

@@ -0,0 +1,147 @@
import os
import sys
import json
import re
import subprocess
import requests
github_token = os.environ['GITHUB_TOKEN']
auth = (github_token, 'x-oauth-basic')
repo = 'getredash/redash'
def _github_request(method, path, params=None, headers={}):
if not path.startswith('https://api.github.com'):
url = "https://api.github.com/{}".format(path)
else:
url = path
if params is not None:
params = json.dumps(params)
response = requests.request(method, url, data=params, auth=auth)
return response
def exception_from_error(message, response):
return Exception("({}) {}: {}".format(response.status_code, message, response.json().get('message', '?')))
def rc_tag_name(version):
return "v{}-rc".format(version)
def get_rc_release(version):
tag = rc_tag_name(version)
response = _github_request('get', 'repos/{}/releases/tags/{}'.format(repo, tag))
if response.status_code == 404:
return None
elif response.status_code == 200:
return response.json()
raise exception_from_error("Unknown error while looking RC release: ", response)
def create_release(version, commit_sha):
tag = rc_tag_name(version)
params = {
'tag_name': tag,
'name': "{} - RC".format(version),
'target_commitish': commit_sha,
'prerelease': True
}
response = _github_request('post', 'repos/{}/releases'.format(repo), params)
if response.status_code != 201:
raise exception_from_error("Failed creating new release", response)
return response.json()
def upload_asset(release, filepath):
upload_url = release['upload_url'].replace('{?name,label}', '')
filename = filepath.split('/')[-1]
with open(filepath) as file_content:
headers = {'Content-Type': 'application/gzip'}
response = requests.post(upload_url, file_content, params={'name': filename}, headers=headers, auth=auth, verify=False)
if response.status_code != 201: # not 200/201/...
raise exception_from_error('Failed uploading asset', response)
return response
def remove_previous_builds(release):
for asset in release['assets']:
response = _github_request('delete', asset['url'])
if response.status_code != 204:
raise exception_from_error("Failed deleting asset", response)
def get_changelog(commit_sha):
latest_release = _github_request('get', 'repos/{}/releases/latest'.format(repo))
if latest_release.status_code != 200:
raise exception_from_error('Failed getting latest release', latest_release)
latest_release = latest_release.json()
previous_sha = latest_release['target_commitish']
args = ['git', '--no-pager', 'log', '--merges', '--grep', 'Merge pull request', '--pretty=format:"%h|%s|%b|%p"', '{}...{}'.format(previous_sha, commit_sha)]
log = subprocess.check_output(args)
changes = ["Changes since {}:".format(latest_release['name'])]
for line in log.split('\n'):
try:
sha, subject, body, parents = line[1:-1].split('|')
except ValueError:
continue
try:
pull_request = re.match("Merge pull request #(\d+)", subject).groups()[0]
pull_request = " #{}".format(pull_request)
except Exception, ex:
pull_request = ""
author = subprocess.check_output(['git', 'log', '-1', '--pretty=format:"%an"', parents.split(' ')[-1]])[1:-1]
changes.append("{}{}: {} ({})".format(sha, pull_request, body.strip(), author))
return "\n".join(changes)
def update_release_commit_sha(release, commit_sha):
params = {
'target_commitish': commit_sha,
}
response = _github_request('patch', 'repos/{}/releases/{}'.format(repo, release['id']), params)
if response.status_code != 200:
raise exception_from_error("Failed updating commit sha for existing release", response)
return response.json()
def update_release(version, build_filepath, commit_sha):
try:
release = get_rc_release(version)
if release:
release = update_release_commit_sha(release, commit_sha)
else:
release = create_release(version, commit_sha)
print "Using release id: {}".format(release['id'])
remove_previous_builds(release)
response = upload_asset(release, build_filepath)
changelog = get_changelog(commit_sha)
response = _github_request('patch', release['url'], {'body': changelog})
if response.status_code != 200:
raise exception_from_error("Failed updating release description", response)
except Exception, ex:
print ex
if __name__ == '__main__':
commit_sha = sys.argv[1]
version = sys.argv[2]
filepath = sys.argv[3]
# TODO: make sure running from git directory & remote = repo
update_release(version, filepath, commit_sha)

10
bin/run Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/env bash
# Ideally I would use stdin with source, but in older bash versions this
# wasn't supported properly.
TEMP_ENV_FILE=`mktemp /tmp/redash_env.XXXXXX`
sed 's/^REDASH/export REDASH/' .env > $TEMP_ENV_FILE
source $TEMP_ENV_FILE
rm $TEMP_ENV_FILE
exec "$@"

View File

@@ -1,31 +0,0 @@
#!python
import os
import sys
import json
import requests
if __name__ == '__main__':
version = sys.argv[1]
filepath = sys.argv[2]
filename = filepath.split('/')[-1]
github_token = os.environ['GITHUB_TOKEN']
auth = (github_token, 'x-oauth-basic')
commit_sha = os.environ['CIRCLE_SHA1']
params = json.dumps({
'tag_name': 'v{0}'.format(version),
'name': 're:dash v{0}'.format(version),
'target_commitish': commit_sha
})
response = requests.post('https://api.github.com/repos/everythingme/redash/releases',
data=params,
auth=auth)
upload_url = response.json()['upload_url']
upload_url = upload_url.replace('{?name}', '')
with open(filepath) as file_content:
headers = {'Content-Type': 'application/gzip'}
response = requests.post(upload_url, file_content, params={'name': filename}, auth=auth, headers=headers, verify=False)

21
bin/vagrant_ctl.sh Executable file
View File

@@ -0,0 +1,21 @@
#!/bin/bash
set -e
help() {
echo "Usage: "
echo "`basename "$0"` {start, test}"
}
case "$1" in
start)
vagrant up
vagrant ssh -c "cd /opt/redash/current; bin/run honcho start -f Procfile.dev;"
;;
test)
vagrant up
vagrant ssh -c "cd /opt/redash/current; make test"
;;
*)
help
;;
esac

47
bower.json Normal file
View File

@@ -0,0 +1,47 @@
{
"name": "redash",
"version": "0.11.0",
"dependencies": {
"angular": "1.2.18",
"angular-resource": "1.2.18",
"angular-route": "1.2.18",
"angular-growl": "0.4.0",
"json3": "3.2.4",
"jquery": "1.9.1",
"bootstrap": "3.3.6",
"es5-shim": "2.0.8",
"angular-moment": "0.10.3",
"moment": "~2.8.0",
"codemirror": "4.8.0",
"underscore": "1.5.1",
"pivottable": "2.0.2",
"cornelius": "https://github.com/restorando/cornelius.git",
"gridster": "0.2.0",
"mousetrap": "~1.4.6",
"jquery-ui": "~1.10.4",
"underscore.string": "~2.3.3",
"marked": "~0.3.2",
"pace": "~0.5.1",
"font-awesome": "~4.2.0",
"mustache": "~1.0.0",
"canvg": "gabelerner/canvg",
"angular-ui-bootstrap-bower": "~0.12.1",
"leaflet": "~0.7.3",
"angular-base64-upload": "~0.1.11",
"angular-ui-select": "~0.13.2",
"angular-bootstrap-show-errors": "~2.3.0",
"angular-sanitize": "1.2.18",
"d3": "3.5.6",
"angular-ui-sortable": "~0.13.4",
"angular-resizable": "^1.2.0",
"material-design-iconic-font": "^2.2.0",
"plotly.js": "^1.9.0"
},
"devDependencies": {
"angular-mocks": "1.2.18",
"angular-scenario": "1.2.18"
},
"resolutions": {
"angular": "1.2.18"
}
}

View File

@@ -1,19 +1,40 @@
machine:
services:
- docker
node:
version:
0.10.22
0.12.4
python:
version:
2.7.3
dependencies:
pre:
- make deps
- pip install requests
- pip install -r requirements_dev.txt
- pip install -r requirements.txt
- pip install pymongo==3.2.1
- if [ "$CIRCLE_BRANCH" = "master" ]; then make deps; fi
cache_directories:
- node_modules/
- rd_ui/node_modules/
- rd_ui/app/bower_components/
test:
post:
- make pack
override:
- nosetests --with-xunit --xunit-file=$CIRCLE_TEST_REPORTS/junit.xml --with-coverage --cover-package=redash tests/
deployment:
github:
github_and_docker:
branch: master
commands:
- make pack
- make upload
- echo "rd_ui/app" >> .dockerignore
- docker pull redash/redash:latest
- docker build -t redash/redash:$(./manage.py version | sed -e "s/\+/./") .
- docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- docker push redash/redash:$(./manage.py version | sed -e "s/\+/./")
notify:
webhooks:
- url: https://webhooks.gitter.im/e/895d09c3165a0913ac2f
general:
branches:
ignore:
- gh-pages

View File

@@ -0,0 +1,25 @@
redash:
image: redash/redash:latest
ports:
- "5000:5000"
links:
- redis
- postgres
environment:
REDASH_STATIC_ASSETS_PATH: "../rd_ui/dist/"
REDASH_LOG_LEVEL: "INFO"
REDASH_REDIS_URL: "redis://redis:6379/0"
REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
REDASH_COOKIE_SECRET: veryverysecret
redis:
image: redis:2.8
postgres:
image: postgres:9.3
volumes:
- /opt/postgres-data:/var/lib/postgresql/data
redash-nginx:
image: redash/nginx:latest
ports:
- "80:80"
links:
- redash

192
docs/Makefile Normal file
View File

@@ -0,0 +1,192 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/redash.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/redash.qhc"
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/redash"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/redash"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."

110
docs/conf.py Normal file
View File

@@ -0,0 +1,110 @@
# -*- coding: utf-8 -*-
#
# re:dash documentation build configuration file, created by
# sphinx-quickstart on Mon Jul 20 22:40:24 2015.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys
import os
import shlex
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = []
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'Re:dash'
copyright = u'2013-2016, Arik Fraimovich'
author = u'Arik Fraimovich'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
exclude_patterns = ['_build']
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = False
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
import sphinx_rtd_theme
html_theme = "sphinx_rtd_theme"
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# If true, links to the reST sources are added to the pages.
html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
html_show_sphinx = False
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
html_show_copyright = False
# Output file base name for HTML help builder.
htmlhelp_basename = 'redashdoc'
# -- Options for manual page output ---------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'redash', u're:dash Documentation',
[author], 1)
]
# -- Options for Texinfo output -------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'redash', u're:dash Documentation',
author, 'redash', 'One line description of project.',
'Miscellaneous'),
]

261
docs/datasources.rst Normal file
View File

@@ -0,0 +1,261 @@
Supported Data Sources
######################
Re:dash supports several types of data sources, and if you set it up using the provided images, it should already have
the needed dependencies to use them all. Starting from version 0.7 and newer, you can manage data sources from the UI
by browsing to ``/data_sources`` on your instance.
If one of the listed data source types isn't available when trying to create a new data source, make sure that:
1. You installed required dependencies.
2. If you've set custom value for the ``REDASH_ENABLED_QUERY_RUNNERS`` setting, it's included in the list.
PostgreSQL / Redshift / Greenplum
---------------------------------
- **Options**:
- Database name (mandatory)
- User
- Password
- Host
- Port
- **Additional requirements**:
- None
MySQL
-----
- **Options**:
- Database name (mandatory)
- User
- Password
- Host
- Port
- **Additional requirements**:
- ``MySQL-python`` python package
Google BigQuery
---------------
- **Options**:
- Project ID (mandatory)
- JSON key file, generated when creating a service account (see `instructions <https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount>`__).
- **Additional requirements**:
- ``google-api-python-client``, ``oauth2client`` and ``pyopenssl`` python packages (on Ubuntu it might require installing ``libffi-dev`` and ``libssl-dev`` as well).
Graphite
--------
- **Options**:
- Url (mandatory)
- User
- Password
- Verify SSL certificate
MongoDB
-------
- **Options**:
- Connection String (mandatory)
- Database name
- Replica set name
- **Additional requirements**:
- ``pymongo`` python package.
For information on how to write MongoDB queries, see :doc:`documentation </usage/mongodb_querying>`.
ElasticSearch
-------------
...
InfluxDB
--------
...
Presto
------
- **Options**:
- Host (mandatory)
- Address to a Presto coordinator.
- Port
- Port to a Presto coordinator. `8080` is the default port.
- Schema
- Default schema name of Presto. You can read other schemas by qualified name like `FROM myschema.table1`.
- Catalog
- Catalog (connector) name of Presto such as `hive-cdh4`, `hive-hadoop1`, etc.
- Username
- User name to connect to a Presto.
- **Additional requirements**:
- ``pyhive`` python package.
Hive
----
...
Impala
------
...
URL
---
A URL based data source which requests URLs that return the :doc:`results JSON
format </dev/results_format>`.
Very useful in situations where you want to expose the data without
connecting directly to the database.
The query itself inside Re:dash will simply contain the URL to be
executed (i.e. http://myserver/path/myquery)
- **Options**:
- Url - set this if you want to limit queries to certain base path.
Google Spreadsheets
-------------------
- **Options**:
- JSON key file, generated when creating a service account (see `instructions <https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount>`__).
- **Additional requirements**:
- ``gspread`` and ``oauth2client`` python packages.
Notes:
1. To be able to load the spreadsheet in Re:dash - share your it with
your ServiceAccount's email (it can be found in the credentials json
file, for example
43242343247-fjdfakljr3r2@developer.gserviceaccount.com).
2. The query format is "DOC\_UUID\|SHEET\_NUM" (for example
"kjsdfhkjh4rsEFSDFEWR232jkddsfh\|0")
Python
------
**Execute other queries, manipulate and compute with Python code**
This is a special query runner, that will execute provided Python code as the query. Useful for various scenarios such as
merging data from different data sources, doing data transformation/manipulation that isn't trivial with SQL, merging
with remote data or using data analysis libraries such as Pandas (see `example query <https://gist.github.com/arikfr/be7c2888520c44cf4f0f>`__).
While the Python query runner uses a sandbox (RestrictedPython), it's not 100% secure and the security depends on the
modules you allow to import. We recommend enabling the Python query runner only in a trusted environment (meaning: behind
VPN and with users you trust).
- **Options**:
- Allowed Modules in a comma separated list (optional). **NOTE:**
You MUST make sure these modules are installed on the machine
running the Celery workers.
Notes:
- For security, the python query runner is disabled by default.
To enable, add ``redash.query_runner.python`` to the ``REDASH_ADDITIONAL_QUERY_RUNNERS`` environmental variable. If you used
the bootstrap script, or one of the provided images, add to ``/opt/redash/.env`` file the line: ``export REDASH_ADDITIONAL_QUERY_RUNNERS=redash.query_runner.python``.
Vertica
-----
- **Options**:
- Database (mandatory)
- User
- Password
- Host
- Port
- **Additional requirements**:
- ``vertica-python`` python package
Oracle
------
- **Options**
- DSN Service name
- User
- Password
- Host
- Port
- **Additional requirements**
- ``cx_Oracle`` python package. This requires the installation of the Oracle `instant client <http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html>`__.
Treasure Data
------
- **Options**
- Type (TreasureData)
- API Key
- Database Name
- Type (Presto/Hive[default])
- **Additional requirements**
- Must have account on https://console.treasuredata.com
Documentation: https://docs.treasuredata.com/articles/redash
Microsoft SQL Server
-----
- **Options**:
- Database (mandatory)
- User #TODO: DB users only? What about domain users?
- Password
- Server
- Port
- **Notes**:
- Data type support is currently quite limited.
- Complex and new types are converted to strings in ``Re:dash``
- Coerce into simpler types if needed using ``CAST()``
- Known conversion issues for:
- DATE
- TIME
- DATETIMEOFFSET
- **Additional requirements**:
- ``freetds-dev`` C library
- ``pymsssql`` python package, requires FreeTDS to be installed first

11
docs/dev.rst Normal file
View File

@@ -0,0 +1,11 @@
Developer Information
=====================
.. toctree::
:maxdepth: 2
:glob:
dev/vagrant
dev/*

View File

@@ -0,0 +1,94 @@
Query Execution Model
#####################
Introduction
============
The first datasource which was used with Re:dash was Redshift. Because
we had billions of records in Redshift, and some queries were costly to
re-run, from the get go there was the idea of caching query results in
Re:dash.
This was to relieve stress from the Redshift cluster and also to improve
user experience.
How queries get executed and cached in Re:dash?
===============================================
Server
------
To make sure each query is executed only once at any giving time, we
translate the query to a ``query hash``, using the following code:
.. code:: python
COMMENTS_REGEX = re.compile("/\*.*?\*/")
def gen_query_hash(sql):
sql = COMMENTS_REGEX.sub("", sql)
sql = "".join(sql.split()).lower()
return hashlib.md5(sql.encode('utf-8')).hexdigest()
When query execution is done, the result gets stored to
``query_results`` table. Also we check for all queries in the
``queries`` table that have the same query hash and update their
reference to the query result we just saved
(`code <https://github.com/getredash/redash/blob/master/redash/models.py#L235>`__).
Client
------
The client (UI) will execute queries in two scenarios:
1. (automatically) When opening a query page of a query that doesn't
have a result yet.
2. (manually) When the user clicks on "Execute".
In each case the client does a POST request to ``/api/query_results``
with the following parameters: ``query`` (the query text),
``data_source_id`` (data source to execute the query with) and ``ttl``.
When loading a cached result, ``ttl`` will be the one set to the query
(if it was set). This is a relic from previous versions, and I'm not
sure if it's really used anymore, as usually we will fetch query result
using its id.
When loading a non cached result, ``ttl`` will be 0 which will "force"
the server to execute the query.
As a response to ``/api/query_results`` the server will send either the
query results (in case of a cached query) or job id of the currently
executing query. When job id received the client will start polling on
this id, until a query result received (this is encapsulated in
``Query`` and ``QueryResult`` services).
Ideas on how to implement query parameters
==========================================
Client side only implementation
-------------------------------
(This was actually implemented in. See pull request `#363 <https://github.com/getredash/redash/pull/363>`__ for details.)
The basic idea of how to implement parametized queries is to treat the
query as a template and merge it with parameters taken from query string
or UI (or both).
When the caching facility isn't required (with queries that return in a
reasonable time frame) the implementation can be completely client side
and the backend can be "blind" to the parameters - it just receives the
final query to execute and returns result.
As one improvement over this, we can let the UI/user specify the TTL
value when making the request to ``/api/query_results``, in which case
caching will be availble too, while not having to make the server aware
of the parameters.
Hybrid
------
Another option, will be to store the list of possible parameters for a
query, with their default/optional values. In such case, the server can
prefetch all the options and cache them to provide faster results to the
client.

View File

@@ -0,0 +1,30 @@
Data Source Results Format
==========================
All data sources in Re:dash return the following results in JSON format:
.. code:: javascript
{
"columns" : [
{
// Required: a unique identifier of the column name in this result
"name" : "COLUMN_NAME",
// Required: friendly name of the column that will appear in the results
"friendly_name" : "FRIENDLY_NAME",
// Optional: If not specified sort might not work well.
// Supported types: integer, float, boolean, string (default), datetime (ISO-8601 text format)
"type" : "VALUE_TYPE"
},
...
],
"rows" : [
{
// name is the column name as it appears in the columns above.
// VALUE is a valid JSON value. For dates its an ISO-8601 string.
"name" : VALUE,
"name2" : VALUE2
},
...
]
}

34
docs/dev/saml.rst Normal file
View File

@@ -0,0 +1,34 @@
SAML Authentication and Authorization
#####################################
Authentication
==============
Add to your .env file REDASH_SAML_METADATA_URL config value which
needs to point to the SAML provider metadata url, eg https://app.onelogin.com/saml/metadata/
And an optional REDASH_SAML_CALLBACK_SERVER_NAME which contains the
server name of the redash server for the callbacks from the SAML provider (eg demo.redash.io)
On the SAML provider side, example configuration for OneLogin is:
SAML Consumer URL: http://demo.redash.io/saml/login
SAML Audience: http://demo.redash.io/saml/callback
SAML Recipient: http://demo.redash.io/saml/callback
Example configuration for Okta is:
Single Sign On URL: http://demo.redash.io/saml/callback
Recipient URL: http://demo.redash.io/saml/callback
Destination URL: http://demo.redash.io/saml/callback
with parameters 'FirstName' and 'LastName', both configured to be included in the SAML assertion.
Authorization
=============
To manage group assignments in Redash using your SAML provider, configure SAML response to include
attribute with key 'RedashGroups', and value as names of groups in Redash.
Example configuration for Okta is:
In the Group Attribute Statements -
Name: RedashGroups
Filter: Starts with: this-is-a-group-in-redash

23
docs/dev/vagrant.rst Normal file
View File

@@ -0,0 +1,23 @@
Setting up development environment (using Vagrant)
==================================================
To simplify contribution there is a `Vagrant
box <https://vagrantcloud.com/redash/boxes/dev>`__ available with all
the needed software to run Re:dash for development (use it only for
development, for demo purposes there is
`redash/demo <https://vagrantcloud.com/redash/boxes/demo>`__ box and the
AWS/GCE images).
To get started with this box:
1. Make sure you have recent version of
`Vagrant <https://www.vagrantup.com/>`__ installed.
2. Clone the Re:dash repository:
``git clone https://github.com/getredash/redash.git``.
3. Change dir into the repository (``cd redash``)
4a. To execute tests, run ``./bin/vagrant_ctl.sh test``
4b. To run the app, run ``./bin/vagrant_ctl.sh start``.
This might take some time the first time you run it,
as it downloads the Vagrant virtual box.
Now the server should be available on your host on port 9001 and you
can login with username admin and password admin.

57
docs/index.rst Normal file
View File

@@ -0,0 +1,57 @@
.. image:: http://redash.io/static/old_img/redash_logo.png
:width: 200px
Open Source Data Collaboration and Visualization Platform
===================================
**Re:dash** is our take on freeing the data within our company in a way that will better fit our culture and usage patterns.
Prior to **Re:dash**, we tried to use traditional BI suites and discovered a set of bloated, technically challenged and slow tools/flows. What we were looking for was a more hacker'ish way to look at data, so we built one.
**Re:dash** was built to allow fast and easy access to billions of records, that we process and collect using Amazon Redshift ("petabyte scale data warehouse" that "speaks" PostgreSQL).
Today **_re:dash_** has support for querying multiple databases, including: Redshift, Google BigQuery,Google Spreadsheets, PostgreSQL, MySQL, Graphite and custom scripts.
Features
########
1. **Query Editor**: think of `JS Fiddle`_ for SQL queries. It's your way to share data in the organization in an open way, by sharing both the dataset and the query that generated it. This way everyone can peer review not only the resulting dataset but also the process that generated it.
2. **Visualizations**: once you have a dataset, you can create different visualizations out of it. Currently it supports charts, pivot table and cohorts.
3. **Dashboards**: combine several visualizations into a single dashboard.
Demo
####
.. figure:: https://cloud.githubusercontent.com/assets/71468/12611424/1faf4d6a-c4f5-11e5-89b5-31efc1155d2c.gif
:alt: Screenshots
You can try out the demo instance: `http://demo.redash.io`_ (login with any Google account).
.. _http://demo.redash.io: http://demo.redash.io
.. _JS Fiddle: http://jsfiddle.net
Getting Started
###############
:doc:`Setting up Re:dash instance </setup>` (includes links to ready made AWS/GCE images).
Getting Help
############
* Source: https://github.com/getredash/redash
* Issues: https://github.com/getredash/redash/issues
* Discussion Forum: https://discuss.redash.io/
* Slack: http://slack.redash.io/
* Gitter (chat): https://gitter.im/getredash/redash
TOC
###
.. toctree::
:maxdepth: 2
setup
upgrade
datasources
usage
dev
misc

10
docs/misc.rst Normal file
View File

@@ -0,0 +1,10 @@
Miscellaneous
=============
.. toctree::
:maxdepth: 2
:glob:
misc/*

View File

@@ -0,0 +1,74 @@
How To: Backup your Re:dash database and restore it on a different server
=================
**Note:** This guide assumes that the default database name (redash) has not been changed.
1. Check the size of your redash database. This can be done by creating a query within redash itself against the 'Re:dash metadata' data source.
.. code::
select t1.datname AS db_name, pg_size_pretty(pg_database_size(t1.datname)) as db_size
from pg_database t1
where t1.datname = 'redash'
2. Check the amount of available disk space on your existing server.
.. code::
df -hT
3. Backup the existing redash database.
.. code::
sudo -u redash pg_dump redash | gzip > redash_backup.gz
4. Transfer the backup to the new server.
5. `Perform a clean install of Re:dash <http://docs.redash.io/en/latest/setup.html>`__ on the new server.
6. Check the amount of available disk space on the new server.
.. code::
df -hT
7. Login as postgres user on the new server.
.. code::
sudo -u postgres -i
8. drop the current redash database, create a new database named redash, and then restore the backup into the new database.
.. code::
dropdb redash
createdb -T template0 redash
gunzip -c redash_backup.gz | psql redash
9. Set a new password of your choosing for the 'redash_reader' user (since the new installation generated a random password).
.. code::
psql -c "ALTER ROLE redash_reader WITH PASSWORD 'yourpasswordgoeshere';"
**Note:** Then you must navigate to the 'Re:dash metadata' data source (/data_sources/1) in the new Re:dash installation and change the password to match the one entered above.
10. Grant permissions on the redash database to the redash_reader user.
.. code::
psql -c "grant select(id,name,type) ON data_sources to redash_reader;" redash
psql -c "grant select(id,name) ON users to redash_reader;" redash
psql -c "grant select on events, queries, dashboards, widgets, visualizations, query_results to redash_reader;" redash
Create a new query in redash (using Re:dash metadata as the data source) to test that everything is working as expected.

View File

@@ -0,0 +1,50 @@
How To: Create a Google Developers Project
==========================================
1. Go to the `Google Developers
Console <https://console.developers.google.com/>`__.
2. Select a project, or create a new one by clicking Create Project:
1. In the Project name field, type in a name for your project.
2. In the Project ID field, optionally type in a project ID for your
project or use the one that the console has created for you. This
ID must be unique world-wide.
3. Click the **Create** button and wait for the project to be
created.
4. Click on the new project name in the list to start editing the
project.
3. In the left sidebar, select the **APIs** item below "APIs & auth". A
list of Google web services appears.
4. Find the **Google+ API** service and set its status to **ON**—notice
that this action moves the service to the top of the list.
5. In the sidebar under "APIs & auth", select **Credentials** and in that screen choose the **OAuth consent screen** tab
- Choose an Email Address and specify a Product Name.
6. In the sidebar under "APIs & auth", select **Credentials**.
7. Click **Add Credentials** button and choose **OAuth 20 Client ID**.
- In the **Application type** section of the dialog, select **Web
application**.
- In the **Authorized JavaScript origins** field, enter the origin
for your app. You can enter multiple origins to use with multiple
Re:dash instance. Wildcards are not allowed. In the example below,
we assume your Re:dash instance address is *redash.example.com*:
::
http://redash.example.com
https://redash.example.com
- In the Authorized redirect URI field, enter the redirect URI
callback:
::
http://redash.example.com/oauth/google_callback
- Click the ``Create`` button.
8. In the resulting **Client ID for web application** section, copy the
**Client ID** and **Client secret** to your ``.env`` file.

141
docs/misc/letsencrypt.rst Normal file
View File

@@ -0,0 +1,141 @@
How To: Encrypt your Re:dash installation with a free SSL certificate from Let's Encrypt
=================
**Note:** This below steps were tested on Ubuntu 14.04, but *should* work with any Debian-based distro.
`Let's Encrypt <https://letsencrypt.org/>`__ is a new certificate authority sponsored by major tech companies including Mozilla, Google, Cisco, and Facebook. Unlike traditional CA authorities, Let's Encrypt allows you to generate and renew an SSL certificate quickly and **at no cost**.
1. Open port 443 in your security group (if using AWS or GCE).
2. Update package lists, install git, and clone the letsencrypt repository.
.. code::
sudo apt-get update
sudo apt-get install git
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
3. Stop nginx and redash, then ensure that no processes are still listening on port 80.
.. code::
sudo supervisorctl stop redash_server
sudo service nginx stop
netstat -na | grep ':80.*LISTEN'
4. Generate your letsencrypt certificate.
.. code::
cd /opt/letsencrypt
sudo pip install urllib3[secure] --upgrade
./letsencrypt-auto certonly --standalone
In most cases you'll want to enter 'example.com www.example.com' when prompted for your domain so that you can use the certificate on http://example.com and http://www.example.com.
5. Optionally generate a stronger Diffie-Hellman ephemeral parameter. Without this step, you will not achieve higher than a B score on `SSLLabs <https://www.ssllabs.com/ssltest/>`__. Please note that on a low-end server (VPS or micro/small GCE instance) this step can take approximately 20-30 minutes.
.. code::
cd /etc/ssl/certs
sudo openssl dhparam -out dhparam.pem 3072
6. Backup the existing nginx redash config, delete it, and then create a new version with the code supplied below.
.. code::
sudo cp /etc/nginx/sites-available/redash /etc/nginx/sites-available/redash.bak
sudo rm /etc/nginx/sites-available/redash
sudo nano /etc/nginx/sites-available/redash
.. code:: nginx
upstream redash_servers {
server 127.0.0.1:5000;
}
server {
listen 80;
# Allow accessing /ping without https. Useful when placing behind load balancer.
location /ping {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://redash_servers;
}
location / {
# Enforce SSL.
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
ssl on;
# Make sure to set paths to your certificate .pem and .key files.
ssl_certificate /etc/letsencrypt/live/YOURDOMAIN.TLD/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOURDOMAIN.TLD/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Use secure protocols and ciphers which are compatible with modern browsers
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers AES256+EECDH:AES256+EDH;
ssl_session_cache shared:SSL:20m;
# Enforce strict transport security
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
access_log /var/log/nginx/redash.access.log;
gzip on;
gzip_types *;
gzip_proxied any;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://redash_servers;
proxy_redirect off;
}
}
7. Start the nginx and redash servers again.
.. code::
sudo service nginx start
sudo supervisorctl start redash_server
8. Verify the installation by running a `SSLLabs test <https://www.ssllabs.com/ssltest/>`__. This guide *should* yield an A+ score. If everything is working as expected, optionally delete the old redash nginx config:
.. code::
sudo rm /etc/nginx/sites-available/redash.bak
**Important Note:** letsencrypt certificates only remain valid for 90 days. To renew your certificate, simply follow steps 3 and 4 again:
.. code::
sudo supervisorctl stop redash_server
sudo service nginx stop
netstat -na | grep ':80.*LISTEN'
cd /opt/letsencrypt
./letsencrypt-auto certonly --standalone
sudo service nginx start
sudo supervisorctl start redash_server

66
docs/misc/ssl.rst Normal file
View File

@@ -0,0 +1,66 @@
SSL (HTTPS) Setup
=================
If you used the provided images or the bootstrap script, to start using
SSL with your instance you need to:
1. Update the nginx config file (``/etc/nginx/sites-available/redash``)
with SSL configuration (see below an example). Make sure to upload
the certificate to the server, and set the paths correctly in the new
config.
2. Open port 443 in your security group (if using AWS or GCE).
.. code:: nginx
upstream redash_servers {
server 127.0.0.1:5000;
}
server {
listen 80;
# Allow accessing /ping without https. Useful when placing behind load balancer.
location /ping {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://redash_servers;
}
location / {
# Enforce SSL.
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
# Make sure to set paths to your certificate .pem and .key files.
ssl on;
ssl_certificate /path-to/cert.pem; # or crt
ssl_certificate_key /path-to/cert.key;
# Specifies that we don't want to use SSLv2 (insecure) or SSLv3 (exploitable)
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# Uses the server's ciphers rather than the client's
ssl_prefer_server_ciphers on;
# Specifies which ciphers are okay and which are not okay. List taken from https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
access_log /var/log/nginx/redash.access.log;
gzip on;
gzip_types *;
gzip_proxied any;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://redash_servers;
proxy_redirect off;
}
}

3
docs/requirements.txt Normal file
View File

@@ -0,0 +1,3 @@
sphinx
sphinx-autobuild
sphinx_rtd_theme

60
docs/settings.rst Normal file
View File

@@ -0,0 +1,60 @@
Settings
########
Much of the functionality of Re:dash can be changes with settings. Settings are read by `/redash/settings.py` from environment variables which (for most installs) can be set in `/opt/redash/current/.env`
The follow is a list of settings and what they control:
- **REDASH_NAME**: name of the site, used in page titles, *default "Re:dash"*
- **REDASH_REDIS_URL**: *default "redis://localhost:6379/0"*
- **REDASH_PROXIES_COUNT**: *default "1"*
- **REDASH_STATSD_HOST**: *default "127.0.0.1"*
- **REDASH_STATSD_PORT**: *default "8125"*
- **REDASH_STATSD_PREFIX**: *default "redash"*
- **REDASH_DATABASE_URL**: *default "postgresql://postgres"*
- **REDASH_CELERY_BROKER**: *default REDIS_URL*
- **REDASH_CELERY_BACKEND**: *default CELERY_BROKER*
- **REDASH_QUERY_RESULTS_CLEANUP_ENABLED**: *default "true"*
- **REDASH_QUERY_RESULTS_CLEANUP_COUNT**: *default "100"*
- **REDASH_QUERY_RESULTS_CLEANUP_MAX_AGE**: *default "7"*
- **REDASH_AUTH_TYPE**: *default "api_key"*
- **REDASH_PASSWORD_LOGIN_ENABLED**: *default "true"*
- **REDASH_ENFORCE_HTTPS**: *default "false"*
- **REDASH_MULTI_ORG**: *default "false"*
- **REDASH_GOOGLE_CLIENT_ID**: *default ""*
- **REDASH_GOOGLE_CLIENT_SECRET**: *default ""*
- **REDASH_SAML_METADATA_URL**: *default ""*
- **REDASH_SAML_CALLBACK_SERVER_NAME**: *default ""*
- **REDASH_STATIC_ASSETS_PATH**: *default "../rd_ui/app/"*
- **REDASH_JOB_EXPIRY_TIME**: *default 3600 * 6*
- **REDASH_COOKIE_SECRET**: *default "c292a0a3aa32397cdb050e233733900f"*
- **REDASH_LOG_LEVEL**: *default "INFO"*
- **REDASH_MAIL_SERVER**: *default "localhost"*
- **REDASH_MAIL_PORT**: *default 25*
- **REDASH_MAIL_USE_TLS**: *default "false"*
- **REDASH_MAIL_USE_SSL**: *default "false"*
- **REDASH_MAIL_USERNAME**: *default None*
- **REDASH_MAIL_PASSWORD**: *default None*
- **REDASH_MAIL_DEFAULT_SENDER**: *default None*
- **REDASH_MAIL_MAX_EMAILS**: *default None*
- **REDASH_MAIL_ASCII_ATTACHMENTS**: *default "false"*
- **REDASH_HOST**: *default ""*
- **REDASH_HIPCHAT_API_TOKEN**: *default None*
- **REDASH_HIPCHAT_API_URL**: *default None*
- **REDASH_HIPCHAT_ROOM_ID**: *default None*
- **REDASH_WEBHOOK_ENDPOINT**: *default None*
- **REDASH_WEBHOOK_USERNAME**: *default None*
- **REDASH_CORS_ACCESS_CONTROL_ALLOW_ORIGIN**: *default ""*
- **REDASH_CORS_ACCESS_CONTROL_ALLOW_CREDENTIALS**: *default "false"*
- **REDASH_CORS_ACCESS_CONTROL_REQUEST_METHOD**: *default GET, POST, PUT""*
- **REDASH_CORS_ACCESS_CONTROL_ALLOW_HEADERS**: *default "Content-Type"*
- **REDASH_ENABLED_QUERY_RUNNERS**: *default ",".join(default_query_runners)*
- **REDASH_ADDITIONAL_QUERY_RUNNERS**: *default ""*
- **REDASH_SENTRY_DSN**: *default ""*
- **REDASH_ALLOW_SCRIPTS_IN_USER_INPUT**: disable sanitization of text input, allowing full HTML, *default "true"*
- **REDASH_DATE_FORMAT**: *default "DD/MM/YY"*
- **REDASH_FEATURE_ALLOW_ALL_TO_EDIT**: *default "true"*
- **REDASH_FEATURE_TABLES_PERMISSIONS**: *default "false"*
- **REDASH_VERSION_CEHCK**: *default "true"*
- **REDASH_BIGQUERY_HTTP_TIMEOUT**: *default "600"*
- **REDASH_SCHEMA_RUN_TABLE_SIZE_CALCULATIONS**: *default "false"*

244
docs/setup.rst Normal file
View File

@@ -0,0 +1,244 @@
Setting up Re:dash instance
###########################
The `provisioning
script <https://raw.githubusercontent.com/getredash/redash/master/setup/ubuntu/bootstrap.sh>`__
works on Ubuntu 12.04, Ubuntu 14.04 and Debian Wheezy. This script
installs all needed dependencies and creates basic setup.
To ease the process, there are also images for AWS, Google Compute
Cloud and Docker. These images created with the same provision script using Packer.
Create an instance
==================
AWS
---
Launch the instance with from the pre-baked AMI (for small deployments
t2.micro should be enough):
- us-east-1: `ami-52c3373f <https://console.aws.amazon.com/ec2/home?region=us-east-1#LaunchInstanceWizard:ami=ami-52c3373f>`__
- us-west-1: `ami-c6c5bda6 <https://console.aws.amazon.com/ec2/home?region=us-west-1#LaunchInstanceWizard:ami=ami-c6c5bda6>`__
- us-west-2: `ami-f0b04e90 <https://console.aws.amazon.com/ec2/home?region=us-west-2#LaunchInstanceWizard:ami=ami-f0b04e90>`__
- eu-west-1: `ami-f3910780 <https://console.aws.amazon.com/ec2/home?region=eu-west-1#LaunchInstanceWizard:ami=ami-f3910780>`__
- eu-central-1: `ami-00719d6f <https://console.aws.amazon.com/ec2/home?region=eu-central-1#LaunchInstanceWizard:ami=ami-00719d6f>`__
- sa-east-1: `ami-af2fa7c3 <https://console.aws.amazon.com/ec2/home?region=sa-east-1#LaunchInstanceWizard:ami=ami-af2fa7c3>`__
- ap-northeast-1: `ami-78967519 <https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#LaunchInstanceWizard:ami=ami-78967519>`__
- ap-southeast-1: `ami-bdbb6ade <https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#LaunchInstanceWizard:ami=ami-bdbb6ade>`__
- ap-southeast-2: `ami-8edbf4ed <https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#LaunchInstanceWizard:ami=ami-8edbf4ed>`__
(the above AMIs are of version: 0.10.1)
When launching the instance make sure to use a security group, that **only** allows incoming traffic on: port 22 (SSH), 80 (HTTP) and 443 (HTTPS). These AMIs are based on Ubuntu so you will need to use the user ``ubuntu`` when connecting to the instance via SSH.
Now proceed to `"Setup" <#setup>`__.
Google Compute Engine
---------------------
First, you need to add the images to your account:
.. code:: bash
$ gcloud compute images create "redash-091-b1377" --source-uri gs://redash-images/redash.0.9.1.b1377.tar.gz
Next you need to launch an instance using this image (n1-standard-1
instance type is recommended).
If you plan using Re:dash with BigQuery, you can use a dedicated image which comes with BigQuery preconfigured
(using instance permissions):
.. code:: bash
$ gcloud compute images create "redash-091-b1377-bq" --source-uri gs://redash-images/redash.0.9.1.b1377-bq.tar.gz
Note that you need to launch this instance with BigQuery access:
.. code:: bash
$ gcloud compute instances create <your_instance_name> --image redash-091-b1377-bq --scopes storage-ro,bigquery
(the same can be done from the web interface, just make sure to enable
BigQuery access)
Please note that currently the Google Compute Engine images are for version 0.9.1. After creating the instance, please
run the :doc:`upgrade process <upgrade>` and then proceed to `"Setup" <#setup>`__.
Docker Compose
------
1. Make sure you have a Docker machine up and running.
2. Make sure your current working directory is the root of this GitHub repository.
3. Run ``docker-compose up postgres``.
4. Run ``./setup/docker/create_database.sh``. This will access the postgres container and set up the database.
5. Run ``docker-compose up``
6. Run ``docker-machine ls``, take note of the ip for the Docker machine you are using, and open the web browser.
7. Visit that Docker machine IP at port 80, and you should see a Re:dash login screen.
Now proceed to `"Setup" <#setup>`__.
Heroku
------
Due to the nature of Heroku deployments, upgrading to a newer version of Redash
requires performing the steps outlined on the `"How to Upgrade" <http://docs.redash.io/en/latest/upgrade.html>`__ page.
1. Install `Heroku CLI <https://toolbelt.heroku.com/>`__.
2. Create Heroku App::
$ heroku apps:create <app name>
2. Set application buildpacks::
$ heroku buildpacks:set heroku/python
$ heroku buildpacks:add --index 1 heroku/nodejs
3. Add Postgres and Redis addons::
$ heroku addons:create heroku-postgresql:hobby-dev
$ heroku addons:create heroku-redis:hobby-dev
4. Update the cookie secret (**Important** otherwise anyone can sign new cookies and impersonate users. You may be able to run the command ``pwgen 32 -1`` to generate a random string)::
$ heroku config:set REDASH_COOKIE_SECRET='<create a secret token and put here>'
5. Push the repository to Heroku::
$ git push heroku master
6. Create database tables::
$ heroku run ./manage.py database create_tables
7. Create admin user::
$ heroku run ./manage.py users create --admin "Admin" admin
7. Start worker process::
$ heroku ps:scale worker=1
Other
-----
Download the provision script and run it on your machine. Note that:
1. You need to run the script as root.
2. It was tested only on Ubuntu 12.04, Ubuntu 14.04 and Debian Wheezy.
3. It's designed to run on a "clean" machine. If you're running this script on a machine that is used for other purposes, you might want to tweak it to your needs (like removing the ``apt-get dist-upgrade`` call at the beginning of it).
Setup
=====
Once you created the instance with either the image or the script, you
should have a running Re:dash instance with everything you need to get
started . Re:dash should be available using the server IP or DNS name
you assigned to it. You can point your browser to this address, and login
with the user "admin" (password: "admin"). But to make it useful, there are
a few more steps that you need to manually do to complete the setup:
First ssh to your instance and change directory to ``/opt/redash``. If
you're using the GCE image, switch to root (``sudo su``).
Users & Google Authentication setup
-----------------------------------
Most of the settings you need to edit are in the ``/opt/redash/.env``
file.
1. Update the cookie secret (important! otherwise anyone can sign new
cookies and impersonate users): change "veryverysecret" in the line:
``export REDASH_COOKIE_SECRET=veryverysecret`` to something else (you
can run the command ``pwgen 32 -1`` to generate a random string).
2. By default we create an admin user with the password "admin". You
can change this password opening the: ``/users/me#password`` page after
logging in as admin.
3. If you want to use Google OAuth to authenticate users, you need to
create a Google Developers project (see :doc:`instructions </misc/google_developers_project>`)
and then add the needed configuration in the ``.env`` file:
.. code::
export REDASH_GOOGLE_CLIENT_ID=""
export REDASH_GOOGLE_CLIENT_SECRET=""
4. Configure the domain(s) you want to allow to use with Google Apps, by running the command:
.. code::
cd /opt/redash/current
sudo -u redash bin/run ./manage.py org set_google_apps_domains {{domains}}
If you're passing multiple domains, separate them with commas.
5. Restart the web server to apply the configuration changes:
``sudo supervisorctl restart redash_server``.
6. Once you have Google OAuth enabled, you can login using your Google
Apps account. If you want to grant admin permissions to some users,
you can do this by adding them to the admin group (from ``/groups`` page).
7. If you don't use Google OAuth or just need username/password logins,
you can create additional users by opening the ``/users/new`` page.
Datasources
-----------
To make Re:dash truly useful, you need to setup your data sources in it. Browse to ``/data_sources`` on your instance,
to create new data source connection.
See :doc:`documentation </datasources>` for the different options.
Your instance comes ready with dependencies needed to setup supported sources.
Mail Configuration
------------------
For the system to be able to send emails (for example when alerts trigger), you need to set the mail server to use and the
host name of your Re:dash server. If you're using one of our images, you can do this by editing the `.env` file:
.. code::
# Note that not all values are required, as they have default values.
export REDASH_MAIL_SERVER="" # default: localhost
export REDASH_MAIL_PORT="" # default: 25
export REDASH_MAIL_USE_TLS="" # default: False
export REDASH_MAIL_USE_SSL="" # default: False
export REDASH_MAIL_USERNAME="" # default: None
export REDASH_MAIL_PASSWORD="" # default: None
export REDASH_MAIL_DEFAULT_SENDER="" # Email address to send from
export REDASH_HOST="" # base address of your Re:dash instance, for example: "https://demo.redash.io"
- Note that not all values are required, as there are default values.
- It's recommended to use some mail service, like `Amazon SES <https://aws.amazon.com/ses/>`__, `Mailgun <http://www.mailgun.com/>`__
or `Mandrill <http://mandrillapp.com>`__ to send emails to ensure deliverability.
To test email configuration, you can run `bin/run ./manage.py send_test_mail` (from `/opt/redash/current`).
How to upgrade?
---------------
It's recommended to upgrade once in a while your Re:dash instance to
benefit from bug fixes and new features. See :doc:`here </upgrade>` for full upgrade
instructions (including Fabric script).
Configuration
-------------
For a full list of environment variables, see :doc:`the settings page </settings>`.
Notes
=====
- If this is a production setup, you should enforce HTTPS and make sure
you set the cookie secret (see :doc:`instructions </misc/ssl>`).

37
docs/upgrade.rst Normal file
View File

@@ -0,0 +1,37 @@
How to Upgrade
##############
It's recommended to upgrade your Re:dash instance once there are new
releases, to benefit from new features and bug fixes. The upgrade
process is relatively simple, and assuming you used one of the base
images we provide, you can just use the
`Fabric <http://www.fabfile.org/>`__ script provided here:
https://gist.github.com/arikfr/440d1403b4aeb76ebaf8.
How to run the Fabric script
============================
1. Install Fabric: ``pip install fabric requests`` (needed only once)
2. Download the ``fabfile.py`` from the gist.
3. Run the script:
``fab -H{your Re:dash host} -u{the ssh user for this host} -i{path to key file for passwordless login} deploy_latest_release``
``-i`` is optional and it is only needed in case you're using private-key based authentication (and didn't add the key file to your authentication agent or set its path in your SSH config).
What the Fabric script does
===========================
Even if you didn't use the image, it's very likely you can reuse most of
this script with small modifications. What this script does is:
1. Find the URL of the latest release tarball (from `GitHub releases
page <http://github.com/getredash/redash/releases>`__).
2. Download it.
3. Create new directory for this version (for example:
``/opt/redash/redash.0.5.0.b685``).
4. Unpack that (``tar -C {dir} -xvf {tarball path}``).
5. Link ``/opt/redash/.env`` file into this directory.
6. Apply any new migrations.
7. Link ``/opt/redash/current`` to new version.
8. Install any new requirements - ``sudo pip install -r requirements.txt``
9. Restart web server and celery workers.

10
docs/usage.rst Normal file
View File

@@ -0,0 +1,10 @@
Usage
=====
.. toctree::
:maxdepth: 2
:glob:
usage/*

View File

@@ -0,0 +1,72 @@
ElasticSearch: Querying
#######################
ElasticSearch currently supports only simple Lucene style queries (like
Kibana but without the aggregation).
Full blown JSON based ElasticSearch queries (including aggregations)
will be added later.
Simple query example:
=====================
- Query the index named "twitter"
- Filter by "user:kimchy"
- Return the fields: "@timestamp", "tweet" and "user"
- Return up to 15 results
- Sort by @timestamp ascending
.. code:: json
{
"index" : "twitter",
"query" : "user:kimchy",
"fields" : ["@timestamp", "tweet", "user"],
"size" : 15,
"sort" : "@timestamp:asc"
}
Simple query on a logstash ElasticSearch instance:
==================================================
- Query the index named "logstash-2015.04.\*" (in this case its all of
April 2015)
- Filter by type:events AND eventName:UserUpgrade AND channel:selfserve
- Return fields: "@timestamp", "userId", "channel", "utm\_source",
"utm\_medium", "utm\_campaign", "utm\_content"
- Return up to 250 results
- Sort by @timestamp ascending
.. code:: json
{
"index" : "logstash-2015.04.*",
"query" : "type:events AND eventName:UserUpgrade AND channel:selfserve",
"fields" : ["@timestamp", "userId", "channel", "utm_source", "utm_medium", "utm_campaign", "utm_content"],
"size" : 250,
"sort" : "@timestamp:asc"
}
Simple query on a ElasticSearch instance:
==================================================
- Query the index named "twitter"
- Filter by user equal "kimchy"
- Return the fields: "@timestamp", "tweet" and "user"
- Return up to 15 results
- Sort by @timestamp ascending
.. code:: json
{
"index" : "twitter",
"query" : {
"match": {
"user" : "kimchy"
}
},
"fields" : ["@timestamp", "tweet", "user"],
"size" : 15,
"sort" : "@timestamp:asc"
}

112
docs/usage/maintenance.rst Normal file
View File

@@ -0,0 +1,112 @@
Ongoing Maintanence and Basic Operations
########################################
Configuration and logs
======================
The supervisor config can be found in
``/opt/redash/supervisord/supervisord.conf``.
There you can see the names of its programs (``redash_celery``,
``redash_server``) and the location of their logs.
Restart
=======
Restarting the Web Server
-------------------------
``sudo supervisorctl restart redash_server``
Restarting Celery Workers
-------------------------
``sudo supervisorctl restart redash_celery``
Restarting Celery Workers & the Queries Queue
---------------------------------------------
In case you are handling a problem, and you need to stop the currently
running queries and reset the queue, follow the steps below.
1. Stop celery: ``sudo supervisorctl stop redash_celery`` (celery might
take some time to stop, if it's in the middle of running a query)
2. Flush redis: ``redis-cli flushall``.
3. Start celery: ``sudo supervisorctl start redash_celery``
Changing the Number of Workers
==============================
By default, Celery will start a worker per CPU core. Because most of
Re:dash's tasks are IO bound, the real limit for number of workers you
can use depends on the amount of memory your machine has. It's
recommended to increase number of workers, to support more concurrent
queries.
1. Open the supervisord configuration file:
``/opt/redash/supervisord/supervisord.conf``
2. Edit the ``[program:redash_celery]`` section and add to the *command*
value, the param "-c" with the number of concurrent workers you need.
3. Restart supervisord to apply new configuration:
``sudo /etc/init.d/redash_supervisord restart``.
DB
==
Backup Re:dash's DB:
--------------------
Uncompressed backup: ``sudo -u redash pg_dump > backup_filename.sql``
Compressed backup: ``sudo -u redash pg_dump redash | gzip > backup_filename.gz``
Version
=======
See current version:
``bin/run ./manage.py version``
Monitoring
==========
Re:dash ships by default with a HTTP handler that gives you useful information about the
health of your application. The endpoint is ``/status.json`` and requires a super admin
API key to be given if you're not already logged in. This API key can be obtained from
the dedicated tab in your profile.
You'll find below an example output of this endpoint:
.. code-block:: json
{
"dashboards_count": 30,
"manager": {
"last_refresh_at": "1465392784.433638",
"outdated_queries_count": 1,
"query_ids": "[34]",
"queues": {
"queries": {
"data_sources": "Redshift data, re:dash metadata, MySQL data, MySQL read-only, Redshift read-only",
"size": 1
},
"scheduled_queries": {
"data_sources": "Redshift data, re:dash metadata, MySQL data, MySQL read-only, Redshift read-only",
"size": 0
}
}
},
"queries_count": 204,
"query_results_count": 11161,
"redis_used_memory": "6.09M",
"unused_query_results_count": 32,
"version": "0.10.0+b1774",
"widgets_count": 176,
"workers": []
}
If you plan to hit this endpoint without being logged in, you'll need to provide your API key as a query parameter. Example endpoint with an API key: ``/status.json?api_key=fooBarqsLlGJQIs3maPErUxKuxwWGIpDXoSzQsx7xdv``

View File

@@ -0,0 +1,74 @@
MongoDB: Querying
#################
Simple query example:
=====================
.. code:: json
{
"collection" : "my_collection",
"query" : {
"date" : {
"$gt" : "ISODate(\"2015-01-15 11:41\")",
},
"type" : 1
},
"fields" : {
"_id" : 1,
"name" : 2
},
"sort" : [
{
"name" : "date",
"direction" : -1
}
]
}
Live example on the demo instance:
http://demo.redash.io/queries/394/source.
Aggregation
===========
Uses a syntax similar to the one used in PyMongo, however to support the
correct order of sorting, it uses a regular list for the "$sort"
operation that converts into a SON (sorted dictionary) object before
execution.
Aggregation query example:
.. code:: json
{
"collection" : "things",
"aggregate" : [
{
"$unwind" : "$tags"
},
{
"$group" : {
"_id" : "$tags",
"count" : { "$sum" : 1 }
}
},
{
"$sort" : [
{
"name" : "count",
"direction" : -1
},
{
"name" : "_id",
"direction" : -1
}
]
}
]
}
Live examples on the demo instance:
1. http://demo.redash.io/queries/393/source
2. http://demo.redash.io/queries/387/source

View File

@@ -0,0 +1,34 @@
Permissions Model
#################
In version 0.9.0 we introduced a new permissions model based on groups. Each user by default joins the ``Default`` group, but
can be a member of any number of groups.
Group membership defines the actions you're allowed to take (although currently there is no UI to edit group action permissions),
but also what data sources you have access to (for this we have UI).
How does it work?
=================
* Each user belongs to one or more groups. By default each user joins the ``Default`` group. So the common
data sources, should be associated with this group.
* Each data source will be associated with one or more groups. Each connection to a group will define,
whether this group has full access to this data source (view existing queries and run new ones) or view only access,
which allows only viewing existing queries and results.
* Any dashboard can contain visualizations from any data source (as long as the creating user has access to them). When
a user who doesn't have access to some visualization (because he doesn't have access to the data source) opens a dashboard,
he will see that there is a visualization there but won't see the details.
.. figure:: https://cloud.githubusercontent.com/assets/71468/12002946/dc5032ca-ab16-11e5-90e7-aae9234a596b.png
Dashboard widget with a visualization the user doesn't have access to.
If a user has access to at least one widget on a dashboard, they can see this dashboard in the list of all dashboards.
What if I want to limit the user to only some tables?
=====================================================
The idea is to leverage your database's security model, and hence create a user with access to the tables/columns you
want to give access to. Create a data source that is using this user and then associate it with a group of users who need
this level of access.

View File

@@ -0,0 +1,44 @@
Special Features
#################
Re:dash has a lot of very useful features and most of them can be found easily when using the UI. This page features the less well-known ones.
Queries
========
It is possible to have filters for query results and visualizations. Thanks to filters, you can restrain the result to a certain or multiple values. Filters are enabled by following a naming convention for columns.
If you want to focus only on a specific value, you will need to alias your column to ``<columnName>::filter``. Here is an example:
.. code:: sql
select action as "action::filter", count (0) as "actions count"
from events
group by action
You can see this query and the rendered UI `here <http://demo.redash.io/queries/143/source#table>`_.
If you are interested in multi filters (meaning that you can select multiple values), you will need to alias your column to ``<columnName>::multi-filter``. Here is an example:
.. code:: sql
select action as "action::multi-filter", count (0) as "actions count"
from events
group by action
You can see this query and the rendered UI `here <http://demo.redash.io/queries/144/source#table>`_.
Note that you can use ``__filter`` or ``__multiFilter`` if your database doesn't support ``::`` in column names (such as BigQuery).
Dashboards
==========
It is possible to group multiple dashboards in the dashboards menu. To do this, you need to follow a naming convention by using a column (``:``) to separate the dashboard group and the actual dashboard name. For example, if you name 2 dashboards ``Foo: Bar`` and ``Foo: Baz``, they will be grouped under the ``Foo`` namespace in the dropdown menu.
If you've got queries that have some filters and you want to apply filters at the dashboard level (that apply to all queries), you need to set a flag. Can you do it through the admin interface at ``/admin/dashboard`` or you can do it by manually setting the column ``dashboard_filters_enabled`` of the table ``dashboards`` to ``TRUE`` in the Re:dash database.
Exporting query results to CSV or JSON
======================================
Query results can be automatically exported to CSV or JSON by using your API key. Your API key can be found when viewing your profile, from the top right menu in the navigation bar.
The format of the URL is the following: ``https://<redash_domain>/api/queries/<query_id>/results.(csv|json)?api_key=<your_api_key>``. Here is a working example: `<http://demo.redash.io/api/queries/63/results.json?api_key=874fcd93ce4b6ef87a9aad41c712bcd5d17cdc8f>`_.
Using this URL you can easily import query results directly into Google Spreadsheets, using the ``importdata`` function. For example: ``=importdata("...")``.

131
gulpfile.js Normal file
View File

@@ -0,0 +1,131 @@
// Generated on 2016-02-09 using generator-angular 0.15.1
'use strict';
var gulp = require('gulp');
var $ = require('gulp-load-plugins')();
var lazypipe = require('lazypipe');
var rimraf = require('rimraf');
var wiredep = require('wiredep').stream;
var runSequence = require('run-sequence');
var map = require('lodash.map');
var yeoman = {
app: 'rd_ui/app',
dist: 'rd_ui/dist'
};
function applyAppPath(p) {
if (typeof p === 'string') {
return yeoman.app + p;
} else {
return map(p, function (path) {
return applyAppPath(path);
});
}
}
var paths = {
scripts: [yeoman.app + '/scripts/**/*.js'],
styles: [yeoman.app + '/styles/**/*.css'],
views: {
main: applyAppPath(['/index.html', '/vendor_scripts.html', '/login.html', '/embed.html', '/public.html', '/app_layout.html', '/signed_out_layout.html']),
files: [yeoman.app + '/views/**/*.html']
}
};
////////////////////////
// Reusable pipelines //
////////////////////////
var lintScripts = lazypipe()
.pipe($.jshint, '.jshintrc')
.pipe($.jshint.reporter, 'jshint-stylish');
var styles = lazypipe()
.pipe($.autoprefixer, 'last 1 version')
.pipe(gulp.dest, '.tmp/styles');
///////////
// Tasks //
///////////
gulp.task('styles', function () {
return gulp.src(paths.styles)
.pipe(styles());
});
gulp.task('lint:scripts', function () {
return gulp.src(paths.scripts)
.pipe(lintScripts());
});
gulp.task('clean:tmp', function (cb) {
rimraf('./.tmp', cb);
});
// inject bower components
gulp.task('bower', function () {
return gulp.src(paths.views.main)
.pipe(wiredep({
directory: yeoman.app + '/bower_components',
ignorePath: '..'
}))
.pipe(gulp.dest(yeoman.app + '/views'));
});
///////////
// Build //
///////////
gulp.task('clean:dist', function (cb) {
rimraf('./dist', cb);
});
gulp.task('client:build', ['html', 'styles'], function () {
var jsFilter = $.filter('**/*.js');
var cssFilter = $.filter('**/*.css');
return gulp.src(paths.views.main)
.pipe($.useref({searchPath: [yeoman.app, '.tmp']}))
.pipe(jsFilter)
.pipe($.ngAnnotate())
.pipe($.uglify())
.pipe(jsFilter.restore())
.pipe($.print())
.pipe(cssFilter)
.pipe($.minifyCss({cache: true}))
.pipe(cssFilter.restore())
.pipe(new $.revAll({dontRenameFile: ['.html'], dontUpdateReference: ['vendor_scripts.html', 'app_layout.html', 'signed_out_layout.html']}).revision())
.pipe(gulp.dest(yeoman.dist));
});
gulp.task('html', function () {
return gulp.src(yeoman.app + '/views/**/*')
.pipe(gulp.dest(yeoman.dist + '/views'));
});
gulp.task('images', function () {
return gulp.src(yeoman.app + '/images/**/*')
.pipe($.cache($.imagemin({
optimizationLevel: 5,
progressive: true,
interlaced: true
})))
.pipe(gulp.dest(yeoman.dist + '/images'));
});
gulp.task('copy:extras', function () {
return gulp.src(applyAppPath(['/*/.*', '/google_login.png', '/favicon.ico', '/robots.txt']), { dot: true })
.pipe(gulp.dest(yeoman.dist));
});
gulp.task('copy:fonts', function () {
return gulp.src(applyAppPath(['/fonts/**/*', '/bower_components/font-awesome/fonts/*', '/bower_components/material-design-iconic-font/dist/fonts/*']))
.pipe(gulp.dest(yeoman.dist + '/fonts'));
});
gulp.task('build', ['clean:dist'], function () {
runSequence(['images', 'copy:extras', 'copy:fonts', 'client:build']);
});
gulp.task('default', ['build']);

59
manage.py Executable file
View File

@@ -0,0 +1,59 @@
#!/usr/bin/env python
"""
CLI to manage redash.
"""
import json
from flask_script import Manager
from redash import settings, models, __version__
from redash.wsgi import app
from redash.cli import users, groups, database, data_sources, organization
from redash.monitor import get_status
manager = Manager(app)
manager.add_command("database", database.manager)
manager.add_command("users", users.manager)
manager.add_command("groups", groups.manager)
manager.add_command("ds", data_sources.manager)
manager.add_command("org", organization.manager)
@manager.command
def version():
"""Displays re:dash version."""
print __version__
@manager.command
def status():
print json.dumps(get_status(), indent=2)
@manager.command
def runworkers():
"""Start workers (deprecated)."""
print "** This command is deprecated. Please use Celery's CLI to control the workers. **"
@manager.shell
def make_shell_context():
from redash.models import db
return dict(app=app, db=db, models=models)
@manager.command
def check_settings():
"""Show the settings as re:dash sees them (useful for debugging)."""
for name, item in settings.all_settings().iteritems():
print "{} = {}".format(name, item)
@manager.command
def send_test_mail():
from redash import mail
from flask_mail import Message
mail.send(Message(subject="Test Message from re:dash", recipients=[settings.MAIL_DEFAULT_SENDER], body="Test message."))
if __name__ == '__main__':
manager.run()

View File

@@ -0,0 +1,15 @@
from playhouse.migrate import PostgresqlMigrator, migrate
from redash.models import db
from redash import models
if __name__ == '__main__':
db.connect_db()
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
migrate(
migrator.add_column('queries', 'is_archived', models.Query.is_archived)
)
db.close_db(None)

View File

@@ -0,0 +1,20 @@
from redash.models import db
if __name__ == '__main__':
db.connect_db()
columns = (
('activity_log', 'created_at'),
('dashboards', 'created_at'),
('data_sources', 'created_at'),
('events', 'created_at'),
('groups', 'created_at'),
('queries', 'created_at'),
('widgets', 'created_at'),
('query_results', 'retrieved_at')
)
with db.database.transaction():
for column in columns:
db.database.execute_sql("ALTER TABLE {} ALTER COLUMN {} TYPE timestamp with time zone;".format(*column))
db.close_db(None)

View File

@@ -0,0 +1,91 @@
import json
import jsonschema
from jsonschema import ValidationError
from redash import query_runner
from redash.models import DataSource
def validate_configuration(query_runner_type, configuration_json):
query_runner_class = query_runner.query_runners.get(query_runner_type, None)
if query_runner_class is None:
return False
try:
if isinstance(configuration_json, basestring):
configuration = json.loads(configuration_json)
else:
configuration = configuration_json
jsonschema.validate(configuration, query_runner_class.configuration_schema())
except (ValidationError, ValueError):
return False
return True
def update(data_source):
print "[%s] Old options: %s" % (data_source.name, data_source.options)
if validate_configuration(data_source.type, data_source.options):
print "[%s] configuration already valid. skipping." % data_source.name
return
if data_source.type == 'pg':
values = data_source.options.split(" ")
configuration = {}
for value in values:
k, v = value.split("=", 1)
configuration[k] = v
if k == 'port':
configuration[k] = int(v)
data_source.options = json.dumps(configuration)
elif data_source.type == 'mysql':
mapping = {
'Server': 'host',
'User': 'user',
'Pwd': 'passwd',
'Database': 'db'
}
values = data_source.options.split(";")
configuration = {}
for value in values:
k, v = value.split("=", 1)
configuration[mapping[k]] = v
data_source.options = json.dumps(configuration)
elif data_source.type == 'graphite':
old_config = json.loads(data_source.options)
configuration = {
"url": old_config["url"]
}
if "verify" in old_config:
configuration['verify'] = old_config['verify']
if "auth" in old_config:
configuration['username'], configuration['password'] = old_config["auth"]
data_source.options = json.dumps(configuration)
elif data_source.type == 'url':
data_source.options = json.dumps({"url": data_source.options})
elif data_source.type == 'script':
data_source.options = json.dumps({"path": data_source.options})
elif data_source.type == 'mongo':
data_source.type = 'mongodb'
else:
print "[%s] No need to convert type of: %s" % (data_source.name, data_source.type)
print "[%s] New options: %s" % (data_source.name, data_source.options)
data_source.save(only=data_source.dirty_fields)
if __name__ == '__main__':
for data_source in DataSource.select(DataSource.id, DataSource.name, DataSource.type, DataSource.options):
update(data_source)

View File

@@ -0,0 +1,12 @@
from playhouse.migrate import PostgresqlMigrator, migrate
from redash.models import db
if __name__ == '__main__':
db.connect_db()
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
migrate(
migrator.drop_not_null('events', 'user_id')
)

View File

@@ -0,0 +1,25 @@
from playhouse.migrate import PostgresqlMigrator, migrate
from redash.models import db
from redash import models
if __name__ == '__main__':
db.connect_db()
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
migrate(
migrator.add_column('queries', 'updated_at', models.Query.updated_at),
migrator.add_column('dashboards', 'updated_at', models.Dashboard.updated_at),
migrator.add_column('widgets', 'updated_at', models.Widget.updated_at),
migrator.add_column('users', 'created_at', models.User.created_at),
migrator.add_column('users', 'updated_at', models.User.updated_at),
migrator.add_column('visualizations', 'created_at', models.Visualization.created_at),
migrator.add_column('visualizations', 'updated_at', models.Visualization.updated_at)
)
db.database.execute_sql("UPDATE queries SET updated_at = created_at;")
db.database.execute_sql("UPDATE dashboards SET updated_at = created_at;")
db.database.execute_sql("UPDATE widgets SET updated_at = created_at;")
db.close_db(None)

View File

@@ -0,0 +1,17 @@
from playhouse.migrate import PostgresqlMigrator, migrate
from redash.models import db
from redash import models
if __name__ == '__main__':
db.connect_db()
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
migrate(
migrator.add_column('queries', 'last_modified_by_id', models.Query.last_modified_by)
)
db.database.execute_sql("UPDATE queries SET last_modified_by_id = user_id;")
db.close_db(None)

View File

@@ -0,0 +1,21 @@
from playhouse.migrate import PostgresqlMigrator, migrate
from redash.models import db
from redash import models
if __name__ == '__main__':
db.connect_db()
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
migrate(
migrator.add_column('queries', 'schedule', models.Query.schedule),
)
db.database.execute_sql("UPDATE queries SET schedule = ttl WHERE ttl > 0;")
migrate(
migrator.drop_column('queries', 'ttl')
)
db.close_db(None)

View File

@@ -0,0 +1,20 @@
from redash.models import db
if __name__ == '__main__':
db.connect_db()
with db.database.transaction():
# Make sure all data sources names are unique.
db.database.execute_sql("""
UPDATE data_sources
SET name = new_names.name
FROM (
SELECT id, name || ' ' || id as name
FROM (SELECT id, name, rank() OVER (PARTITION BY name ORDER BY created_at ASC) FROM data_sources) ds WHERE rank > 1
) AS new_names
WHERE data_sources.id = new_names.id;
""")
# Add unique constraint on data_sources.name.
db.database.execute_sql("ALTER TABLE data_sources ADD CONSTRAINT unique_name UNIQUE (name);")
db.close_db(None)

View File

@@ -0,0 +1,24 @@
from playhouse.migrate import PostgresqlMigrator, migrate
from redash.models import db
from redash import models
if __name__ == '__main__':
db.connect_db()
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
column = models.User.api_key
column.null = True
migrate(
migrator.add_column('users', 'api_key', models.User.api_key),
)
for user in models.User.select(models.User.id, models.User.api_key):
user.save(only=user.dirty_fields)
migrate(
migrator.add_not_null('users', 'api_key')
)
db.close_db(None)

View File

@@ -0,0 +1,14 @@
from playhouse.migrate import PostgresqlMigrator, migrate
from redash.models import db
if __name__ == '__main__':
db.connect_db()
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
migrate(
migrator.drop_not_null('queries', 'data_source_id'),
)
db.close_db(None)

View File

@@ -0,0 +1,8 @@
from redash.models import db, Alert, AlertSubscription
if __name__ == '__main__':
with db.database.transaction():
Alert.create_table()
AlertSubscription.create_table()
db.close_db(None)

View File

@@ -0,0 +1,44 @@
from base64 import b64encode
import json
from redash.models import DataSource
def convert_p12_to_pem(p12file):
from OpenSSL import crypto
with open(p12file, 'rb') as f:
p12 = crypto.load_pkcs12(f.read(), "notasecret")
return crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())
if __name__ == '__main__':
for ds in DataSource.select(DataSource.id, DataSource.type, DataSource.options):
if ds.type == 'bigquery':
options = json.loads(ds.options)
if 'jsonKeyFile' in options:
continue
new_options = {
'projectId': options['projectId'],
'jsonKeyFile': b64encode(json.dumps({
'client_email': options['serviceAccount'],
'private_key': convert_p12_to_pem(options['privateKey'])
}))
}
ds.options = json.dumps(new_options)
ds.save(only=ds.dirty_fields)
elif ds.type == 'google_spreadsheets':
options = json.loads(ds.options)
if 'jsonKeyFile' in options:
continue
with open(options['credentialsFilePath']) as f:
new_options = {
'jsonKeyFile': b64encode(f.read())
}
ds.options = json.dumps(new_options)
ds.save(only=ds.dirty_fields)

View File

@@ -0,0 +1,7 @@
from redash import models
if __name__ == '__main__':
default_group = models.Group.select(models.Group.id, models.Group.permissions).where(models.Group.name=='default').first()
default_group.permissions.append('list_users')
default_group.save(only=[models.Group.permissions])

View File

@@ -0,0 +1,23 @@
import json
from redash import models
if __name__ == '__main__':
for vis in models.Visualization.select():
if vis.type == 'COUNTER':
options = json.loads(vis.options)
print "Before: ", options
if 'rowNumber' in options and options['rowNumber'] is not None:
options['rowNumber'] += 1
else:
options['rowNumber'] = 1
if 'counterColName' not in options:
options['counterColName'] = 'counter'
if 'targetColName' not in options:
options['targetColName'] = 'target'
options['targetRowNumber'] = options['rowNumber']
print "After: ", options
vis.options = json.dumps(options)
vis.save()

View File

@@ -0,0 +1,21 @@
import peewee
from playhouse.migrate import PostgresqlMigrator, migrate
from redash.models import db
from redash import models
if __name__ == '__main__':
db.connect_db()
migrator = PostgresqlMigrator(db.database)
cursor = db.database.execute_sql("SELECT column_name FROM information_schema.columns WHERE table_name='alerts' and column_name='rearm';")
if cursor.rowcount > 0:
print "Column exists. Skipping."
exit()
with db.database.transaction():
migrate(
migrator.add_column('alerts', 'rearm', models.Alert.rearm),
)
db.close_db(None)

View File

@@ -0,0 +1,10 @@
__author__ = 'lior'
from redash.models import DataSource
if __name__ == '__main__':
for ds in DataSource.select(DataSource.id, DataSource.type):
if ds.type == 'elasticsearch':
ds.type = 'kibana'
ds.save(only=ds.dirty_fields)

View File

@@ -0,0 +1,6 @@
from redash import models
if __name__ == '__main__':
default_group = models.Group.select(models.Group.id, models.Group.permissions).where(models.Group.name=='default').first()
default_group.permissions.append('schedule_query')
default_group.save(only=[models.Group.permissions])

View File

@@ -0,0 +1,9 @@
from redash.models import db, Alert, AlertSubscription
if __name__ == '__main__':
with db.database.transaction():
# There was an AWS/GCE image created without this table, to make sure this exists we run this migration.
if not AlertSubscription.table_exists():
AlertSubscription.create_table()
db.close_db(None)

View File

@@ -0,0 +1,14 @@
from playhouse.migrate import PostgresqlMigrator, migrate
from redash.models import db
if __name__ == '__main__':
db.connect_db()
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
migrate(
migrator.drop_column('groups', 'tables')
)
db.close_db(None)

View File

@@ -0,0 +1,34 @@
from redash.models import db, Organization, Group
from redash import settings
from playhouse.migrate import PostgresqlMigrator, migrate
if __name__ == '__main__':
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
Organization.create_table()
default_org = Organization.create(name="Default", slug='default', settings={
Organization.SETTING_GOOGLE_APPS_DOMAINS: list(settings.GOOGLE_APPS_DOMAIN)
})
column = Group.org
column.default = default_org
migrate(
migrator.add_column('groups', 'org_id', column),
migrator.add_column('events', 'org_id', column),
migrator.add_column('data_sources', 'org_id', column),
migrator.add_column('users', 'org_id', column),
migrator.add_column('dashboards', 'org_id', column),
migrator.add_column('queries', 'org_id', column),
migrator.add_column('query_results', 'org_id', column),
)
# Change the uniqueness constraint on user email to be (org, email):
migrate(
migrator.drop_index('users', 'users_email'),
migrator.add_index('users', ('org_id', 'email'), unique=True)
)
db.close_db(None)

View File

@@ -0,0 +1,44 @@
from collections import defaultdict
from redash.models import db, DataSourceGroup, DataSource, Group, Organization, User
from playhouse.migrate import PostgresqlMigrator, migrate
import peewee
if __name__ == '__main__':
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
# Add type to groups
migrate(
migrator.add_column('groups', 'type', Group.type)
)
for name in ['default', 'admin']:
group = Group.get(Group.name==name)
group.type = Group.BUILTIN_GROUP
group.save()
# Create association table between data sources and groups
DataSourceGroup.create_table()
# add default to existing data source:
default_org = Organization.get_by_id(1)
default_group = Group.get(Group.name=="default")
for ds in DataSource.all(default_org):
DataSourceGroup.create(data_source=ds, group=default_group)
# change the groups list on a user object to be an ids list
migrate(
migrator.rename_column('users', 'groups', 'old_groups'),
)
migrate(migrator.add_column('users', 'groups', User.groups))
group_map = dict(map(lambda g: (g.name, g.id), Group.select()))
user_map = defaultdict(list)
for user in User.select(User, peewee.SQL('old_groups')):
group_ids = [group_map[group] for group in user.old_groups]
user.update_instance(groups=group_ids)
migrate(migrator.drop_column('users', 'old_groups'))
db.close_db(None)

View File

@@ -0,0 +1,6 @@
from redash import models
if __name__ == '__main__':
admin_group = models.Group.get(models.Group.name=='admin')
admin_group.permissions.append('super_admin')
admin_group.save()

View File

@@ -0,0 +1,19 @@
from redash.models import db
import peewee
from playhouse.migrate import PostgresqlMigrator, migrate
if __name__ == '__main__':
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
# Change the uniqueness constraint on data source name to be (org, name):
# In some cases it's a constraint:
db.database.execute_sql('ALTER TABLE data_sources DROP CONSTRAINT IF EXISTS unique_name')
# In others only an index:
db.database.execute_sql('DROP INDEX IF EXISTS data_sources_name')
migrate(
migrator.add_index('data_sources', ('org_id', 'name'), unique=True)
)
db.close_db(None)

View File

@@ -0,0 +1,5 @@
from redash.models import ApiKey
if __name__ == '__main__':
ApiKey.create_table()

View File

@@ -0,0 +1,10 @@
from redash import models
if __name__ == '__main__':
with models.db.database.transaction():
groups = models.Group.select(models.Group.id, models.Group.permissions).where(models.Group.name=='default')
for group in groups:
group.permissions.append('list_dashboards')
group.permissions.append('list_alerts')
group.permissions.append('list_data_sources')
group.save(only=[models.Group.permissions])

View File

@@ -0,0 +1,81 @@
import peewee
from redash import settings
from redash.models import db, NotificationDestination, AlertSubscription, Alert, Organization, User
from redash.destinations import get_configuration_schema_for_destination_type
from redash.utils.configuration import ConfigurationContainer
from playhouse.migrate import PostgresqlMigrator, migrate
if __name__ == '__main__':
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
if not NotificationDestination.table_exists():
NotificationDestination.create_table()
# Update alert subscription fields
migrate(
migrator.add_column('alert_subscriptions', 'destination_id', AlertSubscription.destination)
)
try:
org = Organization.get_by_slug('default')
user = User.select().where(User.org==org, peewee.SQL("%s = ANY(groups)", org.admin_group.id)).get()
except Exception:
print "!!! Warning: failed finding default organization or admin user, won't migrate Webhook/HipChat alert subscriptions."
exit()
if settings.WEBHOOK_ENDPOINT:
# Have all existing alerts send to webhook if already configured
schema = get_configuration_schema_for_destination_type('webhook')
conf = {'url': settings.WEBHOOK_ENDPOINT}
if settings.WEBHOOK_USERNAME:
conf['username'] = settings.WEBHOOK_USERNAME
conf['password'] = settings.WEBHOOK_PASSWORD
options = ConfigurationContainer(conf, schema)
webhook = NotificationDestination.create(
org=org,
user=user,
name="Webhook",
type="webhook",
options=options
)
for alert in Alert.select():
AlertSubscription.create(
user=user,
destination=webhook,
alert=alert
)
if settings.HIPCHAT_API_TOKEN:
# Have all existing alerts send to HipChat if already configured
schema = get_configuration_schema_for_destination_type('hipchat')
conf = {}
if settings.HIPCHAT_API_URL:
conf['url'] = '{url}/room/{room_id}/notification?auth_token={token}'.format(
url=settings.HIPCHAT_API_URL, room_id=settings.HIPCHAT_ROOM_ID, token=settings.HIPCHAT_API_TOKEN)
else:
conf['url'] = 'https://hipchat.com/v2/room/{room_id}/notification?auth_token={token}'.format(
room_id=settings.HIPCHAT_ROOM_ID, token=settings.HIPCHAT_API_TOKEN)
options = ConfigurationContainer(conf, schema)
hipchat = NotificationDestination.create(
org=org,
user=user,
name="HipChat",
type="hipchat",
options=options
)
for alert in Alert.select():
AlertSubscription.create(
user=user,
destination=hipchat,
alert=alert
)
db.close_db(None)

View File

@@ -0,0 +1,8 @@
from redash import models
if __name__ == '__main__':
with models.db.database.transaction():
groups = models.Group.select(models.Group.id, models.Group.type).where(models.Group.name=='default')
for group in groups:
group.type = models.Group.BUILTIN_GROUP
group.save(only=[models.Group.type])

View File

@@ -0,0 +1,10 @@
from redash.models import db, Query
from playhouse.migrate import PostgresqlMigrator, migrate
if __name__ == '__main__':
migrator = PostgresqlMigrator(db.database)
with db.database.transaction():
migrate(
migrator.add_column('queries', 'options', Query.options),
)

43
package.json Normal file
View File

@@ -0,0 +1,43 @@
{
"name": "redash",
"devDependencies": {
"gulp": "^3.9.0",
"gulp-connect": "^2.2.0",
"gulp-autoprefixer": "2.3.1",
"gulp-cache": "^0.2.10",
"rimraf": "^2.4.0",
"gulp-filter": "^2.0.2",
"gulp-imagemin": "^2.3.0",
"gulp-jshint": "^1.11.1",
"gulp-karma": "0.0.4",
"gulp-load-plugins": "^0.10.0",
"gulp-plumber": "^1.0.1",
"gulp-minify-css": "^1.2.0",
"gulp-uglify": "^1.2.0",
"gulp-useref": "^3.0.0",
"gulp-util": "^3.0.6",
"gulp-watch": "^4.2.4",
"run-sequence": "^1.1.1",
"wiredep": "^2.2.2",
"lazypipe": "^0.2.4",
"gulp-ng-annotate": "^1.0.0",
"open": "0.0.5",
"jshint-stylish": "^1.0.0",
"gulp-print": "^2.0.1",
"gulp-rev-all": "^0.8.22",
"bower": "~1.7.1",
"gulp-cli": "~1.2.0",
"lodash.map": "^4.4.0"
},
"engines": {
"node": ">=0.10.0"
},
"scripts": {
"test": "echo 'No tests.'",
"build": "gulp build",
"bower": "bower",
"heroku-postbuild": "npm install --dev && npm run bower install && npm run build && npm prune --production"
},
"dependencies": {
}
}

View File

@@ -1,59 +0,0 @@
"""
CLI to start the workers.
TODO: move API server startup here.
"""
import atfork
atfork.monkeypatch_os_fork_functions()
import atfork.stdlib_fixer
atfork.stdlib_fixer.fix_logging_module()
import argparse
import logging
import urlparse
import redis
import time
import settings
import data
def start_workers(data_manager):
try:
old_workers = data_manager.redis_connection.smembers('workers')
data_manager.redis_connection.delete('workers')
logging.info("Cleaning old workers: %s", old_workers)
data_manager.start_workers(settings.WORKERS_COUNT, settings.CONNECTION_STRING)
logging.info("Workers started.")
while True:
try:
data_manager.refresh_queries()
except Exception as e:
logging.error("Something went wrong with refreshing queries...")
logging.exception(e)
time.sleep(60)
except KeyboardInterrupt:
logging.warning("Exiting; waiting for threads")
data_manager.stop_workers()
if __name__ == '__main__':
channel = logging.StreamHandler()
logging.getLogger().addHandler(channel)
logging.getLogger().setLevel(settings.LOG_LEVEL)
parser = argparse.ArgumentParser()
parser.add_argument("command")
args = parser.parse_args()
url = urlparse.urlparse(settings.REDIS_URL)
redis_connection = redis.StrictRedis(host=url.hostname, port=url.port, db=0, password=url.password)
data_manager = data.Manager(redis_connection, settings.INTERNAL_DB_CONNECTION_STRING, settings.MAX_CONNECTIONS)
if args.command == "worker":
start_workers(data_manager)
else:
print "Unknown command"

View File

@@ -1,4 +0,0 @@
from manager import Manager
from worker import Job
import models
import utils

View File

@@ -1,192 +0,0 @@
"""
Data manager. Used to manage and coordinate execution of queries.
"""
import collections
from contextlib import contextmanager
import json
import logging
import psycopg2
import qr
import redis
import time
import worker
import settings
from utils import gen_query_hash
class QueryResult(collections.namedtuple('QueryData', 'id query data runtime retrieved_at query_hash')):
def to_dict(self, parse_data=False):
d = self._asdict()
if parse_data and d['data']:
d['data'] = json.loads(d['data'])
return d
class Manager(object):
def __init__(self, redis_connection, db_connection_string, db_max_connections):
self.redis_connection = redis_connection
self.workers = []
self.db_connection_string = db_connection_string
self.queue = qr.PriorityQueue("jobs", **self.redis_connection.connection_pool.connection_kwargs)
self.max_retries = 5
self.status = {
'last_refresh_at': 0,
'started_at': time.time()
}
self._save_status()
# TODO: Use our Django Models
def get_query_result_by_id(self, query_result_id):
with self.db_transaction() as cursor:
sql = "SELECT id, query, data, runtime, retrieved_at, query_hash FROM query_results " \
"WHERE id=%s LIMIT 1"
cursor.execute(sql, (query_result_id,))
query_result = cursor.fetchone()
if query_result:
query_result = QueryResult(*query_result)
return query_result
def get_query_result(self, query, ttl=0):
query_hash = gen_query_hash(query)
with self.db_transaction() as cursor:
sql = "SELECT id, query, data, runtime, retrieved_at, query_hash FROM query_results " \
"WHERE query_hash=%s " \
"AND retrieved_at < now() at time zone 'utc' - interval '%s second'" \
"ORDER BY retrieved_at DESC LIMIT 1"
cursor.execute(sql, (query_hash, psycopg2.extensions.AsIs(ttl)))
query_result = cursor.fetchone()
if query_result:
query_result = QueryResult(*query_result)
return query_result
def add_job(self, query, priority):
query_hash = gen_query_hash(query)
logging.info("[Manager][%s] Inserting job with priority=%s", query_hash, priority)
try_count = 0
job = None
while try_count < self.max_retries:
try_count += 1
pipe = self.redis_connection.pipeline()
try:
pipe.watch('query_hash_job:%s' % query_hash)
job_id = pipe.get('query_hash_job:%s' % query_hash)
if job_id:
logging.info("[Manager][%s] Found existing job: %s", query_hash, job_id)
job = worker.Job.load(self.redis_connection, job_id)
else:
job = worker.Job(self.redis_connection, query, priority)
pipe.multi()
job.save(pipe)
logging.info("[Manager][%s] Created new job: %s", query_hash, job.id)
self.queue.push(job.id, job.priority)
break
except redis.WatchError:
continue
if not job:
logging.error("[Manager][%s] Failed adding job for query.", query_hash)
return job
def refresh_queries(self):
sql = """SELECT queries.query, queries.ttl, retrieved_at
FROM (SELECT query, min(ttl) as ttl FROM queries WHERE ttl > 0 GROUP by query) queries
JOIN (SELECT query, max(retrieved_at) as retrieved_at
FROM query_results
GROUP BY query) query_results on query_results.query=queries.query
WHERE queries.ttl > 0
AND query_results.retrieved_at + ttl * interval '1 second' < now() at time zone 'utc';"""
self.status['last_refresh_at'] = time.time()
self._save_status()
logging.info("Refreshing queries...")
queries = self.run_query(sql)
for query, ttl, retrieved_at in queries:
self.add_job(query, worker.Job.LOW_PRIORITY)
logging.info("Done refreshing queries... %d" % len(queries))
def store_query_result(self, query, data, run_time, retrieved_at):
query_result_id = None
query_hash = gen_query_hash(query)
sql = "INSERT INTO query_results (query_hash, query, data, runtime, retrieved_at) " \
"VALUES (%s, %s, %s, %s, %s) RETURNING id"
with self.db_transaction() as cursor:
cursor.execute(sql, (query_hash, query, data, run_time, retrieved_at))
if cursor.rowcount == 1:
query_result_id = cursor.fetchone()[0]
logging.info("[Manager][%s] Inserted query data; id=%s", query_hash, query_result_id)
sql = "UPDATE queries SET latest_query_data_id=%s WHERE query_hash=%s"
cursor.execute(sql, (query_result_id, query_hash))
logging.info("[Manager][%s] Updated %s queries.", query_hash, cursor.rowcount)
else:
logging.error("[Manager][%s] Failed inserting query data.", query_hash)
return query_result_id
def run_query(self, *args):
sql = args[0]
logging.debug("running query: %s %s", sql, args[1:])
with self.db_transaction() as cursor:
cursor.execute(sql, args[1:])
if cursor.description:
data = list(cursor)
else:
data = cursor.rowcount
return data
def start_workers(self, workers_count, connection_string):
if self.workers:
return self.workers
if settings.CONNECTION_ADAPTER == "mysql":
import query_runner_mysql
runner = query_runner_mysql.mysql(connection_string)
else:
import query_runner
runner = query_runner.redshift(connection_string)
redis_connection_params = self.redis_connection.connection_pool.connection_kwargs
self.workers = [worker.Worker(self, redis_connection_params, runner)
for _ in range(workers_count)]
for w in self.workers:
w.start()
return self.workers
def stop_workers(self):
for w in self.workers:
w.continue_working = False
w.join()
@contextmanager
def db_transaction(self):
connection = psycopg2.connect(self.db_connection_string)
cursor = connection.cursor()
try:
yield cursor
except:
connection.rollback()
raise
else:
connection.commit()
finally:
connection.close()
def _save_status(self):
self.redis_connection.hmset('manager:status', self.status)

View File

@@ -1,210 +0,0 @@
"""
Django ORM based models to describe the data model of re:dash.
"""
import hashlib
import json
import time
from django.db import models
from django.template.defaultfilters import slugify
import utils
class QueryResult(models.Model):
id = models.AutoField(primary_key=True)
query_hash = models.CharField(max_length=32)
query = models.TextField()
data = models.TextField()
runtime = models.FloatField()
retrieved_at = models.DateTimeField()
class Meta:
app_label = 'redash'
db_table = 'query_results'
def to_dict(self):
return {
'id': self.id,
'query_hash': self.query_hash,
'query': self.query,
'data': json.loads(self.data),
'runtime': self.runtime,
'retrieved_at': self.retrieved_at
}
def __unicode__(self):
return u"%d | %s | %s" % (self.id, self.query_hash, self.retrieved_at)
class Query(models.Model):
id = models.AutoField(primary_key=True)
latest_query_data = models.ForeignKey(QueryResult)
name = models.CharField(max_length=255)
description = models.CharField(max_length=4096)
query = models.TextField()
query_hash = models.CharField(max_length=32)
api_key = models.CharField(max_length=40)
ttl = models.IntegerField()
user = models.CharField(max_length=360)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
app_label = 'redash'
db_table = 'queries'
def to_dict(self, with_result=True, with_stats=False,
with_visualizations=False):
d = {
'id': self.id,
'latest_query_data_id': self.latest_query_data_id,
'name': self.name,
'description': self.description,
'query': self.query,
'query_hash': self.query_hash,
'ttl': self.ttl,
'user': self.user,
'api_key': self.api_key,
'created_at': self.created_at,
}
if with_stats:
d['avg_runtime'] = self.avg_runtime
d['min_runtime'] = self.min_runtime
d['max_runtime'] = self.max_runtime
d['last_retrieved_at'] = self.last_retrieved_at
d['times_retrieved'] = self.times_retrieved
if with_result and self.latest_query_data_id:
d['latest_query_data'] = self.latest_query_data.to_dict()
if with_visualizations:
d['visualizations'] = [vis.to_dict(with_query=False)
for vis in self.visualizations.all()]
return d
@classmethod
def all_queries(cls):
query = """SELECT queries.*, query_stats.*
FROM queries
LEFT OUTER JOIN
(SELECT qu.query_hash,
count(0) AS "times_retrieved",
avg(runtime) AS "avg_runtime",
min(runtime) AS "min_runtime",
max(runtime) AS "max_runtime",
max(retrieved_at) AS "last_retrieved_at"
FROM queries qu
JOIN query_results qr ON qu.query_hash=qr.query_hash
GROUP BY qu.query_hash) query_stats ON query_stats.query_hash = queries.query_hash
"""
return cls.objects.raw(query)
def save(self, *args, **kwargs):
self.query_hash = utils.gen_query_hash(self.query)
self._set_api_key()
super(Query, self).save(*args, **kwargs)
def _set_api_key(self):
if not self.api_key:
self.api_key = hashlib.sha1(
u''.join([str(time.time()), self.query, self.user, self.name])).hexdigest()
def __unicode__(self):
return unicode(self.id)
class Dashboard(models.Model):
id = models.AutoField(primary_key=True)
slug = models.CharField(max_length=140)
name = models.CharField(max_length=100)
user = models.CharField(max_length=360)
layout = models.TextField()
is_archived = models.BooleanField(default=False)
class Meta:
app_label = 'redash'
db_table = 'dashboards'
def to_dict(self, with_widgets=False):
layout = json.loads(self.layout)
if with_widgets:
widgets = {w.id: w.to_dict() for w in self.widgets.all()}
widgets_layout = map(lambda row: map(lambda widget_id: widgets.get(widget_id, None), row), layout)
else:
widgets_layout = None
return {
'id': self.id,
'slug': self.slug,
'name': self.name,
'user': self.user,
'layout': layout,
'widgets': widgets_layout
}
def save(self, *args, **kwargs):
# TODO: make sure slug is unique
if not self.slug:
self.slug = slugify(self.name)
super(Dashboard, self).save(*args, **kwargs)
def __unicode__(self):
return u"%s=%s" % (self.id, self.name)
class Visualization(models.Model):
id = models.AutoField(primary_key=True)
type = models.CharField(max_length=100)
query = models.ForeignKey(Query, related_name='visualizations')
name = models.CharField(max_length=255)
description = models.CharField(max_length=4096)
options = models.TextField()
class Meta:
app_label = 'redash'
db_table = 'visualizations'
def to_dict(self, with_query=True):
d = {
'id': self.id,
'type': self.type,
'name': self.name,
'description': self.description,
'options': json.loads(self.options),
}
if with_query:
d['query'] = self.query.to_dict()
return d
def __unicode__(self):
return u"%s=>%s" % (self.id, self.query_id)
class Widget(models.Model):
id = models.AutoField(primary_key=True)
type = models.CharField(max_length=100)
query = models.ForeignKey(Query, related_name='widgets')
visualization = models.ForeignKey(Visualization, related_name='widgets')
width = models.IntegerField()
options = models.TextField()
dashboard = models.ForeignKey(Dashboard, related_name='widgets')
class Meta:
app_label = 'redash'
db_table = 'widgets'
def to_dict(self):
return {
'id': self.id,
'type': self.type,
'width': self.width,
'options': json.loads(self.options),
'visualization': self.visualization.to_dict(),
'dashboard_id': self.dashboard_id
}
def __unicode__(self):
return u"%s=>%s" % (self.id, self.dashboard_id)

View File

@@ -1,67 +0,0 @@
"""
QueryRunner is the function that the workers use, to execute queries. This is the Redshift
(PostgreSQL in fact) version, but easily we can write another to support additional databases
(MySQL and others).
Because the worker just pass the query, this can be used with any data store that has some sort of
query language (for example: HiveQL).
"""
import logging
import json
import psycopg2
import sys
import select
from .utils import JSONEncoder
def redshift(connection_string):
def column_friendly_name(column_name):
return column_name
def wait(conn):
while 1:
state = conn.poll()
if state == psycopg2.extensions.POLL_OK:
break
elif state == psycopg2.extensions.POLL_WRITE:
select.select([], [conn.fileno()], [])
elif state == psycopg2.extensions.POLL_READ:
select.select([conn.fileno()], [], [])
else:
raise psycopg2.OperationalError("poll() returned %s" % state)
def query_runner(query):
connection = psycopg2.connect(connection_string, async=True)
wait(connection)
cursor = connection.cursor()
try:
cursor.execute(query)
wait(connection)
column_names = [col.name for col in cursor.description]
rows = [dict(zip(column_names, row)) for row in cursor]
columns = [{'name': col.name,
'friendly_name': column_friendly_name(col.name),
'type': None} for col in cursor.description]
data = {'columns': columns, 'rows': rows}
json_data = json.dumps(data, cls=JSONEncoder)
error = None
cursor.close()
except psycopg2.DatabaseError as e:
json_data = None
error = e.message
except KeyboardInterrupt:
connection.cancel()
error = "Query cancelled by user."
json_data = None
except Exception as e:
raise sys.exc_info()[1], None, sys.exc_info()[2]
finally:
connection.close()
return json_data, error
return query_runner

View File

@@ -1,56 +0,0 @@
"""
QueryRunner is the function that the workers use, to execute queries. This is the Redshift
(PostgreSQL in fact) version, but easily we can write another to support additional databases
(MySQL and others).
Because the worker just pass the query, this can be used with any data store that has some sort of
query language (for example: HiveQL).
"""
import logging
import json
import MySQLdb
import sys
import select
from .utils import JSONEncoder
def mysql(connection_string):
if connection_string.endswith(';'):
connection_string = connection_string[0:-1]
def query_runner(query):
connections_params = [entry.split('=')[1] for entry in connection_string.split(';')]
connection = MySQLdb.connect(*connections_params)
cursor = connection.cursor()
logging.debug("mysql got query: %s", query)
try:
cursor.execute(query)
data = cursor.fetchall()
num_fields = len(cursor.description)
column_names = [i[0] for i in cursor.description]
rows = [dict(zip(column_names, row)) for row in data]
columns = [{'name': col_name,
'friendly_name': col_name,
'type': None} for col_name in column_names]
data = {'columns': columns, 'rows': rows}
json_data = json.dumps(data, cls=JSONEncoder)
error = None
cursor.close()
except MySQLdb.Error, e:
json_data = None
error = e.message
except Exception as e:
raise sys.exc_info()[1], None, sys.exc_info()[2]
finally:
connection.close()
return json_data, error
return query_runner

View File

@@ -1,55 +0,0 @@
BEGIN;
CREATE TABLE "query_results" (
"id" serial NOT NULL PRIMARY KEY,
"query_hash" varchar(32) NOT NULL,
"query" text NOT NULL,
"data" text NOT NULL,
"runtime" double precision NOT NULL,
"retrieved_at" timestamp with time zone NOT NULL
)
;
CREATE TABLE "queries" (
"id" serial NOT NULL PRIMARY KEY,
"latest_query_data_id" integer REFERENCES "query_results" ("id") DEFERRABLE INITIALLY DEFERRED,
"name" varchar(255) NOT NULL,
"description" varchar(4096),
"query" text NOT NULL,
"query_hash" varchar(32) NOT NULL,
"api_key" varchar(40),
"ttl" integer NOT NULL,
"user" varchar(360) NOT NULL,
"created_at" timestamp with time zone NOT NULL
)
;
CREATE TABLE "dashboards" (
"id" serial NOT NULL PRIMARY KEY,
"slug" varchar(140) NOT NULL,
"name" varchar(100) NOT NULL,
"user" varchar(360) NOT NULL,
"layout" text NOT NULL,
"is_archived" boolean NOT NULL
)
;
CREATE TABLE "visualizations" (
"id" serial NOT NULL PRIMARY KEY,
"type" varchar(100) NOT NULL,
"query_id" integer NOT NULL REFERENCES "queries" ("id") DEFERRABLE INITIALLY DEFERRED,
"name" varchar(255) NOT NULL,
"description" varchar(4096),
"options" text NOT NULL
)
;
CREATE TABLE "widgets" (
"id" serial NOT NULL PRIMARY KEY,
"type" varchar(100) NOT NULL,
"width" integer NOT NULL,
"options" text NOT NULL,
"visualization_id" integer NOT NULL REFERENCES "visualizations" ("id") DEFERRABLE INITIALLY DEFERRED,
"dashboard_id" integer NOT NULL REFERENCES "dashboards" ("id") DEFERRABLE INITIALLY DEFERRED
)
;
CREATE INDEX "queries_latest_query_data_id" ON "queries" ("latest_query_data_id");
CREATE INDEX "widgets_query_id" ON "widgets" ("query_id");
CREATE INDEX "widgets_dashboard_id" ON "widgets" ("dashboard_id");
COMMIT;

View File

@@ -1,71 +0,0 @@
import cStringIO
import csv
import codecs
import decimal
import datetime
import json
import re
import hashlib
COMMENTS_REGEX = re.compile("/\*.*?\*/")
def gen_query_hash(sql):
"""Returns hash of the given query after stripping all comments, line breaks and multiple
spaces, and lower casing all text.
TODO: possible issue - the following queries will get the same id:
1. SELECT 1 FROM table WHERE column='Value';
2. SELECT 1 FROM table where column='value';
"""
sql = COMMENTS_REGEX.sub("", sql)
sql = "".join(sql.split()).lower()
return hashlib.md5(sql.encode('utf-8')).hexdigest()
class JSONEncoder(json.JSONEncoder):
"""Custom JSON encoding class, to handle Decimal and datetime.date instances.
"""
def default(self, o):
if isinstance(o, decimal.Decimal):
return float(o)
if isinstance(o, datetime.date):
return o.isoformat()
super(JSONEncoder, self).default(o)
class UnicodeWriter:
"""
A CSV writer which will write rows to CSV file "f",
which is encoded in the given encoding.
"""
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
# Redirect output to a queue
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()
def _encode_utf8(self, val):
if isinstance(val, (unicode, str)):
return val.encode('utf-8')
return val
def writerow(self, row):
self.writer.writerow([self._encode_utf8(s) for s in row])
# Fetch UTF-8 output from the queue ...
data = self.queue.getvalue()
data = data.decode("utf-8")
# ... and reencode it into the target encoding
data = self.encoder.encode(data)
# write to the target stream
self.stream.write(data)
# empty queue
self.queue.truncate(0)
def writerows(self, rows):
for row in rows:
self.writerow(row)

View File

@@ -1,255 +0,0 @@
"""
Worker implementation to execute incoming queries.
"""
import json
import logging
import os
import threading
import uuid
import datetime
import time
import signal
import setproctitle
import redis
from utils import gen_query_hash
class Job(object):
HIGH_PRIORITY = 1
LOW_PRIORITY = 2
WAITING = 1
PROCESSING = 2
DONE = 3
FAILED = 4
def __init__(self, redis_connection, query, priority,
job_id=None,
wait_time=None, query_time=None,
updated_at=None, status=None, error=None, query_result_id=None,
process_id=0):
self.redis_connection = redis_connection
self.query = query
self.priority = priority
self.query_hash = gen_query_hash(self.query)
self.query_result_id = query_result_id
if process_id == 'None':
self.process_id = None
else:
self.process_id = int(process_id)
if job_id is None:
self.id = str(uuid.uuid1())
self.new_job = True
self.wait_time = 0
self.query_time = 0
self.error = None
self.updated_at = time.time() # job_dict.get('updated_at', time.time())
self.status = self.WAITING # int(job_dict.get('status', self.WAITING))
else:
self.id = job_id
self.new_job = False
self.error = error
self.wait_time = wait_time
self.query_time = query_time
self.updated_at = updated_at
self.status = status
def to_dict(self):
return {
'query': self.query,
'priority': self.priority,
'id': self.id,
'wait_time': self.wait_time,
'query_time': self.query_time,
'updated_at': self.updated_at,
'status': self.status,
'error': self.error,
'query_result_id': self.query_result_id,
'process_id': self.process_id
}
@staticmethod
def _redis_key(job_id):
return 'job:%s' % job_id
def cancel(self):
# TODO: Race condition:
# it's possible that it will be picked up by worker while processing the cancel order
if self.is_finished():
return
if self.status == self.PROCESSING:
os.kill(self.process_id, signal.SIGINT)
else:
self.done(None, "Interrupted/Cancelled while running.")
def save(self, pipe=None):
if not pipe:
pipe = self.redis_connection.pipeline()
if self.new_job:
pipe.set('query_hash_job:%s' % self.query_hash, self.id)
if self.is_finished():
pipe.delete('query_hash_job:%s' % self.query_hash)
pipe.sadd('jobs_set', self.id)
pipe.hmset(self._redis_key(self.id), self.to_dict())
pipe.publish(self._redis_key(self.id), json.dumps(self.to_dict()))
pipe.execute()
def processing(self, process_id):
self.status = self.PROCESSING
self.process_id = process_id
self.wait_time = time.time() - self.updated_at
self.updated_at = time.time()
self.save()
def is_finished(self):
return self.status in (self.FAILED, self.DONE)
def done(self, query_result_id, error):
if error:
self.status = self.FAILED
else:
self.status = self.DONE
self.query_result_id = query_result_id
self.error = error
self.query_time = time.time() - self.updated_at
self.updated_at = time.time()
self.save()
def __str__(self):
return "<Job:%s,priority:%d,status:%d>" % (self.id, self.priority, self.status)
@classmethod
def _load(cls, redis_connection, job_id):
return redis_connection.hgetall(cls._redis_key(job_id))
@classmethod
def load(cls, redis_connection, job_id):
job_dict = cls._load(redis_connection, job_id)
job = None
if job_dict:
job = Job(redis_connection, job_id=job_dict['id'], query=job_dict['query'].decode('utf-8'),
priority=int(job_dict['priority']), updated_at=float(job_dict['updated_at']),
status=int(job_dict['status']), wait_time=float(job_dict['wait_time']),
query_time=float(job_dict['query_time']), error=job_dict['error'],
query_result_id=job_dict['query_result_id'],
process_id=job_dict['process_id'])
return job
class Worker(threading.Thread):
def __init__(self, manager, redis_connection_params, query_runner, sleep_time=0.1):
self.manager = manager
self.redis_connection_params = {k: v for k, v in redis_connection_params.iteritems()
if k in ('host', 'db', 'password', 'port')}
self.continue_working = True
self.query_runner = query_runner
self.sleep_time = sleep_time
self.child_pid = None
self.worker_id = uuid.uuid1()
self.status = {
'jobs_count': 0,
'cancelled_jobs_count': 0,
'done_jobs_count': 0,
'updated_at': time.time(),
'started_at': time.time()
}
self._save_status()
self.manager.redis_connection.sadd('workers', self._key)
super(Worker, self).__init__(name="Worker-%s" % self.worker_id)
def set_title(self, title=None):
base_title = "redash worker:%s" % self.worker_id
if title:
full_title = "%s - %s" % (base_title, title)
else:
full_title = base_title
setproctitle.setproctitle(full_title)
def run(self):
logging.info("[%s] started.", self.name)
while self.continue_working:
job_id = self.manager.queue.pop()
if job_id:
self._update_status('jobs_count')
logging.info("[%s] Processing %s", self.name, job_id)
self._fork_and_process(job_id)
if self.child_pid == 0:
return
else:
time.sleep(self.sleep_time)
def _update_status(self, counter):
self.status['updated_at'] = time.time()
self.status[counter] += 1
self._save_status()
@property
def _key(self):
return 'worker:%s' % self.worker_id
def _save_status(self):
self.manager.redis_connection.hmset(self._key, self.status)
def _fork_and_process(self, job_id):
self.child_pid = os.fork()
if self.child_pid == 0:
self.set_title("processing %s" % job_id)
self._process(job_id)
else:
logging.info("[%s] Waiting for pid: %d", self.name, self.child_pid)
_, status = os.waitpid(self.child_pid, 0)
self._update_status('done_jobs_count')
if status > 0:
job = Job.load(self.manager.redis_connection, job_id)
if not job.is_finished():
self._update_status('cancelled_jobs_count')
logging.info("[%s] process interrupted and job %s hasn't finished; registering interruption in job",
self.name, job_id)
job.done(None, "Interrupted/Cancelled while running.")
logging.info("[%s] Finished Processing %s (pid: %d status: %d)",
self.name, job_id, self.child_pid, status)
def _process(self, job_id):
redis_connection = redis.StrictRedis(**self.redis_connection_params)
job = Job.load(redis_connection, job_id)
if job.is_finished():
logging.warning("[%s][%s] tried to process finished job.", self.name, job)
return
pid = os.getpid()
job.processing(pid)
logging.info("[%s][%s] running query...", self.name, job.id)
start_time = time.time()
self.set_title("running query %s" % job_id)
annotated_query = "/* Pid: %s, Job Id: %s, Query hash: %s, Priority: %s */ %s" % \
(pid, job.id, job.query_hash, job.priority, job.query)
# TODO: here's the part that needs to be forked, not all of the worker process...
data, error = self.query_runner(annotated_query)
run_time = time.time() - start_time
logging.info("[%s][%s] query finished... data length=%s, error=%s",
self.name, job.id, data and len(data), error)
# TODO: it is possible that storing the data will fail, and we will need to retry
# while we already marked the job as done
query_result_id = None
if not error:
self.set_title("storing results %s" % job_id)
query_result_id = self.manager.store_query_result(job.query, data, run_time,
datetime.datetime.utcnow())
self.set_title("marking job as done %s" % job_id)
job.done(query_result_id, error)

View File

@@ -1,50 +0,0 @@
import json
import settings
from data.models import *
# first run:
# CREATE TABLE "visualizations" (
# "id" serial NOT NULL PRIMARY KEY,
# "type" varchar(100) NOT NULL,
# "query_id" integer NOT NULL REFERENCES "queries" ("id") DEFERRABLE INITIALLY DEFERRED,
# "name" varchar(255) NOT NULL,
# "description" varchar(4096),
# "options" text NOT NULL
# )
# ;
# ALTER TABLE widgets ADD COLUMN "visualization_id" integer REFERENCES "visualizations" ("id") DEFERRABLE INITIALLY DEFERRED;
if __name__ == '__main__':
print 'migrating Widgets -> Visualizations ...'
for query in Query.objects.filter(name__icontains="cohort"):
vis = Visualization(query=query, name=query.name,
description=query.description,
type="COHORT", options="{}")
vis.save()
for widget in Widget.objects.all():
print 'processing widget %d' % widget.id
query = widget.query
vis_type = widget.type.upper()
vis = query.visualizations.filter(type=vis_type)
if vis:
print 'found'
widget.visualization = vis[0]
widget.save()
else:
options = json.loads(widget.options)
vis_options = {"series": options} if options else {}
vis_options = json.dumps(vis_options)
vis = Visualization(query=query, name=query.name,
description=query.description,
type=vis_type, options=vis_options)
vis.save()
widget.visualization = vis
widget.save()

View File

@@ -1,10 +0,0 @@
psycopg2==2.5.1
redis==2.7.5
tornado==3.0.2
sqlparse==0.1.8
Django==1.5.4
django-db-pool==0.0.10
qr==0.6.0
python-dateutil==2.1
setproctitle==1.1.8
atfork==0.1.2

View File

@@ -1,381 +0,0 @@
"""
Tornado based API implementation for re:dash.
Also at the moment the Tornado server is used to serve the static assets (and the Angular.js app),
but this is only due to configuration issues and temporary.
Usage:
python server.py [--port=8888] [--debug] [--static=..]
port - port to listen to
debug - enable debug mode (extensive logging, restart on code change)
static - static assets path
If static option isn't specified it will be taken from settings.py.
"""
import csv
import hashlib
import json
import numbers
import os
import urlparse
import logging
import cStringIO
import datetime
import dateutil.parser
import redis
import sqlparse
import tornado.ioloop
import tornado.web
import tornado.auth
import tornado.options
import settings
import time
from data import utils
import data
class BaseHandler(tornado.web.RequestHandler):
def initialize(self):
self.data_manager = self.application.settings.get('data_manager', None)
self.redis_connection = self.application.settings['redis_connection']
def get_current_user(self):
user = self.get_secure_cookie("user")
return user
def write_json(self, response, encode=True):
if encode:
response = json.dumps(response, cls=utils.JSONEncoder)
self.set_header("Content-Type", "application/json; charset=UTF-8")
self.write(response)
class BaseAuthenticatedHandler(BaseHandler):
@tornado.web.authenticated
def prepare(self):
pass
class PingHandler(tornado.web.RequestHandler):
def get(self):
self.write("PONG")
class GoogleLoginHandler(tornado.web.RequestHandler,
tornado.auth.GoogleMixin):
@tornado.web.asynchronous
@tornado.gen.coroutine
def get(self):
if self.get_argument("openid.mode", None):
user = yield self.get_authenticated_user()
if user['email'] in settings.ALLOWED_USERS or user['email'].endswith("@%s" % settings.GOOGLE_APPS_DOMAIN):
logging.info("Authenticated: %s", user['email'])
self.set_secure_cookie("user", user['email'])
self.redirect("/")
else:
logging.error("Failed logging in with: %s", user)
self.authenticate_redirect()
else:
self.authenticate_redirect()
class MainHandler(BaseAuthenticatedHandler):
def get(self, *args):
email_md5 = hashlib.md5(self.current_user.lower()).hexdigest()
gravatar_url = "https://www.gravatar.com/avatar/%s?s=40" % email_md5
user = {
'gravatar_url': gravatar_url,
'is_admin': self.current_user in settings.ADMINS,
'name': self.current_user
}
self.render("index.html", user=json.dumps(user), analytics=settings.ANALYTICS)
class QueryFormatHandler(BaseAuthenticatedHandler):
def post(self):
arguments = json.loads(self.request.body)
query = arguments.get("query", "")
self.write(sqlparse.format(query, reindent=True, keyword_case='upper'))
class StatusHandler(BaseAuthenticatedHandler):
def get(self):
status = {}
info = self.redis_connection.info()
status['redis_used_memory'] = info['used_memory_human']
status['queries_count'] = data.models.Query.objects.count()
status['query_results_count'] = data.models.QueryResult.objects.count()
status['dashboards_count'] = data.models.Dashboard.objects.count()
status['widgets_count'] = data.models.Widget.objects.count()
status['workers'] = [self.redis_connection.hgetall(w)
for w in self.redis_connection.smembers('workers')]
manager_status = self.redis_connection.hgetall('manager:status')
status['manager'] = manager_status
status['manager']['queue_size'] = self.redis_connection.zcard('jobs')
self.write_json(status)
class WidgetsHandler(BaseAuthenticatedHandler):
def post(self, widget_id=None):
widget_properties = json.loads(self.request.body)
widget_properties['options'] = json.dumps(widget_properties['options'])
widget = data.models.Widget(**widget_properties)
widget.save()
layout = json.loads(widget.dashboard.layout)
new_row = True
if len(layout) == 0 or widget.width == 2:
layout.append([widget.id])
elif len(layout[-1]) == 1:
neighbour_widget = data.models.Widget.objects.get(pk=layout[-1][0])
if neighbour_widget.width == 1:
layout[-1].append(widget.id)
new_row = False
else:
layout.append([widget.id])
else:
layout.append([widget.id])
widget.dashboard.layout = json.dumps(layout)
widget.dashboard.save()
self.write_json({'widget': widget.to_dict(), 'layout': layout, 'new_row': new_row})
def delete(self, widget_id):
widget_id = int(widget_id)
widget = data.models.Widget.objects.get(pk=widget_id)
# TODO: reposition existing ones
layout = json.loads(widget.dashboard.layout)
layout = map(lambda row: filter(lambda w: w != widget_id, row), layout)
layout = filter(lambda row: len(row) > 0, layout)
widget.dashboard.layout = json.dumps(layout)
widget.dashboard.save()
widget.delete()
class DashboardHandler(BaseAuthenticatedHandler):
def get(self, dashboard_slug=None):
if dashboard_slug:
dashboard = data.models.Dashboard.objects.prefetch_related('widgets__visualization__query__latest_query_data').get(slug=dashboard_slug)
self.write_json(dashboard.to_dict(with_widgets=True))
else:
dashboards = [d.to_dict() for d in
data.models.Dashboard.objects.filter(is_archived=False)]
self.write_json(dashboards)
def post(self, dashboard_id):
if dashboard_id:
dashboard_properties = json.loads(self.request.body)
dashboard = data.models.Dashboard.objects.get(pk=dashboard_id)
dashboard.layout = dashboard_properties['layout']
dashboard.name = dashboard_properties['name']
dashboard.save()
self.write_json(dashboard.to_dict(with_widgets=True))
else:
dashboard_properties = json.loads(self.request.body)
dashboard = data.models.Dashboard(name=dashboard_properties['name'],
user=self.current_user,
layout='[]')
dashboard.save()
self.write_json(dashboard.to_dict())
def delete(self, dashboard_slug):
dashboard = data.models.Dashboard.objects.get(slug=dashboard_slug)
dashboard.is_archived = True
dashboard.save()
class QueriesHandler(BaseAuthenticatedHandler):
def post(self, id=None):
query_def = json.loads(self.request.body)
if 'created_at' in query_def:
query_def['created_at'] = dateutil.parser.parse(query_def['created_at'])
query_def.pop('latest_query_data', None)
query_def.pop('visualizations', None)
if id:
query = data.models.Query(**query_def)
fields = query_def.keys()
fields.remove('id')
query.save(update_fields=fields)
else:
query_def['user'] = self.current_user
query = data.models.Query(**query_def)
query.save()
self.write_json(query.to_dict(with_result=False))
def get(self, id=None):
if id:
q = data.models.Query.objects.get(pk=id)
if q:
self.write_json(q.to_dict(with_visualizations=True))
else:
self.send_error(404)
else:
self.write_json([q.to_dict(with_result=False, with_stats=True) for q in data.models.Query.all_queries()])
class QueryResultsHandler(BaseAuthenticatedHandler):
def get(self, query_result_id):
query_result = self.data_manager.get_query_result_by_id(query_result_id)
if query_result:
self.write_json({'query_result': query_result.to_dict(parse_data=True)})
else:
self.send_error(404)
def post(self, _):
params = json.loads(self.request.body)
if params['ttl'] == 0:
query_result = None
else:
query_result = self.data_manager.get_query_result(params['query'], int(params['ttl']))
if query_result:
self.write_json({'query_result': query_result.to_dict(parse_data=True)})
else:
job = self.data_manager.add_job(params['query'], data.Job.HIGH_PRIORITY)
self.write({'job': job.to_dict()})
class VisualizationHandler(BaseAuthenticatedHandler):
def get(self, id):
pass
def post(self, id=None):
kwargs = json.loads(self.request.body)
kwargs['options'] = json.dumps(kwargs['options'])
if id:
vis = data.models.Visualization(**kwargs)
fields = kwargs.keys()
fields.remove('id')
vis.save(update_fields=fields)
else:
vis = data.models.Visualization(**kwargs)
vis.save()
self.write_json(vis.to_dict(with_query=False))
def delete(self, id):
vis = data.models.Visualization.objects.get(pk=id)
vis.delete()
class CsvQueryResultsHandler(BaseAuthenticatedHandler):
def get_current_user(self):
user = super(CsvQueryResultsHandler, self).get_current_user()
if not user:
api_key = self.get_argument("api_key", None)
query = data.models.Query.objects.get(pk=self.path_args[0])
if query.api_key and query.api_key == api_key:
user = "API-Key=%s" % api_key
return user
def get(self, query_id, result_id=None):
if not result_id:
query = data.models.Query.objects.get(pk=query_id)
if query:
result_id = query.latest_query_data_id
query_result = result_id and self.data_manager.get_query_result_by_id(result_id)
if query_result:
self.set_header("Content-Type", "text/csv; charset=UTF-8")
s = cStringIO.StringIO()
query_data = json.loads(query_result.data)
writer = csv.DictWriter(s, fieldnames=[col['name'] for col in query_data['columns']])
writer.writer = utils.UnicodeWriter(s)
writer.writeheader()
for row in query_data['rows']:
for k, v in row.iteritems():
if isinstance(v, numbers.Number) and (v > 1000 * 1000 * 1000 * 100):
row[k] = datetime.datetime.fromtimestamp(v/1000.0)
writer.writerow(row)
self.write(s.getvalue())
else:
self.send_error(404)
class JobsHandler(BaseAuthenticatedHandler):
def get(self, job_id=None):
if job_id:
# TODO: if finished, include the query result
job = data.Job.load(self.data_manager.redis_connection, job_id)
self.write({'job': job.to_dict()})
else:
raise NotImplemented
def delete(self, job_id):
job = data.Job.load(self.data_manager.redis_connection, job_id)
job.cancel()
def get_application(static_path, is_debug, redis_connection, data_manager):
return tornado.web.Application([(r"/", MainHandler),
(r"/ping", PingHandler),
(r"/api/queries/([0-9]*)/results(?:/([0-9]*))?.csv", CsvQueryResultsHandler),
(r"/api/queries/format", QueryFormatHandler),
(r"/api/queries(?:/([0-9]*))?", QueriesHandler),
(r"/api/query_results(?:/([0-9]*))?", QueryResultsHandler),
(r"/api/jobs/(.*)", JobsHandler),
(r"/api/visualizations(?:/([0-9]*))?", VisualizationHandler),
(r"/api/widgets(?:/([0-9]*))?", WidgetsHandler),
(r"/api/dashboards(?:/(.*))?", DashboardHandler),
(r"/admin/(.*)", MainHandler),
(r"/dashboard/(.*)", MainHandler),
(r"/queries(.*)", MainHandler),
(r"/login", GoogleLoginHandler),
(r"/status.json", StatusHandler),
(r"/(.*)", tornado.web.StaticFileHandler,
{"path": static_path})],
template_path=static_path,
static_path=static_path,
debug=is_debug,
login_url="/login",
cookie_secret=settings.COOKIE_SECRET,
redis_connection=redis_connection,
data_manager=data_manager)
if __name__ == '__main__':
tornado.options.define("port", default=8888, type=int)
tornado.options.define("debug", default=False, type=bool)
tornado.options.define("static", default=settings.STATIC_ASSETS_PATH, type=str)
tornado.options.parse_command_line()
root_path = os.path.dirname(__file__)
static_path = os.path.abspath(os.path.join(root_path, tornado.options.options.static))
url = urlparse.urlparse(settings.REDIS_URL)
redis_connection = redis.StrictRedis(host=url.hostname, port=url.port, db=0, password=url.password)
data_manager = data.Manager(redis_connection, settings.INTERNAL_DB_CONNECTION_STRING,
settings.MAX_CONNECTIONS)
logging.info("re:dash web server stating on port: %d...", tornado.options.options.port)
logging.info("UI assets path: %s...", static_path)
application = get_application(static_path, tornado.options.options.debug,
redis_connection, data_manager)
application.listen(tornado.options.options.port)
tornado.ioloop.IOLoop.instance().start()

View File

@@ -1,41 +0,0 @@
"""
Example settings module. You should make your own copy as settings.py and enter the real settings.
"""
import django.conf
REDIS_URL = "redis://localhost:6379"
# Either "pg" or "mysql"
CONNECTION_ADAPTER = "mysql"
# Connection string for the database that is used to run queries against
# -- example mysql CONNECTION_STRING = "Server=;User=;Pwd=;Database="
# -- example pg CONNECTION_STRING = "user= password= host= port=5439 dbname="
CONNECTION_STRING = "user= password= host= port=5439 dbname="
# Connection string for the operational databases (where we store the queries, results, etc)
INTERNAL_DB_CONNECTION_STRING = "dbname=postgres"
# Google Apps domain to allow access from; any user with email in this Google Apps will be allowed
# access
GOOGLE_APPS_DOMAIN = ""
# Email addresses of specific users not from the above set Google Apps Domain, that you want to
# allow access to re:dash
ALLOWED_USERS = []
# Email addresses of admin users
ADMINS = []
STATIC_ASSETS_PATH = "../rd_ui/dist/"
WORKERS_COUNT = 2
MAX_CONNECTIONS = 3
COOKIE_SECRET = "c292a0a3aa32397cdb050e233733900f"
LOG_LEVEL = "INFO"
ANALYTICS = ""
# Configuration of the operational database for the Django models
django.conf.settings.configure(DATABASES = { 'default': {
'ENGINE': 'dbpool.db.backends.postgresql_psycopg2',
'OPTIONS': {'MAX_CONNS': 10, 'MIN_CONNS': 1},
'NAME': 'postgres',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
},}, TIME_ZONE = 'UTC')

View File

@@ -1,3 +0,0 @@
{
"directory": "app/bower_components"
}

View File

@@ -1 +0,0 @@
* text=auto

4
rd_ui/.gitignore vendored
View File

@@ -1,4 +0,0 @@
node_modules
.tmp
.sass-cache
app/bower_components

View File

@@ -11,14 +11,17 @@
"latedef": true,
"newcap": true,
"noarg": true,
"quotmark": "single",
"quotmark": false,
"regexp": true,
"undef": true,
"unused": true,
"strict": true,
"strict": false,
"trailing": true,
"smarttabs": true,
"globals": {
"angular": false
"angular": false,
"_": false,
"$": false,
"currentUser": false
}
}

View File

@@ -1,7 +0,0 @@
language: node_js
node_js:
- '0.8'
- '0.10'
before_script:
- 'npm install -g bower grunt-cli'
- 'bower install'

View File

@@ -1,362 +0,0 @@
// Generated on 2013-08-25 using generator-angular 0.4.0
'use strict';
var LIVERELOAD_PORT = 35729;
var lrSnippet = require('connect-livereload')({ port: LIVERELOAD_PORT });
var mountFolder = function (connect, dir) {
return connect.static(require('path').resolve(dir));
};
// # Globbing
// for performance reasons we're only matching one level down:
// 'test/spec/{,*/}*.js'
// use this if you want to recursively match all subfolders:
// 'test/spec/**/*.js'
module.exports = function (grunt) {
require('load-grunt-tasks')(grunt);
require('time-grunt')(grunt);
// configurable paths
var yeomanConfig = {
app: 'app',
dist: 'dist'
};
try {
yeomanConfig.app = require('./bower.json').appPath || yeomanConfig.app;
} catch (e) {}
grunt.initConfig({
yeoman: yeomanConfig,
watch: {
coffee: {
files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'],
tasks: ['coffee:dist']
},
coffeeTest: {
files: ['test/spec/{,*/}*.coffee'],
tasks: ['coffee:test']
},
styles: {
files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
tasks: ['copy:styles', 'autoprefixer']
},
livereload: {
options: {
livereload: LIVERELOAD_PORT
},
files: [
'<%= yeoman.app %>/{,*/}*.html',
'.tmp/styles/{,*/}*.css',
'{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
]
}
},
autoprefixer: {
options: ['last 1 version'],
dist: {
files: [{
expand: true,
cwd: '.tmp/styles/',
src: '{,*/}*.css',
dest: '.tmp/styles/'
}]
}
},
connect: {
options: {
port: 9000,
// Change this to '0.0.0.0' to access the server from outside.
hostname: 'localhost'
},
livereload: {
options: {
middleware: function (connect) {
return [
lrSnippet,
mountFolder(connect, '.tmp'),
mountFolder(connect, yeomanConfig.app)
];
}
}
},
test: {
options: {
middleware: function (connect) {
return [
mountFolder(connect, '.tmp'),
mountFolder(connect, 'test')
];
}
}
},
dist: {
options: {
middleware: function (connect) {
return [
mountFolder(connect, yeomanConfig.dist)
];
}
}
}
},
open: {
server: {
url: 'http://localhost:<%= connect.options.port %>'
}
},
clean: {
dist: {
files: [{
dot: true,
src: [
'.tmp',
'<%= yeoman.dist %>/*',
'!<%= yeoman.dist %>/.git*'
]
}]
},
server: '.tmp'
},
jshint: {
options: {
jshintrc: '.jshintrc'
},
all: [
'Gruntfile.js',
'<%= yeoman.app %>/scripts/{,*/}*.js'
]
},
coffee: {
options: {
sourceMap: true,
sourceRoot: ''
},
dist: {
files: [{
expand: true,
cwd: '<%= yeoman.app %>/scripts',
src: '{,*/}*.coffee',
dest: '.tmp/scripts',
ext: '.js'
}]
},
test: {
files: [{
expand: true,
cwd: 'test/spec',
src: '{,*/}*.coffee',
dest: '.tmp/spec',
ext: '.js'
}]
}
},
// not used since Uglify task does concat,
// but still available if needed
/*concat: {
dist: {}
},*/
rev: {
dist: {
files: {
src: [
'<%= yeoman.dist %>/scripts/{,*/}*.js',
'<%= yeoman.dist %>/styles/{,*/}*.css',
'<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
'<%= yeoman.dist %>/styles/fonts/*'
]
}
}
},
useminPrepare: {
html: '<%= yeoman.app %>/index.html',
options: {
dest: '<%= yeoman.dist %>'
}
},
usemin: {
html: ['<%= yeoman.dist %>/{,*/}*.html'],
css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
options: {
dirs: ['<%= yeoman.dist %>']
}
},
imagemin: {
dist: {
files: [{
expand: true,
cwd: '<%= yeoman.app %>/images',
src: '{,*/}*.{png,jpg,jpeg}',
dest: '<%= yeoman.dist %>/images'
}]
}
},
svgmin: {
dist: {
files: [{
expand: true,
cwd: '<%= yeoman.app %>/images',
src: '{,*/}*.svg',
dest: '<%= yeoman.dist %>/images'
}]
}
},
cssmin: {
// By default, your `index.html` <!-- Usemin Block --> will take care of
// minification. This option is pre-configured if you do not wish to use
// Usemin blocks.
// dist: {
// files: {
// '<%= yeoman.dist %>/styles/main.css': [
// '.tmp/styles/{,*/}*.css',
// '<%= yeoman.app %>/styles/{,*/}*.css'
// ]
// }
// }
},
htmlmin: {
dist: {
options: {
/*removeCommentsFromCDATA: true,
// https://github.com/yeoman/grunt-usemin/issues/44
//collapseWhitespace: true,
collapseBooleanAttributes: true,
removeAttributeQuotes: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeOptionalTags: true*/
},
files: [{
expand: true,
cwd: '<%= yeoman.app %>',
src: ['*.html', 'views/*.html'],
dest: '<%= yeoman.dist %>'
}]
}
},
// Put files not handled in other tasks here
copy: {
dist: {
files: [{
expand: true,
dot: true,
cwd: '<%= yeoman.app %>',
dest: '<%= yeoman.dist %>',
src: [
'*.{ico,png,txt}',
'.htaccess',
'bower_components/**/*',
'images/{,*/}*.{gif,webp}',
'fonts/*'
]
}, {
expand: true,
cwd: '.tmp/images',
dest: '<%= yeoman.dist %>/images',
src: [
'generated/*'
]
}]
},
styles: {
expand: true,
cwd: '<%= yeoman.app %>/styles',
dest: '.tmp/styles/',
src: '{,*/}*.css'
}
},
concurrent: {
server: [
'coffee:dist',
'copy:styles'
],
test: [
'coffee',
'copy:styles'
],
dist: [
'coffee',
'copy:styles',
'imagemin',
'svgmin',
'htmlmin'
]
},
karma: {
unit: {
configFile: 'karma.conf.js',
singleRun: true
}
},
cdnify: {
dist: {
html: ['<%= yeoman.dist %>/*.html']
}
},
ngmin: {
dist: {
files: [{
expand: true,
cwd: '<%= yeoman.dist %>/scripts',
src: '*.js',
dest: '<%= yeoman.dist %>/scripts'
}]
}
},
uglify: {
dist: {
files: {
'<%= yeoman.dist %>/scripts/scripts.js': [
'<%= yeoman.dist %>/scripts/scripts.js'
]
}
}
}
});
grunt.registerTask('server', function (target) {
if (target === 'dist') {
return grunt.task.run(['build', 'open', 'connect:dist:keepalive']);
}
grunt.task.run([
'clean:server',
'concurrent:server',
'autoprefixer',
'connect:livereload',
'open',
'watch'
]);
});
grunt.registerTask('test', [
'clean:server',
'concurrent:test',
'autoprefixer',
'connect:test',
'karma'
]);
grunt.registerTask('build', [
'clean:dist',
'useminPrepare',
'concurrent:dist',
'autoprefixer',
'concat',
'copy:dist',
'cdnify',
'ngmin',
'cssmin',
'uglify',
'rev',
'usemin'
]);
grunt.registerTask('default', [
'jshint',
'test',
'build'
]);
};

119
rd_ui/app/app_layout.html Normal file
View File

@@ -0,0 +1,119 @@
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" ng-app="redash" ng-controller='MainCtrl'> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" ng-app="redash" ng-controller='MainCtrl'> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9" ng-app="redash" ng-controller='MainCtrl'> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" ng-app="redash" ng-controller='MainCtrl'> <!--<![endif]-->
<head>
<base href="{{base_href}}">
<title ng-bind="pageTitle + '| {{name}}'"></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- build:css /styles/main.css -->
<link rel="stylesheet" href="/styles/superflat_redash.css">
<link rel="stylesheet" href="/bower_components/material-design-iconic-font/dist/css/material-design-iconic-font.css">
<link rel="stylesheet" href="/bower_components/codemirror/lib/codemirror.css">
<link rel="stylesheet" href="/bower_components/gridster/dist/jquery.gridster.css">
<link rel="stylesheet" href="/bower_components/pivottable/dist/pivot.css">
<link rel="stylesheet" href="/bower_components/cornelius/src/cornelius.css">
<link rel="stylesheet" href="/bower_components/angular-ui-select/dist/select.css">
<link rel="stylesheet" href="/bower_components/pace/themes/pace-theme-minimal.css">
<link rel="stylesheet" href="/bower_components/font-awesome/css/font-awesome.css">
<link rel="stylesheet" href="/bower_components/codemirror/addon/hint/show-hint.css">
<link rel="stylesheet" href="/bower_components/leaflet/dist/leaflet.css">
<link rel="stylesheet" href="/bower_components/angular-resizable/src/angular-resizable.css">
<link rel="stylesheet" href="/styles/redash.css">
<!-- endbuild -->
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/images/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
</head>
<body{% if headless %} class="headless"{% endif %}>
<div growl></div>
{% block content %}
{% endblock %}
<section id="1">
<div ng-view></div>
<div ng-if="showPermissionError" class="ng-cloak container" ng-cloak>
<div class="row">
<div class="text-center">
<h1><span class="zmdi zmdi-lock"></span></h1>
<p class="text-muted">
You do not have permission to view the requested page.
</p>
</div>
</div>
</div>
{% if not headless %}
{% raw %}
<div class="visible-print">
<hr>
Source: {{location}}
</div>
</section>
{% endraw %}
{% include 'footer.html' %}
{% endif %}
{% include 'vendor_scripts.html' %}
<!-- build:js({.tmp,rd_ui/app}) /scripts/scripts.js -->
<script src="/scripts/app.js"></script>
<script src="/scripts/services/services.js"></script>
<script src="/scripts/services/resources.js"></script>
<script src="/scripts/services/notifications.js"></script>
<script src="/scripts/services/dashboards.js"></script>
<script src="/scripts/controllers/controllers.js"></script>
<script src="/scripts/controllers/dashboard.js"></script>
<script src="/scripts/controllers/admin_controllers.js"></script>
<script src="/scripts/controllers/data_sources.js"></script>
<script src="/scripts/controllers/destinations.js"></script>
<script src="/scripts/controllers/query_view.js"></script>
<script src="/scripts/controllers/query_source.js"></script>
<script src="/scripts/controllers/users.js"></script>
<script src="/scripts/visualizations/base.js"></script>
<script src="/scripts/visualizations/chart.js"></script>
<script src="/scripts/visualizations/cohort.js"></script>
<script src="/scripts/visualizations/map.js"></script>
<script src="/scripts/visualizations/counter.js"></script>
<script src="/scripts/visualizations/boxplot.js"></script>
<script src="/scripts/visualizations/box.js"></script>
<script src="/scripts/visualizations/table.js"></script>
<script src="/scripts/visualizations/pivot.js"></script>
<script src="/scripts/visualizations/wordcloud.js"></script>
<script src="/scripts/vendor/cloud.js"></script>
<script src="/scripts/directives/directives.js"></script>
<script src="/scripts/directives/query_directives.js"></script>
<script src="/scripts/directives/dashboard_directives.js"></script>
<script src="/scripts/filters.js"></script>
<script src="/scripts/controllers/alerts.js"></script>
<!-- endbuild -->
<script>
// TODO: move currentUser & features to be an Angular service
var clientConfig = {{ client_config|safe }};
var basePath = "{{base_href}}";
var currentUser = {{ user|safe }};
currentUser.canEdit = function(object) {
var user_id = object.user_id || (object.user && object.user.id);
return this.hasPermission('admin') || (user_id && (user_id == currentUser.id));
};
currentUser.hasPermission = function(permission) {
return this.permissions.indexOf(permission) != -1;
};
currentUser.isAdmin = currentUser.hasPermission('admin');
</script>
{% include '_includes/tail.html' %}
</body>
</html>

78
rd_ui/app/embed.html Normal file
View File

@@ -0,0 +1,78 @@
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" ng-app="redash" ng-controller='MainCtrl'> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" ng-app="redash" ng-controller='MainCtrl'> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9" ng-app="redash" ng-controller='MainCtrl'> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" ng-app="redash" ng-controller='EmbedCtrl'> <!--<![endif]-->
<head>
<base href="{{base_href}}">
<title ng-bind="'{{name}} | ' + pageTitle"></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- build:css /styles/embed.css -->
<link rel="stylesheet" href="/styles/superflat_redash.css">
<link rel="stylesheet" href="/bower_components/codemirror/lib/codemirror.css">
<link rel="stylesheet" href="/bower_components/gridster/dist/jquery.gridster.css">
<link rel="stylesheet" href="/bower_components/pivottable/dist/pivot.css">
<link rel="stylesheet" href="/bower_components/cornelius/src/cornelius.css">
<link rel="stylesheet" href="/bower_components/angular-ui-select/dist/select.css">
<link rel="stylesheet" href="/bower_components/pace/themes/pace-theme-minimal.css">
<link rel="stylesheet" href="/bower_components/font-awesome/css/font-awesome.css">
<link rel="stylesheet" href="/bower_components/codemirror/addon/hint/show-hint.css">
<link rel="stylesheet" href="/bower_components/leaflet/dist/leaflet.css">
<link rel="stylesheet" href="/styles/redash.css">
<!-- endbuild -->
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/images/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
<style>
body { padding: 0; }
</style>
</head>
<body>
<div growl></div>
<div ng-view></div>
{% include 'vendor_scripts.html' %}
<!-- build:js({.tmp,rd_ui/app}) /scripts/embed-scripts.js -->
<script src="/scripts/embed.js"></script>
<script src="/scripts/services/services.js"></script>
<script src="/scripts/services/resources.js"></script>
<script src="/scripts/services/notifications.js"></script>
<script src="/scripts/services/dashboards.js"></script>
<script src="/scripts/controllers/controllers.js"></script>
<script src="/scripts/controllers/dashboard.js"></script>
<script src="/scripts/controllers/admin_controllers.js"></script>
<script src="/scripts/controllers/data_sources.js"></script>
<script src="/scripts/controllers/query_view.js"></script>
<script src="/scripts/controllers/query_source.js"></script>
<script src="/scripts/controllers/users.js"></script>
<script src="/scripts/visualizations/base.js"></script>
<script src="/scripts/visualizations/chart.js"></script>
<script src="/scripts/visualizations/cohort.js"></script>
<script src="/scripts/visualizations/map.js"></script>
<script src="/scripts/visualizations/counter.js"></script>
<script src="/scripts/visualizations/boxplot.js"></script>
<script src="/scripts/visualizations/box.js"></script>
<script src="/scripts/visualizations/table.js"></script>
<script src="/scripts/visualizations/pivot.js"></script>
<script src="/scripts/visualizations/wordcloud.js"></script>
<script src="/scripts/vendor/cloud.js"></script>
<script src="/scripts/directives/directives.js"></script>
<script src="/scripts/directives/query_directives.js"></script>
<script src="/scripts/directives/dashboard_directives.js"></script>
<script src="/scripts/filters.js"></script>
<script src="/scripts/controllers/alerts.js"></script>
<!-- endbuild -->
<script>
var clientConfig = {{ client_config|safe }};
var visualization = {{ visualization|safe }};
var query_result = {{ query_result|safe }};
</script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More