Jira Tempo
Parse a Jira activity feed into structured CSVs, then estimate hours spent per ticket per day.
Setup
The input file activity.txt is the raw Jira activity RSS/Atom feed. The easiest way to get it is directly from the browser:
- Log in to Jira in your browser.
- Open this URL (replace
<your-jira-domain>and<username>):https://<your-jira-domain>/activity?maxResults=500&streams=user+IS+<username>&os_authType=basic - The browser will display raw XML. Save the page as
activity.txt(File → Save As → All Files / Plain Text) in the repo folder.
Alternatively, use curl:
curl -u <username>:<password> -o activity.txt \
"https://<your-jira-domain>/activity?maxResults=500&streams=user+IS+<username>&os_authType=basic"
Workflow
Step 1 — Parse the feed
python scripts/parse_activity.py [input] [output]
# Defaults: activity.txt -> activity_parsed.csv
Outputs one row per activity event: date, ticket, title, activity_type, description.
Activity types: Created, Updated, Commented, Status -> <name>, Created / Posted.
Step 2 — Estimate hours
python scripts/estimate_hours.py
# Reads: activity_parsed.csv -> Writes: time_estimates.csv
Groups by (date, ticket). Points per event:
| Activity type | Points |
|---|---|
Created |
2.0 |
Status -> * |
1.5 |
Commented |
1.0 |
Updated / Created / Posted |
0.5 |
estimated_hours = clamp(total_points × 0.5, min=0.5, max=4.0) rounded to nearest 0.5 h.
To tune weights, edit the WEIGHTS dict at the top of scripts/estimate_hours.py.
Output columns
time_estimates.csv: date, ticket, title, estimated_hours, activity_count, activity_breakdown
activity_parsed.csv: date, ticket, title, activity_type, description