From 0dd7a113f1dfb410fe95540fe233c7169396717b Mon Sep 17 00:00:00 2001 From: Tingluo Huang Date: Mon, 19 Dec 2022 14:46:29 -0500 Subject: [PATCH] Log GitHub RequestId for better traceability. (#2332) --- .../Configuration/ConfigurationManager.cs | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/src/Runner.Listener/Configuration/ConfigurationManager.cs b/src/Runner.Listener/Configuration/ConfigurationManager.cs index 25217f9be..392eb0e3c 100644 --- a/src/Runner.Listener/Configuration/ConfigurationManager.cs +++ b/src/Runner.Listener/Configuration/ConfigurationManager.cs @@ -1,10 +1,3 @@ -using GitHub.DistributedTask.WebApi; -using GitHub.Runner.Common; -using GitHub.Runner.Common.Util; -using GitHub.Runner.Sdk; -using GitHub.Services.Common; -using GitHub.Services.Common.Internal; -using GitHub.Services.OAuth; using System; using System.Collections.Generic; using System.Linq; @@ -14,6 +7,13 @@ using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; +using GitHub.DistributedTask.WebApi; +using GitHub.Runner.Common; +using GitHub.Runner.Common.Util; +using GitHub.Runner.Sdk; +using GitHub.Services.Common; +using GitHub.Services.Common.Internal; +using GitHub.Services.OAuth; namespace GitHub.Runner.Listener.Configuration { @@ -636,7 +636,7 @@ namespace GitHub.Runner.Listener.Configuration } int retryCount = 0; - while(retryCount < 3) + while (retryCount < 3) { using (var httpClientHandler = HostContext.CreateHttpClientHandler()) using (var httpClient = new HttpClient(httpClientHandler)) @@ -646,28 +646,29 @@ namespace GitHub.Runner.Listener.Configuration httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("basic", base64EncodingToken); httpClient.DefaultRequestHeaders.UserAgent.AddRange(HostContext.UserAgents); httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/vnd.github.v3+json"); - + var responseStatus = System.Net.HttpStatusCode.OK; try { var response = await httpClient.PostAsync(githubApiUrl, new StringContent(string.Empty)); responseStatus = response.StatusCode; + var githubRequestId = GetGitHubRequestId(response.Headers); if (response.IsSuccessStatusCode) { - Trace.Info($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}'"); + Trace.Info($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}' ({githubRequestId})"); var jsonResponse = await response.Content.ReadAsStringAsync(); return StringUtil.ConvertFromJson(jsonResponse); } else { - _term.WriteError($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}'"); + _term.WriteError($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}' (Request Id: {githubRequestId})"); var errorResponse = await response.Content.ReadAsStringAsync(); _term.WriteError(errorResponse); response.EnsureSuccessStatusCode(); } } - catch(Exception ex) when (retryCount < 2 && responseStatus != System.Net.HttpStatusCode.NotFound) + catch (Exception ex) when (retryCount < 2 && responseStatus != System.Net.HttpStatusCode.NotFound) { retryCount++; Trace.Error($"Failed to get JIT runner token -- Atempt: {retryCount}"); @@ -714,22 +715,23 @@ namespace GitHub.Runner.Listener.Configuration { var response = await httpClient.PostAsync(githubApiUrl, new StringContent(StringUtil.ConvertToJson(bodyObject), null, "application/json")); responseStatus = response.StatusCode; + var githubRequestId = GetGitHubRequestId(response.Headers); - if(response.IsSuccessStatusCode) + if (response.IsSuccessStatusCode) { - Trace.Info($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}'"); + Trace.Info($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}' ({githubRequestId})"); var jsonResponse = await response.Content.ReadAsStringAsync(); return StringUtil.ConvertFromJson(jsonResponse); } else { - _term.WriteError($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}'"); + _term.WriteError($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}' (Request Id: {githubRequestId})"); var errorResponse = await response.Content.ReadAsStringAsync(); _term.WriteError(errorResponse); response.EnsureSuccessStatusCode(); } } - catch(Exception ex) when (retryCount < 2 && responseStatus != System.Net.HttpStatusCode.NotFound) + catch (Exception ex) when (retryCount < 2 && responseStatus != System.Net.HttpStatusCode.NotFound) { retryCount++; Trace.Error($"Failed to get tenant credentials -- Atempt: {retryCount}"); @@ -742,5 +744,14 @@ namespace GitHub.Runner.Listener.Configuration } return null; } + + private string GetGitHubRequestId(HttpResponseHeaders headers) + { + if (headers.TryGetValues("x-github-request-id", out var headerValues)) + { + return headerValues.FirstOrDefault(); + } + return string.Empty; + } } }