Last active
August 29, 2015 14:17
-
-
Save xlcommunity/efd2c60563ef1d1d3605 to your computer and use it in GitHub Desktop.
Python script to count releases, templates and triggers in XL Release
This file contains 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
# THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR | |
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS | |
# FOR A PARTICULAR PURPOSE. THIS CODE AND INFORMATION ARE NOT SUPPORTED BY XEBIALABS. | |
import httplib | |
import unittest | |
import urllib2 | |
import base64 | |
import sys | |
import json | |
# Parameters to be changed | |
username = "admin" | |
password = "admin" | |
baseUrl = "http://localhost:5516" # Or HTTPS | |
numberByPage = 1000 | |
# set these to a file path to use client auth, e.g. if XL Release is running using mutual SSL: | |
#pemFile = '/path/to/my/key.pem' | |
#clientCertFile = '/path/to/my/cert.pem' | |
pemFile = None | |
clientCertFile = None | |
forceSslv3 = False | |
# see https://stackoverflow.com/questions/17927339/forcing-mechanize-to-use-sslv3 | |
if forceSslv3: | |
import ssl | |
from ssl import PROTOCOL_SSLv23, PROTOCOL_SSLv3, CERT_NONE, SSLSocket | |
def monkey_wrap_socket(sock, keyfile=None, certfile=None, | |
server_side=False, cert_reqs=CERT_NONE, | |
ssl_version=PROTOCOL_SSLv23, ca_certs=None, | |
do_handshake_on_connect=True, | |
suppress_ragged_eofs=True, ciphers=None): | |
ssl_version = PROTOCOL_SSLv3 | |
# for Python 2.6 or lower, remove the "ciphers" argument | |
return SSLSocket(sock, keyfile=keyfile, certfile=certfile, | |
server_side=server_side, cert_reqs=cert_reqs, | |
ssl_version=ssl_version, ca_certs=ca_certs, | |
do_handshake_on_connect=do_handshake_on_connect, | |
suppress_ragged_eofs=suppress_ragged_eofs, | |
ciphers=ciphers) | |
ssl.wrap_socket = monkey_wrap_socket | |
# see http://www.osmonov.com/2009/04/client-certificates-with-urllib2.html | |
class HTTPSClientAuthHandler(urllib2.HTTPSHandler): | |
def __init__(self, key, cert): | |
urllib2.HTTPSHandler.__init__(self) | |
self.key = key | |
self.cert = cert | |
def https_open(self, req): | |
#Rather than pass in a reference to a connection class, we pass in | |
# a reference to a function which, for all intents and purposes, | |
# will behave as a constructor | |
return self.do_open(self.getConnection, req) | |
def getConnection(self, host, timeout=300): | |
return httplib.HTTPSConnection(host, key_file=self.key, cert_file=self.cert) | |
if pemFile is not None and clientCertFile is not None: | |
cert_handler = HTTPSClientAuthHandler(pemFile, clientCertFile) | |
opener = urllib2.build_opener(cert_handler) | |
urllib2.install_opener(opener) | |
def releases_search_req(uri, username, password): | |
print "." | |
req = urllib2.Request(uri, data='{"active": true, "onlyMine": false, "onlyFlagged": false, "planned": true, "completed": true, "filter": ""}', headers={'Content-Type': 'application/json'}) | |
base64string = base64.encodestring('%s:%s' % (username, password))[:-1] | |
req.add_header("Authorization", "Basic %s" % base64string) | |
return urllib2.urlopen(req) | |
def templates_search_req(uri, username, password): | |
print "." | |
req = urllib2.Request(uri, headers={'Content-Type': 'application/json'}) | |
base64string = base64.encodestring('%s:%s' % (username, password))[:-1] | |
req.add_header("Authorization", "Basic %s" % base64string) | |
return urllib2.urlopen(req) | |
def releases_resp_by_page(p): | |
url = "%s/releases/search?numberbypage=%s&page=%s" % (baseUrl, numberByPage, p) | |
return releases_search_req(url, username, password).read() | |
def templates_resp_by_page(p): | |
url = "%s/releases/templates?numberbypage=%s&page=%s" % (baseUrl, numberByPage, p) | |
return templates_search_req(url, username, password).read() | |
def templates_resp_by_page2(): | |
url = "%s/api/v1/templates" % (baseUrl) | |
return templates_search_req(url, username, password).read() | |
def count_results(respByPage): | |
goOn = True | |
page = 0 | |
amount = 0 | |
while goOn: | |
j = json.loads(respByPage(page)) | |
amount += len(j['cis']) | |
page += 1 | |
goOn = len(j['cis']) > 0 | |
return amount | |
def triggers(respByPage): | |
j = json.loads(respByPage()) | |
for ci in j: | |
if len(ci['releaseTriggers']) > 0: | |
print "Template with id %s has : %s triggers" % (ci['id'], len(ci['releaseTriggers'])) | |
print " Triggers are : " | |
for trigger in ci['releaseTriggers']: | |
print " %s trigger (enabled: %s)" % (trigger['type'], trigger['enabled']) | |
releases_count = count_results(releases_resp_by_page) | |
templates_count = count_results(templates_resp_by_page) | |
print "Amount of templates: %s" % templates_count | |
print "Amount of releases: %s" % releases_count | |
triggers(templates_resp_by_page2) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment