使用api关闭Web应用程序dyno- Heroku

0s0u357o  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(124)

我正在尝试创建一个脚本来检查我的dyno是否处于空闲状态,如果是,则停止dyno/webapp。唯一的问题是,它似乎什么也不做,即使post请求将返回并被接受:

from email import header
import requests
import dotenv

heroku_api_token = "Bearer ENTERAPITOKENHERE"
headers = {
    'Accept': 'application/vnd.heroku+json; version=3',
    'Authorization': heroku_api_token
}
statecheck = requests.get("https://api.heroku.com/apps/rockosmodernapp/dynos/web.1",headers=headers).json()
print(statecheck)
if statecheck["state"] == "idle":
    print("shutting down web app worker")
elif statecheck["state"] == "up":
    print("app is still up, will check in 15 minutes to see if app is idle")

postheader = {
    "Content-Type": "application/json",
    "Accept": "application/vnd.heroku+json; version=3",
    'Authorization': heroku_api_token
}
stopdynoobject = {

}

stopdyno = requests.post("https://api.heroku.com/apps/rockosmodernapp/dynos/web.1/actions/stop",headers=postheader)
print(stopdyno.reason)

它看起来像是要停止,然后立即重新启动:

2022-10-20T03:05:55.221896+00:00 heroku[web.1]: State changed from up to down
2022-10-20T03:05:56.368472+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2022-10-20T03:05:56.673413+00:00 heroku[web.1]: Process exited with status 143
2022-10-20T03:06:13.858381+00:00 heroku[web.1]: State changed from down to starting

此外, Jmeter 板仍显示Web工作进程正在运行:

nom7f22z

nom7f22z1#

我想出来了--使用Heroku的API中的Formation端点将Web工作者的数量改为0。这将关闭Heroku中的dyno,从而节省资金。

from email import header
import requests
import json
import dotenv

heroku_api_token = "Bearer ENTERHEROKUAPIKEYHERE"
headers = {
    'Accept': 'application/vnd.heroku+json; version=3',
    'Authorization': heroku_api_token
}
statecheck = requests.get("https://api.heroku.com/apps/rockosmodernapp/dynos/web.1",headers=headers).json()
print(statecheck)
if statecheck["state"] == "idle":
    print("shutting down web app worker")
elif statecheck["state"] == "up":
    print("app is still up, will check in 15 minutes to see if app is idle")

postheader = {
    "Content-Type": "application/json",
    "Accept": "application/vnd.heroku+json; version=3",
    'Authorization': heroku_api_token
}

stopdynoobject = {
    "updates" :[{"quantity":0,
                "type": "web"}]
}

stopdynoobject_str = json.dumps(stopdynoobject)
turnoffdyno = requests.patch("https://api.heroku.com/apps/rockosmodernapp/formation",headers=headers,data=stopdynoobject_str).json()
print(turnoffdyno)

相关问题