#!/usr/bin/env python3 """ Fetch only users and API keys metadata from Claude Admin API. This script updates the metadata files without re-fetching usage data. Useful when you just need to refresh user/API key information. """ import argparse import os import sys from pathlib import Path # Add parent directory to path for imports sys.path.insert(0, str(Path(__file__).parent.parent)) from src.usage.cost_analyzer import ( fetch_api_keys_metadata, fetch_users, fetch_workspaces, ) def main() -> None: parser = argparse.ArgumentParser( description='Fetch users, API keys, and workspaces metadata', formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: # Fetch metadata using environment variable %(prog)s # Fetch metadata with explicit admin key %(prog)s --admin-key sk-ant-admin... """, ) parser.add_argument('--admin-key', help='Admin API key (or use CLAUDE_ADMIN_KEY env var)') args = parser.parse_args() admin_key = args.admin_key or os.environ.get('CLAUDE_ADMIN_KEY') if not admin_key: print('Error: Admin API key required via --admin-key or CLAUDE_ADMIN_KEY', file=sys.stderr) sys.exit(1) try: print('Fetching users...', file=sys.stderr) users_data = fetch_users(admin_key) print(f'āœ… Fetched {len(users_data)} users', file=sys.stderr) print('Fetching API keys...', file=sys.stderr) api_keys_metadata = fetch_api_keys_metadata(admin_key) print(f'āœ… Fetched {len(api_keys_metadata)} API keys', file=sys.stderr) print('Fetching workspaces...', file=sys.stderr) workspaces_data = fetch_workspaces(admin_key) print(f'āœ… Fetched {len(workspaces_data)} workspaces', file=sys.stderr) print('\nāœ… Metadata successfully saved to output/usage/raw/', file=sys.stderr) except Exception as e: print(f'Error: {e}', file=sys.stderr) import traceback traceback.print_exc() sys.exit(1) if __name__ == '__main__': main()