package rpc
import (
"fmt"
"html/template"
"net/http"
"slices"
"strings"
)
const debugText = `<html>
<body>
<title>Services</title>
{{range .}}
<hr>
Service {{.Name}}
<hr>
<table>
<th align=center>Method</th><th align=center>Calls</th>
{{range .Method}}
<tr>
<td align=left font=fixed>{{.Name}}({{.Type.ArgType}}, {{.Type.ReplyType}}) error</td>
<td align=center>{{.Type.NumCalls}}</td>
</tr>
{{end}}
</table>
{{end}}
</body>
</html>`
var debug = template .Must (template .New ("RPC debug" ).Parse (debugText ))
var debugLog = false
type debugMethod struct {
Type *methodType
Name string
}
type methodArray []debugMethod
type debugService struct {
Service *service
Name string
Method []debugMethod
}
type serviceArray []debugService
func (s serviceArray ) Len () int { return len (s ) }
func (s serviceArray ) Less (i , j int ) bool { return s [i ].Name < s [j ].Name }
func (s serviceArray ) Swap (i , j int ) { s [i ], s [j ] = s [j ], s [i ] }
func (m methodArray ) Len () int { return len (m ) }
func (m methodArray ) Less (i , j int ) bool { return m [i ].Name < m [j ].Name }
func (m methodArray ) Swap (i , j int ) { m [i ], m [j ] = m [j ], m [i ] }
type debugHTTP struct {
*Server
}
func (server debugHTTP ) ServeHTTP (w http .ResponseWriter , req *http .Request ) {
var services serviceArray
server .serviceMap .Range (func (snamei , svci any ) bool {
svc := svci .(*service )
ds := debugService {svc , snamei .(string ), make ([]debugMethod , 0 , len (svc .method ))}
for mname , method := range svc .method {
ds .Method = append (ds .Method , debugMethod {method , mname })
}
slices .SortFunc (ds .Method , func (a , b debugMethod ) int {
return strings .Compare (a .Name , b .Name )
})
services = append (services , ds )
return true
})
slices .SortFunc (services , func (a , b debugService ) int {
return strings .Compare (a .Name , b .Name )
})
err := debug .Execute (w , services )
if err != nil {
fmt .Fprintln (w , "rpc: error executing template:" , err .Error())
}
}
The pages are generated with Golds v0.7.0-preview . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .