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  }