新增后台管理
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
mqtt "github.com/mochi-mqtt/server/v2"
|
||||
)
|
||||
|
||||
type mqttStatusProvider interface {
|
||||
Status() adminMqttStatus
|
||||
}
|
||||
|
||||
type mqttRuntimeStatus struct {
|
||||
server *mqtt.Server
|
||||
address string
|
||||
tls bool
|
||||
}
|
||||
|
||||
type adminMqttStatus struct {
|
||||
Running bool `json:"running"`
|
||||
Address string `json:"address"`
|
||||
TLS bool `json:"tls"`
|
||||
Version string `json:"version"`
|
||||
Started int64 `json:"started"`
|
||||
Uptime int64 `json:"uptime"`
|
||||
BytesReceived int64 `json:"bytes_received"`
|
||||
BytesSent int64 `json:"bytes_sent"`
|
||||
ClientsConnected int64 `json:"clients_connected"`
|
||||
ClientsDisconnected int64 `json:"clients_disconnected"`
|
||||
ClientsMaximum int64 `json:"clients_maximum"`
|
||||
ClientsTotal int64 `json:"clients_total"`
|
||||
MessagesReceived int64 `json:"messages_received"`
|
||||
MessagesSent int64 `json:"messages_sent"`
|
||||
MessagesDropped int64 `json:"messages_dropped"`
|
||||
Retained int64 `json:"retained"`
|
||||
Inflight int64 `json:"inflight"`
|
||||
InflightDropped int64 `json:"inflight_dropped"`
|
||||
Subscriptions int64 `json:"subscriptions"`
|
||||
PacketsReceived int64 `json:"packets_received"`
|
||||
PacketsSent int64 `json:"packets_sent"`
|
||||
Clients []adminMqttClient `json:"clients"`
|
||||
}
|
||||
|
||||
type adminMqttClient struct {
|
||||
ClientID string `json:"client_id"`
|
||||
Username string `json:"username"`
|
||||
Listener string `json:"listener"`
|
||||
RemoteAddr string `json:"remote_addr"`
|
||||
RemoteHost string `json:"remote_host"`
|
||||
RemotePort string `json:"remote_port"`
|
||||
}
|
||||
|
||||
func (m mqttRuntimeStatus) Status() adminMqttStatus {
|
||||
if m.server == nil || m.server.Info == nil {
|
||||
return adminMqttStatus{Running: false, Address: m.address, TLS: m.tls}
|
||||
}
|
||||
info := m.server.Info.Clone()
|
||||
status := adminMqttStatus{
|
||||
Running: true,
|
||||
Address: m.address,
|
||||
TLS: m.tls,
|
||||
Version: info.Version,
|
||||
Started: info.Started,
|
||||
Uptime: info.Uptime,
|
||||
BytesReceived: info.BytesReceived,
|
||||
BytesSent: info.BytesSent,
|
||||
ClientsConnected: info.ClientsConnected,
|
||||
ClientsDisconnected: info.ClientsDisconnected,
|
||||
ClientsMaximum: info.ClientsMaximum,
|
||||
ClientsTotal: info.ClientsTotal,
|
||||
MessagesReceived: info.MessagesReceived,
|
||||
MessagesSent: info.MessagesSent,
|
||||
MessagesDropped: info.MessagesDropped,
|
||||
Retained: info.Retained,
|
||||
Inflight: info.Inflight,
|
||||
InflightDropped: info.InflightDropped,
|
||||
Subscriptions: info.Subscriptions,
|
||||
PacketsReceived: info.PacketsReceived,
|
||||
PacketsSent: info.PacketsSent,
|
||||
}
|
||||
for _, client := range m.server.Clients.GetAll() {
|
||||
if client == nil || client.Closed() {
|
||||
continue
|
||||
}
|
||||
clientInfo := mqttClientInfoFromClient(client)
|
||||
status.Clients = append(status.Clients, adminMqttClient{
|
||||
ClientID: clientInfo.ClientID,
|
||||
Username: clientInfo.Username,
|
||||
Listener: clientInfo.Listener,
|
||||
RemoteAddr: clientInfo.RemoteAddr,
|
||||
RemoteHost: clientInfo.RemoteHost,
|
||||
RemotePort: clientInfo.RemotePort,
|
||||
})
|
||||
}
|
||||
return status
|
||||
}
|
||||
Reference in New Issue
Block a user