Skip to content
This repository was archived by the owner on Mar 27, 2018. It is now read-only.

Commit aebd8fd

Browse files
authored
Merge pull request #6 from oscp/feature/healthy-status
The cli now generates a HEALTHY event if everything is OK.
2 parents 8f1cd63 + 2f32d2c commit aebd8fd

File tree

3 files changed

+64
-112
lines changed

3 files changed

+64
-112
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# dirs
2+
out/
3+
14
# Binaries for programs and plugins
25
*.exe
36
*.dll

cmd/root.go

Lines changed: 60 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright © 2017 Maciej Raciborski <[email protected]>
1+
// Copyright © 2017 SBB Cloud Stack Team
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.
@@ -21,15 +21,16 @@ import (
2121
"path/filepath"
2222
"runtime"
2323
"strings"
24+
"errors"
2425

2526
"github.com/op/go-logging"
2627
"github.com/oscp/openshift-monitoring-checks/checks"
2728
"github.com/spf13/cobra"
2829
"github.com/spf13/viper"
2930
)
3031

31-
var pretty bool
32-
var debug bool
32+
var pretty bool
33+
var debug bool
3334

3435
var log = logging.MustGetLogger("openshift-monitoring-cli")
3536

@@ -44,6 +45,13 @@ type IntegrationData struct {
4445
Events []EventData `json:"events"`
4546
}
4647

48+
var data = IntegrationData{
49+
Name: "ch.sbb.openshift-integration",
50+
ProtocolVersion: "1",
51+
IntegrationVersion: "1.0.0",
52+
Events: make([]EventData, 0),
53+
}
54+
4755
var rootCmd = &cobra.Command{
4856
Use: "openshift-monitoring-cli",
4957
Short: "This cli tool runs monitoring checks for OpenShift installations.",
@@ -120,30 +128,34 @@ func createEvent(err error) map[string]interface{} {
120128
return event
121129
}
122130

123-
func createMajorEvent(err error) map[string]interface{} {
131+
func createHealthyEvent(err error) map[string]interface{} {
124132
var event = createEvent(err)
125-
event["category"] = "MAJOR"
126-
log.Error("MAJOR:", err.Error())
133+
event["category"] = "HEALTHY"
134+
log.Error("HEALTHY:", err.Error())
127135
return event
128136
}
129137

130-
func createMinorEvent(err error) map[string]interface{} {
131-
var event = createEvent(err)
132-
event["category"] = "MINOR"
133-
log.Error("MINOR:", err.Error())
134-
return event
138+
func evalMajor(fn func() error) {
139+
if err := fn(); err != nil {
140+
var event= createEvent(err)
141+
event["category"] = "MAJOR"
142+
log.Error("MAJOR:", err.Error())
143+
data.Events = append(data.Events, event)
144+
}
145+
}
146+
147+
func evalMinor(fn func() error) {
148+
if err := fn(); err != nil {
149+
var event = createEvent(err)
150+
event["category"] = "MINOR"
151+
log.Error("MINOR:", err.Error())
152+
data.Events = append(data.Events, event)
153+
}
135154
}
136155

137156
func runChecks(cmd *cobra.Command, args []string) {
138157
log.Info("Running", viper.GetString("node.type"), "checks for OpenShift.")
139158

140-
var data = IntegrationData{
141-
Name: "ch.sbb.openshift-integration",
142-
ProtocolVersion: "1",
143-
IntegrationVersion: "1.0.0",
144-
Events: make([]EventData, 0),
145-
}
146-
147159
if viper.GetString("node.type") == "master" {
148160
if len(viper.GetString("etcd.ips")) == 0 || len(viper.GetString("router.ips")) == 0 {
149161
log.Fatal("Can't read service IPs from configuration file.")
@@ -158,75 +170,40 @@ func runChecks(cmd *cobra.Command, args []string) {
158170
// majors on storage
159171
if viper.GetString("node.type") == "storage" {
160172
log.Debug("Running major checks for storage.")
161-
if err := checks.CheckIfGlusterdIsRunning(); err != nil {
162-
data.Events = append(data.Events, createMajorEvent(err))
163-
}
164-
165-
if err := checks.CheckMountPointSizes(90); err != nil {
166-
data.Events = append(data.Events, createMajorEvent(err))
167-
}
168173

169-
if err := checks.CheckLVPoolSizes(90); err != nil {
170-
data.Events = append(data.Events, createMajorEvent(err))
171-
}
172-
173-
if err := checks.CheckVGSizes(5); err != nil {
174-
data.Events = append(data.Events, createMajorEvent(err))
175-
}
174+
evalMajor(func() error { return checks.CheckIfGlusterdIsRunning() })
175+
evalMajor(func() error { return checks.CheckMountPointSizes(90) })
176+
evalMajor(func() error { return checks.CheckLVPoolSizes(90) })
177+
evalMajor(func() error { return checks.CheckVGSizes(5) })
176178
}
177179

178180
// majors on node
179181
if viper.GetString("node.type") == "node" {
180182
log.Debug("Running major checks for node.")
181183

182-
if err := checks.CheckDockerPool(90); err != nil {
183-
data.Events = append(data.Events, createMajorEvent(err))
184-
}
185-
186-
if err := checks.CheckDnsNslookupOnKubernetes(); err != nil {
187-
data.Events = append(data.Events, createMajorEvent(err))
188-
}
189-
190-
if err := checks.CheckDnsServiceNode(); err != nil {
191-
data.Events = append(data.Events, createMajorEvent(err))
192-
}
184+
evalMajor(func() error { return checks.CheckDockerPool(90) })
185+
evalMajor(func() error { return checks.CheckDnsNslookupOnKubernetes() })
186+
evalMajor(func() error { return checks.CheckDnsServiceNode() })
193187
}
194188

195189
// majors on master
196190
if viper.GetString("node.type") == "master" {
197191
log.Debug("Running major checks for master.")
198192

199-
if err := checks.CheckOcGetNodes(); err != nil {
200-
data.Events = append(data.Events, createMajorEvent(err))
201-
}
202-
203-
if err := checks.CheckEtcdHealth(viper.GetString("etcd.ips"), ""); err != nil {
204-
data.Events = append(data.Events, createMajorEvent(err))
205-
}
193+
evalMajor(func() error { return checks.CheckOcGetNodes() })
194+
evalMajor(func() error { return checks.CheckEtcdHealth(viper.GetString("etcd.ips"), "") })
206195

207196
if len(viper.GetString("registry.ip")) > 0 {
208-
if err := checks.CheckRegistryHealth(viper.GetString("registry.ip")); err != nil {
209-
data.Events = append(data.Events, createMajorEvent(err))
210-
}
197+
evalMajor(func() error { return checks.CheckRegistryHealth(viper.GetString("registry.ip")) })
211198
}
212199

213200
for _, rip := range strings.Split(viper.GetString("router.ips"), ",") {
214-
if err := checks.CheckRouterHealth(rip); err != nil {
215-
data.Events = append(data.Events, createMajorEvent(err))
216-
}
217-
}
218-
219-
if err := checks.CheckMasterApis("https://localhost:8443/api"); err != nil {
220-
data.Events = append(data.Events, createMajorEvent(err))
201+
evalMajor(func() error { return checks.CheckRouterHealth(rip) })
221202
}
222203

223-
if err := checks.CheckDnsNslookupOnKubernetes(); err != nil {
224-
data.Events = append(data.Events, createMajorEvent(err))
225-
}
226-
227-
if err := checks.CheckDnsServiceNode(); err != nil {
228-
data.Events = append(data.Events, createMajorEvent(err))
229-
}
204+
evalMajor(func() error { return checks.CheckMasterApis("https://localhost:8443/api") })
205+
evalMajor(func() error { return checks.CheckDnsNslookupOnKubernetes() })
206+
evalMajor(func() error { return checks.CheckDnsServiceNode() })
230207
}
231208

232209
/////////////////
@@ -237,67 +214,39 @@ func runChecks(cmd *cobra.Command, args []string) {
237214
// minors on storage
238215
if viper.GetString("node.type") == "storage" {
239216
log.Debug("Running minor checks for storage.")
240-
if err := checks.CheckOpenFileCount(); err != nil {
241-
data.Events = append(data.Events, createMinorEvent(err))
242-
}
243217

244-
if err := checks.CheckMountPointSizes(85); err != nil {
245-
data.Events = append(data.Events, createMinorEvent(err))
246-
}
247-
248-
if err := checks.CheckLVPoolSizes(80); err != nil {
249-
data.Events = append(data.Events, createMinorEvent(err))
250-
}
251-
252-
if err := checks.CheckVGSizes(10); err != nil {
253-
data.Events = append(data.Events, createMinorEvent(err))
254-
}
218+
evalMinor(func() error { return checks.CheckOpenFileCount() })
219+
evalMinor(func() error { return checks.CheckMountPointSizes(85) })
220+
evalMinor(func() error { return checks.CheckLVPoolSizes(80) })
221+
evalMinor(func() error { return checks.CheckVGSizes(10) })
255222
}
256223

257224
// minors on node
258225
if viper.GetString("node.type") == "node" {
259226
log.Debug("Running minor checks for node.")
260-
if err := checks.CheckDockerPool(80); err != nil {
261-
data.Events = append(data.Events, createMinorEvent(err))
262-
}
263227

264-
if err := checks.CheckHttpService(false); err != nil {
265-
data.Events = append(data.Events, createMinorEvent(err))
266-
}
228+
evalMinor(func() error { return checks.CheckDockerPool(80) })
229+
evalMinor(func() error { return checks.CheckHttpService(false) })
267230
}
268231

269232
// minors on master
270233
if viper.GetString("node.type") == "master" {
271234
log.Debug("Running minor checks for master.")
272-
if err := checks.CheckExternalSystem(viper.GetString("externalSystemUrl")); err != nil {
273-
data.Events = append(data.Events, createMinorEvent(err))
274-
}
275-
276-
if err := checks.CheckHawcularHealth(viper.GetString("hawcularIP")); err != nil {
277-
data.Events = append(data.Events, createMinorEvent(err))
278-
}
279-
280-
if err := checks.CheckRouterRestartCount(); err != nil {
281-
data.Events = append(data.Events, createMinorEvent(err))
282-
}
283235

284-
if err := checks.CheckLimitsAndQuotas(viper.GetInt("projectsWithoutLimits")); err != nil {
285-
data.Events = append(data.Events, createMinorEvent(err))
286-
}
287-
288-
if err := checks.CheckHttpService(false); err != nil {
289-
data.Events = append(data.Events, createMinorEvent(err))
290-
}
291-
292-
if err := checks.CheckLoggingRestartsCount(); err != nil {
293-
data.Events = append(data.Events, createMinorEvent(err))
294-
}
236+
evalMinor(func() error { return checks.CheckExternalSystem(viper.GetString("externalSystemUrl")) })
237+
evalMinor(func() error { return checks.CheckHawcularHealth(viper.GetString("hawcularIP")) })
238+
evalMinor(func() error { return checks.CheckRouterRestartCount() })
239+
evalMinor(func() error { return checks.CheckLimitsAndQuotas(viper.GetInt("projectsWithoutLimits")) })
240+
evalMinor(func() error { return checks.CheckHttpService(false) })
241+
evalMinor(func() error { return checks.CheckLoggingRestartsCount() })
295242
}
296243

297244
log.Debug("Running minor checks for all node types.")
298245
// minor for all server types
299-
if err := checks.CheckNtpd(); err != nil {
300-
data.Events = append(data.Events, createMinorEvent(err))
246+
evalMinor(func() error { return checks.CheckNtpd() })
247+
248+
if len(data.Events) == 0 {
249+
data.Events = append(data.Events, createHealthyEvent(errors.New("System healthy, nothing to do.")));
301250
}
302251

303252
OutputJSON(data)

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright © 2017 Maciej Raciborski <[email protected]>
1+
// Copyright © 2017 SBB Cloud Stack Team
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.

0 commit comments

Comments
 (0)