diff --git a/.gitignore b/.gitignore
index 3aa23b45149..3fdbcac5734 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,5 +31,5 @@ public/css/*.min.css
conf/custom.ini
fig.yml
profile.cov
-grafana
+/grafana
.notouch
diff --git a/public/app/plugins/datasource/grafana/datasource.ts b/public/app/plugins/datasource/grafana/datasource.ts
new file mode 100644
index 00000000000..afac499cdb1
--- /dev/null
+++ b/public/app/plugins/datasource/grafana/datasource.ts
@@ -0,0 +1,16 @@
+///
+
+class GrafanaDatasource {
+
+ constructor(private backendSrv) {}
+
+ query(options) {
+ return this.backendSrv.get('/api/metrics/test', {
+ from: options.range.from.valueOf(),
+ to: options.range.to.valueOf(),
+ maxDataPoints: options.maxDataPoints
+ });
+ }
+}
+
+export {GrafanaDatasource};
diff --git a/public/app/plugins/datasource/grafana/module.ts b/public/app/plugins/datasource/grafana/module.ts
new file mode 100644
index 00000000000..bfe2b041fb1
--- /dev/null
+++ b/public/app/plugins/datasource/grafana/module.ts
@@ -0,0 +1,14 @@
+///
+
+import angular from 'angular';
+import {GrafanaDatasource} from './datasource';
+
+var module = angular.module('grafana.directives');
+
+module.directive('metricQueryEditorGrafana', function() {
+ return {templateUrl: 'app/plugins/datasource/grafana/partials/query.editor.html'};
+});
+
+
+export {GrafanaDatasource, GrafanaDatasource as Datasource};
+
diff --git a/public/app/plugins/datasource/mixed/module.ts b/public/app/plugins/datasource/mixed/module.ts
new file mode 100644
index 00000000000..1f29e1e80f4
--- /dev/null
+++ b/public/app/plugins/datasource/mixed/module.ts
@@ -0,0 +1,14 @@
+///
+
+import angular from 'angular';
+import {MixedDatasource} from './datasource';
+
+var module = angular.module('grafana.directives');
+
+module.directive('metricQueryEditorMixed', function() {
+ return {templateUrl: 'app/plugins/datasource/mixed/partials/query.editor.html'};
+});
+
+
+export {MixedDatasource, MixedDatasource as Datasource};
+