= Jira = * https://confluence.atlassian.com/jira == Jira and Confluence Markup == {{{ h1. Biggest heading h3. Big heading h5. Small heading - some - bullet - points * some * bullet ** indented ** bullets * points # a # numbered # list ||heading 1||heading 2||heading 3|| |cell A1|cell A2|cell A3| |cell B1|cell B2|cell B3| *bold text* _italics_ [title | http://confluence.atlassian.com] !screenshot-1.png! !screenshot-2.png|thumbnail! }}} == JQL (Jira Query Language) == * https://support.atlassian.com/jira-core-cloud/docs/use-advanced-search-with-jira-query-language-jql/ * Sum time spent {{{ (assignee = bob OR assignee = alice) AND (type = "Issue" OR type = Epic) ORDER BY issuetype DESC labels in (Labelxyz) }}} * https://example.org/rest/api/2/search?jql=assignee=bob&maxResults=1000 * https://example.org/rest/api/2/search?jql=worklogAuthor=bob == getWorklog.py == {{{#!highlight python #!/usr/bin/python3 """ JIRA_USERS=alice,bob JIRA_URL=https://example.org JIRA_USER=userx JIRA_PASS=xxxxx python3 getWorklog.py """ import sys import os import requests import json import utils URL_SESSION="/rest/auth/1/session" def loginJira(url,user,passw): sessionUrl = '%s%s'%(url,URL_SESSION) jsonRequest={'username':'','password':''} jsonRequest['username']=user jsonRequest['password']=passw response = requests.post(sessionUrl,json=jsonRequest) rsp = json.loads(response.text) return response.cookies def current_user(url,cookies): sessionUrl = '%s%s'%(url,URL_SESSION) response = requests.get(sessionUrl,cookies=cookies) return json.loads(response.text) def logout(url,cookies): sessionUrl = '%s%s'%(url,URL_SESSION) response = requests.delete(sessionUrl,cookies=cookies) return response.status_code def get_issue(url,cookies,issue): sessionUrl = '%s/rest/api/2/issue/%s'%(url,issue) print('Using %s'%(sessionUrl)) response = requests.get(sessionUrl, cookies=cookies ) rsp=json.loads(response.text) key = rsp['key'] summary = rsp['fields']['summary'] print('%s -> %s'%(key,summary)) def get_assigned_issues(url,cookies,user): sessionUrl = '%s/rest/api/2/search?maxResults=1000&jql=assignee=%s'%(url,user) response = requests.get(sessionUrl, cookies=cookies ) rsp=json.loads(response.text) for issue in rsp["issues"]: issue_key=issue["key"] issue_fields=issue["fields"] print("\nIssue: " + issue_key ) print("Type: " + issue_fields["issuetype"]["name"] ) print("Assignee: " + issue_fields["assignee"]["key"] ) print("Labels: " + str(issue_fields["labels"]) ) print("Project: " + issue_fields["project"]["key"] ) print("Summary: %s"%( issue_fields["summary"].encode('latin1','ignore') ) ) print("Status: " + issue_fields["status"]["name"] ) get_issue_worklog(url,cookies, issue_key) def get_worklog_per_user(url,cookies,user): sessionUrl = '%s/rest/api/2/search?maxResults=1000&jql=worklogAuthor=%s'%(url,user) response = requests.get(sessionUrl, cookies=cookies ) rsp=json.loads(response.text) for issue in rsp["issues"]: issue_key=issue["key"] issue_fields=issue["fields"] labels="" for label in issue_fields["labels"]: labels = labels + " " + label issue_type = issue_fields["issuetype"]["name"] issue_assignee = issue_fields["assignee"]["emailAddress"] issue_project=issue_fields["project"]["key"] issue_summary=issue_fields["summary"].encode('latin1','ignore') issue_status=issue_fields["status"]["name"] print("\n%s %s %s %s %s %s"%(issue_project,issue_type,issue_key,labels,issue_summary,issue_status) ) print("Assignee: " + issue_assignee ) get_issue_worklog(url,cookies, issue_key) def get_issue_worklog(url,cookies,issue): sessionUrl = '%s/rest/api/2/issue/%s/worklog?maxResults=1000'%(url,issue) response = requests.get(sessionUrl, cookies=cookies ) rsp=json.loads(response.text) for worklog in rsp["worklogs"]: author = worklog["author"]["emailAddress"] started = worklog["started"] timeSpent = worklog["timeSpent"] print(" Worklog %s %s %s " %(author,started,timeSpent) ) if __name__=='__main__': jiraUrl=os.environ['JIRA_URL'] jiraUser=os.environ['JIRA_USER'] jiraPass=os.environ['JIRA_PASS'] jiraUsers=os.environ['JIRA_USERS'] cookies=loginJira(jiraUrl, jiraUser, jiraPass ) current_user(jiraUrl,cookies) splitted = jiraUsers.split(",") for user in splitted: get_worklog_per_user(jiraUrl,cookies,user) logout(jiraUrl,cookies) }}}