datasette-scale-to-zero 作者 simonw

星标

README 源代码

datasette-scale-to-zero

PyPI Changelog Tests License

如果在指定时间段内未收到流量,则退出 Datasette

一些托管服务提供商,例如 Fly,提供了按需扩容至零(scale to zero)机制,服务器可以关闭,并在新流量到达时自动启动。

这个插件可以配置 Datasette 在收到最后一个请求后 X 分钟(或秒、小时)退出。它也可以使 Datasette 服务器在配置的最大运行时间后退出,无论是否正在接收流量。

安装

将此插件安装在与 Datasette 相同的环境中。

datasette install datasette-scale-to-zero

配置

此插件仅在配置后生效。

将以下内容添加到您的 metadata.jsonmetadata.yml 配置文件中

{
    "plugins": {
        "datasette-scale-to-zero": {
            "duration": "10m"
        }
    }
}

这将导致 Datasette 在 10 分钟内未收到任何 HTTP 流量时退出。

您可以使用后缀设置此值:m 表示分钟,h 表示小时,s 表示秒。

要使 Datasette 在服务器运行时间超过指定时间后退出,请使用 "max_age"

{
    "plugins": {
        "datasette-scale-to-zero": {
            "max_age": "10h"
        }
    }
}

此示例将在 Datasette 服务器运行时间超过十小时后退出。

您可以在同一个配置文件中同时使用 "duration""max_age"

{
    "plugins": {
        "datasette-scale-to-zero": {
            "max_age": "10h",
            "duration": "5m"
        }
    }
}

此示例将在五分钟内未收到流量时退出,或者在服务器运行时间达到十小时后退出。

配置关机 HTTP 消息

您还可以配置插件在退出前向某个地方发送 HTTP 请求,使用 "shutdown_url" 选项

{
    "plugins": {
        "datasette-scale-to-zero": {
            "duration": "10m",
            "shutdown_url": "https://example.com/shutdown"
        }
    }
}

您可以使用 "shutdown_headers" 为 GET 请求添加额外的头信息,例如发送 Authorization 头。

{
    "plugins": {
        "datasette-scale-to-zero": {
            "duration": "10m",
            "shutdown_url": "https://example.com/shutdown",
            "shutdown_headers": {
                "Authorization": "Bearer secret"
            }
        }
    }
}

使用 "shutdown_method" 设置不同的 HTTP 方法,例如用于 POST。您还可以设置 shutdown_body 来指定请求体。

{
    "plugins": {
        "datasette-scale-to-zero": {
            "duration": "10m",
            "shutdown_url": "https://example.com/shutdown",
            "shutdown_method": "POST",
            "shutdown_headers": {
                "Authorization": "Bearer secret",
                "Content-Type": "application/json"
            },
            "shutdown_body": "{\"message\": \"shutting down\"}"
        }
    }
}

开发

要在本地设置此插件,请先检出代码。然后创建一个新的虚拟环境

cd datasette-scale-to-zero
python3 -m venv venv
source venv/bin/activate

现在安装依赖项和测试依赖项

pip install -e '.[test]'

运行测试

pytest