add metrics
This commit is contained in:
parent
6aa1cc7401
commit
1444ebc1ee
4
go.mod
4
go.mod
@ -7,7 +7,7 @@ require (
|
|||||||
github.com/docker/libcontainer v2.2.1+incompatible
|
github.com/docker/libcontainer v2.2.1+incompatible
|
||||||
github.com/gin-contrib/cors v1.3.1
|
github.com/gin-contrib/cors v1.3.1
|
||||||
github.com/gin-gonic/gin v1.7.7
|
github.com/gin-gonic/gin v1.7.7
|
||||||
github.com/go-gost/core v0.0.0-20220404033031-04f6ed470873
|
github.com/go-gost/core v0.0.0-20220405095520-c2f49e94443c
|
||||||
github.com/go-gost/gosocks4 v0.0.1
|
github.com/go-gost/gosocks4 v0.0.1
|
||||||
github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09
|
github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09
|
||||||
github.com/go-gost/relay v0.1.1-0.20211123134818-8ef7fd81ffd7
|
github.com/go-gost/relay v0.1.1-0.20211123134818-8ef7fd81ffd7
|
||||||
@ -18,6 +18,7 @@ require (
|
|||||||
github.com/lucas-clemente/quic-go v0.25.0
|
github.com/lucas-clemente/quic-go v0.25.0
|
||||||
github.com/miekg/dns v1.1.47
|
github.com/miekg/dns v1.1.47
|
||||||
github.com/milosgajdos/tenus v0.0.3
|
github.com/milosgajdos/tenus v0.0.3
|
||||||
|
github.com/prometheus/client_golang v1.12.1
|
||||||
github.com/rs/xid v1.3.0
|
github.com/rs/xid v1.3.0
|
||||||
github.com/shadowsocks/go-shadowsocks2 v0.1.5
|
github.com/shadowsocks/go-shadowsocks2 v0.1.5
|
||||||
github.com/shadowsocks/shadowsocks-go v0.0.0-20200409064450-3e585ff90601
|
github.com/shadowsocks/shadowsocks-go v0.0.0-20200409064450-3e585ff90601
|
||||||
@ -69,7 +70,6 @@ require (
|
|||||||
github.com/onsi/ginkgo v1.16.5 // indirect
|
github.com/onsi/ginkgo v1.16.5 // indirect
|
||||||
github.com/pelletier/go-toml v1.9.4 // indirect
|
github.com/pelletier/go-toml v1.9.4 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/prometheus/client_golang v1.12.1 // indirect
|
|
||||||
github.com/prometheus/client_model v0.2.0 // indirect
|
github.com/prometheus/client_model v0.2.0 // indirect
|
||||||
github.com/prometheus/common v0.32.1 // indirect
|
github.com/prometheus/common v0.32.1 // indirect
|
||||||
github.com/prometheus/procfs v0.7.3 // indirect
|
github.com/prometheus/procfs v0.7.3 // indirect
|
||||||
|
4
go.sum
4
go.sum
@ -119,8 +119,8 @@ github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm
|
|||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-gost/core v0.0.0-20220404033031-04f6ed470873 h1:u+g28xvN00bW5ivbhb2GGo0R+JIBy5arxy5R+rKesqk=
|
github.com/go-gost/core v0.0.0-20220405095520-c2f49e94443c h1:TzDyqefjnUVgdT6piHZgeXrVKXevawsMs0kmSZZhDR4=
|
||||||
github.com/go-gost/core v0.0.0-20220404033031-04f6ed470873/go.mod h1:/LzdiQ+0+3FMhyqw0phjFjXFdOa1fcQR5/bL/7ripCs=
|
github.com/go-gost/core v0.0.0-20220405095520-c2f49e94443c/go.mod h1:/LzdiQ+0+3FMhyqw0phjFjXFdOa1fcQR5/bL/7ripCs=
|
||||||
github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s=
|
github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s=
|
||||||
github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc=
|
github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc=
|
||||||
github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09 h1:A95M6UWcfZgOuJkQ7QLfG0Hs5peWIUSysCDNz4pfe04=
|
github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09 h1:A95M6UWcfZgOuJkQ7QLfG0Hs5peWIUSysCDNz4pfe04=
|
||||||
|
@ -6,11 +6,11 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
"github.com/go-gost/gosocks4"
|
"github.com/go-gost/gosocks4"
|
||||||
"github.com/go-gost/gosocks5"
|
"github.com/go-gost/gosocks5"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -8,9 +8,9 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/chain"
|
"github.com/go-gost/core/chain"
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -8,9 +8,9 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/chain"
|
"github.com/go-gost/core/chain"
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,10 +17,10 @@ import (
|
|||||||
|
|
||||||
"github.com/asaskevich/govalidator"
|
"github.com/asaskevich/govalidator"
|
||||||
"github.com/go-gost/core/chain"
|
"github.com/go-gost/core/chain"
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ import (
|
|||||||
"net/http/httputil"
|
"net/http/httputil"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/common/net/relay"
|
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
|
"github.com/go-gost/x/internal/net/udp"
|
||||||
"github.com/go-gost/x/internal/util/socks"
|
"github.com/go-gost/x/internal/util/socks"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ func (h *httpHandler) handleUDP(ctx context.Context, conn net.Conn, log logger.L
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
relay := relay.NewUDPRelay(socks.UDPTunServerConn(conn), pc).
|
relay := udp.NewRelay(socks.UDPTunServerConn(conn), pc).
|
||||||
WithBypass(h.options.Bypass).
|
WithBypass(h.options.Bypass).
|
||||||
WithLogger(log)
|
WithLogger(log)
|
||||||
|
|
||||||
|
@ -19,10 +19,10 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/chain"
|
"github.com/go-gost/core/chain"
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,11 +14,11 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/chain"
|
"github.com/go-gost/core/chain"
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
dissector "github.com/go-gost/tls-dissector"
|
dissector "github.com/go-gost/tls-dissector"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,9 +7,9 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/chain"
|
"github.com/go-gost/core/chain"
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,10 +6,10 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
net_relay "github.com/go-gost/core/common/net/relay"
|
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
"github.com/go-gost/relay"
|
"github.com/go-gost/relay"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
|
"github.com/go-gost/x/internal/net/udp"
|
||||||
"github.com/go-gost/x/internal/util/mux"
|
"github.com/go-gost/x/internal/util/mux"
|
||||||
relay_util "github.com/go-gost/x/internal/util/relay"
|
relay_util "github.com/go-gost/x/internal/util/relay"
|
||||||
)
|
)
|
||||||
@ -113,7 +113,7 @@ func (h *relayHandler) bindUDP(ctx context.Context, conn net.Conn, network, addr
|
|||||||
})
|
})
|
||||||
log.Debugf("bind on %s OK", pc.LocalAddr())
|
log.Debugf("bind on %s OK", pc.LocalAddr())
|
||||||
|
|
||||||
r := net_relay.NewUDPRelay(relay_util.UDPTunServerConn(conn), pc).
|
r := udp.NewRelay(relay_util.UDPTunServerConn(conn), pc).
|
||||||
WithBypass(h.options.Bypass).
|
WithBypass(h.options.Bypass).
|
||||||
WithLogger(log)
|
WithLogger(log)
|
||||||
r.SetBufferSize(h.md.udpBufferSize)
|
r.SetBufferSize(h.md.udpBufferSize)
|
||||||
|
@ -7,9 +7,9 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
"github.com/go-gost/relay"
|
"github.com/go-gost/relay"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (h *relayHandler) handleConnect(ctx context.Context, conn net.Conn, network, address string, log logger.Logger) error {
|
func (h *relayHandler) handleConnect(ctx context.Context, conn net.Conn, network, address string, log logger.Logger) error {
|
||||||
|
@ -7,9 +7,9 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
"github.com/go-gost/relay"
|
"github.com/go-gost/relay"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (h *relayHandler) handleForward(ctx context.Context, conn net.Conn, network string, log logger.Logger) error {
|
func (h *relayHandler) handleForward(ctx context.Context, conn net.Conn, network string, log logger.Logger) error {
|
||||||
|
@ -13,10 +13,10 @@ import (
|
|||||||
|
|
||||||
"github.com/go-gost/core/chain"
|
"github.com/go-gost/core/chain"
|
||||||
"github.com/go-gost/core/common/bufpool"
|
"github.com/go-gost/core/common/bufpool"
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
dissector "github.com/go-gost/tls-dissector"
|
dissector "github.com/go-gost/tls-dissector"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,11 +7,11 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/chain"
|
"github.com/go-gost/core/chain"
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
"github.com/go-gost/gosocks4"
|
"github.com/go-gost/gosocks4"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,9 +6,9 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
"github.com/go-gost/gosocks5"
|
"github.com/go-gost/gosocks5"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (h *socks5Handler) handleBind(ctx context.Context, conn net.Conn, network, address string, log logger.Logger) error {
|
func (h *socks5Handler) handleBind(ctx context.Context, conn net.Conn, network, address string, log logger.Logger) error {
|
||||||
|
@ -6,9 +6,9 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
"github.com/go-gost/gosocks5"
|
"github.com/go-gost/gosocks5"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (h *socks5Handler) handleConnect(ctx context.Context, conn net.Conn, network, address string, log logger.Logger) error {
|
func (h *socks5Handler) handleConnect(ctx context.Context, conn net.Conn, network, address string, log logger.Logger) error {
|
||||||
|
@ -6,9 +6,9 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
"github.com/go-gost/gosocks5"
|
"github.com/go-gost/gosocks5"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/internal/util/mux"
|
"github.com/go-gost/x/internal/util/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -9,9 +9,9 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/common/net/relay"
|
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
"github.com/go-gost/gosocks5"
|
"github.com/go-gost/gosocks5"
|
||||||
|
"github.com/go-gost/x/internal/net/udp"
|
||||||
"github.com/go-gost/x/internal/util/socks"
|
"github.com/go-gost/x/internal/util/socks"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ func (h *socks5Handler) handleUDP(ctx context.Context, conn net.Conn, log logger
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
r := relay.NewUDPRelay(socks.UDPConn(cc, h.md.udpBufferSize), pc).
|
r := udp.NewRelay(socks.UDPConn(cc, h.md.udpBufferSize), pc).
|
||||||
WithBypass(h.options.Bypass).
|
WithBypass(h.options.Bypass).
|
||||||
WithLogger(log)
|
WithLogger(log)
|
||||||
r.SetBufferSize(h.md.udpBufferSize)
|
r.SetBufferSize(h.md.udpBufferSize)
|
||||||
|
@ -5,9 +5,9 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/common/net/relay"
|
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
"github.com/go-gost/gosocks5"
|
"github.com/go-gost/gosocks5"
|
||||||
|
"github.com/go-gost/x/internal/net/udp"
|
||||||
"github.com/go-gost/x/internal/util/socks"
|
"github.com/go-gost/x/internal/util/socks"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ func (h *socks5Handler) handleUDPTun(ctx context.Context, conn net.Conn, network
|
|||||||
log.Debug(reply)
|
log.Debug(reply)
|
||||||
log.Debugf("bind on %s OK", pc.LocalAddr())
|
log.Debugf("bind on %s OK", pc.LocalAddr())
|
||||||
|
|
||||||
r := relay.NewUDPRelay(socks.UDPTunServerConn(conn), pc).
|
r := udp.NewRelay(socks.UDPTunServerConn(conn), pc).
|
||||||
WithBypass(h.options.Bypass).
|
WithBypass(h.options.Bypass).
|
||||||
WithLogger(log)
|
WithLogger(log)
|
||||||
r.SetBufferSize(h.md.udpBufferSize)
|
r.SetBufferSize(h.md.udpBufferSize)
|
||||||
|
@ -8,10 +8,10 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/chain"
|
"github.com/go-gost/core/chain"
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
"github.com/go-gost/gosocks5"
|
"github.com/go-gost/gosocks5"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
"github.com/go-gost/x/internal/util/ss"
|
"github.com/go-gost/x/internal/util/ss"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
"github.com/shadowsocks/go-shadowsocks2/core"
|
"github.com/shadowsocks/go-shadowsocks2/core"
|
||||||
|
@ -10,10 +10,10 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/chain"
|
"github.com/go-gost/core/chain"
|
||||||
netpkg "github.com/go-gost/core/common/net"
|
|
||||||
"github.com/go-gost/core/handler"
|
"github.com/go-gost/core/handler"
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
|
netpkg "github.com/go-gost/x/internal/net"
|
||||||
sshd_util "github.com/go-gost/x/internal/util/sshd"
|
sshd_util "github.com/go-gost/x/internal/util/sshd"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
|
50
internal/net/transport.go
Normal file
50
internal/net/transport.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package net
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
|
|
||||||
|
"github.com/go-gost/core/common/bufpool"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Transport(rw1, rw2 io.ReadWriter) error {
|
||||||
|
errc := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
errc <- copyBuffer(rw1, rw2)
|
||||||
|
}()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
errc <- copyBuffer(rw2, rw1)
|
||||||
|
}()
|
||||||
|
|
||||||
|
err := <-errc
|
||||||
|
if err != nil && err == io.EOF {
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func copyBuffer(dst io.Writer, src io.Reader) error {
|
||||||
|
buf := bufpool.Get(32 * 1024)
|
||||||
|
defer bufpool.Put(buf)
|
||||||
|
|
||||||
|
_, err := io.CopyBuffer(dst, src, *buf)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
type bufferReaderConn struct {
|
||||||
|
net.Conn
|
||||||
|
br *bufio.Reader
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBufferReaderConn(conn net.Conn, br *bufio.Reader) net.Conn {
|
||||||
|
return &bufferReaderConn{
|
||||||
|
Conn: conn,
|
||||||
|
br: br,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *bufferReaderConn) Read(b []byte) (int, error) {
|
||||||
|
return c.br.Read(b)
|
||||||
|
}
|
126
internal/net/udp/relay.go
Normal file
126
internal/net/udp/relay.go
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
package udp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
|
||||||
|
"github.com/go-gost/core/bypass"
|
||||||
|
"github.com/go-gost/core/common/bufpool"
|
||||||
|
"github.com/go-gost/core/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Relay struct {
|
||||||
|
pc1 net.PacketConn
|
||||||
|
pc2 net.PacketConn
|
||||||
|
|
||||||
|
bypass bypass.Bypass
|
||||||
|
bufferSize int
|
||||||
|
logger logger.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRelay(pc1, pc2 net.PacketConn) *Relay {
|
||||||
|
return &Relay{
|
||||||
|
pc1: pc1,
|
||||||
|
pc2: pc2,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Relay) WithBypass(bp bypass.Bypass) *Relay {
|
||||||
|
r.bypass = bp
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Relay) WithLogger(logger logger.Logger) *Relay {
|
||||||
|
r.logger = logger
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Relay) SetBufferSize(n int) {
|
||||||
|
r.bufferSize = n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Relay) Run() (err error) {
|
||||||
|
bufSize := r.bufferSize
|
||||||
|
if bufSize <= 0 {
|
||||||
|
bufSize = 1500
|
||||||
|
}
|
||||||
|
|
||||||
|
errc := make(chan error, 2)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
err := func() error {
|
||||||
|
b := bufpool.Get(bufSize)
|
||||||
|
defer bufpool.Put(b)
|
||||||
|
|
||||||
|
n, raddr, err := r.pc1.ReadFrom(*b)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.bypass != nil && r.bypass.Contains(raddr.String()) {
|
||||||
|
if r.logger != nil {
|
||||||
|
r.logger.Warn("bypass: ", raddr)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := r.pc2.WriteTo((*b)[:n], raddr); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.logger != nil {
|
||||||
|
r.logger.Debugf("%s >>> %s data: %d",
|
||||||
|
r.pc2.LocalAddr(), raddr, n)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
errc <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
err := func() error {
|
||||||
|
b := bufpool.Get(bufSize)
|
||||||
|
defer bufpool.Put(b)
|
||||||
|
|
||||||
|
n, raddr, err := r.pc2.ReadFrom(*b)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.bypass != nil && r.bypass.Contains(raddr.String()) {
|
||||||
|
if r.logger != nil {
|
||||||
|
r.logger.Warn("bypass: ", raddr)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := r.pc1.WriteTo((*b)[:n], raddr); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.logger != nil {
|
||||||
|
r.logger.Debugf("%s <<< %s data: %d",
|
||||||
|
r.pc2.LocalAddr(), raddr, n)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
errc <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
return <-errc
|
||||||
|
}
|
135
metrics/metrics.go
Normal file
135
metrics/metrics.go
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
package metrics
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/go-gost/core/metrics"
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
)
|
||||||
|
|
||||||
|
type promMetrics struct {
|
||||||
|
host string
|
||||||
|
gauges map[metrics.MetricName]*prometheus.GaugeVec
|
||||||
|
counters map[metrics.MetricName]*prometheus.CounterVec
|
||||||
|
histograms map[metrics.MetricName]*prometheus.HistogramVec
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMetrics() metrics.Metrics {
|
||||||
|
host, _ := os.Hostname()
|
||||||
|
m := &promMetrics{
|
||||||
|
host: host,
|
||||||
|
gauges: map[metrics.MetricName]*prometheus.GaugeVec{
|
||||||
|
metrics.MetricServicesGauge: prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: string(metrics.MetricServicesGauge),
|
||||||
|
Help: "Current number of services",
|
||||||
|
},
|
||||||
|
[]string{"host"}),
|
||||||
|
metrics.MetricServiceRequestsInFlightGauge: prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: string(metrics.MetricServiceRequestsInFlightGauge),
|
||||||
|
Help: "Current in-flight requests",
|
||||||
|
},
|
||||||
|
[]string{"host", "service"}),
|
||||||
|
},
|
||||||
|
counters: map[metrics.MetricName]*prometheus.CounterVec{
|
||||||
|
metrics.MetricServiceRequestsCounter: prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Name: string(metrics.MetricServiceRequestsCounter),
|
||||||
|
Help: "Total number of requests",
|
||||||
|
},
|
||||||
|
[]string{"host", "service"}),
|
||||||
|
metrics.MetricServiceTransferInputBytesCounter: prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Name: string(metrics.MetricServiceTransferInputBytesCounter),
|
||||||
|
Help: "Total service input data transfer size in bytes",
|
||||||
|
},
|
||||||
|
[]string{"host", "service"}),
|
||||||
|
metrics.MetricServiceTransferOutputBytesCounter: prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Name: string(metrics.MetricServiceTransferOutputBytesCounter),
|
||||||
|
Help: "Total service output data transfer size in bytes",
|
||||||
|
},
|
||||||
|
[]string{"host", "service"}),
|
||||||
|
metrics.MetricServiceHandlerErrorsCounter: prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Name: string(metrics.MetricServiceHandlerErrorsCounter),
|
||||||
|
Help: "Total service handler errors",
|
||||||
|
},
|
||||||
|
[]string{"host", "service"}),
|
||||||
|
metrics.MetricChainErrorsCounter: prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Name: string(metrics.MetricChainErrorsCounter),
|
||||||
|
Help: "Total chain errors",
|
||||||
|
},
|
||||||
|
[]string{"host", "chain"}),
|
||||||
|
},
|
||||||
|
histograms: map[metrics.MetricName]*prometheus.HistogramVec{
|
||||||
|
metrics.MetricServiceRequestsDurationObserver: prometheus.NewHistogramVec(
|
||||||
|
prometheus.HistogramOpts{
|
||||||
|
Name: string(metrics.MetricServiceRequestsDurationObserver),
|
||||||
|
Help: "Distribution of request latencies",
|
||||||
|
Buckets: []float64{
|
||||||
|
.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10, 15, 30, 60,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[]string{"host", "service"}),
|
||||||
|
metrics.MetricNodeConnectDurationObserver: prometheus.NewHistogramVec(
|
||||||
|
prometheus.HistogramOpts{
|
||||||
|
Name: string(metrics.MetricNodeConnectDurationObserver),
|
||||||
|
Help: "Distribution of chain node connect latencies",
|
||||||
|
Buckets: []float64{
|
||||||
|
.01, .05, .1, .25, .5, 1, 1.5, 2, 5, 10, 15, 30, 60,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[]string{"host", "chain", "node"}),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for k := range m.gauges {
|
||||||
|
prometheus.MustRegister(m.gauges[k])
|
||||||
|
}
|
||||||
|
for k := range m.counters {
|
||||||
|
prometheus.MustRegister(m.counters[k])
|
||||||
|
}
|
||||||
|
for k := range m.histograms {
|
||||||
|
prometheus.MustRegister(m.histograms[k])
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *promMetrics) Gauge(name metrics.MetricName, labels metrics.Labels) metrics.Gauge {
|
||||||
|
v, ok := m.gauges[name]
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if labels == nil {
|
||||||
|
labels = metrics.Labels{}
|
||||||
|
}
|
||||||
|
labels["host"] = m.host
|
||||||
|
return v.With(prometheus.Labels(labels))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *promMetrics) Counter(name metrics.MetricName, labels metrics.Labels) metrics.Counter {
|
||||||
|
v, ok := m.counters[name]
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if labels == nil {
|
||||||
|
labels = metrics.Labels{}
|
||||||
|
}
|
||||||
|
labels["host"] = m.host
|
||||||
|
return v.With(prometheus.Labels(labels))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *promMetrics) Observer(name metrics.MetricName, labels metrics.Labels) metrics.Observer {
|
||||||
|
v, ok := m.histograms[name]
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if labels == nil {
|
||||||
|
labels = metrics.Labels{}
|
||||||
|
}
|
||||||
|
labels["host"] = m.host
|
||||||
|
return v.With(prometheus.Labels(labels))
|
||||||
|
}
|
65
metrics/service/service.go
Normal file
65
metrics/service/service.go
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
DefaultPath = "/metrics"
|
||||||
|
)
|
||||||
|
|
||||||
|
type options struct {
|
||||||
|
path string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Option func(*options)
|
||||||
|
|
||||||
|
func PathOption(path string) Option {
|
||||||
|
return func(o *options) {
|
||||||
|
o.path = path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type Service struct {
|
||||||
|
s *http.Server
|
||||||
|
ln net.Listener
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewService(addr string, opts ...Option) (*Service, error) {
|
||||||
|
ln, err := net.Listen("tcp", addr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var options options
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(&options)
|
||||||
|
}
|
||||||
|
if options.path == "" {
|
||||||
|
options.path = DefaultPath
|
||||||
|
}
|
||||||
|
|
||||||
|
mux := http.NewServeMux()
|
||||||
|
mux.Handle(options.path, promhttp.Handler())
|
||||||
|
return &Service{
|
||||||
|
s: &http.Server{
|
||||||
|
Handler: mux,
|
||||||
|
},
|
||||||
|
ln: ln,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Service) Serve() error {
|
||||||
|
return s.s.Serve(s.ln)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Service) Addr() net.Addr {
|
||||||
|
return s.ln.Addr()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Service) Close() error {
|
||||||
|
return s.s.Close()
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user