Теперь умеем проставлять время по JIRA-е

This commit is contained in:
Danil Kislov
2019-03-15 19:02:18 +03:00
parent b67ff9b079
commit 8cb5e1ae93
7 changed files with 71 additions and 14 deletions
+5 -2
View File
@@ -28,8 +28,11 @@ namespace JiraTimeBotForm.DI
_builder.Register(c => new CommitSkipper()).As<ICommitSkipper>();
_builder.RegisterType<TechnicalInfoSkipper>().As<ITechnicalInfoSkipper>().AsSelf();
_builder.RegisterType<MercurialLog>().As<IMercurialLog>().AsSelf();
_builder.RegisterType<TaskTimeDiscoverer>().As<ITaskTimeDiscoverer>().AsSelf();
//_builder.RegisterType<JiraCommitEmulator>().As<IMercurialLog>().AsSelf();
_builder.RegisterType<TaskTimeByCommitsCalculator>().As<ITaskTimeCalculator>().AsSelf();
_builder.RegisterType<WorkLogTasksProcessor>().AsSelf().As<ITasksProcessor>();
_builder.RegisterType<MeetingProcessor>().AsSelf().As<ITasksProcessor>();
@@ -38,7 +41,7 @@ namespace JiraTimeBotForm.DI
_builder.RegisterType<JiraDescriptionSource>().AsSelf().As<IJiraDescriptionSource>();
_builder.RegisterType<JiraApi>().AsSelf().AsImplementedInterfaces();
_builder.Register(c => new Job(c.Resolve<IMercurialLog>(), c.Resolve<ITaskTimeDiscoverer>(), c.Resolve<ILog>())).AsSelf();
_builder.Register(c => new Job(c.Resolve<IMercurialLog>(), c.Resolve<ITaskTimeCalculator>(), c.Resolve<ILog>())).AsSelf();
var container = _builder.Build();
return container;
+11 -1
View File
@@ -1,10 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using Atlassian.Jira;
using JiraTimeBotForm.Configuration;
using JiraTimeBotForm.JiraIntegration.Comments;
using JiraTimeBotForm.TaskTime;
using JiraTimeBotForm.TaskTime.Objects;
namespace JiraTimeBotForm.JiraIntegration
@@ -34,6 +34,16 @@ namespace JiraTimeBotForm.JiraIntegration
}
}
public List<Issue> GetTodayIssues(Settings settings, DateTime? date = null, CancellationToken cancellationToken = default(CancellationToken))
{
var jira = Jira.CreateRestClient(settings.JiraUrl, settings.JiraUserName, settings.JiraPassword);
date = date.GetValueOrDefault(DateTime.Now.Date);
var jql = $"status changed by '{settings.JiraUserName}' during (\"{date.Value:yyyy-MM-dd}\",\"{date.Value.AddDays(1):yyyy-MM-dd}\")";
var affectedIssues = jira.Issues.GetIssuesFromJqlAsync(jql, 50, 0, cancellationToken).Result.ToList();
return affectedIssues;
}
public void SetTodayWorklog(List<TaskTimeItem> taskTimeItems, Settings settings, DateTime? date = null, bool dummy = false, bool addCommentsToWorklog = false)
{
var jira = Jira.CreateRestClient(settings.JiraUrl, settings.JiraUserName, settings.JiraPassword);
@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Threading;
using JiraTimeBotForm.Configuration;
using JiraTimeBotForm.Mercurial;
using JiraTimeBotForm.Mercurial.Objects;
namespace JiraTimeBotForm.JiraIntegration
{
public class JiraCommitEmulator : IMercurialLog
{
private readonly ILog _log;
private readonly JiraApi _jiraApi;
public JiraCommitEmulator(ILog log, JiraApi jiraApi)
{
_log = log;
_jiraApi = jiraApi;
}
public List<MercurialCommitItem> GetMercurialLog(Settings settings,
DateTime? date = null,
CancellationToken cancellationToken = default(CancellationToken))
{
date = date.GetValueOrDefault(DateTime.Now.Date);
var workTasks = new List<MercurialCommitItem>();
var issues = _jiraApi.GetTodayIssues(settings, date, cancellationToken);
foreach (var issue in issues)
{
workTasks.Add(new MercurialCommitItem
{
Description = issue.Summary,
Time = issue.Updated.GetValueOrDefault(date.Value),
Branch = issue.Key.Value,
FilesAffected = 1
});
}
return workTasks;
}
}
}
+2 -1
View File
@@ -86,6 +86,7 @@
<Compile Include="Job.cs" />
<Compile Include="Logger.cs" />
<Compile Include="Configuration\Settings.cs" />
<Compile Include="JiraIntegration\JiraCommitEmulator.cs" />
<Compile Include="Mercurial\Modifiers\ITechnicalInfoSkipper.cs" />
<Compile Include="Mercurial\Modifiers\CommitSkipper.cs" />
<Compile Include="Mercurial\Modifiers\ICommitSkipper.cs" />
@@ -107,7 +108,7 @@
<Compile Include="TasksProcessors\ITasksProcessor.cs" />
<Compile Include="TasksProcessors\MeetingProcessor.cs" />
<Compile Include="TasksProcessors\WorkLogTasksProcessor.cs" />
<Compile Include="TaskTime\ITaskTimeDiscoverer.cs" />
<Compile Include="TaskTime\ITaskTimeCalculator.cs" />
<Compile Include="TaskTime\TaskTimeDiscoverer.cs" />
<Compile Include="TaskTime\Objects\TaskTimeItem.cs" />
<Compile Include="UI\Tray\ITrayMenu.cs" />
+3 -3
View File
@@ -15,10 +15,10 @@ namespace JiraTimeBotForm
class Job
{
private readonly IMercurialLog _mercurialLog;
private readonly ITaskTimeDiscoverer _taskTimeDiscoverer;
private readonly ITaskTimeCalculator _taskTimeDiscoverer;
private readonly ILog _log;
public Job(IMercurialLog mercurialLog, ITaskTimeDiscoverer taskTimeDiscoverer, ILog log)
public Job(IMercurialLog mercurialLog, ITaskTimeCalculator taskTimeDiscoverer, ILog log)
{
_mercurialLog = mercurialLog;
_taskTimeDiscoverer = taskTimeDiscoverer;
@@ -45,7 +45,7 @@ namespace JiraTimeBotForm
DateTime date = DateTime.Now.Date.AddDays(daysDiff);
List<MercurialCommitItem> commits = _mercurialLog.GetMercurialLog(settings, date, cancellationToken);
List<TaskTimeItem> taskTimes = _taskTimeDiscoverer.GetTaskTimes(settings, commits, cancellationToken);
List<TaskTimeItem> taskTimes = _taskTimeDiscoverer.CalculateTaskTime(commits, settings, cancellationToken);
if (cancellationToken.IsCancellationRequested)
{
@@ -7,8 +7,8 @@ using JiraTimeBotForm.TaskTime.Objects;
namespace JiraTimeBotForm.TaskTime
{
public interface ITaskTimeDiscoverer
public interface ITaskTimeCalculator
{
List<TaskTimeItem> GetTaskTimes(Settings settings, List<MercurialCommitItem> commitItems, CancellationToken cancellationToken = default(CancellationToken));
List<TaskTimeItem> CalculateTaskTime(List<MercurialCommitItem> commitItems, Settings settings, CancellationToken cancellationToken = default(CancellationToken));
}
}
@@ -10,24 +10,24 @@ using JiraTimeBotForm.TaskTime.Objects;
namespace JiraTimeBotForm.TaskTime
{
public class TaskTimeDiscoverer: ITaskTimeDiscoverer
public class TaskTimeByCommitsCalculator: ITaskTimeCalculator
{
private readonly ILog _log;
public TaskTimeDiscoverer(ILog log)
public TaskTimeByCommitsCalculator(ILog log)
{
_log = log;
}
public List<TaskTimeItem> GetTaskTimes(Settings settings, List<MercurialCommitItem> commitItems, CancellationToken cancellationToken = default(CancellationToken))
public List<TaskTimeItem> CalculateTaskTime(List<MercurialCommitItem> commits, Settings settings, CancellationToken cancellationToken = default(CancellationToken))
{
int remainMinutes = settings.MinuterPerWorkDay;
int totalCommitsCount = commitItems.Count;
int totalCommitsCount = commits.Count;
List<TaskTimeItem> workTimeItems = new List<TaskTimeItem>();
//Нам нужно раскидать 480 минут в день.
foreach (var taskGroup in commitItems.GroupBy(f => f.Branch).OrderByDescending(f=>f.Count()))
foreach (var taskGroup in commits.GroupBy(f => f.Branch).OrderByDescending(f=>f.Count()))
{
if (cancellationToken.IsCancellationRequested)
{