traefik/vendor/github.com/Microsoft/ApplicationInsights-Go/appinsights/diagnostics.go
2018-07-11 09:08:03 +02:00

64 lines
1.5 KiB
Go

package appinsights
import "fmt"
type DiagnosticsMessageWriter interface {
Write(string)
appendListener(*diagnosticsMessageListener)
}
type diagnosticsMessageWriter struct {
listeners []chan string
}
type DiagnosticsMessageProcessor func(string)
type DiagnosticsMessageListener interface {
ProcessMessages(DiagnosticsMessageProcessor)
}
type diagnosticsMessageListener struct {
channel chan string
}
var diagnosticsWriter *diagnosticsMessageWriter = &diagnosticsMessageWriter{
listeners: make([]chan string, 0),
}
func NewDiagnosticsMessageListener() DiagnosticsMessageListener {
listener := &diagnosticsMessageListener{
channel: make(chan string),
}
diagnosticsWriter.appendListener(listener)
return listener
}
func (writer *diagnosticsMessageWriter) appendListener(listener *diagnosticsMessageListener) {
writer.listeners = append(writer.listeners, listener.channel)
}
func (writer *diagnosticsMessageWriter) Write(message string) {
for _, c := range writer.listeners {
c <- message
}
}
func (writer *diagnosticsMessageWriter) Printf(message string, args ...interface{}) {
// Don't bother with Sprintf if nobody is listening
if writer.hasListeners() {
writer.Write(fmt.Sprintf(message, args...))
}
}
func (writer *diagnosticsMessageWriter) hasListeners() bool {
return len(writer.listeners) > 0
}
func (listener *diagnosticsMessageListener) ProcessMessages(process DiagnosticsMessageProcessor) {
for {
message := <-listener.channel
process(message)
}
}