package krpc
import (
"fmt"
"net/http"
"text/template"
)
const debugText = `
kRPC Services
{{range .}}
Service {{.Name}}
Method | Calls |
{{range $name, $mtype := .Method}}
{{$name}}({{$mtype.ArgType}}, {{$mtype.ReplyType}}) error |
{{$mtype.NumCalls}}
|
{{end}}
{{end}}
`
var debug = template.Must(template.New("RPC debug").Parse(debugText))
type debugHTTP struct {
*Server
}
type debugService struct {
Name string
Method map[string]*methodType
}
func (s debugHTTP) ServeHTTP(w http.ResponseWriter, r *http.Request) {
var services []debugService
s.serviceMap.Range(func(namei, svci interface{}) bool {
svc := svci.(*service)
services = append(services, debugService{Name: namei.(string), Method: svc.method,})
return true
})
err := debug.Execute(w, services)
if err != nil {
_, _ = fmt.Fprintln(w, "rpc: error executing template:", err.Error())
}
}