mirror of
https://github.com/actions/runner.git
synced 2025-12-10 12:36:23 +00:00
Generic telemetry (#1321)
* Add generateIdTokenUrl as an env var * Add generateIdTokenUrl to env vars * Add basic telemetry class and submit it on jobcompleted * Use constructor overload * Rename telemetry to jobTelemetry * Rename telemetry file * Make JobTelemetryType a string * Collect telemetry * Remove debugger * Update src/Runner.Worker/ActionCommandManager.cs Co-authored-by: Thomas Boop <52323235+thboop@users.noreply.github.com> * Use same JobTelemetry for all contexts * Mask telemetry data * Mask in JobRunner instead * Empty line * Change method signature Returning with a List suggests we clone it and that the original doesn't change.. * Update launch.json Co-authored-by: Thomas Boop <52323235+thboop@users.noreply.github.com>
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
using GitHub.DistributedTask.Pipelines;
|
||||
using GitHub.DistributedTask.Pipelines.ContextData;
|
||||
using GitHub.DistributedTask.Pipelines.ContextData;
|
||||
using GitHub.DistributedTask.WebApi;
|
||||
using GitHub.Runner.Common.Util;
|
||||
using GitHub.Runner.Worker.Container;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -113,6 +111,15 @@ namespace GitHub.Runner.Worker
|
||||
context.Output(input);
|
||||
context.Debug("Paused processing commands until '##[{actionCommand.Data}]' is received");
|
||||
_stopToken = actionCommand.Data;
|
||||
if (_registeredCommands.Contains(actionCommand.Data) || string.IsNullOrEmpty(actionCommand.Data))
|
||||
{
|
||||
var telemetry = new JobTelemetry
|
||||
{
|
||||
Message = $"Invoked ::stopCommand:: with token: [{actionCommand.Data}]",
|
||||
Type = JobTelemetryType.ActionCommand
|
||||
};
|
||||
context.JobTelemetry.Add(telemetry);
|
||||
}
|
||||
_stopProcessCommand = true;
|
||||
_registeredCommands.Add(_stopToken);
|
||||
return true;
|
||||
|
||||
@@ -52,6 +52,7 @@ namespace GitHub.Runner.Worker
|
||||
Dictionary<string, VariableValue> JobOutputs { get; }
|
||||
ActionsEnvironmentReference ActionsEnvironment { get; }
|
||||
List<ActionsStepTelemetry> ActionsStepsTelemetry { get; }
|
||||
List<JobTelemetry> JobTelemetry { get; }
|
||||
DictionaryContextData ExpressionValues { get; }
|
||||
IList<IFunctionInfo> ExpressionFunctions { get; }
|
||||
JobContext JobContext { get; }
|
||||
@@ -150,6 +151,7 @@ namespace GitHub.Runner.Worker
|
||||
|
||||
public ActionsEnvironmentReference ActionsEnvironment { get; private set; }
|
||||
public List<ActionsStepTelemetry> ActionsStepsTelemetry { get; private set; }
|
||||
public List<JobTelemetry> JobTelemetry { get; private set; }
|
||||
public DictionaryContextData ExpressionValues { get; } = new DictionaryContextData();
|
||||
public IList<IFunctionInfo> ExpressionFunctions { get; } = new List<IFunctionInfo>();
|
||||
|
||||
@@ -294,6 +296,7 @@ namespace GitHub.Runner.Worker
|
||||
child.ContextName = contextName;
|
||||
child.EmbeddedId = embeddedId;
|
||||
child.SiblingScopeName = siblingScopeName;
|
||||
child.JobTelemetry = JobTelemetry;
|
||||
if (intraActionState == null)
|
||||
{
|
||||
child.IntraActionState = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
@@ -650,6 +653,8 @@ namespace GitHub.Runner.Worker
|
||||
// ActionsStepTelemetry
|
||||
ActionsStepsTelemetry = new List<ActionsStepTelemetry>();
|
||||
|
||||
JobTelemetry = new List<JobTelemetry>();
|
||||
|
||||
// Service container info
|
||||
Global.ServiceContainers = new List<ContainerInfo>();
|
||||
|
||||
|
||||
@@ -228,8 +228,12 @@ namespace GitHub.Runner.Worker
|
||||
return result;
|
||||
}
|
||||
|
||||
// Make sure we don't submit secrets as telemetry
|
||||
MaskTelemetrySecrets(jobContext.JobTelemetry);
|
||||
|
||||
Trace.Info("Raising job completed event.");
|
||||
var jobCompletedEvent = new JobCompletedEvent(message.RequestId, message.JobId, result, jobContext.JobOutputs, jobContext.ActionsEnvironment, jobContext.ActionsStepsTelemetry);
|
||||
var jobCompletedEvent = new JobCompletedEvent(message.RequestId, message.JobId, result, jobContext.JobOutputs, jobContext.ActionsEnvironment, jobContext.ActionsStepsTelemetry, jobContext.JobTelemetry);
|
||||
|
||||
|
||||
var completeJobRetryLimit = 5;
|
||||
var exceptions = new List<Exception>();
|
||||
@@ -273,6 +277,14 @@ namespace GitHub.Runner.Worker
|
||||
throw new AggregateException(exceptions);
|
||||
}
|
||||
|
||||
private void MaskTelemetrySecrets(List<JobTelemetry> jobTelemetry)
|
||||
{
|
||||
foreach (var telemetryItem in jobTelemetry)
|
||||
{
|
||||
telemetryItem.Message = HostContext.SecretMasker.MaskSecrets(telemetryItem.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ShutdownQueue(bool throwOnFailure)
|
||||
{
|
||||
if (_jobServerQueue != null)
|
||||
|
||||
@@ -155,6 +155,19 @@ namespace GitHub.DistributedTask.WebApi
|
||||
this.ActionsStepsTelemetry = actionsStepsTelemetry;
|
||||
}
|
||||
|
||||
public JobCompletedEvent(
|
||||
Int64 requestId,
|
||||
Guid jobId,
|
||||
TaskResult result,
|
||||
Dictionary<String, VariableValue> outputs,
|
||||
ActionsEnvironmentReference actionsEnvironment,
|
||||
List<ActionsStepTelemetry> actionsStepsTelemetry,
|
||||
List<JobTelemetry> jobTelemetry)
|
||||
: this(requestId, jobId, result, outputs, actionsEnvironment, actionsStepsTelemetry)
|
||||
{
|
||||
this.JobTelemetry = jobTelemetry;
|
||||
}
|
||||
|
||||
[DataMember(EmitDefaultValue = false)]
|
||||
public Int64 RequestId
|
||||
{
|
||||
@@ -189,6 +202,13 @@ namespace GitHub.DistributedTask.WebApi
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[DataMember(EmitDefaultValue = false)]
|
||||
public List<JobTelemetry> JobTelemetry
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
}
|
||||
|
||||
[DataContract]
|
||||
|
||||
17
src/Sdk/DTWebApi/WebApi/JobTelemetry.cs
Normal file
17
src/Sdk/DTWebApi/WebApi/JobTelemetry.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace GitHub.DistributedTask.WebApi
|
||||
{
|
||||
/// <summary>
|
||||
/// Information about a job run on the runner
|
||||
/// </summary>
|
||||
[DataContract]
|
||||
public class JobTelemetry
|
||||
{
|
||||
[DataMember(EmitDefaultValue = false)]
|
||||
public string Message { get; set; }
|
||||
|
||||
[DataMember(EmitDefaultValue = false)]
|
||||
public JobTelemetryType Type { get; set; }
|
||||
}
|
||||
}
|
||||
13
src/Sdk/DTWebApi/WebApi/JobTelemetryType.cs
Normal file
13
src/Sdk/DTWebApi/WebApi/JobTelemetryType.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace GitHub.DistributedTask.WebApi
|
||||
{
|
||||
public enum JobTelemetryType
|
||||
{
|
||||
[EnumMember]
|
||||
General = 0,
|
||||
|
||||
[EnumMember]
|
||||
ActionCommand = 1,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user