mirror of
				https://github.com/gin-gonic/gin.git
				synced 2025-11-04 09:12:12 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"runtime"
 | 
						|
	"sync"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/manucorporat/stats"
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	ips        = stats.New()
 | 
						|
	messages   = stats.New()
 | 
						|
	users      = stats.New()
 | 
						|
	mutexStats sync.RWMutex
 | 
						|
	savedStats map[string]uint64
 | 
						|
)
 | 
						|
 | 
						|
func statsWorker() {
 | 
						|
	c := time.Tick(1 * time.Second)
 | 
						|
	var lastMallocs uint64
 | 
						|
	var lastFrees uint64
 | 
						|
	for range c {
 | 
						|
		var stats runtime.MemStats
 | 
						|
		runtime.ReadMemStats(&stats)
 | 
						|
 | 
						|
		mutexStats.Lock()
 | 
						|
		savedStats = map[string]uint64{
 | 
						|
			"timestamp":  uint64(time.Now().Unix()),
 | 
						|
			"HeapInuse":  stats.HeapInuse,
 | 
						|
			"StackInuse": stats.StackInuse,
 | 
						|
			"Mallocs":    (stats.Mallocs - lastMallocs),
 | 
						|
			"Frees":      (stats.Frees - lastFrees),
 | 
						|
			"Inbound":    uint64(messages.Get("inbound")),
 | 
						|
			"Outbound":   uint64(messages.Get("outbound")),
 | 
						|
			"Connected":  connectedUsers(),
 | 
						|
		}
 | 
						|
		lastMallocs = stats.Mallocs
 | 
						|
		lastFrees = stats.Frees
 | 
						|
		messages.Reset()
 | 
						|
		mutexStats.Unlock()
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func connectedUsers() uint64 {
 | 
						|
	connected := users.Get("connected") - users.Get("disconnected")
 | 
						|
	if connected < 0 {
 | 
						|
		return 0
 | 
						|
	}
 | 
						|
	return uint64(connected)
 | 
						|
}
 | 
						|
 | 
						|
func Stats() map[string]uint64 {
 | 
						|
	mutexStats.RLock()
 | 
						|
	defer mutexStats.RUnlock()
 | 
						|
 | 
						|
	return savedStats
 | 
						|
}
 |