Compare Jira Server and Jira Cloud Issue Counts With Python

This script builds upon the previous script.  It authenticates against both Jira Server and Jira Cloud.  It then takes a list of Projects as input, and compares the issue count for the project on the Server and Cloud side.

This would be most useful in the case of an ongoing migration, to validate a successful transfer of data.

import requests
import json
import base64

projects = []
#Define a list of target projects to compare

server_username = "<server username>"
server_password = "<server password>"
server_url = "<server URL>"
#Define connection parameters for the server side

cloud_username = "<Cloud username"
cloud_token = "<Cloud token>"
cloud_url = "<Cloud URL>"
#Define connection parameters for the Cloud side

server_credentials_string = f'{server_username}:{server_password}'
server_input_bytes = server_credentials_string.encode('utf-8')
server_encoded_bytes = base64.b64encode(server_input_bytes)
server_encoded_string = server_encoded_bytes.decode('utf-8')
#Encode the server credentials

cloud_credentials_string = f'{cloud_username}:{cloud_token}'
cloud_input_bytes = cloud_credentials_string.encode('utf-8')
cloud_encoded_bytes = base64.b64encode(cloud_input_bytes)
cloud_encoded_string = cloud_encoded_bytes.decode('utf-8')
#Encode the Cloud credentials

server_headers = {
    'Authorization': f'Basic {server_encoded_string}',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
}
#Define the headers used to connect to the server

cloud_headers = {
    'Authorization': f'Basic {cloud_encoded_string}',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
}
#Define the headers used to connect to the Cloud

#Iterate through the list of projects
for project in projects:
    server_issue_count_request = requests.get(f'{server_url}/rest/api/2/search?jql=project={project}',
                                            headers=server_headers)
    server_project_issue_json = json.loads(server_issue_count_request.content)
    server_project_issue_count = server_project_issue_json.get("total")
    #For each server project, fetch the total issue count

    cloud_issue_count_request = requests.get(f'{cloud_url}/rest/api/3/project/search?key={project}&expand=insight',
                                             headers=cloud_headers)
    cloud_project_issue_json = json.loads(cloud_issue_count_request.content)
    cloud_project_issue_count = cloud_project_issue_json['values'][0]['insight']['totalIssueCount']
    #For each Cloud project, fetch the total issue count
    
    print(f"Project {project} has {server_project_issue_count} on the server side and {cloud_project_issue_count} "
          f"on the cloud side")

Leave a Reply

Your email address will not be published. Required fields are marked *