Trace x-github-request-id when download action tarball. (#2755)

This commit is contained in:
Tingluo Huang
2023-08-15 19:00:54 -04:00
committed by GitHub
parent d88823c634
commit 4f40f29cff
5 changed files with 32 additions and 20 deletions

View File

@@ -19,8 +19,6 @@ namespace GitHub.Runner.Common
Task<DistributedTask.WebApi.Runner> AddRunnerAsync(int runnerGroupId, TaskAgent agent, string githubUrl, string githubToken, string publicKey); Task<DistributedTask.WebApi.Runner> AddRunnerAsync(int runnerGroupId, TaskAgent agent, string githubUrl, string githubToken, string publicKey);
Task<List<TaskAgentPool>> GetRunnerGroupsAsync(string githubUrl, string githubToken); Task<List<TaskAgentPool>> GetRunnerGroupsAsync(string githubUrl, string githubToken);
string GetGitHubRequestId(HttpResponseHeaders headers);
} }
public enum RequestType public enum RequestType
@@ -195,7 +193,7 @@ namespace GitHub.Runner.Common
if (response != null) if (response != null)
{ {
responseStatus = response.StatusCode; responseStatus = response.StatusCode;
var githubRequestId = GetGitHubRequestId(response.Headers); var githubRequestId = UrlUtil.GetGitHubRequestId(response.Headers);
if (response.IsSuccessStatusCode) if (response.IsSuccessStatusCode)
{ {
@@ -224,14 +222,5 @@ namespace GitHub.Runner.Common
await Task.Delay(backOff); await Task.Delay(backOff);
} }
} }
public string GetGitHubRequestId(HttpResponseHeaders headers)
{
if (headers.TryGetValues("x-github-request-id", out var headerValues))
{
return headerValues.FirstOrDefault();
}
return string.Empty;
}
} }
} }

View File

@@ -709,7 +709,7 @@ namespace GitHub.Runner.Listener.Configuration
{ {
var response = await httpClient.PostAsync(githubApiUrl, new StringContent(string.Empty)); var response = await httpClient.PostAsync(githubApiUrl, new StringContent(string.Empty));
responseStatus = response.StatusCode; responseStatus = response.StatusCode;
var githubRequestId = _dotcomServer.GetGitHubRequestId(response.Headers); var githubRequestId = UrlUtil.GetGitHubRequestId(response.Headers);
if (response.IsSuccessStatusCode) if (response.IsSuccessStatusCode)
{ {
@@ -772,7 +772,7 @@ namespace GitHub.Runner.Listener.Configuration
{ {
var response = await httpClient.PostAsync(githubApiUrl, new StringContent(StringUtil.ConvertToJson(bodyObject), null, "application/json")); var response = await httpClient.PostAsync(githubApiUrl, new StringContent(StringUtil.ConvertToJson(bodyObject), null, "application/json"));
responseStatus = response.StatusCode; responseStatus = response.StatusCode;
var githubRequestId = _dotcomServer.GetGitHubRequestId(response.Headers); var githubRequestId = UrlUtil.GetGitHubRequestId(response.Headers);
if (response.IsSuccessStatusCode) if (response.IsSuccessStatusCode)
{ {

View File

@@ -1,4 +1,6 @@
using System; using System;
using System.Linq;
using System.Net.Http.Headers;
namespace GitHub.Runner.Sdk namespace GitHub.Runner.Sdk
{ {
@@ -48,5 +50,15 @@ namespace GitHub.Runner.Sdk
return credUri.Uri; return credUri.Uri;
} }
public static string GetGitHubRequestId(HttpResponseHeaders headers)
{
if (headers != null &&
headers.TryGetValues("x-github-request-id", out var headerValues))
{
return headerValues.FirstOrDefault();
}
return string.Empty;
}
} }
} }

View File

@@ -10,15 +10,15 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using GitHub.DistributedTask.ObjectTemplating.Tokens; using GitHub.DistributedTask.ObjectTemplating.Tokens;
using GitHub.DistributedTask.WebApi;
using GitHub.Runner.Common; using GitHub.Runner.Common;
using GitHub.Runner.Common.Util; using GitHub.Runner.Common.Util;
using GitHub.Runner.Sdk; using GitHub.Runner.Sdk;
using GitHub.Runner.Worker.Container; using GitHub.Runner.Worker.Container;
using GitHub.Services.Common; using GitHub.Services.Common;
using WebApi = GitHub.DistributedTask.WebApi;
using Pipelines = GitHub.DistributedTask.Pipelines; using Pipelines = GitHub.DistributedTask.Pipelines;
using PipelineTemplateConstants = GitHub.DistributedTask.Pipelines.ObjectTemplating.PipelineTemplateConstants; using PipelineTemplateConstants = GitHub.DistributedTask.Pipelines.ObjectTemplating.PipelineTemplateConstants;
using GitHub.DistributedTask.WebApi; using WebApi = GitHub.DistributedTask.WebApi;
namespace GitHub.Runner.Worker namespace GitHub.Runner.Worker
{ {
@@ -835,6 +835,12 @@ namespace GitHub.Runner.Worker
httpClient.DefaultRequestHeaders.UserAgent.AddRange(HostContext.UserAgents); httpClient.DefaultRequestHeaders.UserAgent.AddRange(HostContext.UserAgents);
using (var response = await httpClient.GetAsync(link)) using (var response = await httpClient.GetAsync(link))
{ {
var requestId = UrlUtil.GetGitHubRequestId(response.Headers);
if (!string.IsNullOrEmpty(requestId))
{
Trace.Info($"Request URL: {link} X-GitHub-Request-Id: {requestId} Http Status: {response.StatusCode}");
}
if (response.IsSuccessStatusCode) if (response.IsSuccessStatusCode)
{ {
using (var result = await response.Content.ReadAsStreamAsync()) using (var result = await response.Content.ReadAsStreamAsync())
@@ -849,7 +855,7 @@ namespace GitHub.Runner.Worker
else if (response.StatusCode == HttpStatusCode.NotFound) else if (response.StatusCode == HttpStatusCode.NotFound)
{ {
// It doesn't make sense to retry in this case, so just stop // It doesn't make sense to retry in this case, so just stop
throw new ActionNotFoundException(new Uri(link)); throw new ActionNotFoundException(new Uri(link), requestId);
} }
else else
{ {

View File

@@ -5,8 +5,8 @@ namespace GitHub.Runner.Worker
{ {
public class ActionNotFoundException : Exception public class ActionNotFoundException : Exception
{ {
public ActionNotFoundException(Uri actionUri) public ActionNotFoundException(Uri actionUri, string requestId)
: base(FormatMessage(actionUri)) : base(FormatMessage(actionUri, requestId))
{ {
} }
@@ -25,8 +25,13 @@ namespace GitHub.Runner.Worker
{ {
} }
private static string FormatMessage(Uri actionUri) private static string FormatMessage(Uri actionUri, string requestId)
{ {
if (!string.IsNullOrEmpty(requestId))
{
return $"An action could not be found at the URI '{actionUri}' ({requestId})";
}
return $"An action could not be found at the URI '{actionUri}'"; return $"An action could not be found at the URI '{actionUri}'";
} }
} }