SERVER STATE SPECS

REQUIREMENTS


LATEST:

2020-04-05 - Decided to allow all non biz object routes that are required for running client like formcustom etc to be open unless server is fully closed
    ops forms may need all that stuff
    will not allow to update things like formcustom though, only to get them
    any biz objects not ops are fully locked down though, so no getting a widget if the server is closed or opsonly
    however you can get a widgetlist because picklist is open when opsonly as there is a probability that some things might be needed for ops

OLD STUFF:


Two parallel paths that can lead to serverstate affecting access to server:

Closed or Open States
    - If closed all routes are shut to all users with case by case exceptions:
        - OPS type user exceptions:
            - Login
            - View long running jobs because server may be closed due to long running process they need to view for status updates
            - they can fetch a license key or look at license current state (ONLY IF CLOSED DUE TO LICENSE ISSUE)
            - View METRICS and log files
     

- SYSTEM_LOCK 
    - An independent setting outside of the regular server state that allows RAVEN to internally lock itself when License or lockout related issues like non-payment
    - Acts as though the server was set to CLOSED so OPS can still go in but doesn't matter what state they set it to because the locked is a parallel in memory internal only setting
    - All non-ops routes will need to see if closed and server state returns closed both if serverstate is closed or if SYSTEM_LOCK


Some scenarios at the server require general users to be LOCKED OUT COMPLETELY but still grant limited access for operations administration, such as:
    - Biz changes that need all users out such as a re-org of client data or something else business related
    - Ops changes that need all users out such as upgrades, backup, restore, any mass data change such as import or export
    - Emergency security issues such as hacking attempt etc

Need a method to inform users that server *WILL* be going down within a set time frame, like 15 minutes (no need to get fancy and make it configurable)