如果在指定时间段内未收到流量,则退出 Datasette
一些托管服务提供商,例如 Fly,提供了按需扩容至零(scale to zero)机制,服务器可以关闭,并在新流量到达时自动启动。
这个插件可以配置 Datasette 在收到最后一个请求后 X 分钟(或秒、小时)退出。它也可以使 Datasette 服务器在配置的最大运行时间后退出,无论是否正在接收流量。
将此插件安装在与 Datasette 相同的环境中。
datasette install datasette-scale-to-zero
此插件仅在配置后生效。
将以下内容添加到您的 metadata.json
或 metadata.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 请求,使用 "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