Created
February 3, 2019 21:03
-
-
Save ewhauser/3fd49d0e27c886e74376d9ce49df6d9b to your computer and use it in GitHub Desktop.
Export LaunchDarkly audit logs to CSV
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
""" | |
Requirements: | |
pip install requests python-dateutil | |
""" | |
import dateutil.parser as dp | |
import csv | |
import sys | |
from optparse import OptionParser | |
import requests | |
BASE_URL = 'https://app.launchdarkly.com' | |
parser = OptionParser() | |
parser.add_option("-f", "--filename", dest="filename", default="ld_audit_log.txt", help="filename to write") | |
parser.add_option("-k", "--api-key", dest="api_key", help="LaunchDarkly API key") | |
parser.add_option("-a", "--after", dest="after", default=None, help="A date when to export the logs from (ISO-8601)") | |
(options, args) = parser.parse_args() | |
if not options.api_key: | |
print("Please supply an API key.") | |
sys.exit(1) | |
def get_items(url): | |
headers = {'Authorization': options.api_key} | |
try: | |
r = requests.get(BASE_URL + url, headers=headers) | |
r.raise_for_status() | |
except requests.exceptions.RequestException as e: | |
print(f"Error calling LaunchDarkly API") | |
print(str(e)) | |
return [], None | |
res = r.json() | |
n = res['_links']['next']['href'] if '_links' in res and 'next' in res['_links'] else None | |
return res.get('items', []), n | |
all_items = [] | |
next_ = '/api/v2/auditlog?limit=20' | |
if options.after: | |
next_ += f"&after={int(dp.parse(options.after).timestamp() * 1000)}" | |
while (True): | |
print(next_) | |
items, next_ = get_items(next_) | |
all_items.extend(items) | |
if next_ is None: | |
break | |
rows = [] | |
for i in [item for item in all_items if item.get('kind', None) == 'flag']: | |
row = { | |
'user': i['member']['email'], | |
'flag': i['name'], | |
'description': i['description'].rstrip(), | |
} | |
rows.append(row) | |
with open(options.filename, 'w') as f: | |
w = csv.DictWriter(f, rows[0].keys()) | |
w.writeheader() | |
w.writerows(rows) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment