Skip to content

Commit

Permalink
Use a NetworkOperationKind enum to avoid string allocations
Browse files Browse the repository at this point in the history
  • Loading branch information
jstedfast committed May 12, 2024
1 parent 2dc2e16 commit c69fa42
Show file tree
Hide file tree
Showing 9 changed files with 61 additions and 46 deletions.
8 changes: 4 additions & 4 deletions MailKit/Net/Imap/AsyncImapClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ public override async Task AuthenticateAsync (SaslMechanism mechanism, Cancellat
await imap.Stream.FlushAsync (cmd.CancellationToken).ConfigureAwait (false);
};

using var operation = engine.StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
detector.IsAuthenticating = true;
Expand Down Expand Up @@ -393,7 +393,7 @@ public override async Task AuthenticateAsync (Encoding encoding, ICredentials cr
{
CheckCanAuthenticate (encoding, credentials);

using var operation = engine.StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
int capabilitiesVersion = engine.CapabilitiesVersion;
Expand Down Expand Up @@ -653,7 +653,7 @@ public override async Task ConnectAsync (string host, int port = 0, SecureSocket

ComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);

using var operation = engine.StartNetworkOperation (NetworkOperation.Connect);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect);

try {
var stream = await ConnectNetworkAsync (host, port, cancellationToken).ConfigureAwait (false);
Expand Down Expand Up @@ -827,7 +827,7 @@ public override async Task ConnectAsync (Stream stream, string host, int port =

ComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);

using var operation = engine.StartNetworkOperation (NetworkOperation.Connect);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect);

try {
Stream network;
Expand Down
8 changes: 4 additions & 4 deletions MailKit/Net/Imap/ImapClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1137,7 +1137,7 @@ public override void Authenticate (SaslMechanism mechanism, CancellationToken ca
return Task.CompletedTask;
};

using var operation = engine.StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
detector.IsAuthenticating = true;
Expand Down Expand Up @@ -1242,7 +1242,7 @@ public override void Authenticate (Encoding encoding, ICredentials credentials,
{
CheckCanAuthenticate (encoding, credentials);

using var operation = engine.StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
int capabilitiesVersion = engine.CapabilitiesVersion;
Expand Down Expand Up @@ -1561,7 +1561,7 @@ public override void Connect (string host, int port = 0, SecureSocketOptions opt

ComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);

using var operation = engine.StartNetworkOperation (NetworkOperation.Connect);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect);

try {
var stream = ConnectNetwork (host, port, cancellationToken);
Expand Down Expand Up @@ -1746,7 +1746,7 @@ public override void Connect (Stream stream, string host, int port = 0, SecureSo

ComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);

using var operation = engine.StartNetworkOperation (NetworkOperation.Connect);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect);

try {
Stream network;
Expand Down
6 changes: 3 additions & 3 deletions MailKit/Net/Imap/ImapEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -619,12 +619,12 @@ internal void SetStream (ImapStream stream)
Stream = stream;
}

public NetworkOperation StartNetworkOperation (string name)
public NetworkOperation StartNetworkOperation (NetworkOperationKind kind)
{
#if NET6_0_OR_GREATER
return NetworkOperation.Start (name, Uri, Telemetry.ImapClient.ActivitySource, metrics);
return NetworkOperation.Start (kind, Uri, Telemetry.ImapClient.ActivitySource, metrics);
#else
return NetworkOperation.Start (name, Uri);
return NetworkOperation.Start (kind, Uri);
#endif
}

Expand Down
37 changes: 26 additions & 11 deletions MailKit/Net/NetworkOperation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,37 @@
using System.Diagnostics;

namespace MailKit.Net {
class NetworkOperation : IDisposable
enum NetworkOperationKind
{
public const string Authenticate = nameof (Authenticate);
public const string Connect = nameof (Connect);
Authenticate,
Connect,
Send
}

class NetworkOperation : IDisposable
{
#if NET6_0_OR_GREATER
static readonly string[] ActivityNames = {
"Authenticate",
"Connect",
"Send"
};
static readonly string[] OperationValues = {
"authenticate",
"connect",
"send"
};

readonly NetworkOperationKind kind;
readonly ClientMetrics metrics;
readonly Activity activity;
readonly long startTimestamp;
readonly string name;
readonly Uri uri;
Exception ex;

NetworkOperation (string name, Uri uri, Activity activity, ClientMetrics metrics)
NetworkOperation (NetworkOperationKind kind, Uri uri, Activity activity, ClientMetrics metrics)
{
this.name = name;
this.kind = kind;
this.uri = uri;
this.activity = activity;
this.metrics = metrics;
Expand Down Expand Up @@ -75,7 +90,7 @@ TagList GetTags ()
{
var tags = ClientMetrics.GetTags (uri, ex);

tags.Add ("network.operation", name.ToLowerInvariant ());
tags.Add ("network.operation", OperationValues[(int) kind]);

return tags;
}
Expand Down Expand Up @@ -109,15 +124,15 @@ public void Dispose ()
}

#if NET6_0_OR_GREATER
public static NetworkOperation Start (string name, Uri uri, ActivitySource source, ClientMetrics metrics)
public static NetworkOperation Start (NetworkOperationKind kind, Uri uri, ActivitySource source, ClientMetrics metrics)
{

var activity = source?.StartActivity (name, ActivityKind.Client);
var activity = source?.StartActivity (ActivityNames[(int) kind], ActivityKind.Client);

return new NetworkOperation (name, uri, activity, metrics);
return new NetworkOperation (kind, uri, activity, metrics);
}
#else
public static NetworkOperation Start (string name, Uri uri)
public static NetworkOperation Start (NetworkOperationKind kind, Uri uri)
{
return new NetworkOperation ();
}
Expand Down
8 changes: 4 additions & 4 deletions MailKit/Net/Pop3/AsyncPop3Client.cs
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ public override async Task AuthenticateAsync (SaslMechanism mechanism, Cancellat
{
CheckCanAuthenticate (mechanism, cancellationToken);

using var operation = engine.StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
var saslUri = new Uri ("pop://" + engine.Uri.Host);
Expand Down Expand Up @@ -223,7 +223,7 @@ public override async Task AuthenticateAsync (Encoding encoding, ICredentials cr
{
CheckCanAuthenticate (encoding, credentials, cancellationToken);

using var operation = engine.StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
var saslUri = new Uri ("pop://" + engine.Uri.Host);
Expand Down Expand Up @@ -425,7 +425,7 @@ public override async Task ConnectAsync (string host, int port = 0, SecureSocket

ComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);

using var operation = engine.StartNetworkOperation (NetworkOperation.Connect);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect);

try {
var stream = await ConnectNetworkAsync (host, port, cancellationToken).ConfigureAwait (false);
Expand Down Expand Up @@ -601,7 +601,7 @@ public override async Task ConnectAsync (Stream stream, string host, int port =

ComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);

using var operation = engine.StartNetworkOperation (NetworkOperation.Connect);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect);

try {
engine.Uri = uri;
Expand Down
8 changes: 4 additions & 4 deletions MailKit/Net/Pop3/Pop3Client.cs
Original file line number Diff line number Diff line change
Expand Up @@ -822,7 +822,7 @@ public override void Authenticate (SaslMechanism mechanism, CancellationToken ca
{
CheckCanAuthenticate (mechanism, cancellationToken);

using var operation = engine.StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
var saslUri = new Uri ("pop://" + engine.Uri.Host);
Expand Down Expand Up @@ -938,7 +938,7 @@ public override void Authenticate (Encoding encoding, ICredentials credentials,
{
CheckCanAuthenticate (encoding, credentials, cancellationToken);

using var operation = engine.StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
var saslUri = new Uri ("pop://" + engine.Uri.Host);
Expand Down Expand Up @@ -1199,7 +1199,7 @@ public override void Connect (string host, int port = 0, SecureSocketOptions opt

ComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);

using var operation = engine.StartNetworkOperation (NetworkOperation.Connect);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect);

try {
var stream = ConnectNetwork (host, port, cancellationToken);
Expand Down Expand Up @@ -1392,7 +1392,7 @@ public override void Connect (Stream stream, string host, int port = 0, SecureSo

ComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);

using var operation = engine.StartNetworkOperation (NetworkOperation.Connect);
using var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect);

try {
engine.Uri = uri;
Expand Down
6 changes: 3 additions & 3 deletions MailKit/Net/Pop3/Pop3Engine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -251,12 +251,12 @@ void ParseGreeting (string greeting)
State = Pop3EngineState.Connected;
}

public NetworkOperation StartNetworkOperation (string name)
public NetworkOperation StartNetworkOperation (NetworkOperationKind kind)
{
#if NET6_0_OR_GREATER
return NetworkOperation.Start (name, Uri, Telemetry.Pop3Client.ActivitySource, metrics);
return NetworkOperation.Start (kind, Uri, Telemetry.Pop3Client.ActivitySource, metrics);
#else
return NetworkOperation.Start (name, Uri);
return NetworkOperation.Start (kind, Uri);
#endif
}

Expand Down
10 changes: 5 additions & 5 deletions MailKit/Net/Smtp/AsyncSmtpClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ public override async Task AuthenticateAsync (SaslMechanism mechanism, Cancellat

cancellationToken.ThrowIfCancellationRequested ();

using var operation = StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
SaslException saslException = null;
Expand Down Expand Up @@ -328,7 +328,7 @@ public override async Task AuthenticateAsync (Encoding encoding, ICredentials cr
{
ValidateArguments (encoding, credentials);

using var operation = StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
var saslUri = new Uri ($"smtp://{uri.Host}");
Expand Down Expand Up @@ -568,7 +568,7 @@ public override async Task ConnectAsync (string host, int port = 0, SecureSocket

ComputeDefaultValues (host, ref port, ref options, out uri, out var starttls);

using var operation = StartNetworkOperation (NetworkOperation.Connect);
using var operation = StartNetworkOperation (NetworkOperationKind.Connect);

try {
var stream = await ConnectNetworkAsync (host, port, cancellationToken).ConfigureAwait (false);
Expand Down Expand Up @@ -742,7 +742,7 @@ public override async Task ConnectAsync (Stream stream, string host, int port =

ComputeDefaultValues (host, ref port, ref options, out uri, out var starttls);

using var operation = StartNetworkOperation (NetworkOperation.Connect);
using var operation = StartNetworkOperation (NetworkOperationKind.Connect);

try {
Stream network;
Expand Down Expand Up @@ -984,7 +984,7 @@ async Task<string> SendAsync (FormatOptions options, MimeMessage message, Mailbo
size = -1;
}

using var operation = StartNetworkOperation ("Send");
using var operation = StartNetworkOperation (NetworkOperationKind.Send);

try {
// Note: if PIPELINING is supported, MailFrom() and RcptTo() will
Expand Down
16 changes: 8 additions & 8 deletions MailKit/Net/Smtp/SmtpClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -594,12 +594,12 @@ void CheckDisposed ()
get { return authenticated; }
}

NetworkOperation StartNetworkOperation (string name)
NetworkOperation StartNetworkOperation (NetworkOperationKind kind)
{
#if NET6_0_OR_GREATER
return NetworkOperation.Start (name, uri, Telemetry.SmtpClient.ActivitySource, metrics);
return NetworkOperation.Start (kind, uri, Telemetry.SmtpClient.ActivitySource, metrics);
#else
return NetworkOperation.Start (name, uri);
return NetworkOperation.Start (kind, uri);
#endif
}

Expand Down Expand Up @@ -1032,7 +1032,7 @@ public override void Authenticate (SaslMechanism mechanism, CancellationToken ca

cancellationToken.ThrowIfCancellationRequested ();

using var operation = StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
SaslException saslException = null;
Expand Down Expand Up @@ -1170,7 +1170,7 @@ public override void Authenticate (Encoding encoding, ICredentials credentials,
{
ValidateArguments (encoding, credentials);

using var operation = StartNetworkOperation (NetworkOperation.Authenticate);
using var operation = StartNetworkOperation (NetworkOperationKind.Authenticate);

try {
var saslUri = new Uri ($"smtp://{uri.Host}");
Expand Down Expand Up @@ -1477,7 +1477,7 @@ public override void Connect (string host, int port = 0, SecureSocketOptions opt

ComputeDefaultValues (host, ref port, ref options, out uri, out var starttls);

using var operation = StartNetworkOperation (NetworkOperation.Connect);
using var operation = StartNetworkOperation (NetworkOperationKind.Connect);

try {
var stream = ConnectNetwork (host, port, cancellationToken);
Expand Down Expand Up @@ -1668,7 +1668,7 @@ public override void Connect (Stream stream, string host, int port = 0, SecureSo

ComputeDefaultValues (host, ref port, ref options, out uri, out var starttls);

using var operation = StartNetworkOperation (NetworkOperation.Connect);
using var operation = StartNetworkOperation (NetworkOperationKind.Connect);

try {
Stream network;
Expand Down Expand Up @@ -2441,7 +2441,7 @@ string Send (FormatOptions options, MimeMessage message, MailboxAddress sender,
size = -1;
}

using var operation = StartNetworkOperation ("Send");
using var operation = StartNetworkOperation (NetworkOperationKind.Send);

try {
// Note: if PIPELINING is supported, MailFrom() and RcptTo() will
Expand Down

0 comments on commit c69fa42

Please sign in to comment.