public JobFailureInfo GetFailureInfo(JobId id) { var commandText = @" SELECT Reason,Messages FROM Failures WHERE Id=@Id"; using (var command = new SqlCommand(commandText, _connection)) { command.Parameters.AddWithValue("@Id", GetKey(id)); using (var reader = command.ExecuteReader()) { if (!reader.Read()) { throw new Exception("Missing data"); } var reason = reader.GetString(0); var messages = reader.GetString(1).Split(';').ToList(); return new JobFailureInfo( (JobFailureReason)(Enum.Parse(typeof(JobFailureReason), reason)), messages); } } }
public JobInfo GetJobInfo(JobId id) { var data = GetJson(id); var pr = GetPullRequestInfoCore(id, data); var state = GetJobStateCore(data); var date = GetJobDateCore(data); return new JobInfo(id, pr, state, date); }
public string GetConsoleText(JobId id) { var uri = JenkinsUtil.GetConsoleTextUri(id); var request = WebRequest.Create(uri); using (var reader = new StreamReader(request.GetResponse().GetResponseStream())) { return reader.ReadToEnd(); } }
public JobInfo GetJobInfo(JobId id) { var data = GetJson(id); var sha1 = GetSha1Core(data); var state = GetJobStateCore(data); var date = GetJobDateCore(data); var duration = TimeSpan.FromMilliseconds(data.Value<int>("duration")); return new JobInfo(id, state, sha1, date, duration); }
public JobState GetJobState(JobId id) { var data = GetJson(id); return GetJobStateCore(data); }
public static Uri GetJobUri(JobId id) { return GetUri(GetJobPath(id)); }
public static string GetJobPath(JobId id) { return $"job/{id.Name}/{id.Id}/"; }
private PullRequestInfo GetPullRequestInfoCore(JobId id, JObject data) { var actions = (JArray)data["actions"]; return JsonUtil.ParsePullRequestInfo(actions); }
private JObject GetJson(JobId jobId) { var path = JenkinsUtil.GetJobPath(jobId); return GetJson(path); }
private static string GetKey(JobId id) { // TODO: implement throw new NotImplementedException(); }
public void InsertRetest(JobId jobId, string sha) { var commandText = @" INSERT INTO dbo.Retests (Id, Sha, Handled) VALUES (@Id, @Sha, @Handled)"; using (var command = new SqlCommand(commandText, _connection)) { var p = command.Parameters; p.AddWithValue("@Id", GetKey(jobId)); p.AddWithValue("@Sha", sha); p.AddWithValue("@Handled", 0); try { command.ExecuteNonQuery(); } catch (Exception ex) { Console.WriteLine($"Could not insert retest {jobId}"); Console.WriteLine(ex.Message); } } }
public RetestInfo(JobId jobId, string sha, bool handled, string note = null) { JobId = jobId; Sha = sha; Handled = handled; Note = note ?? string.Empty; }
public JobInfo(JobId id, PullRequestInfo pullRequestInfo, JobState state, DateTime date) { Id = id; PullRequestInfo = pullRequestInfo; State = state; Date = date; }
public JobResult GetJobResult(JobId id) { var data = GetJson(id); var state = GetJobStateCore(data); var date = GetJobDateCore(data); var jobInfo = new JobInfo( id, state, GetSha1Core(data), date, TimeSpan.FromMilliseconds(data.Value<int>("duration"))); if (state == JobState.Failed) { var failureInfo = GetJobFailureInfo(id, data); return new JobResult(jobInfo, failureInfo); } return new JobResult(jobInfo); }
public PullRequestInfo GetPullRequestInfo(JobId id) { var data = GetJson(id); return GetPullRequestInfoCore(id, data); }
/// <summary> /// Attempt to determine the failure reason for the given Job. This should only be called on /// jobs that are known to have failed. /// </summary> private JobFailureInfo GetJobFailureInfo(JobId jobId, JObject data) { // First look for the test failure information. List<string> failedTestList; if (TryGetTestFailureReason(jobId, data, out failedTestList)) { Debug.Assert(failedTestList.Count > 0); return new JobFailureInfo(JobFailureReason.TestCase, failedTestList); } // Now look at the console text. var consoleText = GetConsoleText(jobId); JobFailureInfo failureInfo; if (ConsoleTextUtil.TryGetFailureInfo(consoleText, out failureInfo)) { return failureInfo; } return JobFailureInfo.Unknown; }
public int GetPullRequestId(JobId id) { var commandText = @" SELECT PullRequestId FROM Jobs WHERE Id=@Id"; using (var command = new SqlCommand(commandText, _connection)) { command.Parameters.AddWithValue("@Id", GetKey(id)); var list = new List<Tuple<JobId, string>>(); using (var reader = command.ExecuteReader()) { if (!reader.Read()) { throw new Exception("Missing data"); } return reader.GetInt32(0); } } }
private PullRequestInfo GetPullRequestInfoCore(JobId id, JObject data) { var actions = (JArray)data["actions"]; string baseUrl; int parentBuildId; if (JsonUtil.IsChildJob(actions, out baseUrl, out parentBuildId)) { return GetParentJobPullRequestInfo(baseUrl, parentBuildId); } // If it's not a child then it is the parent. return JsonUtil.ParseParentJobPullRequestInfo(actions); }
public static string GetConsoleTextPath(JobId id) { return $"{GetJobPath(id)}consoleText"; }
// TODO: This should be in JenkinsUtil private bool TryGetTestFailureReason(JobId jobId, JObject data, out List<string> failedTestList) { var actions = (JArray)data["actions"]; foreach (var cur in actions) { var failCount = cur.Value<int?>("failCount"); if (failCount != null && failCount.Value != 0) { var testReportUrl = cur.Value<string>("urlName"); var path = $"{JenkinsUtil.GetJobPath(jobId)}{testReportUrl}/"; failedTestList = GetFailedTests(path); return true; } } failedTestList = null; return false; }
public static Uri GetConsoleTextUri(JobId id) { return GetUri(GetConsoleTextPath(id)); }
public JobResult GetJobResult(JobId id) { var data = GetJson(id); var state = GetJobStateCore(data); var date = GetJobDateCore(data); var jobInfo = new JobInfo( id, GetPullRequestInfoCore(id, data), state, date); if (state == JobState.Failed) { var failureInfo = GetJobFailureInfo(id, data); return new JobResult(jobInfo, failureInfo); } return new JobResult(jobInfo); }
public JobInfo(JobId id, JobState state, string sha1, DateTime date, TimeSpan duration) { Id = id; State = state; Date = date; Sha = sha1; Duration = duration; }