Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
b91e9fac
Unverified
Commit
b91e9fac
authored
Nov 05, 2020
by
Ryan McKinley
Committed by
GitHub
Nov 05, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Live: update centrifuge and the ChannelHandler api (#28843)
parent
d736fcdd
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
99 additions
and
196 deletions
+99
-196
go.mod
+1
-1
go.sum
+2
-33
pkg/models/live.go
+4
-8
pkg/services/live/features/broadcast.go
+21
-15
pkg/services/live/features/dashboard.go
+20
-23
pkg/services/live/features/measurements.go
+8
-13
pkg/services/live/features/testdata.go
+18
-25
pkg/services/live/live.go
+11
-53
pkg/services/live/pluginHandler.go
+8
-13
pkg/tsdb/cloudwatch/live.go
+6
-12
No files found.
go.mod
View file @
b91e9fac
...
...
@@ -19,7 +19,7 @@ require (
github.com/beevik/etree v1.1.0
github.com/benbjohnson/clock v0.0.0-20161215174838-7dc76406b6d3
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b
github.com/centrifugal/centrifuge v0.1
1
.0
github.com/centrifugal/centrifuge v0.1
3
.0
github.com/crewjam/saml v0.4.1
github.com/davecgh/go-spew v1.1.1
github.com/deepmap/oapi-codegen v1.3.11 // indirect
...
...
go.sum
View file @
b91e9fac
...
...
@@ -16,9 +16,7 @@ cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bP
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.66.0 h1:DZeAkuQGQqnm9Xv36SbMJEU8aFBz4wL04UpMWPWwjzg=
cloud.google.com/go v0.66.0/go.mod h1:dgqGAjKCDxyhGTtC9dAREQGUJpkceNm1yt590Qno0Ko=
cloud.google.com/go v0.70.0 h1:ujhG1RejZYi+HYfJNlgBh3j/bVKD8DewM7AkJ5UPyBc=
cloud.google.com/go v0.70.0/go.mod h1:/UTKYRQTWjVnSe7nGvoSzxEFUELzSI/yAYd0JQT6cRo=
...
...
@@ -40,9 +38,7 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy
cloud.google.com/go/storage v1.3.0/go.mod h1:9IAwXhoyBJ7z9LcAwkj0/7NnPzYaPeZxxVp3zm+5IqA=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0 h1:86K1Gel7BQ9/WmNWn7dTKMvTLFzwtBe5FNqYbi9X35g=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.12.0 h1:4y3gHptW1EHVtcPAVE0eBBlFuGqEejTTG3KdIE0lUX4=
cloud.google.com/go/storage v1.12.0/go.mod h1:fFLk2dp2oAhDz8QFKwqrjdJvxSp/W2g7nillojlL5Ho=
...
...
@@ -153,7 +149,6 @@ github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpi
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.31.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aws/aws-sdk-go v1.33.5/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aws/aws-sdk-go v1.33.12 h1:eydMoSwfrSTD9PWKUJOiDL7+/UwDW8AjInUGVE5Llh4=
github.com/aws/aws-sdk-go v1.33.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aws/aws-sdk-go v1.35.5 h1:doSEOxC0UkirPcle20Rc+1kAhJ4Ip+GSEeZ3nKl7Qlk=
github.com/aws/aws-sdk-go v1.35.5/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
...
...
@@ -187,8 +182,8 @@ github.com/cenkalti/backoff v1.0.0/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQ
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/cenkalti/backoff/v4 v4.0.2/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/centrifugal/centrifuge v0.1
1.0 h1:aaG74PBO+rBmz3hE9W8bCGz8kofiam1LNE4EAVtiMaA
=
github.com/centrifugal/centrifuge v0.1
1
.0/go.mod h1:jdFw/2dBFpME3OTisc5FVAC1ilqodnyMnQFjem0k0yg=
github.com/centrifugal/centrifuge v0.1
3.0 h1:nfcpaa/TXoA56ba/xXs3rc2Vrj/UZTFS1iTQ9q2MSZE
=
github.com/centrifugal/centrifuge v0.1
3
.0/go.mod h1:jdFw/2dBFpME3OTisc5FVAC1ilqodnyMnQFjem0k0yg=
github.com/centrifugal/protocol v0.3.4 h1:9q22iSp4CQOdQahfopvfmWWxDbj1Lo7ERG2j56mAxkE=
github.com/centrifugal/protocol v0.3.4/go.mod h1:2YbBCaDwQHl37ErRdMrKSj18X2yVvpkQYtSX6aVbe5A=
github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
...
...
@@ -495,7 +490,6 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
...
...
@@ -512,7 +506,6 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
...
...
@@ -534,7 +527,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
...
...
@@ -562,7 +554,6 @@ github.com/google/pprof v0.0.0-20201009210932-67992a1a5a35/go.mod h1:kpwsk12EmLe
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
...
...
@@ -711,7 +702,6 @@ github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZ
github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74=
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc=
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
...
...
@@ -719,7 +709,6 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
github.com/jonboulle/clockwork v0.2.1 h1:S/EaQvW6FpWMYAvYvY+OBDvpaM+izu0oiwo5y0MH7U0=
...
...
@@ -1049,7 +1038,6 @@ github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/russellhaering/goxmldsig v0.0.0-20180430223755-7acd5e4a6ef7 h1:J4AOUcOh/t1XbQcJfkEqhzgvMJ2tDxdCVvmHxW5QXao=
github.com/russellhaering/goxmldsig v0.0.0-20180430223755-7acd5e4a6ef7/go.mod h1:Oz4y6ImuOQZxynhbSXk7btjEfNBtGlj2dcaOvXl2FSM=
github.com/russellhaering/goxmldsig v0.0.0-20200902171629-2e1fbc2c5593 h1:wkyiSzH81tsd3tSoznvnXMIJo0cpHjbFuJhs/E9t/B8=
github.com/russellhaering/goxmldsig v0.0.0-20200902171629-2e1fbc2c5593/go.mod h1:QK8GhXPB3+AfuCrfo0oRISa9NfzeCpWmxeGnqEpDF9o=
...
...
@@ -1064,7 +1052,6 @@ github.com/samuel/go-zookeeper v0.0.0-20200724154423-2164a8ac840e/go.mod h1:gi+0
github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4=
github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM=
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/segmentio/fasthash v0.0.0-20180216231524-a72b379d632e/go.mod h1:tm/wZFQ8e24NYaBGIlnO2WGCAi67re4HHuOm0sftE/M=
...
...
@@ -1124,7 +1111,6 @@ github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
...
...
@@ -1215,9 +1201,7 @@ go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
...
...
@@ -1356,7 +1340,6 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201022231255-08b38378de70 h1:Z6x4N9mAi4oF0TbHweCsH618MO6OI6UFgV0FP5n0wBY=
golang.org/x/net v0.0.0-20201022231255-08b38378de70/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
...
...
@@ -1366,7 +1349,6 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
...
...
@@ -1378,7 +1360,6 @@ golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
...
...
@@ -1457,7 +1438,6 @@ golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201022201747-fb209a7c41cd h1:WgqgiQvkiZWz7XLhphjt2GI2GcGCTIZs9jqXMWmH+oc=
golang.org/x/sys v0.0.0-20201022201747-fb209a7c41cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
...
...
@@ -1545,13 +1525,11 @@ golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roY
golang.org/x/tools v0.0.0-20200603131246-cc40288be839/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200710042808-f1c4188a97a1/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200725200936-102e7d357031 h1:VtIxiVHWPhnny2ZTi4f9/2diZKqyLaq3FUTuud5+khA=
golang.org/x/tools v0.0.0-20200725200936-102e7d357031/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200828161849-5deb26317202/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858 h1:xLt+iB5ksWcZVxqc+g9K41ZHy+6MKWfXCDsjSThnsPA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20200915173823-2db8f0ff891c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/tools v0.0.0-20200918232735-d647fc253266/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
...
...
@@ -1560,7 +1538,6 @@ golang.org/x/tools v0.0.0-20201023150057-2f4fa188d925 h1:iGGR3nU1TUd+WTF17QPTTSh
golang.org/x/tools v0.0.0-20201023150057-2f4fa188d925/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
...
...
@@ -1587,7 +1564,6 @@ google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0 h1:BaiDisFir8O4IJxvAabCGGkQ6yCJegNQqSVoYUNAnbk=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.31.0/go.mod h1:CL+9IBCa2WWU6gRuBWaKqGWLFFwbEUXkfeMkHLQWYWo=
...
...
@@ -1602,7 +1578,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
...
...
@@ -1644,16 +1619,13 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY
google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200710124503-20a17af7bd0e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200724131911-43cab4749ae7 h1:AWgNCmk2V5HZp9AiCDRBExX/b9I0Ey9F8STHDZlhCC4=
google.golang.org/genproto v0.0.0-20200724131911-43cab4749ae7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200831141814-d751682dd103/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d h1:92D1fum1bJLKSdr11OJ+54YeCMCGYIygTA7R/YZxH5M=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200914193844-75d14daec038/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200921151605-7abf4a1a14d5 h1:B9nroC8SSX5GtbVvxPF9tYIVkaCpjhVLOrlAY8ONzm8=
google.golang.org/genproto v0.0.0-20200921151605-7abf4a1a14d5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201022181438-0ff5f38871d5 h1:YejJbGvoWsTXHab4OKNrzk27Dr7s4lPLnewbHue1+gM=
...
...
@@ -1678,12 +1650,9 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.32.0 h1:zWTV+LMdc3kaiJMSTOFz2UgSBgx8RNQoTGiZu3fR9S0=
google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.1 h1:DGeFlSan2f+WEtCERJ4J9GJWk15TxUi8QGagfI87Xyc=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
...
...
pkg/models/live.go
View file @
b91e9fac
...
...
@@ -7,15 +7,11 @@ type ChannelPublisher func(channel string, data []byte) error
// ChannelHandler defines the core channel behavior
type
ChannelHandler
interface
{
//
This is called fast and often -- it must be synchrnozed
GetChannelOptions
(
id
string
)
centrifuge
.
ChannelOptions
//
OnSubscribe is called when a client wants to subscribe to a channel
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
(
centrifuge
.
SubscribeReply
,
error
)
// Called when a client wants to subscribe to a channel
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
error
// AllowBroadcast is called when a client writes a message to the channel websocket.
// Returning an error will cancel the broadcast.
AllowBroadcast
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
error
// OnPublish is called when a client writes a message to the channel websocket.
OnPublish
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
(
centrifuge
.
PublishReply
,
error
)
}
// ChannelHandlerFactory should be implemented by all core features.
...
...
pkg/services/live/features/broadcast.go
View file @
b91e9fac
package
features
import
(
"time"
"github.com/centrifugal/centrifuge"
"github.com/grafana/grafana/pkg/models"
)
// BroadcastRunner will simply broadcast all events to `grafana/broadcast/*` channels
// This assumes that data is a JSON object
type
BroadcastRunner
struct
{
}
type
BroadcastRunner
struct
{}
// GetHandlerForPath called on init
func
(
b
*
BroadcastRunner
)
GetHandlerForPath
(
path
string
)
(
models
.
ChannelHandler
,
error
)
{
return
b
,
nil
// for now all channels share config
}
// GetChannelOptions called fast and often
func
(
b
*
BroadcastRunner
)
GetChannelOptions
(
id
string
)
centrifuge
.
ChannelOptions
{
return
centrifuge
.
ChannelOptions
{}
return
b
,
nil
// all dashboards share the same handler
}
// OnSubscribe for now allows anyone to subscribe to any dashboard
func
(
b
*
BroadcastRunner
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
error
{
// anyone can subscribe
return
nil
// OnSubscribe will let anyone connect to the path
func
(
b
*
BroadcastRunner
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
(
centrifuge
.
SubscribeReply
,
error
)
{
return
centrifuge
.
SubscribeReply
{
Options
:
centrifuge
.
SubscribeOptions
{
Presence
:
true
,
JoinLeave
:
true
,
Recover
:
true
,
// loads the saved value from history
},
},
nil
}
// AllowBroadcast checks if a message can be broadcast on this channel
func
(
b
*
BroadcastRunner
)
AllowBroadcast
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
error
{
return
nil
// OnPublish is called when a client wants to broadcast on the websocket
func
(
b
*
BroadcastRunner
)
OnPublish
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
(
centrifuge
.
PublishReply
,
error
)
{
return
centrifuge
.
PublishReply
{
Options
:
centrifuge
.
PublishOptions
{
HistorySize
:
1
,
// The last message is saved for 10 mins
HistoryTTL
:
10
*
time
.
Minute
,
},
},
nil
}
pkg/services/live/features/dashboard.go
View file @
b91e9fac
...
...
@@ -21,42 +21,39 @@ type DashboardHandler struct {
}
// GetHandlerForPath called on init
func
(
g
*
DashboardHandler
)
GetHandlerForPath
(
path
string
)
(
models
.
ChannelHandler
,
error
)
{
return
g
,
nil
// all dashboards share the same handler
}
// GetChannelOptions called fast and often
func
(
g
*
DashboardHandler
)
GetChannelOptions
(
id
string
)
centrifuge
.
ChannelOptions
{
return
centrifuge
.
ChannelOptions
{
Presence
:
true
,
JoinLeave
:
true
,
// if enterprise?
}
func
(
h
*
DashboardHandler
)
GetHandlerForPath
(
path
string
)
(
models
.
ChannelHandler
,
error
)
{
return
h
,
nil
// all dashboards share the same handler
}
// OnSubscribe for now allows anyone to subscribe to any dashboard
func
(
g
*
DashboardHandler
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
error
{
// TODO? check authentication
return
nil
func
(
h
*
DashboardHandler
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
(
centrifuge
.
SubscribeReply
,
error
)
{
return
centrifuge
.
SubscribeReply
{
Options
:
centrifuge
.
SubscribeOptions
{
Presence
:
true
,
JoinLeave
:
true
,
},
},
nil
}
// AllowBroadcast checks if a message from the websocket can be broadcast on this channel
// currently messages are sent when a dashboard starts editing
func
(
g
*
DashboardHandler
)
AllowBroadcast
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
error
{
return
nil
// OnPublish is called when someone begins to edit a dashoard
func
(
h
*
DashboardHandler
)
OnPublish
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
(
centrifuge
.
PublishReply
,
error
)
{
return
centrifuge
.
PublishReply
{
Options
:
centrifuge
.
PublishOptions
{},
},
nil
}
// DashboardSaved should broadcast to the appropriate stream
func
(
g
*
DashboardHandler
)
publish
(
event
dashboardEvent
)
error
{
func
(
h
*
DashboardHandler
)
publish
(
event
dashboardEvent
)
error
{
msg
,
err
:=
json
.
Marshal
(
event
)
if
err
!=
nil
{
return
err
}
return
g
.
Publisher
(
"grafana/dashboard/"
+
event
.
UID
,
msg
)
return
h
.
Publisher
(
"grafana/dashboard/"
+
event
.
UID
,
msg
)
}
// DashboardSaved will broadcast to all connected dashboards
func
(
g
*
DashboardHandler
)
DashboardSaved
(
uid
string
,
userID
int64
)
error
{
return
g
.
publish
(
dashboardEvent
{
func
(
h
*
DashboardHandler
)
DashboardSaved
(
uid
string
,
userID
int64
)
error
{
return
h
.
publish
(
dashboardEvent
{
UID
:
uid
,
Action
:
"saved"
,
UserID
:
userID
,
...
...
@@ -64,8 +61,8 @@ func (g *DashboardHandler) DashboardSaved(uid string, userID int64) error {
}
// DashboardDeleted will broadcast to all connected dashboards
func
(
g
*
DashboardHandler
)
DashboardDeleted
(
uid
string
,
userID
int64
)
error
{
return
g
.
publish
(
dashboardEvent
{
func
(
h
*
DashboardHandler
)
DashboardDeleted
(
uid
string
,
userID
int64
)
error
{
return
h
.
publish
(
dashboardEvent
{
UID
:
uid
,
Action
:
"deleted"
,
UserID
:
userID
,
...
...
pkg/services/live/features/measurements.go
View file @
b91e9fac
...
...
@@ -21,20 +21,15 @@ func (m *MeasurementsRunner) GetHandlerForPath(path string) (models.ChannelHandl
return
m
,
nil
// for now all channels share config
}
// GetChannelOptions gets channel options.
// It gets called fast and often.
func
(
m
*
MeasurementsRunner
)
GetChannelOptions
(
id
string
)
centrifuge
.
ChannelOptions
{
return
centrifuge
.
ChannelOptions
{}
// OnSubscribe will let anyone connect to the path
func
(
m
*
MeasurementsRunner
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
(
centrifuge
.
SubscribeReply
,
error
)
{
return
centrifuge
.
SubscribeReply
{},
nil
}
// OnSubscribe for now allows anyone to subscribe to any dashboard.
func
(
m
*
MeasurementsRunner
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
error
{
// anyone can subscribe
return
nil
}
// AllowBroadcast checks if a message from the websocket can be broadcast on this channel
// OnPublish is called when a client wants to broadcast on the websocket
// Currently this sends measurements over websocket -- should be replaced with the HTTP interface
func
(
m
*
MeasurementsRunner
)
AllowBroadcast
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
error
{
return
nil
func
(
m
*
MeasurementsRunner
)
OnPublish
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
(
centrifuge
.
PublishReply
,
error
)
{
return
centrifuge
.
PublishReply
{
Options
:
centrifuge
.
PublishOptions
{},
},
nil
}
pkg/services/live/features/testdata.go
View file @
b91e9fac
...
...
@@ -27,12 +27,12 @@ type TestDataSupplier struct {
// GetHandlerForPath gets the channel handler for a path.
// Called on init.
func
(
g
*
TestDataSupplier
)
GetHandlerForPath
(
path
string
)
(
models
.
ChannelHandler
,
error
)
{
func
(
s
*
TestDataSupplier
)
GetHandlerForPath
(
path
string
)
(
models
.
ChannelHandler
,
error
)
{
channel
:=
"grafana/testdata/"
+
path
if
path
==
"random-2s-stream"
{
return
&
testDataRunner
{
publisher
:
g
.
Publisher
,
publisher
:
s
.
Publisher
,
running
:
false
,
speedMillis
:
2000
,
dropPercent
:
0
,
...
...
@@ -43,7 +43,7 @@ func (g *TestDataSupplier) GetHandlerForPath(path string) (models.ChannelHandler
if
path
==
"random-flakey-stream"
{
return
&
testDataRunner
{
publisher
:
g
.
Publisher
,
publisher
:
s
.
Publisher
,
running
:
false
,
speedMillis
:
400
,
dropPercent
:
.6
,
...
...
@@ -54,39 +54,32 @@ func (g *TestDataSupplier) GetHandlerForPath(path string) (models.ChannelHandler
return
nil
,
fmt
.
Errorf
(
"unknown channel"
)
}
// GetChannelOptions gets channel options.
// Called fast and often.
func
(
g
*
testDataRunner
)
GetChannelOptions
(
id
string
)
centrifuge
.
ChannelOptions
{
return
centrifuge
.
ChannelOptions
{}
}
// OnSubscribe for now allows anyone to subscribe to any dashboard.
func
(
g
*
testDataRunner
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
error
{
if
!
g
.
running
{
g
.
running
=
true
// OnSubscribe will let anyone connect to the path
func
(
r
*
testDataRunner
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
(
centrifuge
.
SubscribeReply
,
error
)
{
if
!
r
.
running
{
r
.
running
=
true
// Run in the background
go
g
.
runRandomCSV
()
go
r
.
runRandomCSV
()
}
// TODO? check authentication
return
nil
return
centrifuge
.
SubscribeReply
{},
nil
}
//
AllowBroadcast
checks if a message from the websocket can be broadcast on this channel
func
(
g
*
testDataRunner
)
AllowBroadcast
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
error
{
return
fmt
.
Errorf
(
"can not publish to testdata"
)
//
OnPublish
checks if a message from the websocket can be broadcast on this channel
func
(
r
*
testDataRunner
)
OnPublish
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
(
centrifuge
.
PublishReply
,
error
)
{
return
centrifuge
.
PublishReply
{},
fmt
.
Errorf
(
"can not publish to testdata"
)
}
// runRandomCSV is just for an example.
func
(
g
*
testDataRunner
)
runRandomCSV
()
{
func
(
r
*
testDataRunner
)
runRandomCSV
()
{
spread
:=
50.0
walker
:=
rand
.
Float64
()
*
100
ticker
:=
time
.
NewTicker
(
time
.
Duration
(
g
.
speedMillis
)
*
time
.
Millisecond
)
ticker
:=
time
.
NewTicker
(
time
.
Duration
(
r
.
speedMillis
)
*
time
.
Millisecond
)
measurement
:=
models
.
Measurement
{
Name
:
g
.
name
,
Name
:
r
.
name
,
Time
:
0
,
Values
:
make
(
map
[
string
]
interface
{},
5
),
}
...
...
@@ -95,7 +88,7 @@ func (g *testDataRunner) runRandomCSV() {
}
for
t
:=
range
ticker
.
C
{
if
rand
.
Float64
()
<=
g
.
dropPercent
{
if
rand
.
Float64
()
<=
r
.
dropPercent
{
continue
}
delta
:=
rand
.
Float64
()
-
0.5
...
...
@@ -112,9 +105,9 @@ func (g *testDataRunner) runRandomCSV() {
continue
}
err
=
g
.
publisher
(
g
.
channel
,
bytes
)
err
=
r
.
publisher
(
r
.
channel
,
bytes
)
if
err
!=
nil
{
logger
.
Warn
(
"write"
,
"channel"
,
g
.
channel
,
"measurement"
,
measurement
)
logger
.
Warn
(
"write"
,
"channel"
,
r
.
channel
,
"measurement"
,
measurement
)
}
}
}
pkg/services/live/live.go
View file @
b91e9fac
...
...
@@ -74,20 +74,6 @@ func (g *GrafanaLive) Init() error {
// cfg.LogLevel = centrifuge.LogLevelDebug
cfg
.
LogHandler
=
handleLog
// This function is called fast and often -- it must be sychronized
cfg
.
ChannelOptionsFunc
=
func
(
channel
string
)
(
centrifuge
.
ChannelOptions
,
bool
,
error
)
{
handler
,
err
:=
g
.
GetChannelHandler
(
channel
)
if
err
!=
nil
{
logger
.
Error
(
"ChannelOptionsFunc"
,
"channel"
,
channel
,
"err"
,
err
)
if
err
.
Error
()
==
"404"
{
// ????
return
centrifuge
.
ChannelOptions
{},
false
,
nil
}
return
centrifuge
.
ChannelOptions
{},
true
,
err
}
opts
:=
handler
.
GetChannelOptions
(
channel
)
return
opts
,
true
,
nil
}
// Node is the core object in Centrifuge library responsible for many useful
// things. For example Node allows to publish messages to channels from server
// side with its Publish method, but in this example we will publish messages
...
...
@@ -115,57 +101,29 @@ func (g *GrafanaLive) Init() error {
// inside handler must be synchronized since it will be called concurrently from
// different goroutines (belonging to different client connections). This is also
// true for other event handlers.
node
.
OnConnect
(
func
(
c
*
centrifuge
.
Client
)
{
// In our example transport will always be Websocket but it can also be SockJS.
transportName
:=
c
.
Transport
()
.
Name
()
// In our example clients connect with JSON protocol but it can also be Protobuf.
transportEncoding
:=
c
.
Transport
()
.
Encoding
()
logger
.
Debug
(
"client connected"
,
"transport"
,
transportName
,
"encoding"
,
transportEncoding
)
})
// Set Disconnect handler to react on client disconnect events.
node
.
OnDisconnect
(
func
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
DisconnectEvent
)
{
logger
.
Info
(
"client disconnected"
)
})
// Set SubscribeHandler to react on every channel subscription attempt
// initiated by client. Here you can theoretically return an error or
// disconnect client from server if needed. But now we just accept
// all subscriptions to all channels. In real life you may use a more
// complex permission check here.
node
.
OnSubscribe
(
func
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
(
centrifuge
.
SubscribeReply
,
error
)
{
reply
:=
centrifuge
.
SubscribeReply
{}
node
.
OnConnect
(
func
(
client
*
centrifuge
.
Client
)
{
logger
.
Debug
(
"Client connected"
,
"user"
,
client
.
UserID
())
client
.
OnSubscribe
(
func
(
e
centrifuge
.
SubscribeEvent
,
cb
centrifuge
.
SubscribeCallback
)
{
handler
,
err
:=
g
.
GetChannelHandler
(
e
.
Channel
)
if
err
!=
nil
{
return
reply
,
err
cb
(
centrifuge
.
SubscribeReply
{},
err
)
}
else
{
cb
(
handler
.
OnSubscribe
(
client
,
e
))
}
err
=
handler
.
OnSubscribe
(
c
,
e
)
if
err
!=
nil
{
return
reply
,
err
}
return
reply
,
nil
})
node
.
OnUnsubscribe
(
func
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
UnsubscribeEvent
)
{
logger
.
Debug
(
"unsubscribe from channel"
,
"channel"
,
e
.
Channel
,
"user"
,
c
.
UserID
())
})
// Called when a client writes to the websocket channel.
// In general, we should prefer writing to the HTTP API, but this
// allows some simple prototypes to work quickly
node
.
OnPublish
(
func
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
(
centrifuge
.
PublishReply
,
error
)
{
reply
:=
centrifuge
.
PublishReply
{}
client
.
OnPublish
(
func
(
e
centrifuge
.
PublishEvent
,
cb
centrifuge
.
PublishCallback
)
{
handler
,
err
:=
g
.
GetChannelHandler
(
e
.
Channel
)
if
err
!=
nil
{
return
reply
,
err
cb
(
centrifuge
.
PublishReply
{},
err
)
}
else
{
cb
(
handler
.
OnPublish
(
client
,
e
))
}
err
=
handler
.
AllowBroadcast
(
c
,
e
)
return
centrifuge
.
PublishReply
{},
err
})
})
// Run node. This method does not block.
...
...
pkg/services/live/pluginHandler.go
View file @
b91e9fac
...
...
@@ -12,21 +12,16 @@ type PluginHandler struct {
}
// GetHandlerForPath called on init
func
(
g
*
PluginHandler
)
GetHandlerForPath
(
path
string
)
(
models
.
ChannelHandler
,
error
)
{
return
g
,
nil
// all dashboards share the same handler
func
(
h
*
PluginHandler
)
GetHandlerForPath
(
path
string
)
(
models
.
ChannelHandler
,
error
)
{
return
h
,
nil
// all dashboards share the same handler
}
//
GetChannelOptions called fast and often
func
(
g
*
PluginHandler
)
GetChannelOptions
(
id
string
)
centrifuge
.
ChannelOptions
{
return
centrifuge
.
ChannelOptions
{}
//
OnSubscribe for now allows anyone to subscribe
func
(
h
*
PluginHandler
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
(
centrifuge
.
SubscribeReply
,
error
)
{
return
centrifuge
.
SubscribeReply
{},
nil
}
// OnSubscribe for now allows anyone to subscribe to any dashboard
func
(
g
*
PluginHandler
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
error
{
return
nil
// anyone can subscribe
}
// AllowBroadcast checks if a message from the websocket can be broadcast on this channel
func
(
g
*
PluginHandler
)
AllowBroadcast
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
error
{
return
nil
// broadcast any event
// OnPublish checks if a message from the websocket can be broadcast on this channel
func
(
h
*
PluginHandler
)
OnPublish
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
(
centrifuge
.
PublishReply
,
error
)
{
return
centrifuge
.
PublishReply
{},
nil
// broadcast any event
}
pkg/tsdb/cloudwatch/live.go
View file @
b91e9fac
...
...
@@ -55,19 +55,13 @@ func (s *LogQueryRunnerSupplier) GetHandlerForPath(path string) (models.ChannelH
},
nil
}
// GetChannelOptions gets channel options.
// It's called fast and often.
func
(
r
*
logQueryRunner
)
GetChannelOptions
(
id
string
)
centrifuge
.
ChannelOptions
{
return
centrifuge
.
ChannelOptions
{}
}
// OnSubscribe publishes results from the corresponding CloudWatch Logs query to the provided channel
func
(
r
*
logQueryRunner
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
error
{
func
(
r
*
logQueryRunner
)
OnSubscribe
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
SubscribeEvent
)
(
centrifuge
.
SubscribeReply
,
error
)
{
r
.
runningMu
.
Lock
()
defer
r
.
runningMu
.
Unlock
()
if
_
,
ok
:=
r
.
running
[
e
.
Channel
];
ok
{
return
nil
return
centrifuge
.
SubscribeReply
{},
nil
}
r
.
running
[
e
.
Channel
]
=
true
...
...
@@ -77,12 +71,12 @@ func (r *logQueryRunner) OnSubscribe(c *centrifuge.Client, e centrifuge.Subscrib
}
}()
return
nil
return
centrifuge
.
SubscribeReply
{},
nil
}
//
AllowBroadcast
checks if a message from the websocket can be broadcast on this channel
func
(
r
*
logQueryRunner
)
AllowBroadcast
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
error
{
return
fmt
.
Errorf
(
"can not publish"
)
//
OnPublish
checks if a message from the websocket can be broadcast on this channel
func
(
r
*
logQueryRunner
)
OnPublish
(
c
*
centrifuge
.
Client
,
e
centrifuge
.
PublishEvent
)
(
centrifuge
.
PublishReply
,
error
)
{
return
centrifuge
.
PublishReply
{},
fmt
.
Errorf
(
"can not publish"
)
}
func
(
r
*
logQueryRunner
)
publishResults
(
channelName
string
)
error
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment