diff --git a/static/js/app.js b/static/js/app.js
index dfdb9a879..f5c612c5f 100644
--- a/static/js/app.js
+++ b/static/js/app.js
@@ -441,6 +441,29 @@ quayApp = angular.module('quay', quayDependencies, function($provide, cfpLoading
var pingService = {};
var pingCache = {};
+ var invokeCallback = function($scope, pings, callback) {
+ if (pings[0] == -1) {
+ setTimeout(function() {
+ $scope.$apply(function() {
+ callback(-1, false, -1);
+ });
+ }, 0);
+ return;
+ }
+
+ var sum = 0;
+ for (var i = 0; i < pings.length; ++i) {
+ sum += pings[i];
+ }
+
+ // Report the average ping.
+ setTimeout(function() {
+ $scope.$apply(function() {
+ callback(Math.floor(sum / pings.length), true, pings.length);
+ });
+ }, 0);
+ };
+
var reportPingResult = function($scope, url, ping, callback) {
// Lookup the cached ping data, if any.
var cached = pingCache[url];
@@ -453,28 +476,15 @@ quayApp = angular.module('quay', quayDependencies, function($provide, cfpLoading
// If an error occurred, report it and done.
if (ping < 0) {
cached['pings'] = [-1];
- setTimeout(function() {
- $scope.$apply(function() {
- callback(-1, false, -1);
- });
- }, 0);
+ invokeCallback($scope, pings, callback);
return;
}
// Otherwise, add the current ping and determine the average.
cached['pings'].push(ping);
- var sum = 0;
- for (var i = 0; i < cached['pings'].length; ++i) {
- sum += cached['pings'][i];
- }
-
- // Report the average ping.
- setTimeout(function() {
- $scope.$apply(function() {
- callback(Math.floor(sum / cached['pings'].length), true, cached['pings'].length);
- });
- }, 0);
+ // Invoke the callback.
+ invokeCallback($scope, cached['pings'], callback);
// Schedule another check if we've done less than three.
if (cached['pings'].length < 3) {
@@ -510,12 +520,7 @@ quayApp = angular.module('quay', quayDependencies, function($provide, cfpLoading
pingService.pingUrl = function($scope, url, callback) {
if (pingCache[url]) {
- cached = pingCache[url];
- setTimeout(function() {
- $scope.$apply(function() {
- callback(cached.result, cached.success);
- });
- }, 0);
+ invokeCallback($scope, pingCache[url]['pings'], callback);
return;
}
@@ -5401,7 +5406,9 @@ quayApp.directive('locationView', function () {
$scope.getLocationTooltip = function(location, ping) {
var tip = $scope.getLocationTitle(location) + '
';
- if (ping < 0) {
+ if (ping == null) {
+ tip += '(Loading)';
+ } else if (ping < 0) {
tip += '
Note: Could not contact server';
} else {
tip += 'Estimated Ping: ' + (ping ? ping + 'ms' : '(Loading)');