Skip to content

Instantly share code, notes, and snippets.

@gleba
Created January 28, 2019 08:49
Show Gist options
  • Save gleba/ea3da6b0acf054d3bd2e195ed18ece40 to your computer and use it in GitHub Desktop.
Save gleba/ea3da6b0acf054d3bd2e195ed18ece40 to your computer and use it in GitHub Desktop.
JIRA Time Logger
from jira import JIRA
from dateutil import parser
import datetime
options = {
'server': 'https://datamonsters.atlassian.net'
}
jira = JIRA(options, basic_auth=('gpanteleev@datamonsters.co', '....XXX....'))
issues = jira.search_issues('updated >= 201X-XX-01 AND assignee in (gpanteleev)',
fields='worklog, status')
end_hours = 165.6 / 3.5
end_seconds = end_hours * 60 * 60
now_seconds = 0
now_time = datetime.datetime.now()
target_now = {}
max_time = 0
for i in issues:
job_done = False
sec_done = target_now.get(i.key)
if not sec_done:
sec_done = 0
for l in i.fields.worklog.worklogs:
if l.author.name == "gpanteleev":
dt = parser.parse(l.started)
if dt.month == now_time.month:
now_seconds = now_seconds + l.timeSpentSeconds
sec_done = sec_done + l.timeSpentSeconds
max_time = max(sec_done, max_time)
else:
job_done = True
# таск закрыт в прошлом месяце
if not job_done:
if int(i.fields.status.id) > 1:
target_now[i.key] = sec_done
week_number = (now_time.day - 1) // 7 + 1
# need_to_end = int(end_seconds - now_seconds)
# сколькно нужно списать в конце текущей недели
need_to_ok = int(end_seconds / (4 / week_number))
kv = target_now.keys()
q_mid = round(need_to_ok / len(kv))
target_q = {}
target_hero = {}
q_debug = 0
for k in kv:
sec = target_now[k]
if sec > 0:
q_dif = sec - q_mid
if q_dif > 0:
target_hero[k] = q_dif
q_debug = q_debug + sec
else:
target_q[k] = sec
else:
target_q[k] = 0
target_fix = {}
lq = len(target_q)
for k in target_hero.keys():
v = target_hero[k]
q_mid = q_mid - v / lq
for k in target_q.keys():
v = target_q[k]
if v == 0:
target_fix[k] = q_mid
elif v > 0:
q_debug = q_debug + v
target_fix[k] = q_mid - v
for k in target_fix.keys():
v = target_fix[k]
q_debug = q_debug + v
jira.add_worklog(k, timeSpentSeconds=v, comment='∴ → ✶')
print(need_to_ok, q_debug)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment