Files
jira-worklog-data/main.py
Michał Kalinowski 63998c09be adjusted jql query
2024-10-07 11:36:56 +02:00

107 lines
3.4 KiB
Python
Executable File

import requests
import json
import datetime
ACCESS_TOKEN = "MDk0NDEwMDYwODQxOrmFq3X448sSYfN9XaEX+OUOjb5W" # Modify
USERNAMES = ["kalinom6"] # Modify
URL = "https://globaljira.roche.com/rest/api/2"
CERT = 'Roche G3 Root CA.crt'
CHECK_WEEK_BACK = False
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}",
"Content-Type": "application/json"
}
def send_request(url, method, payload=None):
if method == "GET":
response = requests.get(url, headers=headers, data=json.dumps(payload), verify=CERT)
if method == "POST":
response = requests.post(url, headers=headers, data=json.dumps(payload), verify=CERT)
if response.status_code == 200:
return response.json()
print(f"Error: {response.status_code}, {response.text}")
def get_issues(username):
jql = f"assignee WAS '{username}'"
payload = {
"jql": jql,
"startAt": 0,
"maxResults": 50,
"fields": [
"key", "summary"
]
}
data = send_request(f'{URL}/search', "POST", payload)
if data:
tasks = []
for issue in data.get("issues", []):
task = {
"task_id": issue["key"],
"summary": issue["fields"]["summary"],
"task_link": f"https://globaljira.roche.com/browse/{issue['key']}"
}
tasks.append(task)
return tasks
def get_worklogs(issues):
worklogs = []
for issue in issues:
data = send_request(f'{URL}/issue/{issue["task_id"]}/worklog', "GET")
if data:
for log in data.get("worklogs", []):
worklog = {
"ticket_id": issue["task_id"],
"time_spent": log["timeSpent"],
"date": log["started"],
"author": log["author"]["name"]
}
if worklog["author"] in USERNAMES:
worklogs.append(worklog)
return worklogs
def get_days():
today = datetime.date.today()
if CHECK_WEEK_BACK:
today = today - datetime.timedelta(weeks=1)
year, weeknum, day_of_week = today.isocalendar()
days = []
days.append(str(today))
while day_of_week > 1:
today = today - datetime.timedelta(days=1)
day_of_week -= 1
days.append(str(today))
return days
def get_week_tickets(worklogs, days):
this_week_tickets = []
for worklog in worklogs:
worklog_date = datetime.datetime.strptime(worklog["date"].split('T')[0], '%Y-%m-%d').date()
current_month = get_max_month(days)
worklog_month = str(worklog_date).split('-')[1]
if str(worklog_date) in days and int(worklog_month) == current_month:
this_week_tickets.append(worklog)
return this_week_tickets
def get_max_month(days):
max = 0
for day in days:
month = int(day.split('-')[1])
if month > max:
max = month
return max
def main():
for username in USERNAMES:
issues = get_issues(username)
print('Issues:')
print(json.dumps(issues, indent=4))
worklogs = get_worklogs(issues)
days = get_days()
worklogs = get_week_tickets(worklogs, days)
omnimat_string = ""
for worklog in worklogs:
omnimat_string += worklog["ticket_id"] + '\n'
print(omnimat_string)
if __name__ == '__main__':
main()