mirror of
https://github.com/wyx2685/V2bX.git
synced 2026-03-22 02:51:54 +00:00
add singbox core(just started)
This commit is contained in:
@@ -1,68 +0,0 @@
|
||||
package hy
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
type UserTrafficCounter struct {
|
||||
counters map[string]*counters
|
||||
lock sync.RWMutex
|
||||
}
|
||||
|
||||
type counters struct {
|
||||
UpCounter atomic.Int64
|
||||
DownCounter atomic.Int64
|
||||
//ConnGauge atomic.Int64
|
||||
}
|
||||
|
||||
func NewUserTrafficCounter() *UserTrafficCounter {
|
||||
return &UserTrafficCounter{
|
||||
counters: map[string]*counters{},
|
||||
}
|
||||
}
|
||||
|
||||
func (c *UserTrafficCounter) getCounters(auth string) *counters {
|
||||
c.lock.RLock()
|
||||
cts, ok := c.counters[auth]
|
||||
c.lock.RUnlock()
|
||||
if !ok {
|
||||
cts = &counters{}
|
||||
c.counters[auth] = cts
|
||||
}
|
||||
return cts
|
||||
}
|
||||
|
||||
func (c *UserTrafficCounter) Rx(auth string, n int) {
|
||||
cts := c.getCounters(auth)
|
||||
cts.DownCounter.Add(int64(n))
|
||||
}
|
||||
|
||||
func (c *UserTrafficCounter) Tx(auth string, n int) {
|
||||
cts := c.getCounters(auth)
|
||||
cts.UpCounter.Add(int64(n))
|
||||
}
|
||||
|
||||
func (c *UserTrafficCounter) IncConn(_ string) {
|
||||
/*cts := c.getCounters(auth)
|
||||
cts.ConnGauge.Add(1)*/
|
||||
return
|
||||
}
|
||||
|
||||
func (c *UserTrafficCounter) DecConn(_ string) {
|
||||
/*cts := c.getCounters(auth)
|
||||
cts.ConnGauge.Add(1)*/
|
||||
return
|
||||
}
|
||||
|
||||
func (c *UserTrafficCounter) Reset(auth string) {
|
||||
cts := c.getCounters(auth)
|
||||
cts.UpCounter.Store(0)
|
||||
cts.DownCounter.Store(0)
|
||||
}
|
||||
|
||||
func (c *UserTrafficCounter) Delete(auth string) {
|
||||
c.lock.Lock()
|
||||
delete(c.counters, auth)
|
||||
c.lock.Unlock()
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
package hy
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestUserTrafficCounter_Rx(t *testing.T) {
|
||||
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package hy
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/Yuzuki616/V2bX/api/panel"
|
||||
"github.com/Yuzuki616/V2bX/conf"
|
||||
"github.com/Yuzuki616/V2bX/limiter"
|
||||
|
||||
@@ -3,11 +3,12 @@ package hy
|
||||
import (
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"github.com/Yuzuki616/hysteria/core/utils"
|
||||
rdns "github.com/folbricht/routedns"
|
||||
"net"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/Yuzuki616/hysteria/core/utils"
|
||||
rdns "github.com/folbricht/routedns"
|
||||
)
|
||||
|
||||
var errInvalidSyntax = errors.New("invalid syntax")
|
||||
|
||||
@@ -9,6 +9,8 @@ import (
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/Yuzuki616/V2bX/common/counter"
|
||||
|
||||
"github.com/Yuzuki616/V2bX/api/panel"
|
||||
"github.com/Yuzuki616/V2bX/conf"
|
||||
"github.com/Yuzuki616/V2bX/limiter"
|
||||
@@ -34,7 +36,7 @@ var serverPacketConnFuncFactoryMap = map[string]pktconns.ServerPacketConnFuncFac
|
||||
type Server struct {
|
||||
tag string
|
||||
l *limiter.Limiter
|
||||
counter *UserTrafficCounter
|
||||
counter *counter.TrafficCounter
|
||||
users sync.Map
|
||||
running atomic.Bool
|
||||
*cs.Server
|
||||
@@ -122,7 +124,7 @@ func (s *Server) runServer(node *panel.NodeInfo, c *conf.ControllerConfig) error
|
||||
// ACL
|
||||
var aclEngine *acl.Engine
|
||||
// Prometheus
|
||||
s.counter = NewUserTrafficCounter()
|
||||
s.counter = counter.NewTrafficCounter()
|
||||
// Packet conn
|
||||
pktConnFuncFactory := serverPacketConnFuncFactoryMap[""]
|
||||
if pktConnFuncFactory == nil {
|
||||
|
||||
@@ -2,13 +2,14 @@ package hy
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"log"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/Yuzuki616/V2bX/api/panel"
|
||||
"github.com/Yuzuki616/V2bX/conf"
|
||||
"github.com/Yuzuki616/V2bX/limiter"
|
||||
"github.com/sirupsen/logrus"
|
||||
"log"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestServer(t *testing.T) {
|
||||
|
||||
@@ -3,6 +3,7 @@ package hy
|
||||
import (
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
|
||||
"github.com/Yuzuki616/V2bX/api/panel"
|
||||
"github.com/Yuzuki616/V2bX/core"
|
||||
)
|
||||
@@ -23,8 +24,8 @@ func (h *Hy) GetUserTraffic(tag, uuid string, reset bool) (up int64, down int64)
|
||||
v, _ := h.servers.Load(tag)
|
||||
s := v.(*Server)
|
||||
auth := base64.StdEncoding.EncodeToString([]byte(uuid))
|
||||
up = s.counter.getCounters(auth).UpCounter.Load()
|
||||
down = s.counter.getCounters(auth).DownCounter.Load()
|
||||
up = s.counter.GetCounter(auth).UpCounter.Load()
|
||||
down = s.counter.GetCounter(auth).DownCounter.Load()
|
||||
if reset {
|
||||
s.counter.Reset(auth)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user