Skip to content

Commit 671d8c2

Browse files
committed
chore: refactor healthcheck package to improve code readability and maintainability
1 parent 4b4ba8f commit 671d8c2

File tree

1 file changed

+129
-129
lines changed

1 file changed

+129
-129
lines changed

healthcheck.go

+129-129
Original file line numberDiff line numberDiff line change
@@ -1,160 +1,160 @@
11
package healthcheck
22

33
import (
4-
"encoding/json"
5-
"fmt"
6-
"io/ioutil"
7-
"net/http"
8-
"os"
9-
"strings"
10-
11-
"github.com/go-ping/ping"
4+
"encoding/json"
5+
"fmt"
6+
"io/ioutil"
7+
"net/http"
8+
"os"
9+
"strings"
10+
11+
"github.com/go-ping/ping"
1212
)
1313

1414
// HTTP the request as done by routing
1515
func HTTP(w http.ResponseWriter, r *http.Request) {
16-
hc := HealthCheck{
17-
Name: os.Getenv("SERVICE_NAME"),
18-
URL: r.Host,
19-
Dependencies: os.Getenv("SERVICE_DEPENDENCIES"),
20-
}
21-
22-
health, err := hc.Check()
23-
if err != nil {
24-
w.Header().Set("Content-Type", "application/health+json")
25-
j, _ := json.Marshal(Health{
26-
Status: HealthFail,
27-
})
28-
w.WriteHeader(http.StatusOK)
29-
_, fErr := w.Write(j)
30-
if fErr != nil {
31-
fmt.Printf("write response: %v\n", fErr)
32-
}
33-
fmt.Printf("http health failed: %+v\n", err)
34-
return
35-
}
36-
37-
j, _ := json.Marshal(health)
38-
w.Header().Set("Content-Type", "application/health+json")
39-
_, fErr := w.Write(j)
40-
if fErr != nil {
41-
fmt.Printf("write response: %v\n", fErr)
42-
}
16+
hc := HealthCheck{
17+
Name: os.Getenv("SERVICE_NAME"),
18+
URL: r.Host,
19+
Dependencies: os.Getenv("SERVICE_DEPENDENCIES"),
20+
}
21+
22+
health, err := hc.Check()
23+
if err != nil {
24+
w.Header().Set("Content-Type", "application/health+json")
25+
j, _ := json.Marshal(Health{
26+
Status: HealthFail,
27+
})
28+
w.WriteHeader(http.StatusOK)
29+
_, fErr := w.Write(j)
30+
if fErr != nil {
31+
fmt.Printf("write response: %v\n", fErr)
32+
}
33+
fmt.Printf("http health failed: %+v\n", err)
34+
return
35+
}
36+
37+
j, _ := json.Marshal(health)
38+
w.Header().Set("Content-Type", "application/health+json")
39+
_, fErr := w.Write(j)
40+
if fErr != nil {
41+
fmt.Printf("write response: %v\n", fErr)
42+
}
4343
}
4444

4545
// Check do the health check itself
4646
func (h HealthCheck) Check() (Health, error) {
47-
health := Health{
48-
Name: h.Name,
49-
URL: h.URL,
50-
Status: HealthFail,
51-
Dependencies: nil,
52-
}
53-
54-
health.Status = HealthPass
55-
if h.Dependencies != "" {
56-
deps, err := h.getDependencies()
57-
if err != nil {
58-
return health, err
59-
}
60-
61-
checkedDeps := []Health{}
62-
for _, dep := range deps.Dependencies {
63-
d, err := dep.check()
64-
if err != nil {
65-
return health, err
66-
}
67-
checkedDeps = append(checkedDeps, d)
68-
}
69-
70-
health.Dependencies = checkedDeps
71-
}
72-
73-
// now set to failed if a dependency failed
74-
for _, dep := range health.Dependencies {
75-
if dep.Status == HealthFail {
76-
health.Status = HealthFail
77-
}
78-
}
79-
80-
return health, nil
47+
health := Health{
48+
Name: h.Name,
49+
URL: h.URL,
50+
Status: HealthFail,
51+
Dependencies: nil,
52+
}
53+
54+
health.Status = HealthPass
55+
if h.Dependencies != "" {
56+
deps, err := h.getDependencies()
57+
if err != nil {
58+
return health, err
59+
}
60+
61+
checkedDeps := []Health{}
62+
for _, dep := range deps.Dependencies {
63+
d, err := dep.check()
64+
if err != nil {
65+
return health, err
66+
}
67+
checkedDeps = append(checkedDeps, d)
68+
}
69+
70+
health.Dependencies = checkedDeps
71+
}
72+
73+
// now set to failed if a dependency failed
74+
for _, dep := range health.Dependencies {
75+
if dep.Status == HealthFail {
76+
health.Status = HealthFail
77+
}
78+
}
79+
80+
return health, nil
8181
}
8282

8383
// getDependencies get the list of dependencies
8484
func (h HealthCheck) getDependencies() (Dependencies, error) {
85-
deps := Dependencies{}
86-
err := json.Unmarshal([]byte(h.Dependencies), &deps)
87-
if err != nil {
88-
return deps, err
89-
}
85+
deps := Dependencies{}
86+
err := json.Unmarshal([]byte(h.Dependencies), &deps)
87+
if err != nil {
88+
return deps, err
89+
}
9090

91-
return deps, nil
91+
return deps, nil
9292
}
9393

9494
// check the dependency status
9595
func (d Dependency) check() (Health, error) {
96-
if strings.Contains(d.URL, "$") {
97-
d.URL = os.Getenv(d.URL[1:])
98-
}
96+
if strings.Contains(d.URL, "$") {
97+
d.URL = os.Getenv(d.URL[1:])
98+
}
9999

100-
// Ping check
101-
if d.Ping {
102-
return d.ping()
103-
}
100+
// Ping check
101+
if d.Ping {
102+
return d.ping()
103+
}
104104

105-
// Standard check
106-
return d.curl()
105+
// Standard check
106+
return d.curl()
107107
}
108108

109109
// ping checks
110110
func (d Dependency) ping() (Health, error) {
111-
h := Health{
112-
Name: d.Name,
113-
URL: d.URL,
114-
Status: HealthFail,
115-
}
116-
117-
pinger, err := ping.NewPinger(h.URL)
118-
if err != nil {
119-
return h, err
120-
}
121-
122-
pinger.Count = 3
123-
if err := pinger.Run(); err != nil {
124-
return h, err
125-
}
126-
127-
h.Status = HealthPass
128-
return h, nil
111+
h := Health{
112+
Name: d.Name,
113+
URL: d.URL,
114+
Status: HealthFail,
115+
}
116+
117+
pinger, err := ping.NewPinger(h.URL)
118+
if err != nil {
119+
return h, err
120+
}
121+
122+
pinger.Count = 3
123+
if err := pinger.Run(); err != nil {
124+
return h, err
125+
}
126+
127+
h.Status = HealthPass
128+
return h, nil
129129
}
130130

131131
// curl checks
132132
func (d Dependency) curl() (Health, error) {
133-
h := Health{}
134-
p, err := http.Get(d.URL)
135-
if err != nil {
136-
h = Health{
137-
URL: d.URL,
138-
Status: HealthFail,
139-
}
140-
return h, err
141-
}
142-
143-
defer func() {
144-
_ = p.Body.Close()
145-
}()
146-
147-
b, err := ioutil.ReadAll(p.Body)
148-
if err != nil {
149-
h = Health{
150-
URL: d.URL,
151-
Status: HealthFail,
152-
}
153-
return h, err
154-
}
155-
jerr := json.Unmarshal(b, &h)
156-
if jerr != nil {
157-
return h, jerr
158-
}
159-
return h, nil
133+
h := Health{}
134+
p, err := http.Get(d.URL)
135+
if err != nil {
136+
h = Health{
137+
URL: d.URL,
138+
Status: HealthFail,
139+
}
140+
return h, err
141+
}
142+
143+
defer func() {
144+
_ = p.Body.Close()
145+
}()
146+
147+
b, err := ioutil.ReadAll(p.Body)
148+
if err != nil {
149+
h = Health{
150+
URL: d.URL,
151+
Status: HealthFail,
152+
}
153+
return h, err
154+
}
155+
jerr := json.Unmarshal(b, &h)
156+
if jerr != nil {
157+
return h, jerr
158+
}
159+
return h, nil
160160
}

0 commit comments

Comments
 (0)