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

Commit ee0a1fb

Browse files
committed
fixed performance issue with engine check
1 parent 9201848 commit ee0a1fb

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

controller/manager/manager.go

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ var (
4747
ErrWebhookKeyDoesNotExist = errors.New("webhook key does not exist")
4848
logger = logrus.New()
4949
store = sessions.NewCookieStore([]byte(storeKey))
50+
httpTimeout = time.Duration(1 * time.Second)
5051
)
5152

5253
type (
@@ -65,6 +66,10 @@ type (
6566
}
6667
)
6768

69+
func dialTimeout(network, addr string) (net.Conn, error) {
70+
return net.DialTimeout(network, addr, httpTimeout)
71+
}
72+
6873
func NewManager(addr string, database string, authKey string, version string, disableUsageInfo bool) (*Manager, error) {
6974
session, err := r.Connect(r.ConnectOpts{
7075
Address: addr,
@@ -169,9 +174,8 @@ func (m *Manager) init() []*shipyard.Engine {
169174
m.clusterManager = clusterManager
170175
// start extension health check
171176
go m.extensionHealthCheck()
172-
// FIXME: these have been temporarily disabled due to performance issues
173-
//// start engine check
174-
//go m.engineCheck()
177+
// start engine check
178+
go m.engineCheck()
175179
// anonymous usage info
176180
go m.usageReport()
177181
return engines
@@ -280,7 +284,10 @@ func (m *Manager) engineCheck() {
280284
for _, eng := range engs {
281285
health := &shipyard.Health{}
282286
start_time := time.Now()
283-
stat, _ := m.pingEngine(eng.Engine.Addr)
287+
stat, err := m.pingEngine(eng.Engine.Addr)
288+
if err != nil {
289+
logger.Warnf("unable to ping engine: %s", err)
290+
}
284291
if stat != 200 {
285292
health.Status = EngineHealthDown
286293
} else {
@@ -292,18 +299,27 @@ func (m *Manager) engineCheck() {
292299
version, err := eng.Engine.Version()
293300
if err != nil {
294301
logger.Warnf("unable to detect docker version: %s", err)
295-
return
296302
}
297-
eng.DockerVersion = version.Version
303+
ver := "unknown"
304+
if version != nil {
305+
ver = version.Version
306+
}
307+
eng.DockerVersion = ver
298308
m.SaveEngine(eng)
299309
}
300310
}
301311
}
302312
}
303313

304314
func (m *Manager) pingEngine(addr string) (status int, err error) {
315+
transport := http.Transport{
316+
Dial: dialTimeout,
317+
}
318+
client := http.Client{
319+
Transport: &transport,
320+
}
305321
uri := fmt.Sprintf("%s/_ping", addr)
306-
resp, err := http.Get(uri)
322+
resp, err := client.Get(uri)
307323
if err != nil {
308324
return 0, err
309325
} else {

controller/static/templates/engines.html

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,28 @@
1818
<table class="ui sortable table segment" ng-show="engines">
1919
<thead>
2020
<tr>
21-
<!--<th class="healthcolumn" ng-click="selectSortColumn('health.status')"><i class="medkit icon"></i></th>-->
21+
<th class="healthcolumn" ng-click="selectSortColumn('health.status')"><i class="medkit icon"></i></th>
2222
<th ng-class="sortedTableHeading('engine.id')" ng-click="selectSortColumn('engine.id')">Name</th>
2323
<th ng-class="sortedTableHeading('engine.cpus')" ng-click="selectSortColumn('engine.cpus')">CPUs</th>
2424
<th ng-class="sortedTableHeading('engine.memory')" ng-click="selectSortColumn('engine.memory')">Memory</th>
2525
<th ng-class="sortedTableHeading('engine.addr')" ng-click="selectSortColumn('engine.addr')">Addr</th>
2626
<th ng-class="sortedTableHeading('engine.labels')" ng-click="selectSortColumn('engine.labels')">Labels</th>
27-
<!--<th ng-class="sortedTableHeading('health.response_time')" ng-click="selectSortColumn('health.response_time')">Response Time (ms)</th>-->
27+
<th ng-class="sortedTableHeading('health.response_time')" ng-click="selectSortColumn('health.response_time')">Response Time (ms)</th>
2828
<th ng-class="sortedTableHeading('engine.docker_version')" ng-click="selectSortColumn('engine.docker_version')">Docker Version</th>
2929
</tr>
3030
</thead>
3131
<tbody>
3232
<tr ng-repeat="e in engines | orderBy:orderByField:reverseSort" ng-click="go();" class="rowlink">
33-
<!--
3433
<td class="healthcolumn">
35-
<span class="ui circular label ng-class:{'green': e.health.status = 'up', 'red': e.health.status == 'down'}" title="{{e.health.status}}" />-->
34+
<span class="ui circular label ng-class:{'green': e.health.status = 'up', 'red': e.health.status == 'down'}" title="{{e.health.status}}" />
3635
<td>
3736
<a href="/#/engines/{{e.id}}">{{e.engine.id}}</a>
3837
</td>
3938
<td>{{e.engine.cpus}}</td>
4039
<td>{{e.engine.memory}} MB</td>
4140
<td>{{e.engine.addr}}</td>
4241
<td>{{e.engine.labels.join(', ')}}</td>
43-
<!--<td>{{((e.health.response_time / 1000000) | number:1) || "-" }}</td>-->
42+
<td>{{((e.health.response_time / 1000000) | number:1) || "-" }}</td>
4443
<td>{{e.docker_version}}</td>
4544
</tr>
4645
</tbody>

0 commit comments

Comments
 (0)