github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/framework/http/registry/handlerimpl.go (about) 1 package registry 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "github.com/unionj-cloud/go-doudou/framework/memberlist" 7 "github.com/unionj-cloud/go-doudou/framework/registry" 8 "net/http" 9 "text/template" 10 ) 11 12 // RegistryHandlerImpl define implementation for RegistryHandler 13 type RegistryHandlerImpl struct { 14 } 15 16 type row struct { 17 Index int `json:"index"` 18 registry.NodeInfo 19 } 20 21 // GetRegistry returns registry UI 22 func (receiver *RegistryHandlerImpl) GetRegistry(_writer http.ResponseWriter, _req *http.Request) { 23 var ( 24 tpl *template.Template 25 err error 26 buf bytes.Buffer 27 nodes []*memberlist.Node 28 rows []row 29 ret []byte 30 ) 31 if nodes, err = registry.AllNodes(); err != nil { 32 http.Error(_writer, err.Error(), http.StatusInternalServerError) 33 return 34 } 35 for i, node := range nodes { 36 rows = append(rows, row{ 37 Index: i + 1, 38 NodeInfo: registry.Info(node), 39 }) 40 } 41 ret, _ = json.Marshal(rows) 42 if tpl, err = template.New("registry.tmpl").Parse(indexTmpl); err != nil { 43 panic(err) 44 } 45 if err = tpl.Execute(&buf, struct { 46 Rows string 47 }{ 48 Rows: string(ret), 49 }); err != nil { 50 panic(err) 51 } 52 _writer.Header().Set("Content-Type", "text/html; charset=utf-8") 53 _writer.Write(buf.Bytes()) 54 } 55 56 // NewRegistryHandler creates new RegistryHandlerImpl 57 func NewRegistryHandler() RegistryHandler { 58 return &RegistryHandlerImpl{} 59 }