Skip to content

Commit

Permalink
feat: Support proxy config and env vars for HTTP, TCP and TLS Probers (
Browse files Browse the repository at this point in the history
…megaease#194)

* support proxy config and env vars for HTTP, TCP and TLS Probers

* Apply suggestions from code review

Co-authored-by: Bomin Zhang <[email protected]>

* add the proxy notes for notification

* Update README.md

Co-authored-by: Pantelis Roditis <[email protected]>

* fix unit test failed in Windows

* fix unit test failed in Windows

* add the log for unit test

* fix lint warrning

* add the debug log and adjust the unit test

Co-authored-by: Bomin Zhang <[email protected]>
Co-authored-by: Pantelis Roditis <[email protected]>
  • Loading branch information
3 people authored Aug 16, 2022
1 parent 46f758f commit f4fab9a
Show file tree
Hide file tree
Showing 12 changed files with 164 additions and 56 deletions.
28 changes: 18 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,7 @@ http:
# proxy: http://proxy.server:8080
# proxy: socks5://localhost:1085
# proxy: https://user:[email protected]:443
# Also support `HTTP_PROXY` & `HTTPS_PROXY` environment variables
proxy: http://proxy.server:8080
# Request Method
method: GET
Expand Down Expand Up @@ -602,7 +603,8 @@ tcp:
host: example.com:22
timeout: 10s # default is 30 seconds
interval: 2m # default is 60 seconds
proxy: socks5://proxy.server:1080 # Optional. Only support socks5.
# Also support the `ALL_PROXY` environment.
- name: Kafka
host: kafka.server:9093
```
Expand Down Expand Up @@ -721,6 +723,8 @@ TLS ping to remote endpoint, can probe for revoked or expired certificates
tls:
- name: expired test
host: expired.badssl.com:443
proxy: socks5://proxy.server:1080 # Optional. Only support socks5.
# Also support the `ALL_PROXY` environment.
insecure_skip_verify: true # dont check cert validity
expire_skip_verify: true # dont check cert expire date
alert_expire_before: 168h # alert if cert expire date is before X, the value is a Duration, see https://pkg.go.dev/time#ParseDuration. example: 1h, 1m, 1s. expire_skip_verify must be false to use this feature.
Expand Down Expand Up @@ -964,15 +968,19 @@ notify:
- "KEY=Value"
```
**Note**: All of the notifications support the following optional configuration parameters.
```YAML
dry: true # dry notification, print the Discord JSON in log(STDOUT)
timeout: 20s # the timeout send out notification, default: 30s
retry: # somehow the network is not good and needs to retry.
times: 3 # default: 3
interval: 10s # default: 5s
```
> **Note**:
>
> 1) Setting the environment variables `$HTTP_PROXY` & `$HTTPS_PROXY` allows for configuring the proxy settings for all HTTP related webhook notifications such as discord, slack, telegram etc.
>
> 2) All of the notifications support the following optional configuration parameters.
>
> ```YAML
> dry: true # dry notification, print the Discord JSON in log(STDOUT)
> timeout: 20s # the timeout send out notification, default: 30s
> retry: # somehow the network is not good and needs to retry.
> times: 3 # default: 3
> interval: 10s # default: 5s
> ```


### 3.9 Global Setting Configuration
Expand Down
2 changes: 1 addition & 1 deletion eval/extract.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ func Query[T XPathNode](document, xpath string,
return inner(n), nil
}

// ExtractString extracts the value from the document by xpath expression
// ExtractStr extracts the value from the document by xpath expression
func (x *XPathExtractor[T]) ExtractStr() (string, error) {
return Query(x.Document, x.XPath, x.Parser, x.Query, x.Inner)
}
Expand Down
13 changes: 2 additions & 11 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ go 1.18

require (
bou.ke/monkey v1.0.2
github.com/Knetic/govaluate v3.0.0+incompatible
github.com/antchfx/htmlquery v1.2.5
github.com/antchfx/jsonquery v1.3.0
github.com/antchfx/xmlquery v1.3.12
Expand All @@ -23,14 +24,14 @@ require (
go.mongodb.org/mongo-driver v1.10.0
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
golang.org/x/exp v0.0.0-20220328175248-053ad81199eb
golang.org/x/net v0.0.0-20220811182439-13a9a731de15
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10
gopkg.in/natefinch/lumberjack.v2 v2.0.0
gopkg.in/yaml.v3 v3.0.1
)

require (
github.com/BurntSushi/toml v1.1.0 // indirect
github.com/Knetic/govaluate v3.0.0+incompatible // indirect
github.com/antchfx/xpath v1.2.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
Expand All @@ -54,7 +55,6 @@ require (
github.com/prometheus/procfs v0.7.3 // indirect
github.com/robfig/cron/v3 v3.0.1 // indirect
github.com/rogpeppe/go-internal v1.8.1 // indirect
github.com/sergi/go-diff v1.1.0 // indirect
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect
github.com/uptrace/bun v1.1.7 // indirect
github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect
Expand All @@ -63,18 +63,9 @@ require (
github.com/xdg-go/scram v1.1.1 // indirect
github.com/xdg-go/stringprep v1.0.3 // indirect
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e // indirect
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
golang.org/x/net v0.0.0-20220809012201-f428fae20770 // indirect
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/tools v0.1.12-0.20220713141851-7464a5a40219 // indirect
golang.org/x/tools/gopls v0.9.1 // indirect
golang.org/x/vuln v0.0.0-20220613164644-4eb5ba49563c // indirect
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
google.golang.org/protobuf v1.26.0 // indirect
honnef.co/go/tools v0.3.2 // indirect
mellium.im/sasl v0.2.1 // indirect
mvdan.cc/gofumpt v0.3.0 // indirect
mvdan.cc/xurls/v2 v2.4.0 // indirect
)
30 changes: 2 additions & 28 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec=
github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
Expand Down Expand Up @@ -247,8 +246,6 @@ github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XF
github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o=
github.com/segmentio/kafka-go v0.4.33 h1:XHYuEifMYFVCU9A2p1wJprd7xHQKS+Sn6xgBr11+30k=
github.com/segmentio/kafka-go v0.4.33/go.mod h1:GAjxBQJdQMB5zfNA21AhpaqOB2Mu+w3De4ni3Gbm8y0=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
Expand Down Expand Up @@ -292,7 +289,6 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7Jul
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
go.mongodb.org/mongo-driver v1.10.0 h1:UtV6N5k14upNp4LTduX0QCufG124fSu25Wz9tu94GLg=
go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
Expand Down Expand Up @@ -322,8 +318,6 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20220328175248-053ad81199eb h1:pC9Okm6BVmxEw76PUu0XUbOTQ92JX11hfvqTjAV3qxM=
golang.org/x/exp v0.0.0-20220328175248-053ad81199eb/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e h1:qyrTQ++p1afMkO4DPEeLGq/3oTsdlvdH4vqZUBWzUKM=
golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
Expand All @@ -344,9 +338,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
Expand Down Expand Up @@ -377,13 +368,11 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220706163947-c90051bbdb60 h1:8NSylCMxLW4JvserAndSgFL7aPli6A68yf0bYFTcWCM=
golang.org/x/net v0.0.0-20220706163947-c90051bbdb60/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220809012201-f428fae20770 h1:dIi4qVdvjZEjiMDv7vhokAZNGnz3kepwuXqFKYDdDMs=
golang.org/x/net v0.0.0-20220809012201-f428fae20770/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.0.0-20220811182439-13a9a731de15 h1:cik0bxZUSJVDyaHf1hZPSDsU8SZHGQZQMeueXCE7yBQ=
golang.org/x/net v0.0.0-20220811182439-13a9a731de15/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand Down Expand Up @@ -437,10 +426,8 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg=
Expand Down Expand Up @@ -499,13 +486,6 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
golang.org/x/tools v0.1.12-0.20220713141851-7464a5a40219 h1:Ljlba2fVWOA1049JjsKii44g8nZN2GjpxMlzVc8AnQM=
golang.org/x/tools v0.1.12-0.20220713141851-7464a5a40219/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
golang.org/x/tools/gopls v0.9.1 h1:SigsTL4Hpv3a6b/a7oPCLRv5QUeSM6PZNdta1oKY4B0=
golang.org/x/tools/gopls v0.9.1/go.mod h1:fkgIFE0meep1WkUekyJZAgyUIVrbjkTNtc1JEZxZYg8=
golang.org/x/vuln v0.0.0-20220613164644-4eb5ba49563c h1:r5bbIROBQtRRgoutV8Q3sFY58VzHW6jMBYl48ANSyS4=
golang.org/x/vuln v0.0.0-20220613164644-4eb5ba49563c/go.mod h1:UZshlUPxXeGUM9I14UOawXQg6yosDE9cr1vKY/DzgWo=
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-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
Expand Down Expand Up @@ -615,14 +595,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.3.2 h1:ytYb4rOqyp1TSa2EPvNVwtPQJctSELKaMyLfqNP4+34=
honnef.co/go/tools v0.3.2/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw=
mellium.im/sasl v0.2.1 h1:nspKSRg7/SyO0cRGY71OkfHab8tf9kCts6a6oTDut0w=
mellium.im/sasl v0.2.1/go.mod h1:ROaEDLQNuf9vjKqE1SrAfnsobm2YKXT1gnN1uDp1PjQ=
mvdan.cc/gofumpt v0.3.0 h1:kTojdZo9AcEYbQYhGuLf/zszYthRdhDNDUi2JKTxas4=
mvdan.cc/gofumpt v0.3.0/go.mod h1:0+VyGZWleeIj5oostkOex+nDBA0eyavuDnDusAJ8ylo=
mvdan.cc/xurls/v2 v2.4.0 h1:tzxjVAj+wSBmDcF6zBB7/myTy3gX9xvi8Tyr28AuQgc=
mvdan.cc/xurls/v2 v2.4.0/go.mod h1:+GEjq9uNjqs8LQfM9nVnM8rff0OQ5Iash5rzX+N1CSg=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
40 changes: 40 additions & 0 deletions probe/base/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,15 @@ package base

import (
"fmt"
"net"
"net/url"
"os"
"time"

"github.com/megaease/easeprobe/global"
"github.com/megaease/easeprobe/probe"
"github.com/prometheus/client_golang/prometheus"
"golang.org/x/net/proxy"

log "github.com/sirupsen/logrus"
)
Expand Down Expand Up @@ -191,3 +195,39 @@ func (d *DefaultProbe) DownTimeCalculation(status probe.Status) {
d.ProbeResult.RecoveryDuration = time.Since(d.ProbeResult.LatestDownTime)
}
}

// GetProxyConnection return the proxy connection
func (d *DefaultProbe) GetProxyConnection(socks5 string, host string) (net.Conn, error) {
proxyDialer := proxy.FromEnvironment()
env := true
if socks5 != "" {
log.Debugf("[%s / %s] - Proxy Setting found - %s", d.ProbeKind, d.ProbeName, socks5)
proxyURL, err := url.Parse(socks5)
if err != nil {
log.Errorf("[%s / %s] Invalid proxy: %s", d.ProbeKind, d.ProbeName, socks5)
return nil, fmt.Errorf("Invalid proxy: %s, %v", socks5, err)
}
proxyDialer, err = proxy.FromURL(proxyURL, &net.Dialer{Timeout: d.ProbeTimeout})
if err != nil {
log.Errorf("[%s / %s] Invalid proxy: %s", d.ProbeKind, d.ProbeName, socks5)
return nil, fmt.Errorf("Invalid proxy: %s, %v", socks5, err)
}
env = false
}

if proxyDialer != proxy.Direct {
if env {
names := []string{"ALL_PROXY", "all_proxy"}
for _, n := range names {
socks5 = os.Getenv(n)
if socks5 != "" {
break
}
}
}

log.Debugf("[%s / %s] - Using the proxy server [%s] for connection", d.ProbeKind, d.ProbeName, socks5)
return proxyDialer.Dial("tcp", host)
}
return net.DialTimeout("tcp", host, d.ProbeTimeout)
}
50 changes: 50 additions & 0 deletions probe/base/base_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,17 @@ package base

import (
"math/rand"
"net"
"os"
"reflect"
"testing"
"time"

"bou.ke/monkey"
"github.com/megaease/easeprobe/global"
"github.com/megaease/easeprobe/probe"
"github.com/stretchr/testify/assert"
"golang.org/x/net/proxy"
)

var (
Expand Down Expand Up @@ -97,3 +103,47 @@ func TestBase(t *testing.T) {
r := p.Probe()
assert.Equal(t, *p.ProbeResult, r)
}

func TestProxyConnection(t *testing.T) {
p := newDummyProber("probe")
p.Config(global.ProbeSettings{})

os.Setenv("ALL_PROXY", "socks5://localhost:1080")

conn, err := p.GetProxyConnection("sock://localhost:8080", "host:80")
assert.NotNil(t, err)
assert.Nil(t, conn)

conn, err = p.GetProxyConnection("sock5://\n\r", "host:80")
assert.NotNil(t, err)
assert.Nil(t, conn)

monkey.Patch(proxy.SOCKS5, func(network string, address string, auth *proxy.Auth, forward proxy.Dialer) (proxy.Dialer, error) {
return &net.Dialer{}, nil
})
var dialer *net.Dialer
monkey.PatchInstanceMethod(reflect.TypeOf(dialer), "Dial", func(_ *net.Dialer, network, address string) (net.Conn, error) {
return &net.TCPConn{}, nil
})

conn, err = p.GetProxyConnection("", "host:80")
assert.Nil(t, err)
assert.NotNil(t, conn)

conn, err = p.GetProxyConnection("socks5://localhost:8080", "host:80")
assert.Nil(t, err)
assert.NotNil(t, conn)

monkey.Patch(proxy.FromEnvironment, func() proxy.Dialer {
return proxy.Direct
})

monkey.Patch(net.DialTimeout, func(string, string, time.Duration) (net.Conn, error) {
return &net.TCPConn{}, nil
})
conn, err = p.GetProxyConnection("", "host:80")
assert.Nil(t, err)
assert.NotNil(t, conn)

monkey.UnpatchAll()
}
9 changes: 7 additions & 2 deletions probe/data_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package probe

import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
Expand Down Expand Up @@ -176,11 +177,15 @@ func TestCleanDataFile(t *testing.T) {

// create data file with backups
n := 5
for i := 0; i < 5; i++ {
newDataFile(file)
for i := 0; i < n; i++ {
if err := newDataFile(file); err != nil {
t.Fatal(err)
}
if err := LoadDataFromFile(file); err != nil {
t.Fatal(err)
}
files, _ := filepath.Glob(file + "-*")
fmt.Printf("n=%d, files=%v\n", n, files)
}
assert.Equal(t, n, numOfBackup(file))

Expand Down
1 change: 1 addition & 0 deletions probe/http/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ func (h *HTTP) Config(gConf global.ProbeSettings) error {
}
return conn, nil
},
Proxy: http.ProxyFromEnvironment, // use proxy from environment variables
}

// proxy server
Expand Down
3 changes: 2 additions & 1 deletion probe/tcp/tcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
type TCP struct {
base.DefaultProbe `yaml:",inline"`
Host string `yaml:"host"`
Proxy string `yaml:"proxy"`
}

// Config HTTP Config Object
Expand All @@ -45,7 +46,7 @@ func (t *TCP) Config(gConf global.ProbeSettings) error {

// DoProbe return the checking result
func (t *TCP) DoProbe() (bool, string) {
conn, err := net.DialTimeout("tcp", t.Host, t.Timeout())
conn, err := t.GetProxyConnection(t.Proxy, t.Host)
status := true
message := ""
if err != nil {
Expand Down
Loading

0 comments on commit f4fab9a

Please sign in to comment.