diff --git a/.gitignore b/.gitignore
index 46fafc7..d58a5ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
site
.idea
.DS_Store
+deploy/logs
diff --git a/deploy/README.md b/deploy/README.md
new file mode 100644
index 0000000..758d790
--- /dev/null
+++ b/deploy/README.md
@@ -0,0 +1,70 @@
+# Deploy example
+
+In order to launch a local deployment of the platform, you can do the following:
+
+## Add Keycloak to the local hosts file
+
+In order for the Portal to connect to Keycloak correctly, they need to be added
+to the local hosts file pointing to the local IP.
+Open `/etc/hosts` and add them like so:
+
+```
+0.0.0.0 keycloak
+0.0.0.0 portal
+```
+
+## Start the containers
+
+All the containers can be started and configured using the script included
+
+```
+ ./deploy.sh
+```
+
+and for stopping the containers, there's another script for that as well
+
+```
+ ./clean.sh
+```
+
+## Set up Keycloak from the Admin UI
+
+There's a few necessary steps to setup Keycloak to work with the Portal:
+
+1. Access the Admin UI from http://localhost:8080
+2. Login with the default admin user (USERNAME: admin, PASSWORD: password)
+3. Under clients, find the admin-cli client. Under Service Account Roles, add
+ all the available unassigned roles to the client.
+4. Under users, create a new user. Give it a username and email at least, and
+ set a password for it. Ensure to tick the box for verified email, and untick
+ the box for temporary password. Add the user to the groups
+ /EnvironmentManagement/Demo and Admin under the Town group.
+
+## Log into the Portal
+
+You can now log into the portal at http://localhost:8000 using the newly created
+user. An example Device and Group has been created and filled with a basic
+air quality attribute.
+
+## Send some data to the UL IoT Agent
+
+With the script send_payload_to_agent.sh you can send an air quality reading to
+a device called Device. The script can be invoked as:
+
+```
+ ./send_payload_to_agent.sh 51
+```
+
+Where 51 is the air quality reading to send for example. You can see the changes
+reflect onto the map in Grafana.
+
+## Log into Grafana
+
+The Grafana dashboards can be found at http://localhost:3000 . Login with the
+default admin user (USERNAME: admin, PASSWORD: admin). An example dashboard
+can be found under the general group showing a map with the example device for
+air quality. It should appear as an icon in Switzerland.
+
+# Todo (next)
+- Use newer keycloak and load scripts
+- Use newer grafana
diff --git a/deploy/clean.sh b/deploy/clean.sh
new file mode 100755
index 0000000..b74136b
--- /dev/null
+++ b/deploy/clean.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker-compose down -v
\ No newline at end of file
diff --git a/deploy/update.sh b/deploy/crate-datasource/.gitattributes
old mode 100644
new mode 100755
similarity index 100%
rename from deploy/update.sh
rename to deploy/crate-datasource/.gitattributes
diff --git a/deploy/crate-datasource/.gitignore b/deploy/crate-datasource/.gitignore
new file mode 100755
index 0000000..952eb7e
--- /dev/null
+++ b/deploy/crate-datasource/.gitignore
@@ -0,0 +1,42 @@
+node_modules
+npm-debug.log
+coverage/
+.aws-config.json
+awsconfig
+/emails/dist
+/public_gen
+/tmp
+vendor/phantomjs/phantomjs
+
+# Builded dist
+# /dist
+
+# Test artifacts
+/dist/test
+/dist/spec
+
+docs/AWS_S3_BUCKET
+docs/GIT_BRANCH
+docs/VERSION
+docs/GITCOMMIT
+docs/changed-files
+docs/changed-files
+
+# locally required config files
+public/css/*.min.css
+
+# Editor junk
+*.sublime-workspace
+*.sublime-project
+*.swp
+.idea/
+*.iml
+
+/data/*
+/bin/*
+
+conf/custom.ini
+fig.yml
+profile.cov
+grafana
+.notouch
diff --git a/deploy/crate-datasource/.jscsrc b/deploy/crate-datasource/.jscsrc
new file mode 100755
index 0000000..dcf694d
--- /dev/null
+++ b/deploy/crate-datasource/.jscsrc
@@ -0,0 +1,13 @@
+{
+ "disallowImplicitTypeConversion": ["string"],
+ "disallowKeywords": ["with"],
+ "disallowMultipleLineBreaks": true,
+ "disallowMixedSpacesAndTabs": true,
+ "disallowTrailingWhitespace": true,
+ "requireSpacesInFunctionExpression": {
+ "beforeOpeningCurlyBrace": true
+ },
+ "disallowSpacesInsideArrayBrackets": true,
+ "disallowSpacesInsideParentheses": true,
+ "validateIndentation": 2
+}
\ No newline at end of file
diff --git a/deploy/crate-datasource/.jshintrc b/deploy/crate-datasource/.jshintrc
new file mode 100755
index 0000000..300d6de
--- /dev/null
+++ b/deploy/crate-datasource/.jshintrc
@@ -0,0 +1,46 @@
+{
+ "browser": true,
+
+ "bitwise":false,
+ "curly": true,
+ "eqnull": true,
+ "strict": true,
+ "module": true,
+ "devel": true,
+ "eqeqeq": true,
+ "forin": false,
+ "immed": true,
+ "supernew": true,
+ "expr": true,
+ "indent": 2,
+ "latedef": false,
+ "newcap": true,
+ "noarg": true,
+ "noempty": true,
+ "undef": true,
+ "boss": true,
+ "trailing": true,
+ "laxbreak": true,
+ "laxcomma": true,
+ "sub": true,
+ "unused": true,
+ "maxdepth": 6,
+ "maxlen": 140,
+ "esnext": true,
+
+ "globals": {
+ "System": true,
+ "Promise": true,
+ "define": true,
+ "require": true,
+ "Chromath": false,
+ "setImmediate": true,
+ "expect": true,
+ "it": true,
+ "describe": true,
+ "sinon": true,
+ "module": true,
+ "beforeEach": true,
+ "inject": true
+ }
+}
diff --git a/deploy/crate-datasource/CHANGELOG.md b/deploy/crate-datasource/CHANGELOG.md
new file mode 100755
index 0000000..4584f0f
--- /dev/null
+++ b/deploy/crate-datasource/CHANGELOG.md
@@ -0,0 +1,49 @@
+# Change Log
+
+
+## [Unreleased]
+
+
+## [0.5.1] - 2017-04-05
+### Changed
+- Use date_trunk() when interval set to second, minute, etc
+- Override limit only for Raw agg queries.
+
+
+## [0.5.0] - 2017-03-22
+### Added
+- Checks schema and table (prevent queries to different source).
+
+
+## [0.4.0] - 2017-03-19
+### Added
+- 'Auto' (uses date_trunk()) and 'Auto (Grafana)' (uses floor()) time intervals.
+
+### Fixed
+- 10K issue
+
+### Changed
+- Use explicit aggregation by time interval based on floor() instead date_trunk()
+
+## [0.3.0] - 2017-03-02
+### Added
+- Table mode support
+- Ad-hoc filters support
+- $timeFilter variable support
+- Quote column names with capital letters [#28](https://github.com/raintank/crate-datasource/issues/28)
+- Support GROUP BY in raw queries, issue [#30](https://github.com/raintank/crate-datasource/issues/30)
+
+### Fixed
+- Schema queries (changed in Crate 1.0)
+
+
+## [0.2.0] - 2016-11-29
+### Added
+- Special "Raw" aggregation type [#9](https://github.com/raintank/crate-datasource/issues/9)
+- Alias for each field in SELECT
+
+
+## [0.1.0] - 2016-07-10
+- Initial release
+- Implementation by [raintank](http://raintank.io)
+- Documentation contributions from [Crate.io](https://crate.io)
diff --git a/deploy/crate-datasource/Gruntfile.js b/deploy/crate-datasource/Gruntfile.js
new file mode 100755
index 0000000..589d8ad
--- /dev/null
+++ b/deploy/crate-datasource/Gruntfile.js
@@ -0,0 +1,121 @@
+module.exports = function(grunt) {
+
+ require('load-grunt-tasks')(grunt);
+
+ grunt.loadNpmTasks('grunt-execute');
+ grunt.loadNpmTasks('grunt-contrib-clean');
+
+ grunt.initConfig({
+
+ clean: ["dist"],
+
+ copy: {
+ src_to_dist: {
+ cwd: 'src',
+ expand: true,
+ src: ['**/*', '!**/*.js', '!**/*.scss'],
+ dest: 'dist'
+ },
+ pluginDef: {
+ expand: true,
+ src: ['README.md'],
+ dest: 'dist'
+ }
+ },
+
+ watch: {
+ rebuild_all: {
+ files: ['src/**/*'],
+ tasks: ['watch-ts'],
+ options: {spawn: false}
+ }
+ },
+
+ typescript: {
+ build: {
+ src: ['dist/**/*.ts', "!src/spec/**/*", "!**/*.d.ts"],
+ dest: 'dist/',
+ options: {
+ module: 'system', //or commonjs
+ target: 'es3', //or es5
+ rootDir: 'dist/',
+ keepDirectoryHierarchy: false,
+ declaration: true,
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true,
+ sourceMap: true,
+ noImplicitAny: false,
+ }
+ },
+ distTests: {
+ src: ['src/**/*.ts', "!src/spec/**/*", "!**/*.d.ts"],
+ dest: 'dist/test/',
+ options: {
+ module: 'commonjs', //or commonjs
+ target: 'es5', //or es5
+ rootDir: 'src/',
+ sourceRoot: 'src/',
+ declaration: true,
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true,
+ sourceMap: true,
+ noImplicitAny: false,
+ }
+ },
+ // distTestsSpecs: {
+ // src: ['src/spec/**/*.ts'],
+ // dest: 'dist/test/',
+ // options: {
+ // module: 'commonjs', //or commonjs
+ // target: 'es5', //or es5
+ // declaration: true,
+ // emitDecoratorMetadata: true,
+ // experimentalDecorators: true,
+ // sourceMap: true,
+ // noImplicitAny: false,
+ // }
+ // }
+ },
+
+ babel: {
+ options: {
+ sourceMap: true,
+ presets: ['es2015']
+ },
+ distTestsSpecsNoSystemJs: {
+ files: [{
+ expand: true,
+ cwd: 'src/spec',
+ src: ['**/*.js'],
+ dest: 'dist/test/spec',
+ ext:'.js'
+ }]
+ }
+ },
+
+ mochaTest: {
+ test: {
+ options: {
+ reporter: 'spec'
+ },
+ src: ['dist/test/spec/test-main.js', 'dist/test/spec/*_specs.js']
+ }
+ }
+ });
+
+ grunt.registerTask('default', [
+ 'clean',
+ 'copy',
+ 'typescript:build',
+ 'typescript:distTests',
+ 'babel',
+ 'mochaTest'
+ ]);
+
+ grunt.registerTask('watch-ts', [
+ 'clean',
+ 'copy:src_to_dist',
+ 'copy:pluginDef',
+ 'typescript:build'
+ ]);
+};
diff --git a/deploy/crate-datasource/LICENSE b/deploy/crate-datasource/LICENSE
new file mode 100755
index 0000000..8dada3e
--- /dev/null
+++ b/deploy/crate-datasource/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/deploy/crate-datasource/README.md b/deploy/crate-datasource/README.md
new file mode 100755
index 0000000..062e9b7
--- /dev/null
+++ b/deploy/crate-datasource/README.md
@@ -0,0 +1,108 @@
+# Grafana Data Source Plugin for CrateDB
+
+[](https://crate.io)
+
+
+## What Is CrateDB?
+CrateDB is a SQL database that makes it simple to store and analyze
+massive amounts of machine data in real-time. CrateDB customers have
+reported improving predictive analytic query performance of machine
+data by 20x more than MySQL, while reducing database hardware costs by
+75%.
+
+Here’s how CrateDB makes this possible:
+
+- **Combining SQL & Search** into a single DBMS - allowing you to process any data structure...time series, geospatial, JSON, full-text, etc.
+- **Distributed query innovations** - that deliver real-time SQL performance
+- **An auto-scaling architecture** - grow CrateDB with less DBA expertise
+- **Dynamic schemas, adhoc queries** - quickly adapt to data structure changes
+
+For these reasons and more, CrateDB is your perfect datasource for Grafana.
+
+## The CrateDB Datasource Plugin for Grafana
+
+### Features
+Enables CrateDB clusters to act as data sources for your Grafana deployment, providing real-time analytical and time-series data with SQL.
+
+### Requirements
+- **Grafana** > 3.x.x
+- **CrateDB** - All stable versions are supported by this plugin
+
+### Setup
+
+
+ > The screenshot shows a connection to http://localhost:44200 which is a test database for the purpose of this tutorial. CrateDB's default binding is to http://localhost:4200.
+
+1. Click on the Grafana icon on the top left.
+2. After the menu opened, you should see a link `Data Sources` below `Dashboards`.
+3. Click `+ Add data source`.
+4. Select `CrateDB` from the 'Type' dropdown.
+
+#### Cross-origin Resource Sharing (CORS)
+
+CrateDB supports [cross-origin resource sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) and if Grafana is running on a different origin (e.g. another domain), it is required to configure CrateDB accordingly. For example by this is the minimum required configuration in your `crate.yml`:
+```
+http.cors.enabled: true
+http.cors.allow-origin: "http://mydomain.com"
+```
+> Replace http://mydomain.com with the domain Grafana is running on, or use a "*" if it's OK to allow any domain to access CrateDB
+
+For further options look in [CrateDB's documentation](https://crate.io/docs/reference/en/latest/configuration.html#cross-origin-resource-sharing-cors)
+
+#### The CrateDB Data Source
+
+Name | Description
+------------ | -------------
+Name | The data source name.
+Default | Set this data source as default for new panels.
+
+##### HTTP Settings
+
+Name | Description
+------------ | -------------
+Url | The URI to any node in your CrateDB cluster.
+Access | Via Grafana backend (proxy) or directly from the browser (direct).
+Basic Auth | Enable basic authentication (only available via NGINX proxy in CrateDB).
+User | Not available in CrateDB.
+Password | Not available in CrateDB.
+
+##### CrateDB Details
+
+These are specific settings for the CrateDB data source and it's required to set a fixed `schema`, `table`, and time series column per data source.
+
+Name | Description
+------------ | -------------
+Schema | CrateDB schema to query from (defaults to `doc`).
+Table | Table to retrieve the data from. Has to be available in the previously defined schema.
+Time Column | Time series column, has to be of type `timestamp` in CrateDB.
+Default grouping interval | The grouping resolution (can be changed by query).
+
+
+
+> Grafana will not check (yet) if the `time column`, the `schema`, or the `table` exists. Be sure to double check these values to avoid running into problems later.
+
+### Querying CrateDB
+
+After adding a new dashboard and having the query editor open, define and run the queries you like - it's just like other SQL databases. For example we have added the [NYC yellow cab data set](http://www.nyc.gov/html/tlc/html/about/trip_record_data.shtml) in our cluster to show you something interesting!
+
+
+
+> This graph shows the number of yellow cab pick ups between on a weekend in August 2013.
+
+### Debugging Queries
+
+Grafana runs queries almost immediately after change and it will also auto-complete columns or previous values. However, sometimes queries might still be invalid and Grafana will then show a small exclamation mark in the top corner of the graph. Clicking on it will give you the error message.
+
+
+
+The CrateDB data source for Grafana supports a great range of scalar functions and operators. To read more about them, install or scale a cluster, or even to contribute to Crate, please have a look at the [official Crate documentation](https://crate.io/docs)
+
+### License
+- This plugins is made available under the terms of the [Apache License, Version 2.0](https://github.com/crate/crate-datasource/blob/master/LICENSE).
+
+## Getting Help
+
+- Read the CrateDB documentation [here](https://crate.io/docs)
+- Issues with the Grafana plugin can be reported or discussed [here](https://github.com/raintank/crate-datasource/issues)
+- Issues with CrateDB can be reported or discussed [here](https://github.com/crate/crate/issues)
+- Join the CrateDB Community Slack channel [here](https://crate.io/docs/support/slackin/)
diff --git a/deploy/crate-datasource/crate-logo.png b/deploy/crate-datasource/crate-logo.png
new file mode 100755
index 0000000..22849e8
Binary files /dev/null and b/deploy/crate-datasource/crate-logo.png differ
diff --git a/deploy/crate-datasource/dist/README.md b/deploy/crate-datasource/dist/README.md
new file mode 100755
index 0000000..062e9b7
--- /dev/null
+++ b/deploy/crate-datasource/dist/README.md
@@ -0,0 +1,108 @@
+# Grafana Data Source Plugin for CrateDB
+
+[](https://crate.io)
+
+
+## What Is CrateDB?
+CrateDB is a SQL database that makes it simple to store and analyze
+massive amounts of machine data in real-time. CrateDB customers have
+reported improving predictive analytic query performance of machine
+data by 20x more than MySQL, while reducing database hardware costs by
+75%.
+
+Here’s how CrateDB makes this possible:
+
+- **Combining SQL & Search** into a single DBMS - allowing you to process any data structure...time series, geospatial, JSON, full-text, etc.
+- **Distributed query innovations** - that deliver real-time SQL performance
+- **An auto-scaling architecture** - grow CrateDB with less DBA expertise
+- **Dynamic schemas, adhoc queries** - quickly adapt to data structure changes
+
+For these reasons and more, CrateDB is your perfect datasource for Grafana.
+
+## The CrateDB Datasource Plugin for Grafana
+
+### Features
+Enables CrateDB clusters to act as data sources for your Grafana deployment, providing real-time analytical and time-series data with SQL.
+
+### Requirements
+- **Grafana** > 3.x.x
+- **CrateDB** - All stable versions are supported by this plugin
+
+### Setup
+
+
+ > The screenshot shows a connection to http://localhost:44200 which is a test database for the purpose of this tutorial. CrateDB's default binding is to http://localhost:4200.
+
+1. Click on the Grafana icon on the top left.
+2. After the menu opened, you should see a link `Data Sources` below `Dashboards`.
+3. Click `+ Add data source`.
+4. Select `CrateDB` from the 'Type' dropdown.
+
+#### Cross-origin Resource Sharing (CORS)
+
+CrateDB supports [cross-origin resource sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) and if Grafana is running on a different origin (e.g. another domain), it is required to configure CrateDB accordingly. For example by this is the minimum required configuration in your `crate.yml`:
+```
+http.cors.enabled: true
+http.cors.allow-origin: "http://mydomain.com"
+```
+> Replace http://mydomain.com with the domain Grafana is running on, or use a "*" if it's OK to allow any domain to access CrateDB
+
+For further options look in [CrateDB's documentation](https://crate.io/docs/reference/en/latest/configuration.html#cross-origin-resource-sharing-cors)
+
+#### The CrateDB Data Source
+
+Name | Description
+------------ | -------------
+Name | The data source name.
+Default | Set this data source as default for new panels.
+
+##### HTTP Settings
+
+Name | Description
+------------ | -------------
+Url | The URI to any node in your CrateDB cluster.
+Access | Via Grafana backend (proxy) or directly from the browser (direct).
+Basic Auth | Enable basic authentication (only available via NGINX proxy in CrateDB).
+User | Not available in CrateDB.
+Password | Not available in CrateDB.
+
+##### CrateDB Details
+
+These are specific settings for the CrateDB data source and it's required to set a fixed `schema`, `table`, and time series column per data source.
+
+Name | Description
+------------ | -------------
+Schema | CrateDB schema to query from (defaults to `doc`).
+Table | Table to retrieve the data from. Has to be available in the previously defined schema.
+Time Column | Time series column, has to be of type `timestamp` in CrateDB.
+Default grouping interval | The grouping resolution (can be changed by query).
+
+
+
+> Grafana will not check (yet) if the `time column`, the `schema`, or the `table` exists. Be sure to double check these values to avoid running into problems later.
+
+### Querying CrateDB
+
+After adding a new dashboard and having the query editor open, define and run the queries you like - it's just like other SQL databases. For example we have added the [NYC yellow cab data set](http://www.nyc.gov/html/tlc/html/about/trip_record_data.shtml) in our cluster to show you something interesting!
+
+
+
+> This graph shows the number of yellow cab pick ups between on a weekend in August 2013.
+
+### Debugging Queries
+
+Grafana runs queries almost immediately after change and it will also auto-complete columns or previous values. However, sometimes queries might still be invalid and Grafana will then show a small exclamation mark in the top corner of the graph. Clicking on it will give you the error message.
+
+
+
+The CrateDB data source for Grafana supports a great range of scalar functions and operators. To read more about them, install or scale a cluster, or even to contribute to Crate, please have a look at the [official Crate documentation](https://crate.io/docs)
+
+### License
+- This plugins is made available under the terms of the [Apache License, Version 2.0](https://github.com/crate/crate-datasource/blob/master/LICENSE).
+
+## Getting Help
+
+- Read the CrateDB documentation [here](https://crate.io/docs)
+- Issues with the Grafana plugin can be reported or discussed [here](https://github.com/raintank/crate-datasource/issues)
+- Issues with CrateDB can be reported or discussed [here](https://github.com/crate/crate/issues)
+- Join the CrateDB Community Slack channel [here](https://crate.io/docs/support/slackin/)
diff --git a/deploy/crate-datasource/dist/config_ctrl.d.ts b/deploy/crate-datasource/dist/config_ctrl.d.ts
new file mode 100755
index 0000000..f88c36f
--- /dev/null
+++ b/deploy/crate-datasource/dist/config_ctrl.d.ts
@@ -0,0 +1,7 @@
+///