mirror of
				https://github.com/mochi-mqtt/server.git
				synced 2025-10-31 11:36:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // SPDX-License-Identifier: MIT
 | |
| // SPDX-FileCopyrightText: 2022 mochi-mqtt, mochi-co
 | |
| // SPDX-FileContributor: mochi-co
 | |
| 
 | |
| package system
 | |
| 
 | |
| import "sync/atomic"
 | |
| 
 | |
| // 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),
 | |
| 	}
 | |
| }
 | 
