Add jira-show.py
This commit is contained in:
parent
e000d72d1d
commit
632a254b0f
82
jira-show.py
Normal file
82
jira-show.py
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
import requests
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
# -------- CONFIGURATION --------
|
||||
JIRA_URL = 'https://jira.datpool.net'
|
||||
PAT_TOKEN = 'Mjg4NzY0ODM0ODMyOpb3S+TAsI0qUAwBbeP8k5rjhvLb'
|
||||
USERNAME = 'de58076'
|
||||
|
||||
|
||||
|
||||
# Optional: JQL filter by user/date/project
|
||||
JQL_QUERY = 'worklogAuthor = currentUser() AND worklogDate = "{}"'
|
||||
# --------------------------------
|
||||
|
||||
HEADERS = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": f"Bearer {PAT_TOKEN}"
|
||||
}
|
||||
|
||||
def get_issues(date_str):
|
||||
url = f"{JIRA_URL}/rest/api/2/search"
|
||||
jql = JQL_QUERY.format(date_str)
|
||||
params = {
|
||||
"jql": jql,
|
||||
"fields": "summary", # We don't need worklog field here anymore
|
||||
"maxResults": 1000
|
||||
}
|
||||
|
||||
response = requests.get(url, headers=HEADERS, params=params)
|
||||
response.raise_for_status()
|
||||
return response.json()["issues"]
|
||||
|
||||
def get_all_worklogs(issue_key):
|
||||
url = f"{JIRA_URL}/rest/api/2/issue/{issue_key}/worklog"
|
||||
response = requests.get(url, headers=HEADERS)
|
||||
response.raise_for_status()
|
||||
return response.json().get("worklogs", [])
|
||||
|
||||
def sum_worklogs(issues, target_date):
|
||||
total_seconds = 0
|
||||
|
||||
for issue in issues:
|
||||
issue_key = issue["key"]
|
||||
worklogs = get_all_worklogs(issue_key)
|
||||
for log in worklogs:
|
||||
author = log.get("author", {}).get("name") or log.get("author", {}).get("accountId")
|
||||
if author != USERNAME:
|
||||
continue
|
||||
started = log.get("started")
|
||||
if started:
|
||||
log_date = datetime.strptime(started, "%Y-%m-%dT%H:%M:%S.%f%z").date()
|
||||
if log_date.isoformat() == target_date:
|
||||
total_seconds += log.get("timeSpentSeconds", 0)
|
||||
|
||||
return total_seconds
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: python jira_worklog_summary.py YYYY-MM-DD")
|
||||
sys.exit(1)
|
||||
|
||||
target_date = sys.argv[1]
|
||||
try:
|
||||
datetime.strptime(target_date, "%Y-%m-%d")
|
||||
except ValueError:
|
||||
print("Invalid date format. Use YYYY-MM-DD.")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
issues = get_issues(target_date)
|
||||
total_seconds = sum_worklogs(issues, target_date)
|
||||
total_hours = total_seconds // 3600
|
||||
total_minutes = (total_seconds % 3600) // 60
|
||||
|
||||
print(f"Total time logged on {target_date} by {USERNAME}: {total_hours} hours and {total_minutes} minutes")
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in a new issue