133 lines
2.9 KiB
Go
133 lines
2.9 KiB
Go
package diagnostic
|
|
|
|
import "fmt"
|
|
|
|
// StringInterface interface that has to be implemented by messages
|
|
type StringInterface interface {
|
|
String() string
|
|
}
|
|
|
|
// CommandSucceed creates a success message
|
|
func CommandSucceed(result StringInterface) *HTTPResult {
|
|
return &HTTPResult{
|
|
Message: "OK",
|
|
Details: result,
|
|
}
|
|
}
|
|
|
|
// FailCommand creates a failure message with error
|
|
func FailCommand(err error) *HTTPResult {
|
|
return &HTTPResult{
|
|
Message: "FAIL",
|
|
Details: &ErrorCmd{Error: err.Error()},
|
|
}
|
|
}
|
|
|
|
// WrongCommand creates a wrong command response
|
|
func WrongCommand(message, usage string) *HTTPResult {
|
|
return &HTTPResult{
|
|
Message: message,
|
|
Details: &UsageCmd{Usage: usage},
|
|
}
|
|
}
|
|
|
|
// HTTPResult Diagnostic Server HTTP result operation
|
|
type HTTPResult struct {
|
|
Message string `json:"message"`
|
|
Details StringInterface `json:"details"`
|
|
}
|
|
|
|
func (h *HTTPResult) String() string {
|
|
rsp := h.Message
|
|
if h.Details != nil {
|
|
rsp += "\n" + h.Details.String()
|
|
}
|
|
return rsp
|
|
}
|
|
|
|
// UsageCmd command with usage field
|
|
type UsageCmd struct {
|
|
Usage string `json:"usage"`
|
|
}
|
|
|
|
func (u *UsageCmd) String() string {
|
|
return "Usage: " + u.Usage
|
|
}
|
|
|
|
// StringCmd command with info string
|
|
type StringCmd struct {
|
|
Info string `json:"info"`
|
|
}
|
|
|
|
func (s *StringCmd) String() string {
|
|
return s.Info
|
|
}
|
|
|
|
// ErrorCmd command with error
|
|
type ErrorCmd struct {
|
|
Error string `json:"error"`
|
|
}
|
|
|
|
func (e *ErrorCmd) String() string {
|
|
return "Error: " + e.Error
|
|
}
|
|
|
|
// TableObj network db table object
|
|
type TableObj struct {
|
|
Length int `json:"size"`
|
|
Elements []StringInterface `json:"entries"`
|
|
}
|
|
|
|
func (t *TableObj) String() string {
|
|
output := fmt.Sprintf("total entries: %d\n", t.Length)
|
|
for _, e := range t.Elements {
|
|
output += e.String()
|
|
}
|
|
return output
|
|
}
|
|
|
|
// PeerEntryObj entry in the networkdb peer table
|
|
type PeerEntryObj struct {
|
|
Index int `json:"-"`
|
|
Name string `json:"-=name"`
|
|
IP string `json:"ip"`
|
|
}
|
|
|
|
func (p *PeerEntryObj) String() string {
|
|
return fmt.Sprintf("%d) %s -> %s\n", p.Index, p.Name, p.IP)
|
|
}
|
|
|
|
// TableEntryObj network db table entry object
|
|
type TableEntryObj struct {
|
|
Index int `json:"-"`
|
|
Key string `json:"key"`
|
|
Value string `json:"value"`
|
|
Owner string `json:"owner"`
|
|
}
|
|
|
|
func (t *TableEntryObj) String() string {
|
|
return fmt.Sprintf("%d) k:`%s` -> v:`%s` owner:`%s`\n", t.Index, t.Key, t.Value, t.Owner)
|
|
}
|
|
|
|
// TableEndpointsResult fully typed message for proper unmarshaling on the client side
|
|
type TableEndpointsResult struct {
|
|
TableObj
|
|
Elements []TableEntryObj `json:"entries"`
|
|
}
|
|
|
|
// TablePeersResult fully typed message for proper unmarshaling on the client side
|
|
type TablePeersResult struct {
|
|
TableObj
|
|
Elements []PeerEntryObj `json:"entries"`
|
|
}
|
|
|
|
// NetworkStatsResult network db stats related to entries and queue len for a network
|
|
type NetworkStatsResult struct {
|
|
Entries int `json:"entries"`
|
|
QueueLen int `jsoin:"qlen"`
|
|
}
|
|
|
|
func (n *NetworkStatsResult) String() string {
|
|
return fmt.Sprintf("entries: %d, qlen: %d\n", n.Entries, n.QueueLen)
|
|
}
|