async stop() {
        try {
            // If we never fully started, there's nothing to stop
            if (this.httpServer && this.httpServer.listening) {
                // Time how long it takes to close all in-flight requests
                const startTime = Date.now();

                // We stop the server first so that no new long running requests or processes can be started
                await this._stopServer();

                const shutdownDuration = Date.now() - startTime;
                if (shutdownDuration > 15000) {
                    metrics.metric('long-shutdown', shutdownDuration);
                }
            }
            // Do all of the cleanup tasks
            await this._cleanup();
        } finally {
            // Wrap up
            this.httpServer = null;
            this._logStopMessages();
        }
    }
### Stop
Stops the server & handles cleanup, but does not exit the process
Used in tests for quick start/stop actions
Called by shutdown to handle server stop and cleanup before exiting
@returns {Promise<any>} Resolves once Ghost has stopped