Files
metavox-loadtest/templates/cleanup_metadata.py.j2
Sam428-png a1eda430c8 Initial commit: MetaVox loadtest playbook
Ansible playbook voor het opzetten van een MetaVox loadtest omgeving:
- 50 teamfolders met 10.000 bestanden elk (500K totaal)
- 100 metadata velddefinities (10 teamfolder + 90 file-level)
- 3-niveau mappenstructuur (10 hoofdmappen x 3 submappen)
- ~43M metadata records via directe MySQL inserts
- Geoptimaliseerde database indexes (7 redundante indexes gedropt)

Gebruikt directe filesystem writes en MySQL inserts i.p.v. WebDAV/API
voor maximale performance.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 16:55:30 +01:00

81 lines
2.1 KiB
Django/Jinja

#!/usr/bin/env python3
"""
MetaVox Metadata Cleanup Script
Verwijdert metadata-velddefinities via de OCS API.
"""
import json
import sys
import time
import requests
from requests.auth import HTTPBasicAuth
NC_URL = "{{ nextcloud_url }}"
NC_USER = "{{ nextcloud_admin_user }}"
NC_PASS = "{{ nextcloud_admin_password }}"
TIMEOUT = {{ http_timeout }}
WEB_API_BASE = f"{NC_URL}/index.php/apps/metavox/api"
OCS_BASE = f"{NC_URL}/ocs/v2.php/apps/metavox/api/v1"
AUTH = HTTPBasicAuth(NC_USER, NC_PASS)
HEADERS = {
"OCS-APIRequest": "true",
"Accept": "application/json",
}
TF_FIELDS = json.loads("""{{ teamfolder_metadata_fields | to_json }}""")
FILE_FIELDS = json.loads("""{{ file_metadata_fields | to_json }}""")
FIELD_NAMES_TO_DELETE = set(f["name"] for f in TF_FIELDS + FILE_FIELDS)
def get_all_fields():
url = f"{OCS_BASE}/groupfolder-fields"
try:
resp = requests.get(url, auth=AUTH, headers=HEADERS, timeout=TIMEOUT)
if resp.status_code == 200:
data = resp.json()
if "ocs" in data and "data" in data["ocs"]:
return data["ocs"]["data"]
except Exception as e:
print(f"[ERROR] Ophalen velden: {e}")
return []
def delete_field(field_id):
url = f"{WEB_API_BASE}/groupfolder-fields/{field_id}"
try:
resp = requests.delete(url, auth=AUTH, headers=HEADERS, timeout=TIMEOUT)
return resp.status_code in [200, 204, 404]
except Exception as e:
print(f" [ERROR] Verwijderen veld {field_id}: {e}")
return False
def main():
print("MetaVox Metadata Cleanup")
print("=" * 40)
fields = get_all_fields()
print(f"Gevonden: {len(fields)} velden totaal")
deleted = 0
skipped = 0
for field in fields:
fname = field.get("field_name", "")
fid = field.get("id")
if fname in FIELD_NAMES_TO_DELETE and fid:
if delete_field(fid):
deleted += 1
else:
print(f" [FAIL] Kon veld '{fname}' (id={fid}) niet verwijderen")
else:
skipped += 1
print(f"\n{deleted} velden deleted, {skipped} overgeslagen")
if __name__ == "__main__":
main()