mirror of
				https://github.com/xjasonlyu/tun2socks.git
				synced 2025-11-01 04:22:44 +08:00 
			
		
		
		
	Refactor: manager -> statistic
This commit is contained in:
		| @@ -7,7 +7,7 @@ import ( | ||||
| 	"strconv" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/xjasonlyu/tun2socks/tunnel" | ||||
| 	"github.com/xjasonlyu/tun2socks/tunnel/statistic" | ||||
|  | ||||
| 	"github.com/go-chi/chi" | ||||
| 	"github.com/go-chi/render" | ||||
| @@ -26,7 +26,7 @@ func connectionRouter() http.Handler { | ||||
|  | ||||
| func getConnections(w http.ResponseWriter, r *http.Request) { | ||||
| 	if !websocket.IsWebSocketUpgrade(r) { | ||||
| 		snapshot := tunnel.DefaultManager.Snapshot() | ||||
| 		snapshot := statistic.DefaultManager.Snapshot() | ||||
| 		render.JSON(w, r, snapshot) | ||||
| 		return | ||||
| 	} | ||||
| @@ -52,7 +52,7 @@ func getConnections(w http.ResponseWriter, r *http.Request) { | ||||
| 	buf := &bytes.Buffer{} | ||||
| 	sendSnapshot := func() error { | ||||
| 		buf.Reset() | ||||
| 		snapshot := tunnel.DefaultManager.Snapshot() | ||||
| 		snapshot := statistic.DefaultManager.Snapshot() | ||||
| 		if err := json.NewEncoder(buf).Encode(snapshot); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| @@ -75,7 +75,7 @@ func getConnections(w http.ResponseWriter, r *http.Request) { | ||||
|  | ||||
| func closeConnection(w http.ResponseWriter, r *http.Request) { | ||||
| 	id := chi.URLParam(r, "id") | ||||
| 	snapshot := tunnel.DefaultManager.Snapshot() | ||||
| 	snapshot := statistic.DefaultManager.Snapshot() | ||||
| 	for _, c := range snapshot.Connections { | ||||
| 		if id == c.ID() { | ||||
| 			_ = c.Close() | ||||
| @@ -86,7 +86,7 @@ func closeConnection(w http.ResponseWriter, r *http.Request) { | ||||
| } | ||||
|  | ||||
| func closeAllConnections(w http.ResponseWriter, r *http.Request) { | ||||
| 	snapshot := tunnel.DefaultManager.Snapshot() | ||||
| 	snapshot := statistic.DefaultManager.Snapshot() | ||||
| 	for _, c := range snapshot.Connections { | ||||
| 		_ = c.Close() | ||||
| 	} | ||||
|   | ||||
| @@ -10,7 +10,7 @@ import ( | ||||
|  | ||||
| 	"github.com/xjasonlyu/tun2socks/constant" | ||||
| 	"github.com/xjasonlyu/tun2socks/log" | ||||
| 	"github.com/xjasonlyu/tun2socks/tunnel" | ||||
| 	"github.com/xjasonlyu/tun2socks/tunnel/statistic" | ||||
|  | ||||
| 	"github.com/go-chi/chi" | ||||
| 	"github.com/go-chi/cors" | ||||
| @@ -176,7 +176,7 @@ func traffic(w http.ResponseWriter, r *http.Request) { | ||||
|  | ||||
| 	tick := time.NewTicker(time.Second) | ||||
| 	defer tick.Stop() | ||||
| 	t := tunnel.DefaultManager | ||||
| 	t := statistic.DefaultManager | ||||
| 	buf := &bytes.Buffer{} | ||||
| 	var err error | ||||
| 	for range tick.C { | ||||
|   | ||||
| @@ -1,22 +0,0 @@ | ||||
| package tunnel | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
|  | ||||
| 	"github.com/xjasonlyu/tun2socks/common/adapter" | ||||
| 	"github.com/xjasonlyu/tun2socks/component/manager" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	// DefaultManager is the default traffic and connections | ||||
| 	// manager used by tunnel. | ||||
| 	DefaultManager = manager.New() | ||||
| ) | ||||
|  | ||||
| func newTCPTracker(conn net.Conn, metadata *adapter.Metadata) net.Conn { | ||||
| 	return manager.NewTCPTracker(conn, metadata, DefaultManager) | ||||
| } | ||||
|  | ||||
| func newUDPTracker(conn net.PacketConn, metadata *adapter.Metadata) net.PacketConn { | ||||
| 	return manager.NewUDPTracker(conn, metadata, DefaultManager) | ||||
| } | ||||
| @@ -1,5 +1,4 @@ | ||||
| // Package manager provides statistic management of connections. | ||||
| package manager | ||||
| package statistic | ||||
| 
 | ||||
| import ( | ||||
| 	"sync" | ||||
| @@ -8,6 +7,21 @@ import ( | ||||
| 	"go.uber.org/atomic" | ||||
| ) | ||||
| 
 | ||||
| var DefaultManager *Manager | ||||
| 
 | ||||
| func init() { | ||||
| 	DefaultManager = &Manager{ | ||||
| 		uploadTemp:    atomic.NewInt64(0), | ||||
| 		downloadTemp:  atomic.NewInt64(0), | ||||
| 		uploadBlip:    atomic.NewInt64(0), | ||||
| 		downloadBlip:  atomic.NewInt64(0), | ||||
| 		uploadTotal:   atomic.NewInt64(0), | ||||
| 		downloadTotal: atomic.NewInt64(0), | ||||
| 	} | ||||
| 
 | ||||
| 	go DefaultManager.handle() | ||||
| } | ||||
| 
 | ||||
| type Manager struct { | ||||
| 	connections   sync.Map | ||||
| 	uploadTemp    *atomic.Int64 | ||||
| @@ -18,20 +32,6 @@ type Manager struct { | ||||
| 	downloadTotal *atomic.Int64 | ||||
| } | ||||
| 
 | ||||
| func New() *Manager { | ||||
| 	manager := &Manager{ | ||||
| 		uploadTemp:    atomic.NewInt64(0), | ||||
| 		downloadTemp:  atomic.NewInt64(0), | ||||
| 		uploadBlip:    atomic.NewInt64(0), | ||||
| 		downloadBlip:  atomic.NewInt64(0), | ||||
| 		uploadTotal:   atomic.NewInt64(0), | ||||
| 		downloadTotal: atomic.NewInt64(0), | ||||
| 	} | ||||
| 	go manager.handle() | ||||
| 
 | ||||
| 	return manager | ||||
| } | ||||
| 
 | ||||
| func (m *Manager) Join(c tracker) { | ||||
| 	m.connections.Store(c.ID(), c) | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| package manager | ||||
| package statistic | ||||
| 
 | ||||
| import ( | ||||
| 	"net" | ||||
| @@ -11,12 +11,17 @@ import ( | ||||
| 	"github.com/xjasonlyu/tun2socks/common/pool" | ||||
| 	"github.com/xjasonlyu/tun2socks/log" | ||||
| 	"github.com/xjasonlyu/tun2socks/proxy" | ||||
| 	"github.com/xjasonlyu/tun2socks/tunnel/statistic" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	tcpWaitTimeout = 5 * time.Second | ||||
| ) | ||||
|  | ||||
| func newTCPTracker(conn net.Conn, metadata *adapter.Metadata) net.Conn { | ||||
| 	return statistic.NewTCPTracker(conn, metadata, statistic.DefaultManager) | ||||
| } | ||||
|  | ||||
| func handleTCP(localConn adapter.TCPConn) { | ||||
| 	defer localConn.Close() | ||||
|  | ||||
|   | ||||
| @@ -12,6 +12,7 @@ import ( | ||||
| 	"github.com/xjasonlyu/tun2socks/component/nat" | ||||
| 	"github.com/xjasonlyu/tun2socks/log" | ||||
| 	"github.com/xjasonlyu/tun2socks/proxy" | ||||
| 	"github.com/xjasonlyu/tun2socks/tunnel/statistic" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -24,6 +25,10 @@ var ( | ||||
| 	natTable = nat.NewTable() | ||||
| ) | ||||
|  | ||||
| func newUDPTracker(conn net.PacketConn, metadata *adapter.Metadata) net.PacketConn { | ||||
| 	return statistic.NewUDPTracker(conn, metadata, statistic.DefaultManager) | ||||
| } | ||||
|  | ||||
| func handleUDP(packet adapter.UDPPacket) { | ||||
| 	metadata := packet.Metadata() | ||||
| 	if !metadata.Valid() { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 xjasonlyu
					xjasonlyu