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>
81 lines
2.1 KiB
Django/Jinja
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()
|