Skip to content

Commit

Permalink
Merge pull request #32 from purview-dev/adding-new-diagnostic
Browse files Browse the repository at this point in the history
feat: added new diagnostic (info) for when no Activity method is defi…
  • Loading branch information
kieronlanning authored May 20, 2024
2 parents 3c363b2 + 2cca495 commit 3984f1b
Show file tree
Hide file tree
Showing 75 changed files with 3,369 additions and 12 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ SOLUTION_FILE = $(ROOT_FOLDER)Purview.Telemetry.SourceGenerator.sln
TEST_PROJECT = $(ROOT_FOLDER)Purview.Telemetry.SourceGenerator.sln
CONFIGURATION = Release

PACK_VERSION = 1.0.5
PACK_VERSION = 1.0.6
ARTIFACT_FOLDER = p:/sync-projects/.local-nuget/

# Targets
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ public async Task Generate_GivenBasicContextGen_GeneratesActivity()
namespace Testing;
[ActivitySource(""testing-activity-source"")]
public interface ITestActivities {
public interface ITestActivities
{
[Activity]
void Activity();
[Context]
void Context([Baggage]string stringParam, [Tag]int intParam, bool boolParam);
}
Expand All @@ -36,7 +40,11 @@ public async Task Generate_GivenBasicContextGenWithReturningActivity_GeneratesAc
namespace Testing;
[ActivitySource(""testing-activity-source"")]
public interface ITestActivities {
public interface ITestActivities
{
[Activity]
void Activity();
[Context]
Activity Context([Baggage]string stringParam, [Tag]int intParam, bool boolParam);
}
Expand All @@ -61,6 +69,9 @@ namespace Testing;
[ActivitySource(""testing-activity-source"")]
public interface ITestActivities {
[Activity]
void Activity();
[Context]
Activity Context([Baggage]string stringParam, [Tag]int intParam, bool boolParam);
Expand All @@ -87,7 +98,11 @@ public async Task Generate_GivenBasicContextGenWithNullableParams_GeneratesActiv
namespace Testing;
[ActivitySource(""testing-activity-source"")]
public interface ITestActivities {
public interface ITestActivities
{
[Activity]
void Activity();
[Context]
Activity Context([Baggage]string? stringParam, [Tag]int? intParam, bool? boolParam);
Expand All @@ -114,7 +129,11 @@ public async Task Generate_GivenBasicContextGenWithActivity_GeneratesActivity()
namespace Testing;
[ActivitySource(""testing-activity-source"")]
public interface ITestActivities {
public interface ITestActivities
{
[Activity]
void Activity();
[Context]
Activity Context(Activity activityParameter, [Baggage]string? stringParam, [Tag]int? intParam, bool? boolParam);
Expand All @@ -141,7 +160,11 @@ public async Task Generate_GivenBasicContextGenWithActivityAndNoReturn_Generates
namespace Testing;
[ActivitySource(""testing-activity-source"")]
public interface ITestActivities {
public interface ITestActivities
{
[Activity]
void Activity();
[Context]
void Context(Activity activityParameter, [Baggage]string? stringParam, [Tag]int? intParam, bool? boolParam);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ public async Task Generate_GivenBasicEventWithActivityParameter_GeneratesActivit
namespace Testing;
[ActivitySource(""testing-activity-source"")]
public interface ITestActivities {
public interface ITestActivities
{
[Activity]
void Activity();
[Event]
void Event(Activity activity, [Baggage]string stringParam, [Tag]int intParam, bool boolParam);
}
Expand All @@ -37,7 +41,11 @@ public async Task Generate_GivenBasicEventWithNullableActivityParameter_Generate
namespace Testing;
[ActivitySource(""testing-activity-source"")]
public interface ITestActivities {
public interface ITestActivities
{
[Activity]
void Activity();
[Event]
void Event(Activity? activity, [Baggage]string stringParam, [Tag]int intParam, bool boolParam);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,32 @@ public interface ITestActivities {
await TestHelpers.Verify(generationResult);
}

[Fact]
public async Task Generate_GivenInterfaceWithNoActivityButOtherActivityBasedMethods_GeneratesDiagnostic()
{
// Arrange
const string basicActivity = @"
using Purview.Telemetry.Activities;
namespace Testing;
[ActivitySource(""testing-activity-source"")]
public interface ITestActivities {
[Context]
void Activity([Baggage]string stringParam, [Tag]int intParam, bool boolParam);
[Event]
void Event([Baggage]string stringParam, [Tag]int intParam, bool boolParam);
}
";

// Act
var generationResult = await GenerateAsync(basicActivity);

// Assert
await TestHelpers.Verify(generationResult, config: s => s.ScrubInlineGuids(), validateNonEmptyDiagnostics: true);
}

[Fact]
public async Task Generate_GivenBasicGenAndNoActivityName_GeneratesActivity()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ static void RecordExceptionInternal(System.Diagnostics.Activity? activity, Syste
activity.AddEvent(recordExceptionEvent);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Activity()
{
System.Diagnostics.Activity? activityActivity = _activitySource.StartActivity(name: "Activity", kind: System.Diagnostics.ActivityKind.Internal, parentId: default, tags: default, links: default, startTime: default);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Context(System.Diagnostics.Activity activityParameter, string? stringParam, int? intParam, bool? boolParam)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ static void RecordExceptionInternal(System.Diagnostics.Activity? activity, Syste
activity.AddEvent(recordExceptionEvent);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Activity()
{
System.Diagnostics.Activity? activityActivity = _activitySource.StartActivity(name: "Activity", kind: System.Diagnostics.ActivityKind.Internal, parentId: default, tags: default, links: default, startTime: default);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public System.Diagnostics.Activity Context(System.Diagnostics.Activity activityParameter, string? stringParam, int? intParam, bool? boolParam)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ static void RecordExceptionInternal(System.Diagnostics.Activity? activity, Syste
activity.AddEvent(recordExceptionEvent);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Activity()
{
System.Diagnostics.Activity? activityActivity = _activitySource.StartActivity(name: "Activity", kind: System.Diagnostics.ActivityKind.Internal, parentId: default, tags: default, links: default, startTime: default);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public System.Diagnostics.Activity Context(string? stringParam, int? intParam, bool? boolParam)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ static void RecordExceptionInternal(System.Diagnostics.Activity? activity, Syste
activity.AddEvent(recordExceptionEvent);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Activity()
{
System.Diagnostics.Activity? activityActivity = _activitySource.StartActivity(name: "Activity", kind: System.Diagnostics.ActivityKind.Internal, parentId: default, tags: default, links: default, startTime: default);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public System.Diagnostics.Activity Context(string stringParam, int intParam, bool boolParam)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ static void RecordExceptionInternal(System.Diagnostics.Activity? activity, Syste
activity.AddEvent(recordExceptionEvent);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Activity()
{
System.Diagnostics.Activity? activityActivity = _activitySource.StartActivity(name: "Activity", kind: System.Diagnostics.ActivityKind.Internal, parentId: default, tags: default, links: default, startTime: default);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public System.Diagnostics.Activity Context(string stringParam, int intParam, bool boolParam)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ static void RecordExceptionInternal(System.Diagnostics.Activity? activity, Syste
activity.AddEvent(recordExceptionEvent);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Activity()
{
System.Diagnostics.Activity? activityActivity = _activitySource.StartActivity(name: "Activity", kind: System.Diagnostics.ActivityKind.Internal, parentId: default, tags: default, links: default, startTime: default);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Context(string stringParam, int intParam, bool boolParam)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ static void RecordExceptionInternal(System.Diagnostics.Activity? activity, Syste
activity.AddEvent(recordExceptionEvent);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Activity()
{
System.Diagnostics.Activity? activityActivity = _activitySource.StartActivity(name: "Activity", kind: System.Diagnostics.ActivityKind.Internal, parentId: default, tags: default, links: default, startTime: default);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Event(System.Diagnostics.Activity activity, string stringParam, int intParam, bool boolParam)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ static void RecordExceptionInternal(System.Diagnostics.Activity? activity, Syste
activity.AddEvent(recordExceptionEvent);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Activity()
{
System.Diagnostics.Activity? activityActivity = _activitySource.StartActivity(name: "Activity", kind: System.Diagnostics.ActivityKind.Internal, parentId: default, tags: default, links: default, startTime: default);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public void Event(System.Diagnostics.Activity? activity, string stringParam, int intParam, bool boolParam)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
//HintName: ActivityAttribute.g.cs
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by the Purview.Telemetry.SourceGenerator
// on {Scrubbed}.
//
// Changes to this file may cause incorrect behaviour and will be lost
// when the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

#pragma warning disable 1591 // publicly visible type or member must be documented

#nullable enable

namespace Purview.Telemetry.Activities;

/// <summary>
/// Marker attribute used to control the generation
/// of <see cref="System.Diagnostics.Activity">activities</see>.
/// </summary>
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple = false)]
[System.Diagnostics.Conditional("PURVIEW_TELEMETRY_ATTRIBUTES")]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1019:Define accessors for attribute arguments")]
sealed class ActivityAttribute : System.Attribute
{
/// <summary>
/// Constructs a new <see cref="ActivityAttribute"/>.
/// </summary>
public ActivityAttribute()
{
}

/// <summary>
/// Constructs a new <see cref="ActivityAttribute"/> and specifies the <see cref="Name"/>.
/// </summary>
/// <param name="name">Specifies the <see cref="Name"/>.</param>
public ActivityAttribute(string name)
{
Name = name;
}

/// <summary>
/// Constructs a new <see cref="ActivityAttribute"/> and specifies the <see cref="Kind"/>.
/// </summary>
/// <param name="kind">Specifies the <see cref="Kind"/>.</param>
public ActivityAttribute(System.Diagnostics.ActivityKind kind)
{
Kind = kind;
}

/// <summary>
/// Constructs a new <see cref="ActivityAttribute"/> and specifies the <see cref="Name" /> and
/// optionally the <see cref="Kind"/> and/ or <see cref="CreateOnly"/>.
/// </summary>
/// <param name="name">Specifies the <see cref="Name"/>.</param>
/// <param name="kind">Optionally specifies the <see cref="Kind"/>.</param>
/// <param name="createOnly">Optionally specifies <see cref="CreateOnly"/>.</param>
public ActivityAttribute(string name, System.Diagnostics.ActivityKind kind, bool createOnly = false)
{
Name = name;
Kind = kind;
CreateOnly = createOnly;
}

/// <summary>
/// Optional. Gets/ sets the name of the <see cref="System.Diagnostics.Activity"/>.
/// If this is not specified, the name of the method is used.
/// </summary>
public string? Name { get; set; }

/// <summary>
/// Optional. Gets/ sets the <see cref="System.Diagnostics.ActivityKind">kind</see> of the
/// activity. Defaults to <see cref="System.Diagnostics.ActivityKind.Internal"/>.
/// </summary>
public System.Diagnostics.ActivityKind Kind { get; set; } = System.Diagnostics.ActivityKind.Internal;

/// <summary>
/// If true, the <see cref="System.Diagnostics.Activity"/> is created using
/// <see cref="System.Diagnostics.ActivitySource.CreateActivity(string, System.Diagnostics.ActivityKind, string?, IEnumerable{KeyValuePair{string, object?}}?, IEnumerable{System.Diagnostics.ActivityLink}?, System.Diagnostics.ActivityIdFormat)" />, meaning it is not started by default. Otherwise
/// <see cref="System.Diagnostics.ActivitySource.StartActivity(string, System.Diagnostics.ActivityKind, string?, IEnumerable{KeyValuePair{string, object?}}?, IEnumerable{System.Diagnostics.ActivityLink}?, DateTimeOffset)" />is used. The default is false.
/// </summary>
public bool CreateOnly { get; set; }
}
Loading

0 comments on commit 3984f1b

Please sign in to comment.