owncloud / web

:dragon_face: Next generation frontend for ownCloud Infinite Scale
https://owncloud.dev/clients/web/
GNU Affero General Public License v3.0
448 stars 157 forks source link

maintenance mode #10260

Open wkloucek opened 10 months ago

wkloucek commented 10 months ago

Is your feature request related to a problem? Please describe.

For a SaaS project we're putting oCIS (backend) into the maintenance mode by answering every request with HTTP 503 and a html maintenance page as body.

In NGINX this could look like this:

        location / {
            return 503;
        }
        error_page 503 @maintenance;
        location @maintenance {
              rewrite ^(.*)$ /index.html break;
        }

Currently oC Web doesn't gracefully handle these 503 responses on every API endpoint. It takes the user a reload of the website to get the maintenance page served. It also takes the user a reload to get back from the maintenance page to oC Web.

Describe the solution you'd like

Have a maintenance mode build into oC Web. If it receives HTTP 503 responses from the backend, it should go into that mode. It could periodically retry and automatically go back to normal mode if maintenance mode is over.

We no longer would have to serve a project specific maintenance page, but could instead just answer all API requests with 503.

It may be nice to load some info-string to display to the user from a well-known endpoint (to be defined I guess)

Describe alternatives you've considered

Hacks / Workarounds, which don't deserve to be documented in a product's issue tracker.

Additional context

dschmidt commented 10 months ago

If we implement this, we should only do that when a user triggers an action, not on any background tasks. There's little that's more annoying than your page suddenly going into maintenance mode without any interaction

wkloucek commented 10 months ago

There's little that's more annoying than your page suddenly going into maintenance mode without any interaction

The user can't influence this. The backend is in maintenance mode when a admin decides it to be in maintenance mode. Nothing a user can do about it.

kulmann commented 10 months ago

Agreeing with @dschmidt that this can't happen as a "nope, sorry, maintenance" full view port page... imagine you're in a text editor (maybe even without auto save) and your content just goes away without a chance to get it back, just because web discovered that the backend is in maintenance mode. IMO this should be more like a prominent banner, so that you have a chance to copy your content elsewhere (local text file). Needs some more thought.

wkloucek commented 10 months ago

that this can't happen as a "nope, sorry, maintenance" full view port page

Now I get it. That makes sense

Needs some more thought.

That would be great! You already brought some cases that I didn't think of and also are definitively not covered with the current project based approach.

For a SaaS, you generally have the problem that you can't inform every user (because you don't have contact details or there are too many). So when the maintenance mode happens, it should be as non-disruptive to users as possible. This has many aspects like you already explained.