Fathi Boudra | 422bf77 | 2019-12-02 11:10:16 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | # |
Zelalem | 1af7a7b | 2020-08-04 17:34:32 -0500 | [diff] [blame] | 3 | # Copyright (c) 2019-2020, Arm Limited. All rights reserved. |
Fathi Boudra | 422bf77 | 2019-12-02 11:10:16 +0200 | [diff] [blame] | 4 | # |
| 5 | # SPDX-License-Identifier: BSD-3-Clause |
| 6 | # |
| 7 | |
| 8 | import argparse |
| 9 | import datetime |
Zelalem | 1af7a7b | 2020-08-04 17:34:32 -0500 | [diff] [blame] | 10 | import json |
Fathi Boudra | 422bf77 | 2019-12-02 11:10:16 +0200 | [diff] [blame] | 11 | import os |
| 12 | import sys |
| 13 | |
| 14 | # suds is not a standard library package. Although it's installed in the Jenkins |
| 15 | # slaves, it might not be so in the user's machine (when running Coverity scan |
| 16 | # on there). |
| 17 | try: |
| 18 | import suds |
| 19 | except ImportError: |
| 20 | print(" You need to have suds Python3 package to query Coverity server") |
| 21 | print(" pip3 install suds-py3") |
| 22 | sys.exit(0) |
| 23 | |
| 24 | # Get coverity host from environment, or fall back to the default one. |
| 25 | coverity_host = os.environ.get("coverity_host", "coverity.cambridge.arm.com") |
Zelalem | 219df41 | 2020-05-17 19:21:20 -0500 | [diff] [blame] | 26 | coverity_port = os.environ.get("coverity_port", "8443") |
Fathi Boudra | 422bf77 | 2019-12-02 11:10:16 +0200 | [diff] [blame] | 27 | |
| 28 | parser = argparse.ArgumentParser() |
| 29 | |
| 30 | parser.add_argument("--description", help="Snapshot description filter") |
Fathi Boudra | 422bf77 | 2019-12-02 11:10:16 +0200 | [diff] [blame] | 31 | parser.add_argument("--old", default=10, help="Max snapshot age in days") |
| 32 | parser.add_argument("--host", default=coverity_host, help="Coverity server") |
Zelalem | 219df41 | 2020-05-17 19:21:20 -0500 | [diff] [blame] | 33 | parser.add_argument("--https-port", default=coverity_port, help="Coverity Secure port") |
Zelalem | 1af7a7b | 2020-08-04 17:34:32 -0500 | [diff] [blame] | 34 | parser.add_argument("--auth-key-file", default=None, help="Coverity authentication file", dest="auth_key_file") |
Fathi Boudra | 422bf77 | 2019-12-02 11:10:16 +0200 | [diff] [blame] | 35 | parser.add_argument("--version", help="Snapshot version filter") |
| 36 | parser.add_argument("stream_name") |
| 37 | |
| 38 | opts = parser.parse_args() |
| 39 | |
Zelalem | 1af7a7b | 2020-08-04 17:34:32 -0500 | [diff] [blame] | 40 | token = json.load(open(opts.auth_key_file)) |
| 41 | user = token["username"] |
| 42 | password = token["key"] |
Fathi Boudra | 422bf77 | 2019-12-02 11:10:16 +0200 | [diff] [blame] | 43 | |
| 44 | # SOAP magic stuff |
Zelalem | 219df41 | 2020-05-17 19:21:20 -0500 | [diff] [blame] | 45 | client = suds.client.Client("https://{}/ws/v9/configurationservice?wsdl".format(opts.host)) |
Fathi Boudra | 422bf77 | 2019-12-02 11:10:16 +0200 | [diff] [blame] | 46 | security = suds.wsse.Security() |
| 47 | token = suds.wsse.UsernameToken(user, password) |
| 48 | security.tokens.append(token) |
| 49 | client.set_options(wsse=security) |
| 50 | |
| 51 | # Construct stream ID data object |
| 52 | streamid_obj = client.factory.create("streamIdDataObj") |
| 53 | streamid_obj.name = opts.stream_name |
| 54 | |
| 55 | # Snapshot filter |
| 56 | filter_obj = client.factory.create("snapshotFilterSpecDataObj") |
| 57 | |
| 58 | # Filter snapshots for age |
| 59 | past = datetime.date.today() - datetime.timedelta(days=opts.old) |
| 60 | filter_obj.startDate = past.strftime("%Y-%m-%d") |
| 61 | |
| 62 | if opts.version: |
| 63 | filter_obj.versionPattern = opts.version |
| 64 | |
| 65 | if opts.description: |
| 66 | filter_obj.descriptionPattern = opts.description |
| 67 | |
| 68 | # Query server |
| 69 | results = client.service.getSnapshotsForStream(streamid_obj, filter_obj) |
| 70 | |
| 71 | # Print ID of the last snapshot if results were returned |
| 72 | if results: |
Zelalem | 1af7a7b | 2020-08-04 17:34:32 -0500 | [diff] [blame] | 73 | print(results[-1].id) |
| 74 | else: |
| 75 | sys.exit(1) |