Size: 4931
Comment:
|
Size: 4929
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 57: | Line 57: |
import os | import os |
Line 59: | Line 59: |
import json import utils |
import json #import utils |
Line 84: | Line 84: |
sessionUrl = '%s/rest/api/2/issue/%s'%(url,issue) print('Using %s'%(sessionUrl)) response = requests.get(sessionUrl, cookies=cookies ) |
sessionUrl = '%s/rest/api/2/issue/%s'%(url,issue) print('Using %s'%(sessionUrl)) response = requests.get(sessionUrl, cookies=cookies ) |
Line 93: | Line 93: |
sessionUrl = '%s/rest/api/2/search?maxResults=1000&jql=assignee=%s'%(url,user) response = requests.get(sessionUrl, cookies=cookies ) |
sessionUrl = '%s/rest/api/2/search?maxResults=1000&jql=assignee=%s'%(url,user) response = requests.get(sessionUrl, cookies=cookies ) |
Line 106: | Line 106: |
get_issue_worklog(url,cookies, issue_key) |
get_issue_worklog(url,cookies, issue_key, str(issue_fields["labels"])) |
Line 109: | Line 109: |
sessionUrl = '%s/rest/api/2/search?maxResults=1000&jql=worklogAuthor=%s'%(url,user) response = requests.get(sessionUrl, cookies=cookies ) |
sessionUrl = '%s/rest/api/2/search?maxResults=1000&jql=worklogAuthor=%s'%(url,user) response = requests.get(sessionUrl, cookies=cookies ) |
Line 112: | Line 112: |
Line 118: | Line 118: |
labels = labels + " " + label | labels = labels + " " + label |
Line 120: | Line 120: |
issue_assignee = issue_fields["assignee"]["emailAddress"] | #issue_assignee = issue_fields["assignee"]["name"]#["emailAddress"] |
Line 122: | Line 122: |
issue_summary=issue_fields["summary"].encode('latin1','ignore') | issue_summary=issue_fields["summary"].encode('latin1','ignore') |
Line 125: | Line 125: |
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 ) |
#print("Assignee: " + issue_assignee ) get_issue_worklog(url,cookies, issue_key,str(issue_fields["labels"])) def get_issue_worklog(url,cookies,issue,labels): sessionUrl = '%s/rest/api/2/issue/%s/worklog?maxResults=1000'%(url,issue) response = requests.get(sessionUrl, cookies=cookies ) |
Line 137: | Line 137: |
print(" Worklog %s %s %s " %(author,started,timeSpent) ) |
print(" %s %s %s %s %s " %(author,started,issue,labels,timeSpent) ) |
Line 144: | Line 144: |
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)
getWorklog.py
1 #!/usr/bin/python3
2 """
3 JIRA_USERS=alice,bob JIRA_URL=https://example.org JIRA_USER=userx JIRA_PASS=xxxxx python3 getWorklog.py
4 """
5 import sys
6 import os
7 import requests
8 import json
9 #import utils
10
11 URL_SESSION="/rest/auth/1/session"
12
13 def loginJira(url,user,passw):
14 sessionUrl = '%s%s'%(url,URL_SESSION)
15 jsonRequest={'username':'','password':''}
16 jsonRequest['username']=user
17 jsonRequest['password']=passw
18 response = requests.post(sessionUrl,json=jsonRequest)
19 rsp = json.loads(response.text)
20 return response.cookies
21
22 def current_user(url,cookies):
23 sessionUrl = '%s%s'%(url,URL_SESSION)
24 response = requests.get(sessionUrl,cookies=cookies)
25 return json.loads(response.text)
26
27 def logout(url,cookies):
28 sessionUrl = '%s%s'%(url,URL_SESSION)
29 response = requests.delete(sessionUrl,cookies=cookies)
30 return response.status_code
31
32 def get_issue(url,cookies,issue):
33 sessionUrl = '%s/rest/api/2/issue/%s'%(url,issue)
34 print('Using %s'%(sessionUrl))
35 response = requests.get(sessionUrl, cookies=cookies )
36 rsp=json.loads(response.text)
37 key = rsp['key']
38 summary = rsp['fields']['summary']
39 print('%s -> %s'%(key,summary))
40
41 def get_assigned_issues(url,cookies,user):
42 sessionUrl = '%s/rest/api/2/search?maxResults=1000&jql=assignee=%s'%(url,user)
43 response = requests.get(sessionUrl, cookies=cookies )
44 rsp=json.loads(response.text)
45 for issue in rsp["issues"]:
46 issue_key=issue["key"]
47 issue_fields=issue["fields"]
48 print("\nIssue: " + issue_key )
49 print("Type: " + issue_fields["issuetype"]["name"] )
50 print("Assignee: " + issue_fields["assignee"]["key"] )
51 print("Labels: " + str(issue_fields["labels"]) )
52 print("Project: " + issue_fields["project"]["key"] )
53 print("Summary: %s"%( issue_fields["summary"].encode('latin1','ignore') ) )
54 print("Status: " + issue_fields["status"]["name"] )
55 get_issue_worklog(url,cookies, issue_key, str(issue_fields["labels"]))
56
57 def get_worklog_per_user(url,cookies,user):
58 sessionUrl = '%s/rest/api/2/search?maxResults=1000&jql=worklogAuthor=%s'%(url,user)
59 response = requests.get(sessionUrl, cookies=cookies )
60 rsp=json.loads(response.text)
61
62 for issue in rsp["issues"]:
63 issue_key=issue["key"]
64 issue_fields=issue["fields"]
65 labels=""
66 for label in issue_fields["labels"]:
67 labels = labels + " " + label
68 issue_type = issue_fields["issuetype"]["name"]
69 #issue_assignee = issue_fields["assignee"]["name"]#["emailAddress"]
70 issue_project=issue_fields["project"]["key"]
71 issue_summary=issue_fields["summary"].encode('latin1','ignore')
72 issue_status=issue_fields["status"]["name"]
73 print("\n%s %s %s %s %s %s"%(issue_project,issue_type,issue_key,labels,issue_summary,issue_status) )
74 #print("Assignee: " + issue_assignee )
75 get_issue_worklog(url,cookies, issue_key,str(issue_fields["labels"]))
76
77 def get_issue_worklog(url,cookies,issue,labels):
78 sessionUrl = '%s/rest/api/2/issue/%s/worklog?maxResults=1000'%(url,issue)
79 response = requests.get(sessionUrl, cookies=cookies )
80 rsp=json.loads(response.text)
81
82 for worklog in rsp["worklogs"]:
83 author = worklog["author"]["emailAddress"]
84 started = worklog["started"]
85 timeSpent = worklog["timeSpent"]
86 print(" %s %s %s %s %s " %(author,started,issue,labels,timeSpent) )
87
88 if __name__=='__main__':
89 jiraUrl=os.environ['JIRA_URL']
90 jiraUser=os.environ['JIRA_USER']
91 jiraPass=os.environ['JIRA_PASS']
92 jiraUsers=os.environ['JIRA_USERS']
93
94 cookies=loginJira(jiraUrl, jiraUser, jiraPass )
95 current_user(jiraUrl,cookies)
96 splitted = jiraUsers.split(",")
97 for user in splitted:
98 get_worklog_per_user(jiraUrl,cookies,user)
99 logout(jiraUrl,cookies)