Remove juju/errors

This commit is contained in:
9seconds
2019-09-06 16:10:55 +03:00
parent 701f62ed4c
commit 2918ed11e5
19 changed files with 73 additions and 91 deletions
+4
View File
@@ -1,6 +1,9 @@
package antireplay package antireplay
import ( import (
"errors"
"fmt"
"github.com/allegro/bigcache" "github.com/allegro/bigcache"
"github.com/9seconds/mtg/config" "github.com/9seconds/mtg/config"
@@ -25,6 +28,7 @@ func Init() error {
HardMaxCacheSize: config.C.AntiReplay.MaxSize, HardMaxCacheSize: config.C.AntiReplay.MaxSize,
}) })
cache = c cache = c
err = fmt.Errorf("qqq: %w", errors.New("tt"))
return err return err
} }
+4 -4
View File
@@ -41,7 +41,7 @@ func Proxy() error {
defer logger.Sync() // nolint: errcheck defer logger.Sync() // nolint: errcheck
if err := config.InitPublicAddress(ctx); err != nil { if err := config.InitPublicAddress(ctx); err != nil {
Fatal(err.Error()) Fatal(err)
} }
zap.S().Debugw("Configuration", "config", config.C) zap.S().Debugw("Configuration", "config", config.C)
@@ -62,14 +62,14 @@ func Proxy() error {
PrintJSONStdout(config.GetURLs()) PrintJSONStdout(config.GetURLs())
if err := antireplay.Init(); err != nil { if err := antireplay.Init(); err != nil {
Fatal(err.Error()) Fatal(err)
} }
if err := stats.Init(ctx); err != nil { if err := stats.Init(ctx); err != nil {
Fatal(err.Error()) Fatal(err)
} }
proxyListener, err := net.Listen("tcp", config.C.ListenAddr.String()) proxyListener, err := net.Listen("tcp", config.C.ListenAddr.String())
if err != nil { if err != nil {
Fatal(err.Error()) Fatal(err)
} }
go func() { go func() {
<-ctx.Done() <-ctx.Done()
+5 -2
View File
@@ -7,8 +7,11 @@ import (
"os" "os"
) )
func Fatal(args ...interface{}) { func Fatal(arg interface{}) {
PrintStderr(args...) if value, ok := arg.(error); ok {
arg = fmt.Errorf("fatal error: %+v", value)
}
PrintStderr(arg)
os.Exit(1) os.Exit(1)
} }
+4 -3
View File
@@ -4,11 +4,12 @@ import (
"bytes" "bytes"
"context" "context"
"encoding/json" "encoding/json"
"errors"
"fmt"
"net" "net"
"strconv" "strconv"
"time" "time"
"github.com/juju/errors"
"go.uber.org/zap" "go.uber.org/zap"
statsd "gopkg.in/alexcesaro/statsd.v2" statsd "gopkg.in/alexcesaro/statsd.v2"
) )
@@ -187,7 +188,7 @@ func Init(options ...Opt) error { // nolint: gocyclo
case "influxdb": case "influxdb":
C.StatsdStats.TagsFormat = statsd.InfluxDB C.StatsdStats.TagsFormat = statsd.InfluxDB
default: default:
return errors.Errorf("Incorrect statsd tag %s", value) return fmt.Errorf("Incorrect statsd tag %s", value)
} }
case OptionTypeStatsdTags: case OptionTypeStatsdTags:
C.StatsdStats.Tags = opt.Value.(map[string]string) C.StatsdStats.Tags = opt.Value.(map[string]string)
@@ -206,7 +207,7 @@ func Init(options ...Opt) error { // nolint: gocyclo
case OptionTypeAdtag: case OptionTypeAdtag:
C.AdTag = opt.Value.([]byte) C.AdTag = opt.Value.([]byte)
default: default:
return errors.Errorf("Unknown tag %v", opt.Option) return fmt.Errorf("Unknown tag %v", opt.Option)
} }
} }
+7 -8
View File
@@ -2,14 +2,13 @@ package config
import ( import (
"context" "context"
"fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"net" "net"
"net/http" "net/http"
"strings" "strings"
"time" "time"
"github.com/juju/errors"
) )
const ( const (
@@ -20,7 +19,7 @@ const (
func getGlobalIPv4(ctx context.Context) (net.IP, error) { func getGlobalIPv4(ctx context.Context) (net.IP, error) {
ip, err := fetchIP(ctx, "tcp4") ip, err := fetchIP(ctx, "tcp4")
if err != nil || ip.To4() == nil { if err != nil || ip.To4() == nil {
return nil, errors.Annotate(err, "Cannot find public ipv4 address") return nil, fmt.Errorf("cannot find public ipv4 address: %w", err)
} }
return ip, nil return ip, nil
} }
@@ -28,7 +27,7 @@ func getGlobalIPv4(ctx context.Context) (net.IP, error) {
func getGlobalIPv6(ctx context.Context) (net.IP, error) { func getGlobalIPv6(ctx context.Context) (net.IP, error) {
ip, err := fetchIP(ctx, "tcp6") ip, err := fetchIP(ctx, "tcp6")
if err != nil || ip.To4() != nil { if err != nil || ip.To4() != nil {
return nil, errors.Annotate(err, "Cannot find public ipv6 address") return nil, fmt.Errorf("cannot find public ipv6 address: %w", err)
} }
return ip, nil return ip, nil
} }
@@ -47,7 +46,7 @@ func fetchIP(ctx context.Context, network string) (net.IP, error) {
req, err := http.NewRequest("GET", ifconfigAddress, nil) req, err := http.NewRequest("GET", ifconfigAddress, nil)
if err != nil { if err != nil {
return nil, errors.Annotate(err, "Cannot create a request") return nil, fmt.Errorf("cannot create a request: %w", err)
} }
resp, err := client.Do(req.WithContext(ctx)) resp, err := client.Do(req.WithContext(ctx))
@@ -55,19 +54,19 @@ func fetchIP(ctx context.Context, network string) (net.IP, error) {
if resp != nil { if resp != nil {
io.Copy(ioutil.Discard, resp.Body) // nolint: errcheck io.Copy(ioutil.Discard, resp.Body) // nolint: errcheck
} }
return nil, errors.Annotate(err, "Cannot perform a request") return nil, fmt.Errorf("cannot perform a request: %w", err)
} }
defer resp.Body.Close() // nolint: errcheck defer resp.Body.Close() // nolint: errcheck
respDataBytes, err := ioutil.ReadAll(resp.Body) respDataBytes, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return nil, errors.Annotate(err, "Cannot read response body") return nil, fmt.Errorf("cannot read response body: %w", err)
} }
respData := strings.TrimSpace(string(respDataBytes)) respData := strings.TrimSpace(string(respDataBytes))
ip := net.ParseIP(respData) ip := net.ParseIP(respData)
if ip == nil { if ip == nil {
return nil, errors.Errorf("ifconfig.co returns incorrect IP %s", respData) return nil, fmt.Errorf("ifconfig.co returns incorrect IP %s", respData)
} }
return ip, nil return ip, nil
+3 -9
View File
@@ -9,19 +9,12 @@ require (
github.com/allegro/bigcache v1.2.1 github.com/allegro/bigcache v1.2.1
github.com/beevik/ntp v0.2.0 github.com/beevik/ntp v0.2.0
github.com/cespare/xxhash v1.1.0 github.com/cespare/xxhash v1.1.0
github.com/dustin/go-humanize v1.0.0
github.com/gofrs/uuid v3.2.0+incompatible
github.com/juju/errors v0.0.0-20190806202954-0232dcc7464d
github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8 // indirect
github.com/juju/testing v0.0.0-20190723135506-ce30eb24acd2 // indirect
github.com/kr/pretty v0.1.0 // indirect github.com/kr/pretty v0.1.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/pkg/errors v0.8.1 // indirect github.com/pkg/errors v0.8.1 // indirect
github.com/prometheus/client_golang v1.1.0 github.com/prometheus/client_golang v1.1.0
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 // indirect github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/stretchr/testify v1.4.0 github.com/stretchr/testify v1.4.0 // indirect
go.uber.org/atomic v1.4.0 // indirect go.uber.org/atomic v1.4.0 // indirect
go.uber.org/multierr v1.1.0 // indirect go.uber.org/multierr v1.1.0 // indirect
go.uber.org/zap v1.10.0 go.uber.org/zap v1.10.0
@@ -30,5 +23,6 @@ require (
gopkg.in/alecthomas/kingpin.v2 v2.2.6 gopkg.in/alecthomas/kingpin.v2 v2.2.6
gopkg.in/alexcesaro/statsd.v2 v2.0.0 gopkg.in/alexcesaro/statsd.v2 v2.0.0
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
) )
go 1.13
-12
View File
@@ -24,14 +24,10 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
@@ -44,12 +40,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/juju/errors v0.0.0-20190806202954-0232dcc7464d h1:hJXjZMxj0SWlMoQkzeZDLi2cmeiWKa7y1B8Rg+qaoEc=
github.com/juju/errors v0.0.0-20190806202954-0232dcc7464d/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q=
github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8 h1:UUHMLvzt/31azWTN/ifGWef4WUqvXk0iRqdhdy/2uzI=
github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U=
github.com/juju/testing v0.0.0-20190723135506-ce30eb24acd2 h1:Pp8RxiF4rSoXP9SED26WCfNB28/dwTDpPXS8XMJR8rc=
github.com/juju/testing v0.0.0-20190723135506-ce30eb24acd2/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
@@ -132,8 +122,6 @@ gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+3 -3
View File
@@ -143,7 +143,7 @@ func main() {
app.HelpFlag.Short('h') app.HelpFlag.Short('h')
if err := utils.SetLimits(); err != nil { if err := utils.SetLimits(); err != nil {
cli.Fatal(err.Error()) cli.Fatal(err)
} }
switch kingpin.MustParse(app.Parse(os.Args[1:])) { switch kingpin.MustParse(app.Parse(os.Args[1:])) {
@@ -177,11 +177,11 @@ func main() {
config.Opt{Option: config.OptionTypeAdtag, Value: *proxyAdtag}, config.Opt{Option: config.OptionTypeAdtag, Value: *proxyAdtag},
) )
if err != nil { if err != nil {
cli.Fatal(err.Error()) cli.Fatal(err)
} }
if err := cli.Proxy(); err != nil { if err := cli.Proxy(); err != nil {
cli.Fatal(err.Error()) cli.Fatal(err)
} }
} }
} }
+2 -2
View File
@@ -1,11 +1,11 @@
package ntp package ntp
import ( import (
"fmt"
"math/rand" "math/rand"
"time" "time"
"github.com/beevik/ntp" "github.com/beevik/ntp"
"github.com/juju/errors"
"go.uber.org/zap" "go.uber.org/zap"
) )
@@ -23,7 +23,7 @@ func Fetch() (time.Duration, error) {
url := ntpEndpoints[rand.Intn(len(ntpEndpoints))] url := ntpEndpoints[rand.Intn(len(ntpEndpoints))]
resp, err := ntp.Query(url) resp, err := ntp.Query(url)
if err != nil { if err != nil {
return 0, errors.Annotatef(err, "Cannot fetch NTP server %s", url) return 0, fmt.Errorf("Cannot fetch NTP server %s: %w", url, err)
} }
offsetInt := int64(resp.ClockOffset) offsetInt := int64(resp.ClockOffset)
+4 -4
View File
@@ -4,11 +4,11 @@ import (
"bytes" "bytes"
"crypto/sha256" "crypto/sha256"
"encoding/binary" "encoding/binary"
"errors"
"fmt"
"io" "io"
"time" "time"
"github.com/juju/errors"
"github.com/9seconds/mtg/antireplay" "github.com/9seconds/mtg/antireplay"
"github.com/9seconds/mtg/config" "github.com/9seconds/mtg/config"
"github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/conntypes"
@@ -26,7 +26,7 @@ type ClientProtocol struct {
func (c *ClientProtocol) Handshake(socket wrappers.StreamReadWriteCloser) (wrappers.StreamReadWriteCloser, error) { func (c *ClientProtocol) Handshake(socket wrappers.StreamReadWriteCloser) (wrappers.StreamReadWriteCloser, error) {
fm, err := c.ReadFrame(socket) fm, err := c.ReadFrame(socket)
if err != nil { if err != nil {
return nil, errors.Annotate(err, "Cannot make client handshake") return nil, fmt.Errorf("cannot make a client handshake: %w", err)
} }
decHasher := sha256.New() decHasher := sha256.New()
@@ -76,7 +76,7 @@ func (c *ClientProtocol) Handshake(socket wrappers.StreamReadWriteCloser) (wrapp
func (c *ClientProtocol) ReadFrame(socket wrappers.StreamReader) (fm Frame, err error) { func (c *ClientProtocol) ReadFrame(socket wrappers.StreamReader) (fm Frame, err error) {
if _, err = io.ReadFull(handshakeReader{socket}, fm.Bytes()); err != nil { if _, err = io.ReadFull(handshakeReader{socket}, fm.Bytes()); err != nil {
err = errors.Annotate(err, "Cannot extract obfuscated2 frame") err = fmt.Errorf("cannot extract obfuscated2 frame: %w", err)
} }
return return
} }
+3 -4
View File
@@ -2,8 +2,7 @@ package obfuscated2
import ( import (
"crypto/rand" "crypto/rand"
"fmt"
"github.com/juju/errors"
"github.com/9seconds/mtg/protocol" "github.com/9seconds/mtg/protocol"
"github.com/9seconds/mtg/telegram" "github.com/9seconds/mtg/telegram"
@@ -23,7 +22,7 @@ func (t *TelegramProtocol) Handshake(req *protocol.TelegramRequest) (wrappers.Wr
req.ClientProtocol.GetDC(), req.ClientProtocol.GetDC(),
req.ClientProtocol.GetConnectionProtocol()) req.ClientProtocol.GetConnectionProtocol())
if err != nil { if err != nil {
return nil, errors.Annotate(err, "Cannot dial to Telegram") return nil, fmt.Errorf("cannot dial to telegram: %w", err)
} }
fm := generateFrame(req.ClientProtocol) fm := generateFrame(req.ClientProtocol)
data := fm.Bytes() data := fm.Bytes()
@@ -38,7 +37,7 @@ func (t *TelegramProtocol) Handshake(req *protocol.TelegramRequest) (wrappers.Wr
copy(data[:frameOffsetIV], copyFrame[:frameOffsetIV]) copy(data[:frameOffsetIV], copyFrame[:frameOffsetIV])
if _, err := socket.Write(data); err != nil { if _, err := socket.Write(data); err != nil {
return nil, errors.Annotate(err, "Cannot write handshate frame to Telegram") return nil, fmt.Errorf("cannot write handshake frame to telegram: %w", err)
} }
return wrappers.NewObfuscated2(socket, encryptor, decryptor), nil return wrappers.NewObfuscated2(socket, encryptor, decryptor), nil
+4 -5
View File
@@ -2,11 +2,10 @@ package stats
import ( import (
"context" "context"
"fmt"
"net" "net"
"net/http" "net/http"
"github.com/juju/errors"
"github.com/9seconds/mtg/config" "github.com/9seconds/mtg/config"
"github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/conntypes"
) )
@@ -66,21 +65,21 @@ func Init(ctx context.Context) error {
instanceJSON := newStatsJSON(mux) instanceJSON := newStatsJSON(mux)
instancePrometheus, err := newStatsPrometheus(mux) instancePrometheus, err := newStatsPrometheus(mux)
if err != nil { if err != nil {
return errors.Annotate(err, "Cannot initialize Prometheus") return fmt.Errorf("cannot initialize prometheus: %w", err)
} }
stats := []Stats{instanceJSON, instancePrometheus} stats := []Stats{instanceJSON, instancePrometheus}
if config.C.StatsdStats.Addr.IP != nil { if config.C.StatsdStats.Addr.IP != nil {
instanceStatsd, err := newStatsStatsd() instanceStatsd, err := newStatsStatsd()
if err != nil { if err != nil {
return errors.Annotate(err, "Cannot initialize StatsD") return fmt.Errorf("cannot inialize statsd: %w", err)
} }
stats = append(stats, instanceStatsd) stats = append(stats, instanceStatsd)
} }
listener, err := net.Listen("tcp", config.C.StatsAddr.String()) listener, err := net.Listen("tcp", config.C.StatsAddr.String())
if err != nil { if err != nil {
return errors.Annotate(err, "Cannot initialize stats server") return fmt.Errorf("cannot initialize stats server: %w", err)
} }
srv := http.Server{ srv := http.Server{
+5 -5
View File
@@ -1,10 +1,10 @@
package stats package stats
import ( import (
"fmt"
"net" "net"
"net/http" "net/http"
"github.com/juju/errors"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
@@ -91,16 +91,16 @@ func newStatsPrometheus(mux *http.ServeMux) (Stats, error) {
} }
if err := registry.Register(instance.connections); err != nil { if err := registry.Register(instance.connections); err != nil {
return nil, errors.Annotate(err, "Cannot register metrics for connections") return nil, fmt.Errorf("cannot register metrics for connections: %w", err)
} }
if err := registry.Register(instance.traffic); err != nil { if err := registry.Register(instance.traffic); err != nil {
return nil, errors.Annotate(err, "Cannot register metrics for traffic") return nil, fmt.Errorf("cannot register metrics for traffic: %w", err)
} }
if err := registry.Register(instance.crashes); err != nil { if err := registry.Register(instance.crashes); err != nil {
return nil, errors.Annotate(err, "Cannot register metrics for crashes") return nil, fmt.Errorf("cannot register metrics for crashes: %w", err)
} }
if err := registry.Register(instance.antiReplays); err != nil { if err := registry.Register(instance.antiReplays); err != nil {
return nil, errors.Annotate(err, "Cannot register metrics for anti replays") return nil, fmt.Errorf("cannot register metrics for anti replays: %w", err)
} }
handler := promhttp.HandlerFor(registry, promhttp.HandlerOpts{}) handler := promhttp.HandlerFor(registry, promhttp.HandlerOpts{})
+2 -2
View File
@@ -1,10 +1,10 @@
package stats package stats
import ( import (
"fmt"
"net" "net"
"strings" "strings"
"github.com/juju/errors"
"gopkg.in/alexcesaro/statsd.v2" "gopkg.in/alexcesaro/statsd.v2"
"github.com/9seconds/mtg/config" "github.com/9seconds/mtg/config"
@@ -78,7 +78,7 @@ func newStatsStatsd() (Stats, error) {
client, err := statsd.New(options...) client, err := statsd.New(options...)
if err != nil { if err != nil {
return nil, errors.Annotate(err, "Cannot initialize a client") return nil, fmt.Errorf("cannot initialize a client: %w", err)
} }
return &statsStatsd{ return &statsStatsd{
+3 -4
View File
@@ -2,12 +2,11 @@ package telegram
import ( import (
"context" "context"
"fmt"
"math/rand" "math/rand"
"net" "net"
"time" "time"
"github.com/juju/errors"
"github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/conntypes"
"github.com/9seconds/mtg/utils" "github.com/9seconds/mtg/utils"
"github.com/9seconds/mtg/wrappers" "github.com/9seconds/mtg/wrappers"
@@ -29,11 +28,11 @@ func (b *baseTelegram) dialToAddress(ctx context.Context,
addr string) (wrappers.StreamReadWriteCloser, error) { addr string) (wrappers.StreamReadWriteCloser, error) {
conn, err := b.dialer.Dial("tcp", addr) conn, err := b.dialer.Dial("tcp", addr)
if err != nil { if err != nil {
return nil, errors.Annotate(err, "Dial has failed") return nil, fmt.Errorf("dial has failed: %w", err)
} }
if err := utils.InitTCP(conn); err != nil { if err := utils.InitTCP(conn); err != nil {
return nil, errors.Annotate(err, "Cannot initialize TCP socket") return nil, fmt.Errorf("cannot initialize tcp socket: %w", err)
} }
return wrappers.NewTelegramConn(ctx, cancel, conn), nil return wrappers.NewTelegramConn(ctx, cancel, conn), nil
+4 -5
View File
@@ -1,10 +1,9 @@
package utils package utils
import ( import (
"fmt"
"net" "net"
"github.com/juju/errors"
"github.com/9seconds/mtg/config" "github.com/9seconds/mtg/config"
) )
@@ -12,13 +11,13 @@ func InitTCP(conn net.Conn) error {
tcpConn := conn.(*net.TCPConn) tcpConn := conn.(*net.TCPConn)
if err := tcpConn.SetNoDelay(true); err != nil { if err := tcpConn.SetNoDelay(true); err != nil {
return errors.Annotate(err, "Cannot set NO_DELAY") return fmt.Errorf("cannot set TCP_NO_DELAY: %w", err)
} }
if err := tcpConn.SetReadBuffer(config.C.BufferSize.Read); err != nil { if err := tcpConn.SetReadBuffer(config.C.BufferSize.Read); err != nil {
return errors.Annotate(err, "Cannot set read buffer size") return fmt.Errorf("cannot set read buffer size: %w", err)
} }
if err := tcpConn.SetWriteBuffer(config.C.BufferSize.Write); err != nil { if err := tcpConn.SetWriteBuffer(config.C.BufferSize.Write); err != nil {
return errors.Annotate(err, "Cannot set write buffer size") return fmt.Errorf("cannot set write buffer size: %w", err)
} }
return nil return nil
+8 -11
View File
@@ -3,24 +3,21 @@
package utils package utils
import ( import (
"golang.org/x/sys/unix" "fmt"
"github.com/juju/errors" "golang.org/x/sys/unix"
) )
func SetLimits() (err error) { func SetLimits() error {
rLimit := unix.Rlimit{} rLimit := unix.Rlimit{}
err = unix.Getrlimit(unix.RLIMIT_NOFILE, &rLimit) if err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rLimit); err != nil {
if err != nil { return fmt.Errorf("cannot get rlimit: %w", err)
err = errors.Annotate(err, "Cannot get rlimit")
return
} }
rLimit.Cur = rLimit.Max rLimit.Cur = rLimit.Max
err = unix.Setrlimit(unix.RLIMIT_NOFILE, &rLimit) if err := unix.Setrlimit(unix.RLIMIT_NOFILE, &rLimit); err != nil {
if err != nil { return fmt.Errorf("cannot set rlimit: %w", err)
err = errors.Annotate(err, "Cannot set rlimit")
} }
return return nil
} }
+5 -5
View File
@@ -4,10 +4,10 @@ import (
"context" "context"
"crypto/rand" "crypto/rand"
"encoding/hex" "encoding/hex"
"fmt"
"net" "net"
"time" "time"
"github.com/juju/errors"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/9seconds/mtg/config" "github.com/9seconds/mtg/config"
@@ -47,12 +47,12 @@ func (w *wrapperConn) WriteTimeout(p []byte, timeout time.Duration) (int, error)
select { select {
case <-w.ctx.Done(): case <-w.ctx.Done():
w.Close() w.Close()
return 0, errors.Annotate(w.ctx.Err(), "Cannot write because context was closed") return 0, fmt.Errorf("cannot write because context was closed: %w", w.ctx.Err())
default: default:
if err := w.parent.SetWriteDeadline(time.Now().Add(timeout)); err != nil { if err := w.parent.SetWriteDeadline(time.Now().Add(timeout)); err != nil {
w.Close() // nolint: gosec w.Close() // nolint: gosec
return 0, errors.Annotate(err, "Cannot set write deadline to the socket") return 0, fmt.Errorf("cannot set write deadline to the socket: %w", err)
} }
n, err := w.parent.Write(p) n, err := w.parent.Write(p)
@@ -73,12 +73,12 @@ func (w *wrapperConn) ReadTimeout(p []byte, timeout time.Duration) (int, error)
select { select {
case <-w.ctx.Done(): case <-w.ctx.Done():
w.Close() w.Close()
return 0, errors.Annotate(w.ctx.Err(), "Cannot read because context was closed") return 0, fmt.Errorf("cannot read because context was closed: %w", w.ctx.Err())
default: default:
if err := w.parent.SetReadDeadline(time.Now().Add(timeout)); err != nil { if err := w.parent.SetReadDeadline(time.Now().Add(timeout)); err != nil {
w.Close() w.Close()
return 0, errors.Annotate(err, "Cannot set read deadline to the socket") return 0, fmt.Errorf("cannot set read deadline to the socket: %w", err)
} }
n, err := w.parent.Read(p) n, err := w.parent.Read(p)
+3 -3
View File
@@ -2,10 +2,10 @@ package wrappers
import ( import (
"crypto/cipher" "crypto/cipher"
"fmt"
"net" "net"
"time" "time"
"github.com/juju/errors"
"go.uber.org/zap" "go.uber.org/zap"
) )
@@ -18,7 +18,7 @@ type wrapperObfuscated2 struct {
func (w *wrapperObfuscated2) ReadTimeout(p []byte, timeout time.Duration) (int, error) { func (w *wrapperObfuscated2) ReadTimeout(p []byte, timeout time.Duration) (int, error) {
n, err := w.parent.ReadTimeout(p, timeout) n, err := w.parent.ReadTimeout(p, timeout)
if err != nil { if err != nil {
return 0, errors.Annotate(err, "Cannot read stream ciphered data") return 0, fmt.Errorf("cannot read stream ciphered data: %w", err)
} }
w.decryptor.XORKeyStream(p, p[:n]) w.decryptor.XORKeyStream(p, p[:n])
@@ -28,7 +28,7 @@ func (w *wrapperObfuscated2) ReadTimeout(p []byte, timeout time.Duration) (int,
func (w *wrapperObfuscated2) Read(p []byte) (int, error) { func (w *wrapperObfuscated2) Read(p []byte) (int, error) {
n, err := w.parent.Read(p) n, err := w.parent.Read(p)
if err != nil { if err != nil {
return 0, errors.Annotate(err, "Cannot read stream ciphered data") return n, err
} }
w.decryptor.XORKeyStream(p, p[:n]) w.decryptor.XORKeyStream(p, p[:n])