Add watchdog package

This commit is contained in:
TwinProduction 2019-09-04 19:37:13 -04:00
parent f84f84086d
commit b753443516
13 changed files with 225 additions and 0 deletions

20
.idea/$CACHE_FILE$ Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="NodePackageJsonFileManager">
<packageJsonPaths />
</component>
<component name="ProjectInspectionProfilesVisibleTreeState">
<entry key="Project Default">
<profile-state>
<expanded-state>
<State />
</expanded-state>
<selected-state>
<State>
<id>CSS</id>
</State>
</selected-state>
</profile-state>
</entry>
</component>
</project>

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="masterDetails">
<states>
<state key="Copyright.UI">
<settings>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="GlobalLibrariesConfigurable.UI">
<settings>
<last-edited>groovy-2.4.12</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="JdkListConfigurable.UI">
<settings>
<last-edited>1.8</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="ProjectJDKs.UI">
<settings>
<last-edited>1.8</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="ProjectLibrariesConfigurable.UI">
<settings>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="ScopeChooserConfigurable.UI">
<settings>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
</states>
</component>
</project>

2
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
# Default ignored files
/workspace.xml

6
.idea/dictionaries Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectDictionaryState">
<dictionary name="chris" />
</component>
</project>

8
.idea/gatus.iml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

14
.idea/misc.xml Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="1.8" />
</component>
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="Kotlin2JsCompilerArguments">
<option name="sourceMapPrefix" value="" />
<option name="sourceMapEmbedSources" value="inlining" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/gatus.iml" filepath="$PROJECT_DIR$/.idea/gatus.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@ -1,2 +1,17 @@
# gatus
A service health dashboard in Go
config should look something like
```yaml
services:
- name: twinnation
url: https://twinnation.org/actuator/health
interval: 10
failure-threshold: 3
conditions:
- "$STATUS == 200"
- "IP == 200"
```

5
go.mod Normal file
View File

@ -0,0 +1,5 @@
module github.com/TwinProduction/gatus
go 1.12
require k8s.io/helm v2.14.3+incompatible

2
go.sum Normal file
View File

@ -0,0 +1,2 @@
k8s.io/helm v2.14.3+incompatible h1:uzotTcZXa/b2SWVoUzM1xiCXVjI38TuxMujS/1s+3Gw=
k8s.io/helm v2.14.3+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI=

14
main.go Normal file
View File

@ -0,0 +1,14 @@
package main
import (
"fmt"
"github.com/TwinProduction/gatus/watchdog"
)
func main() {
request := watchdog.Request{Url: "https://twinnation.org/actuator/health"}
result := &watchdog.Result{}
request.GetIp(result)
request.GetStatus(result)
fmt.Println(result)
}

49
watchdog/watchdog.go Normal file
View File

@ -0,0 +1,49 @@
package watchdog
import (
"net"
"net/http"
"net/url"
"time"
)
type Request struct {
Url string
}
type Result struct {
HttpStatus int
Hostname string
Ip string
Duration time.Duration
Errors []error
}
func (request *Request) GetIp(result *Result) {
urlObject, err := url.Parse(request.Url)
if err != nil {
result.Errors = append(result.Errors, err)
return
}
result.Hostname = urlObject.Hostname()
ips, err := net.LookupIP(urlObject.Hostname())
if err != nil {
result.Errors = append(result.Errors, err)
return
}
result.Ip = ips[0].String()
}
func (request *Request) GetStatus(result *Result) {
client := &http.Client{
Timeout: time.Second * 10,
}
startTime := time.Now()
response, err := client.Get(request.Url)
if err != nil {
result.Errors = append(result.Errors, err)
return
}
result.Duration = time.Now().Sub(startTime)
result.HttpStatus = response.StatusCode
}