Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.
/ NuGet.Jobs Public archive

Added EventName property to the PackageValidationAuditEntry #133

Merged
merged 3 commits into from
Apr 25, 2017
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Validation.Common/PackageValidationAuditEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ namespace NuGet.Jobs.Validation.Common
public class PackageValidationAuditEntry
{
public string ValidatorName { get; set; }
public string EventName { get; set; }
public string Message { get; set; }
public DateTimeOffset Timestamp { get; set; }
}
Expand Down
1 change: 1 addition & 0 deletions src/Validation.Common/Validation.Common.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@
<Compile Include="TraceConstant.cs" />
<Compile Include="TraceEvent.cs" />
<Compile Include="TraceHelper.cs" />
<Compile Include="ValidationEvent.cs" />
<Compile Include="Validators\IValidator.cs" />
<Compile Include="Validators\Unzip\UnzipValidator.cs" />
<Compile Include="Validators\ValidationResult.cs" />
Expand Down
71 changes: 71 additions & 0 deletions src/Validation.Common/ValidationEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
using System;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a copyright header.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NuGet.Jobs.Validation.Common
{
public static class ValidationEvent
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider turning this into enums

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you're concerned about the human readability of having an enum, I would suggest having two fields

        {
            "ValidatorName": "validator-unzip",
            "Message": "Found 4 parts in package.",
            "Timestamp": "2017-03-31T22:09:00.7356706+00:00"
            "EventId": 1,
            "EventName": "BeforeVirusScan"
        }

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

{
/// <summary>
/// Virus scan request is about to be sent
/// </summary>
public const string BeforeVirusScanRequest = "BeforeVirusScan";

/// <summary>
/// The validation queue item was deadlettered after several attempts of processing
/// </summary>
public const string Deadlettered = "Deadlettered";

/// <summary>
/// The detail item passed with a <see cref="PackageNotClean"/> result
/// </summary>
public const string NotCleanReason = "NotCleanReason";

/// <summary>
/// Virus scan service reported package as clean
/// </summary>
public const string PackageClean = "PackageClean";

/// <summary>
/// Packages download was successful
/// </summary>
public const string PackageDownloaded = "PackageDownloaded";

/// <summary>
/// Virus scan service reported package as not clean
/// </summary>
public const string PackageNotClean = "PackageNotClean";

/// <summary>
/// Virus scan service reported its failure to scan package (it does *not* mean package is not clean)
/// </summary>
public const string ScanFailed = "ScanFailed";

/// <summary>
/// The detail item passed with <see cref="ScanFailed"/> result
/// </summary>
public const string ScanFailureReason = "ScanFailureReason";

/// <summary>
/// An exception was thrown during validator execution
/// </summary>
public const string ValidatorException = "ValidatorException";

/// <summary>
/// The virus scan request was submitted
/// </summary>
public const string VirusScanRequestSent = "VirusScanRequestSent";

/// <summary>
/// Sending the virus scanning request had failed
/// </summary>
public const string VirusScanRequestFailed = "VirusScanRequestFailed";

/// <summary>
/// Package was successfully unzipped
/// </summary>
public const string UnzipSucceeeded = "UnzipSucceeeded";
}
}
9 changes: 6 additions & 3 deletions src/Validation.Common/Validators/Unzip/UnzipValidator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,17 @@ public override async Task<ValidationResult> ValidateAsync(PackageValidationMess
await packageStream.CopyToAsync(packageFileStream);

_logger.LogInformation($"Downloaded package from {{{TraceConstant.Url}}}", message.Package.DownloadUrl);
WriteAuditEntry(auditEntries, $"Downloaded package from {message.Package.DownloadUrl}");
WriteAuditEntry(auditEntries, $"Downloaded package from {message.Package.DownloadUrl}",
ValidationEvent.PackageDownloaded);

packageFileStream.Position = 0;

using (var packageZipStream = Package.Open(packageFileStream))
{
var parts = packageZipStream.GetParts();
_logger.LogInformation("Found {PartsCount} parts in package.", parts.Count());
WriteAuditEntry(auditEntries, $"Found {parts.Count()} parts in package.");
WriteAuditEntry(auditEntries, $"Found {parts.Count()} parts in package.",
ValidationEvent.UnzipSucceeeded);

return ValidationResult.Succeeded;
}
Expand All @@ -65,7 +67,8 @@ public override async Task<ValidationResult> ValidateAsync(PackageValidationMess
catch (Exception ex)
{
_logger.TrackValidatorException(ValidatorName, message.ValidationId, ex, message.PackageId, message.PackageVersion);
WriteAuditEntry(auditEntries, $"Exception thrown during validation - {ex.Message}\r\n{ex.StackTrace}");
WriteAuditEntry(auditEntries, $"Exception thrown during validation - {ex.Message}\r\n{ex.StackTrace}",
ValidationEvent.ValidatorException);
return ValidationResult.Failed;
}
finally
Expand Down
5 changes: 3 additions & 2 deletions src/Validation.Common/Validators/ValidatorBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@ public virtual TimeSpan VisibilityTimeout

public abstract Task<ValidationResult> ValidateAsync(PackageValidationMessage message, List<PackageValidationAuditEntry> auditEntries);

protected void WriteAuditEntry(List<PackageValidationAuditEntry> auditEntries, string message)
protected void WriteAuditEntry(List<PackageValidationAuditEntry> auditEntries, string message, string eventName)
{
auditEntries.Add(new PackageValidationAuditEntry
{
Timestamp = DateTimeOffset.UtcNow,
ValidatorName = Name,
Message = message
Message = message,
EventName = eventName
});
}
}
Expand Down
15 changes: 10 additions & 5 deletions src/Validation.Common/Validators/Vcs/VcsCallbackServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,8 @@ await _notificationService.SendNotificationAsync(
{
Timestamp = DateTimeOffset.UtcNow,
ValidatorName = VcsValidator.ValidatorName,
Message = "Package did not scan clean."
Message = "Package did not scan clean.",
EventName = ValidationEvent.PackageNotClean
});

if (result.ResultReasons?.ResultReason != null)
Expand All @@ -189,7 +190,8 @@ await _notificationService.SendNotificationAsync(
{
Timestamp = DateTimeOffset.UtcNow,
ValidatorName = VcsValidator.ValidatorName,
Message = resultReason.RefId + " " + resultReason.Result + " " + resultReason.Determination
Message = resultReason.RefId + " " + resultReason.Result + " " + resultReason.Determination,
EventName = ValidationEvent.NotCleanReason
});
}
}
Expand Down Expand Up @@ -231,7 +233,8 @@ await _packageValidationAuditor.WriteAuditEntryAsync(validationEntity.Validation
{
Timestamp = DateTimeOffset.UtcNow,
ValidatorName = VcsValidator.ValidatorName,
Message = "Package scanned clean."
Message = "Package scanned clean.",
EventName = ValidationEvent.PackageClean
});
}
else if (result.Result == "Results" || result.Result == "Fail")
Expand All @@ -252,7 +255,8 @@ await _packageValidationAuditor.WriteAuditEntryAsync(validationEntity.Validation
{
Timestamp = DateTimeOffset.UtcNow,
ValidatorName = VcsValidator.ValidatorName,
Message = $"Package scan failed. Response: {body}"
Message = $"Package scan failed. Response: {body}",
EventName = ValidationEvent.ScanFailed
});

if (result.ResultReasons?.ResultReason != null)
Expand All @@ -263,7 +267,8 @@ await _packageValidationAuditor.WriteAuditEntryAsync(validationEntity.Validation
{
Timestamp = DateTimeOffset.UtcNow,
ValidatorName = VcsValidator.ValidatorName,
Message = resultReason.RefId + " " + resultReason.Result + " " + resultReason.Determination
Message = resultReason.RefId + " " + resultReason.Result + " " + resultReason.Determination,
EventName = ValidationEvent.ScanFailureReason
});
}
}
Expand Down
9 changes: 6 additions & 3 deletions src/Validation.Common/Validators/Vcs/VcsValidator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ public override async Task<ValidationResult> ValidateAsync(PackageValidationMess
message.ValidationId,
message.PackageId,
message.PackageVersion);
WriteAuditEntry(auditEntries, $"Submitting virus scan job with description \"{description}\"...");
WriteAuditEntry(auditEntries, $"Submitting virus scan job with description \"{description}\"...",
ValidationEvent.BeforeVirusScanRequest);

string errorMessage;
try
Expand All @@ -72,7 +73,8 @@ public override async Task<ValidationResult> ValidateAsync(PackageValidationMess
result.RegionCode);
WriteAuditEntry(auditEntries, $"Submission completed. Request id: {result.RequestId} " +
$"- job id: {result.JobId} " +
$"- region code: {result.RegionCode}");
$"- region code: {result.RegionCode}",
ValidationEvent.VirusScanRequestSent);
return ValidationResult.Asynchronous;
}
else
Expand All @@ -96,7 +98,8 @@ public override async Task<ValidationResult> ValidateAsync(PackageValidationMess
_logger.TrackValidatorException(ValidatorName, message.ValidationId, ex, message.PackageId, message.PackageVersion);
}

WriteAuditEntry(auditEntries, $"Submission failed. Error message: {errorMessage}");
WriteAuditEntry(auditEntries, $"Submission failed. Error message: {errorMessage}",
ValidationEvent.VirusScanRequestFailed);
return ValidationResult.Failed;
}

Expand Down
6 changes: 4 additions & 2 deletions src/Validation.Runner/Job.cs
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,8 @@ private async Task RunValidationsAsync(IValidator validator)
{
Timestamp = DateTimeOffset.UtcNow,
ValidatorName = validator.Name,
Message = $"Message has been attempted too many times and is being deadlettered. Aborting validator."
Message = $"Message has been attempted too many times and is being deadlettered. Aborting validator.",
EventName = ValidationEvent.Deadlettered
});
}

Expand Down Expand Up @@ -215,7 +216,8 @@ private async Task RunValidationsAsync(IValidator validator)
{
Timestamp = DateTimeOffset.UtcNow,
ValidatorName = validator.Name,
Message = $"Exception thrown during validation - {ex.Message}\r\n{ex.StackTrace}"
Message = $"Exception thrown during validation - {ex.Message}\r\n{ex.StackTrace}",
EventName = ValidationEvent.ValidatorException
});

_logger.LogError(TraceEvent.ValidatorException, ex,
Expand Down