Skip to content

Commit

Permalink
Jenkins refactoring: Re# suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
gerhardol committed Sep 9, 2020
1 parent 857c1c3 commit d5bb473
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 27 deletions.
2 changes: 1 addition & 1 deletion GitUI/BuildServerIntegration/BuildServerWatcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public async Task LaunchBuildServerInfoFetchOperationAsync()
{
fullDayObservable.OnErrorResumeNext(fullObservable)
.OnErrorResumeNext(Observable.Empty<BuildInfo>()
.DelaySubscription(TimeSpan.FromMinutes(1))
.DelaySubscription(LongPollInterval)
.OnErrorResumeNext(fromNowObservable)
.Retry()
.Repeat())
Expand Down
48 changes: 22 additions & 26 deletions Plugins/BuildServerIntegration/JenkinsIntegration/JenkinsAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,21 +115,21 @@ private void AddGetBuildUrl(string projectUrl)
}
}

public class ResponseInfo
private class ResponseInfo
{
public string Url { get; set; }
public long Timestamp { get; set; }
public IEnumerable<JToken> JobDescription { get; set; }
}

public class JenkinsCacheInfo
private class JenkinsCacheInfo
{
public long Timestamp = -1;
}

private async Task<ResponseInfo> GetBuildInfoTaskAsync(string projectUrl, bool fullInfo, CancellationToken cancellationToken)
{
string t = null;
string t;
long timestamp = 0;
IEnumerable<JToken> s = Enumerable.Empty<JToken>();

Expand Down Expand Up @@ -161,11 +161,13 @@ private async Task<ResponseInfo> GetBuildInfoTaskAsync(string projectUrl, bool f
{
try
{
if (j["lastBuild"] != null && j["lastBuild"]["timestamp"] != null)
if (j["lastBuild"] == null || j["lastBuild"]["timestamp"] == null)
{
var ts = j["lastBuild"]["timestamp"];
timestamp = Math.Max(timestamp, ts.ToObject<long>());
continue;
}

var ts = j["lastBuild"]["timestamp"];
timestamp = Math.Max(timestamp, ts.ToObject<long>());
}
catch
{
Expand Down Expand Up @@ -194,28 +196,27 @@ public IObservable<BuildInfo> GetFinishedBuildsSince(IScheduler scheduler, DateT
// GetBuilds() will return the same builds as for GetRunningBuilds().
// Multiple calls will fetch same info multiple times and make debugging very confusing
// Similar as for AppVeyor
// 'sinceDate' is not supported in Jenkins API
return Observable.Empty<BuildInfo>();
}

public IObservable<BuildInfo> GetRunningBuilds(IScheduler scheduler)
{
return GetBuilds(scheduler, null, true);
return GetBuilds(scheduler);
}

private IObservable<BuildInfo> GetBuilds(IScheduler scheduler, DateTime? sinceDate = null, bool? running = null)
private IObservable<BuildInfo> GetBuilds(IScheduler scheduler)
{
return Observable.Create<BuildInfo>((observer, cancellationToken) =>
ThreadHelper.JoinableTaskFactory.RunAsync(async () =>
{
await TaskScheduler.Default;
return scheduler.Schedule(() => ObserveBuilds(sinceDate, running, observer, cancellationToken));
return scheduler.Schedule(() => ObserveBuilds(observer, cancellationToken));
}).Task);
}

private void ObserveBuilds(DateTime? sinceDate, bool? running, IObserver<BuildInfo> observer, CancellationToken cancellationToken)
private void ObserveBuilds(IObserver<BuildInfo> observer, CancellationToken cancellationToken)
{
// Note that 'running' is ignored (attempt to fetch data when updated)
// Similar for 'sinceDate', not supported in Jenkins API
try
{
var allBuildInfos = new List<JoinableTask<ResponseInfo>>();
Expand Down Expand Up @@ -335,7 +336,7 @@ private void ObserveBuilds(DateTime? sinceDate, bool? running, IObserver<BuildIn

return;

bool StatusIsBetter(BuildInfo buildInfo, ObjectId commit, Dictionary<ObjectId, BuildInfo.BuildStatus> builds)
static bool StatusIsBetter(BuildInfo buildInfo, ObjectId commit, Dictionary<ObjectId, BuildInfo.BuildStatus> builds)
{
return

Expand Down Expand Up @@ -429,7 +430,7 @@ private BuildInfo CreateBuildInfo(JObject buildDescription)
return buildInfo;
}

public static DateTime TimestampToDateTime(long timestamp)
private static DateTime TimestampToDateTime(long timestamp)
{
return new DateTime(1970, 1, 1, 0, 0, 0, DateTime.Now.Kind).AddMilliseconds(timestamp);
}
Expand All @@ -442,21 +443,16 @@ private static AuthenticationHeaderValue CreateBasicHeader(string username, stri

private static BuildInfo.BuildStatus ParseBuildStatus(string statusValue)
{
switch (statusValue)
return statusValue switch
{
case "SUCCESS":
return BuildInfo.BuildStatus.Success;
case "FAILURE":
return BuildInfo.BuildStatus.Failure;
case "UNSTABLE":
return BuildInfo.BuildStatus.Unstable;
case "ABORTED":
return BuildInfo.BuildStatus.Stopped;
"SUCCESS" => BuildInfo.BuildStatus.Success,
"FAILURE" => BuildInfo.BuildStatus.Failure,
"UNSTABLE" => BuildInfo.BuildStatus.Unstable,
"ABORTED" => BuildInfo.BuildStatus.Stopped,

// NOT_BUILT
default:
return BuildInfo.BuildStatus.Unknown;
}
_ => BuildInfo.BuildStatus.Unknown
};
}

private async Task<Stream> GetStreamAsync(string restServicePath, CancellationToken cancellationToken)
Expand Down

0 comments on commit d5bb473

Please sign in to comment.