diff --git a/Gopkg.lock b/Gopkg.lock index 4f498bd9..b5d2fd3c 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -90,12 +90,12 @@ version = "v1.1.1" [[projects]] - digest = "1:ca59b1175189b3f0e9f1793d2c350114be36eaabbe5b9f554b35edee1de50aea" + digest = "1:d5f97fc268267ec1b61c3453058c738246fc3e746f14b1ae25161513b7367b0c" name = "github.com/gorilla/mux" packages = ["."] pruneopts = "UT" - revision = "a7962380ca08b5a188038c69871b8d3fbdf31e89" - version = "v1.7.0" + revision = "c5c6c98bc25355028a63748a498942a6398ccd22" + version = "v1.7.1" [[projects]] digest = "1:e72d1ebb8d395cf9f346fd9cbc652e5ae222dd85e0ac842dc57f175abed6d195" @@ -121,26 +121,6 @@ revision = "66b9c49e59c6c48f0ffce28c2d8b8a5678502c6d" version = "v1.4.0" -[[projects]] - digest = "1:7fbb40f65374cb64a7bf3f1f74e2cb4c4437d93bc3d8921cf7e3d7ad2ab20989" - name = "github.com/graphql-go/graphql" - packages = [ - ".", - "gqlerrors", - "language/ast", - "language/kinds", - "language/lexer", - "language/location", - "language/parser", - "language/printer", - "language/source", - "language/typeInfo", - "language/visitor", - ] - pruneopts = "UT" - revision = "2b0b7340d2285b861482047fbf5de0488e021bea" - version = "v0.7.8" - [[projects]] digest = "1:d15ee511aa0f56baacc1eb4c6b922fa1c03b38413b6be18166b996d82a0156ea" name = "github.com/hashicorp/golang-lru" @@ -153,7 +133,7 @@ version = "v0.5.1" [[projects]] - digest = "1:ff312c4d510c67954a6fc6a11c9ff72a2b2169584776b7419c7b8c729e2b13ac" + digest = "1:0731b955911f880c75409845b54203f5127c72e003691e2d34462a0516a9b1f6" name = "github.com/jinzhu/gorm" packages = [ ".", @@ -162,8 +142,8 @@ "dialects/sqlite", ] pruneopts = "UT" - revision = "472c70caa40267cb89fd8facb07fe6454b578626" - version = "v1.9.2" + revision = "e3987fd4b803c16497aa4dfd2e75db7a6a061a4e" + version = "v1.9.4" [[projects]] branch = "master" @@ -182,16 +162,17 @@ version = "v1.3.0" [[projects]] - digest = "1:b18ffc558326ebaed3b4a175617f1e12ed4e3f53d6ebfe5ba372a3de16d22278" + digest = "1:226be3582c304c347481157049c862924fdd6277256e854781c5ba4728901215" name = "github.com/lib/pq" packages = [ ".", "hstore", "oid", + "scram", ] pruneopts = "UT" - revision = "4ded0e9383f75c197b3a2aaa6d590ac52df6fd79" - version = "v1.0.0" + revision = "51e2106eed1cea199c802d2a49e91e2491b02056" + version = "v1.1.0" [[projects]] digest = "1:4a49346ca45376a2bba679ca0e83bec949d780d4e927931317904bad482943ec" @@ -233,6 +214,14 @@ revision = "ffdc059bfe9ce6a4e144ba849dbedead332c6053" version = "v1.3.0" +[[projects]] + branch = "master" + digest = "1:9f3a60def1a1eb5ac184e71dde43c6f99606f54d106db7c95f8b8338629a777b" + name = "github.com/tatsushid/go-fastping" + packages = ["."] + pruneopts = "UT" + revision = "d7bb493dee3e090e2ffb6914adddf17c1e7c026c" + [[projects]] digest = "1:b4e8aaca88f799355f4ac560bce4293fb85ff21003dd0d5741ca503f7a788e91" name = "github.com/vektah/gqlparser" @@ -258,7 +247,22 @@ "blowfish", ] pruneopts = "UT" - revision = "a5d413f7728c81fb97d96a2b722368945f651e78" + revision = "df01cb2cc480549d72034218dd98bf97671450ac" + +[[projects]] + branch = "master" + digest = "1:18ca16fd6f3c83e931598380b27badbcb669ddd3a690b66fb4a7390467f460ef" + name = "golang.org/x/net" + packages = [ + "bpf", + "icmp", + "internal/iana", + "internal/socket", + "ipv4", + "ipv6", + ] + pruneopts = "UT" + revision = "1f3472d942ba824034fb77cab6a6cfc1bc8a2c3c" [[projects]] digest = "1:c25289f43ac4a68d88b02245742347c94f1e108c534dda442188015ff80669b3" @@ -306,7 +310,6 @@ "github.com/go-yaml/yaml", "github.com/gorilla/mux", "github.com/gorilla/sessions", - "github.com/graphql-go/graphql", "github.com/jinzhu/gorm", "github.com/jinzhu/gorm/dialects/mysql", "github.com/jinzhu/gorm/dialects/postgres", @@ -314,6 +317,7 @@ "github.com/joho/godotenv", "github.com/rendon/testcli", "github.com/stretchr/testify/assert", + "github.com/tatsushid/go-fastping", "github.com/vektah/gqlparser", "github.com/vektah/gqlparser/ast", "golang.org/x/crypto/bcrypt", diff --git a/Gopkg.toml b/Gopkg.toml index d628fa21..ca995e01 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -47,19 +47,15 @@ [[constraint]] name = "github.com/gorilla/mux" - version = "1.7.0" + version = "1.7.1" [[constraint]] name = "github.com/gorilla/sessions" version = "1.1.3" -[[constraint]] - name = "github.com/graphql-go/graphql" - version = "0.7.8" - [[constraint]] name = "github.com/jinzhu/gorm" - version = "1.9.2" + version = "1.9.4" [[constraint]] name = "github.com/joho/godotenv" @@ -73,6 +69,10 @@ name = "github.com/stretchr/testify" version = "1.3.0" +[[constraint]] + branch = "master" + name = "github.com/tatsushid/go-fastping" + [[constraint]] name = "github.com/vektah/gqlparser" version = "1.1.2" diff --git a/core/checker.go b/core/checker.go index c2ab027f..06ee53e0 100644 --- a/core/checker.go +++ b/core/checker.go @@ -21,6 +21,7 @@ import ( "github.com/hunterlong/statping/core/notifier" "github.com/hunterlong/statping/types" "github.com/hunterlong/statping/utils" + "github.com/tatsushid/go-fastping" "net" "net/http" "net/url" @@ -38,6 +39,18 @@ func checkServices() { } } +// Check will run checkHttp for HTTP services and checkTcp for TCP services +func (s *Service) Check(record bool) { + switch s.Type { + case "http": + s.checkHttp(record) + case "tcp", "udp": + s.checkTcp(record) + case "icmp": + s.checkIcmp(record) + } +} + // CheckQueue is the main go routine for checking a service func (s *Service) CheckQueue(record bool) { s.Checkpoint = time.Now() @@ -109,6 +122,28 @@ func (s *Service) dnsCheck() (float64, error) { return subTime, err } +// checkIcmp will send a ICMP ping packet to the service +func (s *Service) checkIcmp(record bool) *Service { + p := fastping.NewPinger() + ra, err := net.ResolveIPAddr("ip4:icmp", s.Domain) + if err != nil { + recordFailure(s, fmt.Sprintf("Could not send ICMP to service %v, %v", s.Domain, err)) + return s + } + p.AddIPAddr(ra) + p.OnRecv = func(addr *net.IPAddr, rtt time.Duration) { + s.Latency = rtt.Seconds() + recordSuccess(s) + } + err = p.Run() + if err != nil { + recordFailure(s, fmt.Sprintf("Issue running ICMP to service %v, %v", s.Domain, err)) + return s + } + s.LastResponse = "" + return s +} + // checkTcp will check a TCP service func (s *Service) checkTcp(record bool) *Service { dnsLookup, err := s.dnsCheck() @@ -219,16 +254,6 @@ func (s *Service) checkHttp(record bool) *Service { return s } -// Check will run checkHttp for HTTP services and checkTcp for TCP services -func (s *Service) Check(record bool) { - switch s.Type { - case "http": - s.checkHttp(record) - case "tcp", "udp": - s.checkTcp(record) - } -} - // recordSuccess will create a new 'hit' record in the database for a successful/online service func recordSuccess(s *Service) { s.Online = true diff --git a/source/tmpl/form_service.gohtml b/source/tmpl/form_service.gohtml index 4609e587..8ef18fc3 100644 --- a/source/tmpl/form_service.gohtml +++ b/source/tmpl/form_service.gohtml @@ -21,6 +21,7 @@ + Use HTTP if you are checking a website or use TCP if you are checking a server @@ -113,7 +114,7 @@ - + @@ -123,7 +124,7 @@ - + diff --git a/source/wiki.go b/source/wiki.go index 7962e7ed..48698df8 100644 --- a/source/wiki.go +++ b/source/wiki.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2019-04-08 11:09:35.883451 -0700 PDT m=+0.485888071 +// 2019-04-19 11:45:38.037927 -0700 PDT m=+0.539240775 // // This contains the most recently Markdown source for the Statping Wiki. package source