Skip to content
This repository has been archived by the owner on May 6, 2023. It is now read-only.

Commit

Permalink
🆕 优化日志; 每30秒服务端显示一次连接情况,优化错误提示
Browse files Browse the repository at this point in the history
  • Loading branch information
perrornet committed Jan 13, 2022
1 parent 531ad4d commit 13883c5
Show file tree
Hide file tree
Showing 10 changed files with 446 additions and 214 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
*.exe
.idea
.idea
*.log
52 changes: 23 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,26 @@ https://user-images.githubusercontent.com/23651751/148649355-03d04371-efb9-4c80-

## 使用

### 参数说明

参数 | 示例 | 说明
---|---|---
-client | - | 是否是客户端, 该参数必须准确, 默认服务端, 只有 secret_key 不为空时需要区分
-debug| - | 是否开启debug, 如果设置了这个参数, 那么将会开启更为详细的日志,, 建议测试时开启
-l| -l :9999 | 本地监听地址 (default ":9999")
-r| -r 远程ip:端口 | 远程矿池地址或者远程本程序的监听地址 (default "localhost:80")
-log_file| -log_file ./miner-proxy.log | 将日志输入到./miner-proxy.log, 建议使用绝对路径
-secret_key| -secret_key 123456789 | 数据包加密密钥, 只有远程地址也是本服务时才可使用
-sc | - | 是否使用混淆数据, 如果指定了, 将会不定时在server/client之间发送随机的混淆数据以及在挖矿数据中插入随机数据
-sr | -sr baidu.com:80 | 客户端如果设置了这个参数, 那么服务端将会直接使用客户端的参数连接, 多个客户端互不干扰
-install | - | 添加到系统服务, 并且开机自动启动
-remove | - | 移除系统服务, 并且关闭开机自动启动
-restart| - | 重启代理服务
-start| -| 启动代理服务
-stat| -| 查看代理服务状态
-stop | - | 暂停代理服务


### win 端使用
#### 启动服务, 无界面运行, 并且开机启动(推荐)
1. 按住 win + R 输入 cmd 回车
Expand All @@ -50,7 +70,8 @@ https://user-images.githubusercontent.com/23651751/148649355-03d04371-efb9-4c80-
1. 安装服务: `完整目录/miner-proxy_linux_amd64 -l :5555 -r 矿池域名:矿池端口 -secret_key xxxx -sc -install`
2. 启动服务: `完整目录/miner-proxy_linux_amd64 -start`
3. 查看服务状态: `完整目录/miner-proxy_linux_amd64 -stat`
4. 查看日志: `journalctl -f -u miner-proxy`
4. 查看日志: `journalctl -f -u miner-proxy`

#### 通过supervisor启动(**可以多开, 需要修改miner-proxy.init为miner-proxy1.init, miner-proxy2.init, 以及[program:miner-proxy1], [program:miner-proxy2]**)
1. 安装supervisor, 请自行搜索supervisor在您系统中的安装方式
2. 写入配置文件, 输入命令: `vim /etc/supervisor/conf.d/miner-proxy.init`
Expand All @@ -66,33 +87,6 @@ ikillasgroup=true
4. 按ESC键, 随后输入:wq回车后即可保存
5. 输入命令: `supervisorctl reload && supervisorctl start miner-proxy && supervisorctl status`

### 参数说明
```
-client
是否是客户端, 该参数必须准确, 默认服务端, 只有 secret_key 不为空时需要区分
-debug
是否开启debug
-install
添加到系统服务, 并且开机自动启动
-l string
本地监听地址 (default ":9999")
-r string
远程代理地址或者远程本程序的监听地址 (default "localhost:80")
-remove
移除系统服务, 并且关闭开机自动启动
-restart
重启代理服务
-sc
是否使用混淆数据, 如果指定了, 将会不定时在server/client之间发送随机的混淆数据以及在挖矿数据中插入随机数据
-secret_key string
数据包加密密钥, 只有远程地址也是本服务时才可使用
-start
启动代理服务
-stat
查看代理服务状态
-stop
暂停代理服务
```

* 分为服务端以及客户端
* 以f2pool挖erg为例
Expand Down Expand Up @@ -255,4 +249,4 @@ docker stats miner-proxy
### 查看容器内进程状态
```
docker top miner-proxy
```
```
120 changes: 98 additions & 22 deletions cmd/miner-proxy/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,17 @@ import (
"fmt"
"log"
"miner-proxy/pkg"
"miner-proxy/pkg/status"
"miner-proxy/proxy"
"net"
"net/http"
"os"
"strings"
"time"

"github.com/jmcvetta/randutil"
"github.com/kardianos/service"
"go.uber.org/zap/zapcore"
)

var (
Expand All @@ -27,6 +32,20 @@ var (
restart = flag.Bool("restart", false, "重启代理服务")
start = flag.Bool("start", false, "启动代理服务")
stat = flag.Bool("stat", false, "查看代理服务状态")
logFile = flag.String("log_file", "", "将日志输入到文件中, 示例: ./miner-proxy.log")
randomSendHttp = flag.Bool("rsh", false, "是否随机时间发送随机http请求混淆, 支持客户端")
)

var (
reqeustUrls = []string{
"https://www.baidu.com/",
"https://m.baidu.com/",
"https://www.jianshu.com/",
"https://www.jianshu.com/p/4fbdab9fb44c",
"https://www.jianshu.com/p/5d25218fb22d",
"https://www.tencent.com/",
"https://tieba.baidu.com/",
}
)

type proxyService struct{}
Expand All @@ -36,56 +55,83 @@ func (p *proxyService) Start(_ service.Service) error {
return nil
}

func (p *proxyService) run() {
func (p *proxyService) randomRequestHttp() {
defer func() {
sleepTime, _ := randutil.IntRange(10, 60)
time.AfterFunc(time.Duration(sleepTime)*time.Second, p.randomRequestHttp)
}()

logger := pkg.ColorLogger{}
client := http.Client{
Timeout: time.Second * 10,
}
index, _ := randutil.IntRange(0, len(reqeustUrls))
resp, _ := client.Get(reqeustUrls[index])
if resp == nil {
return
}
resp.Body.Close()
}

logger.Info("miner-proxy proxing from %v to %v ", *localAddr, *remoteAddr)
func (p *proxyService) run() {
defer func() {
if err := recover(); err != nil {
pkg.Error("程序崩溃: %v, 重启中", err)
p.run()
}
}()
fmt.Printf("监听端口 '%s', 默认矿池地址 '%s'\n", *localAddr, *remoteAddr)
if *debug {
pkg.Warn("你开启了-debug 参数, 该参数建议只有在测试时开启")
}

laddr, err := net.ResolveTCPAddr("tcp", *localAddr)
if err != nil {
logger.Warn("Failed to resolve local address: %s", err)
pkg.Warn("Failed to resolve local address: %s", err)
pkg.Error("你输入的监听地址错误, 请输入: 0.0.0.0:端口/:端口/ip:端口")
os.Exit(1)
}
raddr, err := net.ResolveTCPAddr("tcp", *remoteAddr)
if err != nil {
logger.Warn("Failed to resolve remote address: %s", err)
pkg.Error("你输入的矿池地址错误, 请输入: ip:端口")
os.Exit(1)
}
listener, err := net.ListenTCP("tcp", laddr)
if err != nil {
logger.Warn("Failed to open local port to listen: %s", err)
pkg.Error("监听 '%s' 失败, 请更换一个端口", laddr.String())
os.Exit(1)
}

if len(*secretKey)%16 != 0 {
for len(*secretKey)%16 != 0 {
*secretKey += "0"
}
if len(*secretKey) > 32 {
pkg.Error("密钥必须小于等于32位!")
os.Exit(1)
}

for len(*secretKey)%16 != 0 {
*secretKey += "0"
}

if !*isClient {
go func() {
for range time.Tick(time.Second * 30) {
status.Show()
}
}()
}

if *isClient && *randomSendHttp {
go p.randomRequestHttp()
}

for {
conn, err := listener.AcceptTCP()
if err != nil {
logger.Warn("Failed to accept connection '%s'", err)
continue
}
p := proxy.New(conn, laddr, raddr)
p.SecretKey = *secretKey
p.IsClient = *isClient
p.SendRemoteAddr = *SendRemoteAddr
p.UseSendConfusionData = *UseSendConfusionData
l := &pkg.ColorLogger{
Verbose: *debug,
}
if *isClient {
l.Prefix = fmt.Sprintf("connection %s>> ", raddr.String())
}

if !*isClient {
l.Prefix = fmt.Sprintf("connection %s>> ", conn.RemoteAddr().String())
}
p.Log = l
go p.Start()
}
}
Expand Down Expand Up @@ -113,6 +159,14 @@ A:

func main() {
flag.Parse()
if *debug {
pkg.InitLog(zapcore.DebugLevel, *logFile)
}

if !*debug {
pkg.InitLog(zapcore.WarnLevel, *logFile)
}

svcConfig := &service.Config{
Name: "miner-proxy",
DisplayName: "miner-proxy",
Expand All @@ -123,7 +177,21 @@ func main() {
if err != nil {
log.Fatalln(err)
}

if *install {
if _, err := s.Status(); err == nil {
pkg.Input("已经存在一个miner-proxy服务了, 是否需要卸载?(y/n):", func(in string) bool {
in = strings.ToLower(in)
if in == "y" {
if err := s.Uninstall(); err != nil {
log.Println("删除失败", err)
}
}
return true
})
log.Println("如果想要启动第二个程序, linux可以使用nohup ./miner-proxy 你的参数 >> miner-proxy.log 2>&1&启动")
return
}
if err := s.Install(); err != nil {
log.Fatalln("代理服务安装失败", err)
return
Expand All @@ -145,6 +213,14 @@ func main() {
log.Fatalln("停止代理服务失败", err)
}
log.Println("成功停止代理服务")
pkg.Input("是否需要移除代理服务?(y/n)", func(in string) bool {
if in == "y" {
if err := s.Uninstall(); err != nil {
log.Println("删除失败", err)
}
}
return true
})
return
}

Expand Down
11 changes: 4 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,11 @@ module miner-proxy
go 1.13

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/BurntSushi/toml v1.0.0 // indirect
github.com/dustin/go-humanize v1.0.0
github.com/jmcvetta/randutil v0.0.0-20150817122601-2bb1b664bcff
github.com/kardianos/service v1.2.0
github.com/kr/pretty v0.1.0 // indirect
github.com/mattn/go-colorable v0.1.4 // indirect
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b
github.com/mitchellh/gox v1.0.1 // indirect
github.com/stretchr/testify v1.7.0 // indirect
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
github.com/liushuochen/gotable v0.0.0-20220106123442-3486f065ca09
go.uber.org/zap v1.20.0
gopkg.in/natefinch/lumberjack.v2 v2.0.0
)
69 changes: 54 additions & 15 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU=
github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
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/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/hashicorp/go-version v1.0.0 h1:21MVWPKDphxa7ineQQTrCU5brh7OuVVAzGOCnnCPtE8=
github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/jmcvetta/randutil v0.0.0-20150817122601-2bb1b664bcff h1:6NvhExg4omUC9NfA+l4Oq3ibNNeJUdiAF3iBVB0PlDk=
github.com/jmcvetta/randutil v0.0.0-20150817122601-2bb1b664bcff/go.mod h1:ddfPX8Z28YMjiqoaJhNBzWHapTHXejnB5cDCUWDwriw=
github.com/kardianos/service v1.2.0 h1:bGuZ/epo3vrt8IPC7mnKQolqFeYJb7Cs8Rk4PSOBB/g=
Expand All @@ -14,26 +16,63 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/mitchellh/gox v1.0.1 h1:x0jD3dcHk9a9xPSDN6YEL4xL6Qz0dvNYm8yZqui5chI=
github.com/mitchellh/gox v1.0.1/go.mod h1:ED6BioOGXMswlXa2zxfh/xdd5QhwYliBFn9V18Ap4z4=
github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY=
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/liushuochen/gotable v0.0.0-20220106123442-3486f065ca09 h1:iZ0bdoqkDu/UZozph5/rGMm6pzvEPts/Mwqa0MOg7CI=
github.com/liushuochen/gotable v0.0.0-20220106123442-3486f065ca09/go.mod h1:CxUy8nDvutaC1pOfaG9TRoYwdHHqoNstSPPKhomC9k8=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211 h1:9UQO31fZ+0aKQOFldThf7BKPMJTiBfWycGh/u3UoO88=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/zap v1.20.0 h1:N4oPlghZwYG55MlU6LXk/Zp00FVNE9X9wrYO8CEs4lc=
go.uber.org/zap v1.20.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
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/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Loading

0 comments on commit 13883c5

Please sign in to comment.