From ef9be2a5aca04a3e60b81ff944c8681c076eab80 Mon Sep 17 00:00:00 2001 From: "Jonathan Leibiusky @xetorthio" Date: Thu, 7 Sep 2017 17:05:05 -0300 Subject: [PATCH] Add support for out of capacity error message --- handlers/new_instance.go | 6 ++++++ provisioner/provisioner.go | 7 +++++++ www/assets/app.js | 2 ++ 3 files changed, 15 insertions(+) diff --git a/handlers/new_instance.go b/handlers/new_instance.go index 545710f..75fe7cc 100644 --- a/handlers/new_instance.go +++ b/handlers/new_instance.go @@ -2,10 +2,12 @@ package handlers import ( "encoding/json" + "fmt" "log" "net/http" "github.com/gorilla/mux" + "github.com/play-with-docker/play-with-docker/provisioner" "github.com/play-with-docker/play-with-docker/pwd" "github.com/play-with-docker/play-with-docker/pwd/types" ) @@ -25,6 +27,10 @@ func NewInstance(rw http.ResponseWriter, req *http.Request) { if pwd.SessionComplete(err) { rw.WriteHeader(http.StatusConflict) return + } else if provisioner.OutOfCapacity(err) { + rw.WriteHeader(http.StatusServiceUnavailable) + fmt.Fprintln(rw, `{"error": "out_of_capacity"}`) + return } log.Println(err) rw.WriteHeader(http.StatusInternalServerError) diff --git a/provisioner/provisioner.go b/provisioner/provisioner.go index cabd142..3e1e161 100644 --- a/provisioner/provisioner.go +++ b/provisioner/provisioner.go @@ -1,12 +1,19 @@ package provisioner import ( + "errors" "io" "net" "github.com/play-with-docker/play-with-docker/pwd/types" ) +var OutOfCapacityError = errors.New("OutOfCapacity") + +func OutOfCapacity(e error) bool { + return e == OutOfCapacityError +} + type InstanceProvisionerApi interface { InstanceNew(session *types.Session, conf types.InstanceConfig) (*types.Instance, error) InstanceDelete(session *types.Session, instance *types.Instance) error diff --git a/www/assets/app.js b/www/assets/app.js index 553c7b2..53a8694 100644 --- a/www/assets/app.js +++ b/www/assets/app.js @@ -127,6 +127,8 @@ }, function(response) { if (response.status == 409) { $scope.showAlert('Max instances reached', 'Maximum number of instances reached') + } else if (response.status == 503 && response.data.error == 'out_of_capacity') { + $scope.showAlert('Out Of Capacity', 'We are really sorry. But we are currently out of capacity and cannot create new instances. Please try again later.') } }).finally(function() { updateNewInstanceBtnState(false);