代码整理
This commit is contained in:
70
system/config.yaml
Normal file
70
system/config.yaml
Normal file
@@ -0,0 +1,70 @@
|
||||
listeners:
|
||||
- type: "tcp"
|
||||
id: "file-tcp1"
|
||||
address: ":1883"
|
||||
- type: "ws"
|
||||
id: "file-websocket"
|
||||
address: ":1882"
|
||||
- type: "healthcheck"
|
||||
id: "file-healthcheck"
|
||||
address: ":1880"
|
||||
hooks:
|
||||
debug:
|
||||
enable: true
|
||||
storage:
|
||||
badger:
|
||||
path: badger.db
|
||||
gc_interval: 3
|
||||
gc_discard_ratio: 0.5
|
||||
pebble:
|
||||
path: pebble.db
|
||||
mode: "NoSync"
|
||||
bolt:
|
||||
path: bolt.db
|
||||
bucket: "mochi"
|
||||
redis:
|
||||
h_prefix: "mc"
|
||||
username: "mochi"
|
||||
password: "melon"
|
||||
address: "localhost:6379"
|
||||
database: 1
|
||||
auth:
|
||||
allow_all: false
|
||||
ledger:
|
||||
auth:
|
||||
- username: peach
|
||||
password: password1
|
||||
allow: true
|
||||
acl:
|
||||
- remote: 127.0.0.1:*
|
||||
- username: melon
|
||||
filters:
|
||||
melon/#: 3
|
||||
updates/#: 2
|
||||
options:
|
||||
client_net_write_buffer_size: 2048
|
||||
client_net_read_buffer_size: 2048
|
||||
sys_topic_resend_interval: 10
|
||||
inline_client: true
|
||||
capabilities:
|
||||
maximum_message_expiry_interval: 100
|
||||
maximum_client_writes_pending: 8192
|
||||
maximum_session_expiry_interval: 86400
|
||||
maximum_packet_size: 0
|
||||
receive_maximum: 1024
|
||||
maximum_inflight: 8192
|
||||
topic_alias_maximum: 65535
|
||||
shared_sub_available: 1
|
||||
minimum_protocol_version: 3
|
||||
maximum_qos: 2
|
||||
retain_available: 1
|
||||
wildcard_sub_available: 1
|
||||
sub_id_available: 1
|
||||
compatibilities:
|
||||
obscure_not_authorized: true
|
||||
passive_client_disconnect: false
|
||||
always_return_response_info: false
|
||||
restore_sys_info_on_restart: false
|
||||
no_inherited_properties_on_ack: false
|
||||
logging:
|
||||
level: INFO
|
||||
62
system/system.go
Normal file
62
system/system.go
Normal file
@@ -0,0 +1,62 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// SPDX-FileCopyrightText: 2022 mochi-mqtt, mochi-co
|
||||
// SPDX-FileContributor: mochi-co
|
||||
|
||||
package system
|
||||
|
||||
import "sync/atomic"
|
||||
|
||||
// Info 系统信息 包含各种服务器统计信息的原子计数器和值
|
||||
// Info contains atomic counters and values for various server statistics
|
||||
// commonly found in $SYS topics (and others).
|
||||
// based on https://github.com/mqtt/mqtt.org/wiki/SYS-Topics
|
||||
type Info struct {
|
||||
Version string `json:"version"` // the current version of the server
|
||||
Started int64 `json:"started"` // the time the server started in unix seconds
|
||||
Time int64 `json:"time"` // current time on the server
|
||||
Uptime int64 `json:"uptime"` // the number of seconds the server has been online
|
||||
BytesReceived int64 `json:"bytes_received"` // total number of bytes received since the broker started
|
||||
BytesSent int64 `json:"bytes_sent"` // total number of bytes sent since the broker started
|
||||
ClientsConnected int64 `json:"clients_connected"` // number of currently connected clients
|
||||
ClientsDisconnected int64 `json:"clients_disconnected"` // total number of persistent clients (with clean session disabled) that are registered at the broker but are currently disconnected
|
||||
ClientsMaximum int64 `json:"clients_maximum"` // maximum number of active clients that have been connected
|
||||
ClientsTotal int64 `json:"clients_total"` // total number of connected and disconnected clients with a persistent session currently connected and registered
|
||||
MessagesReceived int64 `json:"messages_received"` // total number of publish messages received
|
||||
MessagesSent int64 `json:"messages_sent"` // total number of publish messages sent
|
||||
MessagesDropped int64 `json:"messages_dropped"` // total number of publish messages dropped to slow subscriber
|
||||
Retained int64 `json:"retained"` // total number of retained messages active on the broker
|
||||
Inflight int64 `json:"inflight"` // the number of messages currently in-flight
|
||||
InflightDropped int64 `json:"inflight_dropped"` // the number of inflight messages which were dropped
|
||||
Subscriptions int64 `json:"subscriptions"` // total number of subscriptions active on the broker
|
||||
PacketsReceived int64 `json:"packets_received"` // the total number of publish messages received
|
||||
PacketsSent int64 `json:"packets_sent"` // total number of messages of any type sent since the broker started
|
||||
MemoryAlloc int64 `json:"memory_alloc"` // memory currently allocated
|
||||
Threads int64 `json:"threads"` // number of active goroutines, named as threads for platform ambiguity
|
||||
}
|
||||
|
||||
// Clone makes a copy of Info using atomic operation
|
||||
func (i *Info) Clone() *Info {
|
||||
return &Info{
|
||||
Version: i.Version,
|
||||
Started: atomic.LoadInt64(&i.Started),
|
||||
Time: atomic.LoadInt64(&i.Time),
|
||||
Uptime: atomic.LoadInt64(&i.Uptime),
|
||||
BytesReceived: atomic.LoadInt64(&i.BytesReceived),
|
||||
BytesSent: atomic.LoadInt64(&i.BytesSent),
|
||||
ClientsConnected: atomic.LoadInt64(&i.ClientsConnected),
|
||||
ClientsMaximum: atomic.LoadInt64(&i.ClientsMaximum),
|
||||
ClientsTotal: atomic.LoadInt64(&i.ClientsTotal),
|
||||
ClientsDisconnected: atomic.LoadInt64(&i.ClientsDisconnected),
|
||||
MessagesReceived: atomic.LoadInt64(&i.MessagesReceived),
|
||||
MessagesSent: atomic.LoadInt64(&i.MessagesSent),
|
||||
MessagesDropped: atomic.LoadInt64(&i.MessagesDropped),
|
||||
Retained: atomic.LoadInt64(&i.Retained),
|
||||
Inflight: atomic.LoadInt64(&i.Inflight),
|
||||
InflightDropped: atomic.LoadInt64(&i.InflightDropped),
|
||||
Subscriptions: atomic.LoadInt64(&i.Subscriptions),
|
||||
PacketsReceived: atomic.LoadInt64(&i.PacketsReceived),
|
||||
PacketsSent: atomic.LoadInt64(&i.PacketsSent),
|
||||
MemoryAlloc: atomic.LoadInt64(&i.MemoryAlloc),
|
||||
Threads: atomic.LoadInt64(&i.Threads),
|
||||
}
|
||||
}
|
||||
37
system/system_test.go
Normal file
37
system/system_test.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestClone(t *testing.T) {
|
||||
o := &Info{
|
||||
Version: "version",
|
||||
Started: 1,
|
||||
Time: 2,
|
||||
Uptime: 3,
|
||||
BytesReceived: 4,
|
||||
BytesSent: 5,
|
||||
ClientsConnected: 6,
|
||||
ClientsMaximum: 7,
|
||||
ClientsTotal: 8,
|
||||
ClientsDisconnected: 9,
|
||||
MessagesReceived: 10,
|
||||
MessagesSent: 11,
|
||||
MessagesDropped: 20,
|
||||
Retained: 12,
|
||||
Inflight: 13,
|
||||
InflightDropped: 14,
|
||||
Subscriptions: 15,
|
||||
PacketsReceived: 16,
|
||||
PacketsSent: 17,
|
||||
MemoryAlloc: 18,
|
||||
Threads: 19,
|
||||
}
|
||||
|
||||
n := o.Clone()
|
||||
|
||||
require.Equal(t, o, n)
|
||||
}
|
||||
Reference in New Issue
Block a user