MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap
Revision 7 as of 2021-01-22 18:49:28
  • Jira

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

   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)
  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"]["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)
  76     
  77 def get_issue_worklog(url,cookies,issue):
  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("  Worklog %s %s %s " %(author,started,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)    
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01