Skip to content

Instantly share code, notes, and snippets.

@anonfloppa
Last active March 6, 2022 23:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonfloppa/3bbbe262150dd0fca47183e11bb8437b to your computer and use it in GitHub Desktop.
Save anonfloppa/3bbbe262150dd0fca47183e11bb8437b to your computer and use it in GitHub Desktop.
purge old remote content incrementally
import datetime
import requests
import time
import urllib
token = 'PUT TOKEN HERE'
days_from_now_start = 270
days_from_now_end = 60 # will stop at minus 90 so we keep 3 months of history
server = 'https://matrix.SERVER.TLD'
def get_api_rooms(ffrom, limit):
api_rooms = f'{server}/_synapse/admin/v1/rooms?dir=f&from={ffrom}&limit={limit}&order_by=state_events&access_token={token}'
return api_rooms
delete_api = f'{server}/_synapse/admin/v1/purge_history/'
for days in range(days_from_now_start, days_from_now_end, -30):
print('purging everything before now minus', days, 'days')
start = 50
end = 3000
step = 5
sleep_time = 10
now = datetime.datetime.now()
then = now - datetime.timedelta(days=days)
delete_ts = int(datetime.datetime.timestamp(then) * 1000)
for i in range(start, end, step):
print('getting rooms from', i, 'to', i+step)
r = requests.get(get_api_rooms(i, step))
rooms = r.json()
headers = {
'authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
for room in rooms['rooms']:
roomid = urllib.parse.quote(room['room_id'])
print('purge history', delete_api + roomid)
data = {
'delete_local_events': False,
'purge_up_to_ts': delete_ts
}
r = requests.post(delete_api + roomid, headers=headers, json=data)
print(r.text)
purge_id = r.json().get('purge_id')
if purge_id:
status_api = f'{server}/_synapse/admin/v1/purge_history_status/{purge_id}?access_token={token}'
r = requests.get(status_api)
print(r.text)
while r.json().get('status') == 'active':
print('purge is active, waiting...')
time.sleep(sleep_time)
r = requests.get(status_api)
print(r.text)
print("Done.")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment