Skip to main content

/containers

The /containers sub-application is designed so that 

Apps not recently used are stopped

    periodically, the apps (urls) listed in config/apps.ini are checked for usage if the app URL is not shown in the logs within the last idleTime minutes AND the app containers are running, each container is stopped
      if the app shows any activity within the configured idleTime window, it is logged and the next app is checked if the app shows no activity within the configured idleTime window, it is logged and then each app container is stopped

      Applications are checked at a period designated by the config option auto_refresh in config/apps.ini however a manual check can be run to identify any apps that can be suspended, by either

        opening https://containers.notflix.pknw1.co.uk/containers/check?api=<api_key> opening https://containers.notflix.pknw1.co.uk/containers/suspend?api=<api_key>

        If an App is in the stopped state, each app container is started and then, once a confgiured grace period has passed, the user is redirected to the original URL

         

        Apps currently suspended but requested

        Any app thhat is requested via it's AP url (noted as the section header and withion section of config/apps.ini) will trigger the default HTTP 503 redirect to https://containers.notflix.pknw1./co.uk/containers/<app>

        This will attempt to restart each container for the app to funtion and will then, after a configurable delay, automatically redirect to the originally requested App URL - which should now have been 

          restarted from a stopped state re-registered its VIRTUAL_HOST with internal_proxy via the dockergen service monitoring /var/run/docker.sock paused on the informartion page to allow all services and dependencies to restart

           

          App Configuration

          The sub-app requires default settings and each application (app url) that is deasired to be configured in config/apps.ini

           Default Section
          api_key
          logs_folder
          auto_refresh
          redirect_url
          about fields
          Per Application Section
          [apps.notflix.pknw1.co.uk]
          monitoringStatus
          internal_proxy
          status_source
          containerNames
          monitorLog
          monitorUrl
          idleTime
          countdown
          currentStatus
          lastUpdate
          lastChecked
          @app.routes /containers
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
          
          @app.routes /containers
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
          
          @app.routes /containers/<app>/logs
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
          
          @app.routes /containers/about
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
          

           

          @app.routes /containers
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
          
          @app.routes /containers
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
          

           

          @app.routes /containers
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
          
          @app.routes /containers
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
          
          @app.routes /containers
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
          ./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
          

           

           

           

          Sub-Application Routes

          Unprotected Routes Description /containers
          /containers/about
          /containers/<app>/logs
          /containers/<status
          /containers/service/<app>
          Protected Routes Description /containers/check?api=<api_key>
          /containers/suspend?api=<api_key>
          /containers/cservice/stop/<app>?api=<api_key>