Skip to content

Commit 26b4240

Browse files
Merge pull request #7 from starkandwayne/App-startup-healthcheck
App startup healthcheck
2 parents 6d5c369 + ffc95ec commit 26b4240

File tree

3 files changed

+76
-15
lines changed

3 files changed

+76
-15
lines changed

broker/create_registry_server_instance.go

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,23 @@ func (broker *SCSBroker) createRegistryServerInstance(serviceId string, instance
136136
return "", errors.New("no domains found for this instance")
137137
}
138138

139+
route, _, err := cfClient.CreateRoute(ccv3.Route{
140+
SpaceGUID: spaceGUID,
141+
DomainGUID: domains[0].GUID,
142+
Host: appName,
143+
})
144+
if err != nil {
145+
return "", err
146+
}
147+
148+
_, err = cfClient.MapRoute(route.GUID, app.GUID)
149+
150+
if err != nil {
151+
return "", err
152+
}
153+
154+
time.Sleep(time.Second)
155+
139156
broker.Logger.Info("Starting Application")
140157
app, _, err = cfClient.UpdateApplicationStart(app.GUID)
141158
if err != nil {
@@ -182,21 +199,6 @@ func (broker *SCSBroker) createRegistryServerInstance(serviceId string, instance
182199
return "", err
183200
}
184201

185-
route, _, err := cfClient.CreateRoute(ccv3.Route{
186-
SpaceGUID: spaceGUID,
187-
DomainGUID: domains[0].GUID,
188-
Host: appName,
189-
})
190-
if err != nil {
191-
return "", err
192-
}
193-
194-
_, err = cfClient.MapRoute(route.GUID, app.GUID)
195-
196-
if err != nil {
197-
return "", err
198-
}
199-
200202
broker.Logger.Info("Starting Application")
201203
app, _, err = cfClient.UpdateApplicationStart(app.GUID)
202204
if err != nil {
@@ -270,5 +272,19 @@ func (broker *SCSBroker) createRegistryServerInstance(serviceId string, instance
270272

271273
broker.Logger.Info(route.URL)
272274

275+
sucessfulStart, err := broker.MonitorApplicationStartup(cfClient, community, broker.Logger, app.GUID)
276+
if err != nil || sucessfulStart == false {
277+
broker.Logger.Info("Crashed application retarting...")
278+
app, _, err = cfClient.UpdateApplicationStart(app.GUID)
279+
if err != nil {
280+
broker.Logger.Info("Application Start Failed, Trying restart")
281+
app, _, err = cfClient.UpdateApplicationRestart(app.GUID)
282+
if err != nil {
283+
broker.Logger.Info("Application Start failed")
284+
return "", err
285+
}
286+
}
287+
}
288+
273289
return route.URL, nil
274290
}

broker/monitor_application.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package broker
2+
3+
import (
4+
"time"
5+
6+
"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
7+
"code.cloudfoundry.org/lager"
8+
"github.com/cloudfoundry-community/go-cfclient"
9+
)
10+
11+
func (broker *SCSBroker) MonitorApplicationStartup(cfClient *ccv3.Client, community *cfclient.Client, logger lager.Logger, appGUID string) (bool, error) {
12+
13+
waittime := 30
14+
timepassed := 0
15+
16+
for timepassed < waittime {
17+
time.Sleep(time.Second)
18+
timepassed += 1
19+
successStart, err := broker.checkApplicationStatus(cfClient, community, logger, appGUID)
20+
if err != nil {
21+
return false, err
22+
}
23+
if !successStart {
24+
return successStart, err
25+
}
26+
}
27+
28+
return true, nil
29+
30+
}
31+
32+
func (broker *SCSBroker) checkApplicationStatus(cfClient *ccv3.Client, community *cfclient.Client, logger lager.Logger, appGUID string) (bool, error) {
33+
stats, err := getProcessStatsByAppAndType(cfClient, community, broker.Logger, appGUID, "web")
34+
if err != nil {
35+
return false, err
36+
}
37+
38+
for _, stat := range stats {
39+
if stat.State == "CRASHED" {
40+
return false, err
41+
}
42+
}
43+
44+
return true, nil
45+
}

scs-broker

14.1 MB
Binary file not shown.

0 commit comments

Comments
 (0)