1. 前言
sentry使用時間長了,容易產生很多不再care的issues,如何批量resolve它們,本文重點介紹。
對于上述情況,官方建議重建一個project,但是,重建project,需要修改product環境的sentry-dsn,可能還需要重啟服務,有點得不償失。
https://forum.sentry.io/t/delete-all-issues-in-a-project/45
所以,本文將采用sentry api的方式,clean所有issues。
2. 創建一個Auth Token
不同版本的sentry,創建token的page不太一樣,不過path基本不變。下圖供參考。
image.png
3. 基于Sentry API開發腳本
https://docs.sentry.io/api/events/get-project-group-index/
import requests
from functools import reduce
SENTRY_API_HEADERS = dict(
Authorization="Bearer e5bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1e"
)
def get_issues():
url = "https://sentry.xxxxxx.cn/api/0/projects/project-slug/azure_blackeye/issues/"
resp = requests.get(url, headers=SENTRY_API_HEADERS, data=dict(statsPeriod='14d'))
return [issue['id'] for issue in resp.json()]
def resolve_issues(ids):
url = "https://sentry.xxxxxx.cn/api/0/projects/project-slug/azure_blackeye/issues/?status=unresolved&id="
url += reduce(lambda x, y: f'{x}&id={y}', ids)
requests.put(url, headers=SENTRY_API_HEADERS, json=dict(status="resolved"))
if __name__ == "__main__":
for index in range(0, 10000):
issues = get_issues()
print(f'page index: {index:04d}, issues count: {len(issues)}')
if len(issues) == 0:
print('deal over')
break
resolve_issues(issues)