1
1
const fs = require ( 'fs' ) ;
2
- var fasquest = require ( 'fasquest' ) ;
3
- const client = {
4
- https : require ( 'https' ) ,
5
- http : require ( 'http' )
6
- } ;
7
-
8
- fasquest . agent = {
9
- http : new client . http . Agent ( {
10
- keepAlive : false
11
- } ) ,
12
- https : new client . https . Agent ( {
13
- keepAlive : false
14
- } )
15
- } ;
16
2
17
3
const Config = require ( './config.js' ) ;
18
4
var config = new Config ( ) ;
19
5
const Alerts = require ( './alerts.js' ) ;
20
6
21
7
class HealthCheck {
22
8
constructor ( stats , nbars ) {
9
+ this . checkers = { } ;
23
10
this . services = { } ;
24
11
this . alerters = { } ;
25
12
this . stats = stats ;
26
13
this . alerts = new Alerts ( stats , config , nbars ) ;
27
-
14
+ var checkersKeys = Object . keys ( config . checkers ) ;
28
15
var servicesKeys = Object . keys ( config . services ) ;
29
16
17
+ for ( var i = 0 ; i < checkersKeys . length ; i ++ ) {
18
+ var checker = {
19
+ ...config . getChecker ( checkersKeys [ i ] )
20
+ } ;
21
+
22
+ if ( checkersKeys [ i ] == 'request' ) {
23
+ this . checkers [ checkersKeys [ i ] ] = {
24
+ mod : require ( './checkers/request' ) ,
25
+ settings : checker ,
26
+ name : checkersKeys [ i ]
27
+ } ;
28
+ } else {
29
+ try {
30
+ this . checkers [ checkersKeys [ i ] ] = {
31
+ mod : require ( checker . name ) ,
32
+ settings : checker ,
33
+ name : checkersKeys [ i ]
34
+ } ;
35
+ } catch ( e ) {
36
+ console . error ( `Failed to load ${ checkersKeys [ i ] } !` ) ;
37
+ process . exit ( ) ;
38
+ }
39
+ }
40
+ }
41
+
30
42
for ( var i = 0 ; i < servicesKeys . length ; i ++ ) {
31
- this . startService ( servicesKeys [ i ] , {
43
+ var service = {
32
44
...config . getService ( servicesKeys [ i ] )
33
- } ) ;
45
+ } ;
46
+
47
+ this . startService ( servicesKeys [ i ] , service ) ;
34
48
}
35
49
}
36
50
@@ -94,13 +108,13 @@ class HealthCheck {
94
108
return false ;
95
109
}
96
110
97
- startService ( name , service ) {
111
+ async startService ( name , service ) {
98
112
if ( ! this . services [ name ] ) {
99
113
console . log ( `Starting service ${ name } ...` ) ;
100
114
var nService = {
101
115
name,
102
116
enabled : true ,
103
- delete : false ,
117
+ checker : { } ,
104
118
config : {
105
119
...service ,
106
120
interval : Math . round ( ( service . interval || 5 ) * 1000 ) , // default 5 seconds
@@ -119,23 +133,22 @@ class HealthCheck {
119
133
}
120
134
}
121
135
} ;
122
-
123
- nService . config . request . method = nService . config . request . method || 'GET' ;
124
- nService . config . request . timeout = Math . round (
125
- ( nService . config . request . timeout || 60 ) * 1000
126
- ) ;
127
- nService . config . request . resolveWithFullResponse = true ;
128
- nService . config . request . simple = false ;
129
-
130
- nService . config . expected_response_time =
131
- service . expected_response_time || nService . config . request . timeout ;
132
-
133
- if ( ! nService . config . request . headers ) {
134
- nService . config . request . headers = { } ;
136
+ var checker = this . checkers [ nService . config . checker . name ] ;
137
+ var checkerSettings = { } ;
138
+
139
+ if ( checker . settings ) {
140
+ checkerSettings = {
141
+ ...checker . settings ,
142
+ ...nService . config . checker . settings
143
+ } ;
144
+ } else {
145
+ checkerSettings = {
146
+ ...nService . config . checker . settings
147
+ } ;
135
148
}
136
- nService . config . request . headers [
137
- 'User-Agent'
138
- ] = `Sky-Puppy / ${ config . skypuppy . version } (Health Check Service)` ;
149
+
150
+ nService . checker = await checker . mod ( config , nService , checkerSettings ) ;
151
+ await nService . checker . init ( ) ;
139
152
140
153
this . services [ name ] = nService ;
141
154
@@ -157,11 +170,11 @@ class HealthCheck {
157
170
const oldStatus = service . status . up ;
158
171
159
172
try {
160
- var res = await fasquest . request ( service . config . request ) ;
173
+ var res = await service . checker . check ( ) ;
161
174
162
175
service . status . time =
163
176
Number ( process . hrtime . bigint ( ) - startTime ) / 1000000 ;
164
- service . status . code = res . statusCode ;
177
+ service . status . code = res . code ;
165
178
service . status . up = 1 ;
166
179
167
180
if ( service . config . expected_status != service . status . code ) {
@@ -193,7 +206,8 @@ class HealthCheck {
193
206
service . status . count . down ++ ;
194
207
service . status . up = - 1 ;
195
208
service . status . code = 0 ;
196
- console . log ( service . name , e . err . message ) ;
209
+
210
+ console . log ( service . name , e . message ) ;
197
211
}
198
212
199
213
if ( service . status . last_status == null ) {
0 commit comments