Skip to content

Instantly share code, notes, and snippets.

@segphault
Created February 5, 2015 22:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save segphault/a33e10478d1e9bdb88b6 to your computer and use it in GitHub Desktop.
Save segphault/a33e10478d1e9bdb88b6 to your computer and use it in GitHub Desktop.
A Go-based implementation of the RethinkDB cluster monitoring demo
package main
import (
"fmt"
r "github.com/dancannon/gorethink"
"github.com/googollee/go-socket.io"
"log"
"net/http"
)
func main() {
server, _ := socketio.NewServer(nil)
conn, _ := r.Connect(r.ConnectOpts{
Address: "localhost:28015",
Database: "rethinkdb",
})
stats, _ := r.Table("stats").Filter(
r.Row.Field("id").AtIndex(0).Eq("cluster")).Changes().Run(conn)
go func() {
var change r.WriteChanges
for stats.Next(&change) {
server.BroadcastTo("monitor", "stats", change.NewValue)
}
}()
servers, _ := r.Table("server_status").Changes().Run(conn)
go func() {
var change r.WriteChanges
for servers.Next(&change) {
server.BroadcastTo("monitor", "servers", change)
}
}()
server.On("connection", func(so socketio.Socket) {
so.Join("monitor")
result, _ := r.Table("server_status").Run(conn)
var output []interface{}
result.All(&output)
so.Emit("servers", output)
})
http.Handle("/socket.io/", server)
http.Handle("/", http.FileServer(http.Dir("public")))
log.Println("Starting server on port 8091")
log.Fatal(http.ListenAndServe(":8091", nil))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment