forked from petabridge/akka-bootcamp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGithubProgressStats.cs
107 lines (94 loc) · 3.24 KB
/
GithubProgressStats.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System;
using Octokit;
namespace GithubActors
{
/// <summary>
/// used to sort the list of similar repos
/// </summary>
public class SimilarRepo : IComparable<SimilarRepo>
{
public SimilarRepo(Repository repo)
{
Repo = repo;
}
public Repository Repo { get; private set; }
public int SharedStarrers { get; set; }
public int CompareTo(SimilarRepo other)
{
return SharedStarrers.CompareTo(other.SharedStarrers);
}
}
/// <summary>
/// Used to report on incremental progress.
///
/// Immutable.
/// </summary>
public class GithubProgressStats
{
public int ExpectedUsers { get; private set; }
public int UsersThusFar { get; private set; }
public int QueryFailures { get; private set; }
public DateTime StartTime { get; private set; }
public DateTime? EndTime { get; private set; }
public TimeSpan Elapsed
{
get
{
return ((EndTime.HasValue ? EndTime.Value : DateTime.UtcNow) -StartTime);
}
}
public bool IsFinished
{
get { return ExpectedUsers == UsersThusFar + QueryFailures; }
}
public GithubProgressStats()
{
StartTime = DateTime.UtcNow;
}
private GithubProgressStats(DateTime startTime, int expectedUsers, int usersThusFar, int queryFailures, DateTime? endTime)
{
EndTime = endTime;
QueryFailures = queryFailures;
UsersThusFar = usersThusFar;
ExpectedUsers = expectedUsers;
StartTime = startTime;
}
/// <summary>
/// Add <see cref="delta"/> users to the running total of <see cref="UsersThusFar"/>
/// </summary>
public GithubProgressStats UserQueriesFinished(int delta = 1)
{
return Copy(usersThusFar: UsersThusFar + delta);
}
/// <summary>
/// Set the <see cref="ExpectedUsers"/> total
/// </summary>
public GithubProgressStats SetExpectedUserCount(int totalExpectedUsers)
{
return Copy(expectedUsers: totalExpectedUsers);
}
/// <summary>
/// Add <see cref="delta"/> to the running <see cref="QueryFailures"/> total
/// </summary>
public GithubProgressStats IncrementFailures(int delta = 1)
{
return Copy(queryFailures: QueryFailures + delta);
}
/// <summary>
/// Query is finished! Set's the <see cref="EndTime"/>
/// </summary>
public GithubProgressStats Finish()
{
return Copy(endTime: DateTime.UtcNow);
}
/// <summary>
/// Creates a deep copy of the <see cref="GithubProgressStats"/> class
/// </summary>
public GithubProgressStats Copy(int? expectedUsers = null, int? usersThusFar = null, int? queryFailures = null,
DateTime? startTime = null, DateTime? endTime = null)
{
return new GithubProgressStats(startTime ?? StartTime, expectedUsers ?? ExpectedUsers, usersThusFar ?? UsersThusFar,
queryFailures ?? QueryFailures, endTime ?? EndTime);
}
}
}