Skip to content

Commit

Permalink
Initial setup for workflow log tracing
Browse files Browse the repository at this point in the history
Signed-off-by: Ryan Lettieri <ryanLettieri@microsoft.com>
  • Loading branch information
RyanLettieri committed Oct 21, 2023
1 parent 99d874a commit b4f1e10
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 1 deletion.
88 changes: 88 additions & 0 deletions src/Dapr.Workflow/WorkflowLoggingService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
// ------------------------------------------------------------------------
// Copyright 2022 The Dapr Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ------------------------------------------------------------------------

namespace Dapr.Workflow
{
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

/// <summary>
/// Defines runtime options for workflows.
/// </summary>
internal sealed class WorkflowLoggingService : IHostedService
{
private readonly ILogger<WorkflowLoggingService> logger;
private static HashSet<string>? registeredWorkflows;
private static HashSet<string>? registeredActivities;
private LogLevel logLevel = LogLevel.Debug;

public WorkflowLoggingService(ILogger<WorkflowLoggingService> logger)
{
var value = Environment.GetEnvironmentVariable("DAPR_LOG_LEVEL");
logLevel = string.IsNullOrEmpty(value) ? LogLevel.Debug : (LogLevel)Enum.Parse(typeof(LogLevel), value);
this.logger = logger;
registeredActivities = new HashSet<string>();
registeredWorkflows = new HashSet<string>();
}
public Task StartAsync(CancellationToken cancellationToken)
{
this.logger.Log(logLevel, "WorkflowLoggingService started");

if (registeredWorkflows != null)
{
this.logger.Log(logLevel, "List of registered workflows");
foreach (string item in registeredWorkflows)
{
this.logger.Log(logLevel, item);
}
}

if (registeredActivities != null)
{
this.logger.Log(logLevel, "List of registered activities:");
foreach (string item in registeredActivities)
{
this.logger.Log(logLevel, item);
}
}
return Task.CompletedTask;
}

public Task StopAsync(CancellationToken cancellationToken)
{
this.logger.Log(logLevel, "WorkflowLoggingService stopped");

return Task.CompletedTask;
}

public static void LogWorkflowName(string workflowName)
{
if (registeredWorkflows != null)
{
registeredWorkflows.Add(workflowName);
}
}

public static void LogActivityName(string activityName)
{
if (registeredActivities != null)
{
registeredActivities.Add(activityName);
}
}
}
}
4 changes: 4 additions & 0 deletions src/Dapr.Workflow/WorkflowRuntimeOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public void RegisterWorkflow<TInput, TOutput>(string name, Func<WorkflowContext,
WorkflowContext workflowContext = new DaprWorkflowContext(innerContext);
return implementation(workflowContext, input);
});
WorkflowLoggingService.LogWorkflowName(name);
});
}

Expand All @@ -73,6 +74,7 @@ public void RegisterWorkflow<TInput, TOutput>(string name, Func<WorkflowContext,
TWorkflow workflow = Activator.CreateInstance<TWorkflow>();
return new OrchestratorWrapper(workflow);
});
WorkflowLoggingService.LogWorkflowName(name);
});
}

Expand All @@ -91,6 +93,7 @@ public void RegisterActivity<TInput, TOutput>(string name, Func<WorkflowActivity
WorkflowActivityContext activityContext = new(innerContext);
return implementation(activityContext, input);
});
WorkflowLoggingService.LogActivityName(name);
});
}

Expand All @@ -111,6 +114,7 @@ public void RegisterActivity<TActivity>() where TActivity : class, IWorkflowActi
TActivity activity = ActivatorUtilities.CreateInstance<TActivity>(serviceProvider);
return new ActivityWrapper(activity);
});
WorkflowLoggingService.LogActivityName(name);
});
}

Expand Down
2 changes: 1 addition & 1 deletion src/Dapr.Workflow/WorkflowServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public static IServiceCollection AddDaprWorkflow(
#pragma warning disable CS0618 // Type or member is obsolete - keeping around temporarily - replaced by DaprWorkflowClient
serviceCollection.TryAddSingleton<WorkflowEngineClient>();
#pragma warning restore CS0618 // Type or member is obsolete

serviceCollection.AddHostedService<WorkflowLoggingService>();
serviceCollection.TryAddSingleton<DaprWorkflowClient>();
serviceCollection.AddDaprClient();
serviceCollection.AddDaprWorkflowClient();
Expand Down

0 comments on commit b4f1e10

Please sign in to comment.