From fbd94fc6ceed57f9f719e613314e217ec8c8e33b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Mon, 14 Mar 2016 11:59:51 +0100 Subject: [PATCH] feat(websockets): inital work on websockets, #4355 --- pkg/api/api.go | 2 +- pkg/{ => api}/live/conn.go | 0 pkg/{ => api}/live/hub.go | 0 pkg/api/search.go | 6 ++-- public/app/core/core.ts | 2 ++ public/app/core/live/live_srv.ts | 31 +++++++++++++++++++ public/app/features/admin/admin.ts | 8 ----- .../plugins/datasource/stream/datasource.ts | 21 +++++++++++++ .../app/plugins/datasource/stream/module.ts | 15 +++++++++ .../stream/partials/query.editor.html | 8 +++++ .../app/plugins/datasource/stream/plugin.json | 8 +++++ 11 files changed, 88 insertions(+), 13 deletions(-) rename pkg/{ => api}/live/conn.go (100%) rename pkg/{ => api}/live/hub.go (100%) create mode 100644 public/app/core/live/live_srv.ts create mode 100644 public/app/plugins/datasource/stream/datasource.ts create mode 100644 public/app/plugins/datasource/stream/module.ts create mode 100644 public/app/plugins/datasource/stream/partials/query.editor.html create mode 100644 public/app/plugins/datasource/stream/plugin.json diff --git a/pkg/api/api.go b/pkg/api/api.go index b6cd4cd72bb..32c929a42e2 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -4,7 +4,7 @@ import ( "github.com/go-macaron/binding" "github.com/grafana/grafana/pkg/api/avatar" "github.com/grafana/grafana/pkg/api/dtos" - "github.com/grafana/grafana/pkg/live" + "github.com/grafana/grafana/pkg/api/live" "github.com/grafana/grafana/pkg/middleware" m "github.com/grafana/grafana/pkg/models" "gopkg.in/macaron.v1" diff --git a/pkg/live/conn.go b/pkg/api/live/conn.go similarity index 100% rename from pkg/live/conn.go rename to pkg/api/live/conn.go diff --git a/pkg/live/hub.go b/pkg/api/live/hub.go similarity index 100% rename from pkg/live/hub.go rename to pkg/api/live/hub.go diff --git a/pkg/api/search.go b/pkg/api/search.go index 6123db5778c..5ec95971033 100644 --- a/pkg/api/search.go +++ b/pkg/api/search.go @@ -1,11 +1,11 @@ package api import ( + "strconv" + "github.com/grafana/grafana/pkg/bus" - "github.com/grafana/grafana/pkg/live" "github.com/grafana/grafana/pkg/middleware" "github.com/grafana/grafana/pkg/services/search" - "strconv" ) func Search(c *middleware.Context) { @@ -43,6 +43,4 @@ func Search(c *middleware.Context) { } c.JSON(200, searchQuery.Result) - - live.SendMessage(query) } diff --git a/public/app/core/core.ts b/public/app/core/core.ts index 32ddee02dc7..fac703ba5c2 100644 --- a/public/app/core/core.ts +++ b/public/app/core/core.ts @@ -28,6 +28,7 @@ import {infoPopover} from './components/info_popover'; import {colorPicker} from './components/colorpicker'; import {navbarDirective} from './components/navbar/navbar'; import {arrayJoin} from './directives/array_join'; +import {liveSrv} from './live/live_srv'; import 'app/core/controllers/all'; import 'app/core/services/all'; import 'app/core/routes/routes'; @@ -42,5 +43,6 @@ export { navbarDirective, searchDirective, colorPicker, + liveSrv, infoPopover }; diff --git a/public/app/core/live/live_srv.ts b/public/app/core/live/live_srv.ts new file mode 100644 index 00000000000..d417597e1ea --- /dev/null +++ b/public/app/core/live/live_srv.ts @@ -0,0 +1,31 @@ +/// + +import config from 'app/core/config'; +import coreModule from 'app/core/core_module'; + +export class LiveSrv { + conn: any; + + init() { + this.conn = new WebSocket("ws://localhost:3000/ws"); + this.conn.onclose = function(evt) { + console.log("WebSocket closed"); + }; + this.conn.onmessage = function(evt) { + console.log("WebSocket message", evt.data); + }; + this.conn.onopen = function(evt) { + console.log("Connection opened"); + }; + } + + subscribe(name) { + if (!this.conn) { + this.init(); + } + } + +} + +var instance = new LiveSrv(); +export {instance as liveSrv}; diff --git a/public/app/features/admin/admin.ts b/public/app/features/admin/admin.ts index a76ed6ea6b1..b93fd07a059 100644 --- a/public/app/features/admin/admin.ts +++ b/public/app/features/admin/admin.ts @@ -20,14 +20,6 @@ class AdminSettingsCtrl { class AdminHomeCtrl { /** @ngInject **/ constructor() { - - var conn = new WebSocket("ws://localhost:3000/ws"); - conn.onclose = function(evt) { - console.log("Connection closed"); - }; - conn.onmessage = function(evt) { - console.log("message", evt.data); - }; } } diff --git a/public/app/plugins/datasource/stream/datasource.ts b/public/app/plugins/datasource/stream/datasource.ts new file mode 100644 index 00000000000..ae2bb87dbef --- /dev/null +++ b/public/app/plugins/datasource/stream/datasource.ts @@ -0,0 +1,21 @@ +/// + +import {liveSrv} from 'app/core/core'; + +export class GrafanaStreamDS { + + /** @ngInject */ + constructor(private $q) { + + } + + query(options) { + if (options.targets.length === 0) { + return Promise.resolve({data: []}); + } + + var target = options.targets[0]; + liveSrv.subscribe(target); + } +} + diff --git a/public/app/plugins/datasource/stream/module.ts b/public/app/plugins/datasource/stream/module.ts new file mode 100644 index 00000000000..b17abd02feb --- /dev/null +++ b/public/app/plugins/datasource/stream/module.ts @@ -0,0 +1,15 @@ +/// + +import angular from 'angular'; +import {GrafanaStreamDS} from './datasource'; +import {QueryCtrl} from 'app/plugins/sdk'; + +class GrafanaQueryCtrl extends QueryCtrl { + static templateUrl = 'partials/query.editor.html'; +} + +export { + GrafanaStreamDS as Datasource, + GrafanaQueryCtrl as QueryCtrl, +}; + diff --git a/public/app/plugins/datasource/stream/partials/query.editor.html b/public/app/plugins/datasource/stream/partials/query.editor.html new file mode 100644 index 00000000000..6a8554d017d --- /dev/null +++ b/public/app/plugins/datasource/stream/partials/query.editor.html @@ -0,0 +1,8 @@ + +
  • + Stream Expression +
  • +
  • + +
  • +
    diff --git a/public/app/plugins/datasource/stream/plugin.json b/public/app/plugins/datasource/stream/plugin.json new file mode 100644 index 00000000000..df5fee586ed --- /dev/null +++ b/public/app/plugins/datasource/stream/plugin.json @@ -0,0 +1,8 @@ +{ + "type": "datasource", + "name": "Grafana Stream DS", + "id": "grafana-stream-ds", + + "builtIn": true, + "metrics": true +}