Goka web interface
Observing the progress of recovery and execution of a goka processor is often vital for basic
debugging purposes or performance analyses.
Goka provides a very simple web interface that allows to show statistics about individual partitions including
state, offsets and lag as well as input- and output rate.
For low level inspection of table data, it provides a simple interface to query values from
views or processor tables.
Monitoring
First, to get a web interface we need a router. If the program using Goka already uses a router, Goka's web
interface can easily be attached to it instead.
So first, initialize the monitoring server using a router with
root := mux.NewRouter()
monitorServer := monitor.NewServer("/monitor", root)
Suppose we have a processor proc, then we can simply attach it to the monitor
proc := goka.NewProcessor(...)
monitorServer.AttachProcessor(proc)
Ok, then let's start the processor and the server with
go proc.Run(context.Background())
http.ListenAndServe(":9095", root)
Opening the browser on localhost:9095/monitor/ will then show us a list of all attached processors
and views and by selecting one of them we'll get statistics of the processor, similar like this
![processor view Processor View](https://github.com/daming06/goka/raw/v0.1.2/examples/monitoring/images/processor-view.png)
Index
Ok nice, but if you don't have another router with an index and links to the monitor,
it's really annoying to add monitor/ to your browser url every time you want to open the monitor.
That's why Goka provides a small convenience index server, that the Monitoring and the Query servers can be attached to.
idxServer := index.NewServer("/", root)
idxServer.AddComponent(monitorServer, "Monitor")
So next time we open the page at localhost:9095, we'll get some nice links to the monitor.
![index view Index](https://github.com/daming06/goka/raw/v0.1.2/examples/monitoring/images/index.png)
Query
As mentioned earlier, we can also add a query server that allows us to request a value by key from
a View or a Processor table, simply by attaching it to a Query server. Also let's add the new server to the
index as well to avoid repeated typing of query/ in the url.
queryServer := query.NewServer("/query", root)
idxServer.AddComponent(queryServer, "Query")
queryServer.AttachSource("user-clicks", p.Get)
Opening a query page gives us a page like this:
![query view Query](https://github.com/daming06/goka/raw/v0.1.2/examples/monitoring/images/query.png)
Voila!
Example
The example in main.go demonstrates the concepts and typical applications of the web interface by
creating an Emitter, multiple Processors and a web interface.
Be sure to have Apache Kafka and Zookeeper running by starting it in the examples-folder.
examples$ make restart
Then run the monitoring example with:
examples$ go run monitoring/main.go