= 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)    
}}}