Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find out if an app is currently stopped with CloudFoundry in Swisscom Cloud? Header X-Cf-Routererror reliable?

We would like to add a maintenance page to our front-end which should appear when the back-end is currently unavailable (e.g. stopped or deploying). When the application is not running, the following message is displayed together with a 404 status code:

404 Not Found: Requested route ('name.scapp.io') does not exist.

Additionally, there is header present, when the application is stopped (and only then):

X-Cf-Routererror: unknown_route

Is this header reliably added if the application is not running? If this is the case, I can use this flag to display a maintenance page.


By the way: Wouldn't it make more sense to provide a 5xx status code if the application is not started/crashed, i.e. differ between stopped applications and wrong request routes? Catching a 503 error would be much easier, as it does not interfere with our business logic (404 is used inside the application).

like image 356
ssc-hrep3 Avatar asked Jan 27 '26 04:01

ssc-hrep3


2 Answers

Another option is to use a wildcard route.

https://docs.cloudfoundry.org/devguide/deploy-apps/routes-domains.html#create-an-http-route-with-wildcard-hostname

An application mapped to a wildcard route acts as a fallback app for route requests if the requested route does not exist.

Thus you can map a wildcard route to a static app that displays a maintenance page. Then if your app mapped to a specific route is down or unavailable the maintenance page will get displayed instead of the 404.

In regards to your question...

By the way: Wouldn't it make more sense to provide a 5xx status code if the application is not started/crashed, i.e. differ between stopped applications and wrong request routes? Catching a 503 error would be much easier, as it does not interfere with our business logic (404 is used inside the application).

The GoRouter maintains a list of routes for mapping incoming requests to applications. If your application is down then there is no route in the routing table, that's why you end up with a 404. If you think about it from the perspective of the GoRouter, it makes sense. There's no route, so it returns a 404 Not Found. For a 503 to make sense, the GoRouter would have to know about the app and know it's down or not responding.

I suppose you might be able to achieve that behavior if you used a wildcard route above, but instead of displaying a maintenance page just have it return an HTTP 503.

Hope that helps!

like image 123
Daniel Mikusa Avatar answered Jan 30 '26 04:01

Daniel Mikusa


The 404 Error you see is generated by CloudFoundrys routing tier and is maintained upstream.

Generally if you don't want to get such error messages you can use blue-green deployments. Here is a detailed description of it in the CF docs: https://docs.cloudfoundry.org/devguide/deploy-apps/blue-green.html

An other option is to add a routing service that implements this functionality for you. Have a look at the CF docs for this: https://docs.cloudfoundry.org/services/route-services.html

like image 40
Lafunamor Avatar answered Jan 30 '26 03:01

Lafunamor



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!