From bcb49fecb54ad5e834dc981f544f7ee4b1af0c54 Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Wed, 14 Sep 2016 15:30:46 -0700 Subject: [PATCH] Add tool for downloading Shippable logs. --- test/utils/shippable/download-logs | 92 ++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100755 test/utils/shippable/download-logs diff --git a/test/utils/shippable/download-logs b/test/utils/shippable/download-logs new file mode 100755 index 00000000000..303896e1fee --- /dev/null +++ b/test/utils/shippable/download-logs @@ -0,0 +1,92 @@ +#!/usr/bin/env python + +# (c) 2016 Red Hat, Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . + +from __future__ import print_function + +import os +import requests + +from argparse import ArgumentParser + + +def main(): + api_key = get_api_key() + + parser = ArgumentParser(description='Download logs from all jobs in a Shippable run.') + + parser.add_argument('run_id', + help='shippable run id.') + + parser.add_argument('-v', '--verbose', + dest='verbose', + action='store_true', + help='show what is being downloaded') + + parser.add_argument('-t', '--test', + dest='test', + action='store_true', + help='show what would be downloaded without downloading') + + parser.add_argument('--key', + dest='api_key', + default=api_key, + required=api_key is None, + help='api key for accessing Shippable') + + args = parser.parse_args() + + headers = dict( + Authorization='apiToken %s' % args.api_key, + ) + + body = requests.get('https://api.shippable.com/jobs?runIds=%s' % args.run_id, headers=headers).json() + + output_dir = args.run_id + + if not args.test: + os.mkdir(output_dir) + + for j in body: + job_id = j['id'] + job_number = j['jobNumber'] + path = os.path.join(output_dir, '%s.log' % job_number) + url = 'https://api.shippable.com/jobs/%s/consoles/download' % job_id + + if args.verbose or args.test: + print('%s' % path) + + if not args.test: + log = requests.get(url, headers=headers).content + + with open(path, 'w') as f: + f.write(log) + + +def get_api_key(): + path = os.path.join(os.environ['HOME'], '.shippable.key') + + try: + with open(path, 'r') as f: + return f.read().strip() + except IOError: + return None + + +if __name__ == '__main__': + main()