Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2026-06-20 update package version
- 2026-06-20 update dependency packages to the AOT-compatible version
- 2026-06-20 pin the link to the source tree to a specific version
- 2026-06-20 call IMuninNodeLifecycle methods to ensure that the node's state transition is completed successfully
- 2026-06-19 replace LoggerMessage.Define to LoggerMessageAttribute
- 2026-06-19 disable VerifyReferenceAotCompatibility
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net10.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net10.0.apilist.cs
index 6dc1f88..9363286 100644
--- a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net10.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net10.0.apilist.cs
@@ -1,54 +1,55 @@
-// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.2.0)
+// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.3.0)
// Name: Smdn.Net.MuninNode.Hosting
-// AssemblyVersion: 3.2.0.0
-// InformationalVersion: 3.2.0+e0dd656596dd5517e6360ee27212b5a87aa0228c
+// AssemblyVersion: 3.3.0.0
+// InformationalVersion: 3.3.0+55422fb656d2f24e6cd86e3f61cb7f9383ff5975
// TargetFramework: .NETCoreApp,Version=v10.0
// Configuration: Release
// Metadata: IsTrimmable=True
+// Metadata: IsAotCompatible=True
// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.MuninNode
// Metadata: RepositoryBranch=main
-// Metadata: RepositoryCommit=e0dd656596dd5517e6360ee27212b5a87aa0228c
+// Metadata: RepositoryCommit=55422fb656d2f24e6cd86e3f61cb7f9383ff5975
// Referenced assemblies:
-// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Smdn.Net.MuninNode, Version=2.5.0.0, Culture=neutral
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Hosting.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.MuninNode, Version=2.7.0.0, Culture=neutral
// System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Diagnostics.CodeAnalysis;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Smdn.Net.MuninNode;
using Smdn.Net.MuninNode.DependencyInjection;
using Smdn.Net.MuninNode.Hosting;
namespace Smdn.Net.MuninNode.Hosting {
public static class IServiceCollectionExtensions {
public static IServiceCollection AddHostedMuninNodeService(this IServiceCollection services, Action<MuninNodeOptions> configureNode, Action<IMuninNodeBuilder> buildNode) {}
public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNode, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNode : class, IMuninNode where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNodeBuilder>(this IServiceCollection services, Func<IMuninServiceBuilder, TMuninNodeBuilder> buildMunin) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeBuilder : MuninNodeBuilder {}
public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNodeService, TMuninNodeImplementation, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeService : class, IMuninNode where TMuninNodeImplementation : class, TMuninNodeService where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
}
public class MuninNodeBackgroundService : BackgroundService {
public MuninNodeBackgroundService(IMuninNode node) {}
public MuninNodeBackgroundService(IMuninNode node, ILogger<MuninNodeBackgroundService>? logger) {}
public EndPoint EndPoint { get; }
protected ILogger? Logger { get; }
public override void Dispose() {}
protected override async Task ExecuteAsync(CancellationToken stoppingToken) {}
public override async Task StartAsync(CancellationToken cancellationToken) {}
public override async Task StopAsync(CancellationToken cancellationToken) {}
}
}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.8.2.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.6.2.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net8.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net8.0.apilist.cs
index 974b83f..74b736e 100644
--- a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net8.0.apilist.cs
@@ -1,54 +1,54 @@
-// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.2.0)
+// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.3.0)
// Name: Smdn.Net.MuninNode.Hosting
-// AssemblyVersion: 3.2.0.0
-// InformationalVersion: 3.2.0+e0dd656596dd5517e6360ee27212b5a87aa0228c
+// AssemblyVersion: 3.3.0.0
+// InformationalVersion: 3.3.0+55422fb656d2f24e6cd86e3f61cb7f9383ff5975
// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
// Metadata: IsTrimmable=True
// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.MuninNode
// Metadata: RepositoryBranch=main
-// Metadata: RepositoryCommit=e0dd656596dd5517e6360ee27212b5a87aa0228c
+// Metadata: RepositoryCommit=55422fb656d2f24e6cd86e3f61cb7f9383ff5975
// Referenced assemblies:
-// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Smdn.Net.MuninNode, Version=2.5.0.0, Culture=neutral
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Hosting.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.MuninNode, Version=2.7.0.0, Culture=neutral
// System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Diagnostics.CodeAnalysis;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Smdn.Net.MuninNode;
using Smdn.Net.MuninNode.DependencyInjection;
using Smdn.Net.MuninNode.Hosting;
namespace Smdn.Net.MuninNode.Hosting {
public static class IServiceCollectionExtensions {
public static IServiceCollection AddHostedMuninNodeService(this IServiceCollection services, Action<MuninNodeOptions> configureNode, Action<IMuninNodeBuilder> buildNode) {}
public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNode, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNode : class, IMuninNode where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNodeBuilder>(this IServiceCollection services, Func<IMuninServiceBuilder, TMuninNodeBuilder> buildMunin) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeBuilder : MuninNodeBuilder {}
public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNodeService, TMuninNodeImplementation, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeService : class, IMuninNode where TMuninNodeImplementation : class, TMuninNodeService where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
}
public class MuninNodeBackgroundService : BackgroundService {
public MuninNodeBackgroundService(IMuninNode node) {}
public MuninNodeBackgroundService(IMuninNode node, ILogger<MuninNodeBackgroundService>? logger) {}
public EndPoint EndPoint { get; }
protected ILogger? Logger { get; }
public override void Dispose() {}
protected override async Task ExecuteAsync(CancellationToken stoppingToken) {}
public override async Task StartAsync(CancellationToken cancellationToken) {}
public override async Task StopAsync(CancellationToken cancellationToken) {}
}
}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.8.2.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.6.2.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-netstandard2.1.apilist.cs
index 359d398..51c5a47 100644
--- a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-netstandard2.1.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-netstandard2.1.apilist.cs
@@ -1,51 +1,51 @@
-// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.2.0)
+// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.3.0)
// Name: Smdn.Net.MuninNode.Hosting
-// AssemblyVersion: 3.2.0.0
-// InformationalVersion: 3.2.0+e0dd656596dd5517e6360ee27212b5a87aa0228c
+// AssemblyVersion: 3.3.0.0
+// InformationalVersion: 3.3.0+55422fb656d2f24e6cd86e3f61cb7f9383ff5975
// TargetFramework: .NETStandard,Version=v2.1
// Configuration: Release
// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.MuninNode
// Metadata: RepositoryBranch=main
-// Metadata: RepositoryCommit=e0dd656596dd5517e6360ee27212b5a87aa0228c
+// Metadata: RepositoryCommit=55422fb656d2f24e6cd86e3f61cb7f9383ff5975
// Referenced assemblies:
-// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Smdn.Net.MuninNode, Version=2.5.0.0, Culture=neutral
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Hosting.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.MuninNode, Version=2.7.0.0, Culture=neutral
// netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
#nullable enable annotations
using System;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Smdn.Net.MuninNode;
using Smdn.Net.MuninNode.DependencyInjection;
using Smdn.Net.MuninNode.Hosting;
namespace Smdn.Net.MuninNode.Hosting {
public static class IServiceCollectionExtensions {
public static IServiceCollection AddHostedMuninNodeService(this IServiceCollection services, Action<MuninNodeOptions> configureNode, Action<IMuninNodeBuilder> buildNode) {}
public static IServiceCollection AddHostedMuninNodeService<TMuninNodeBackgroundService, TMuninNode, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNode : class, IMuninNode where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
public static IServiceCollection AddHostedMuninNodeService<TMuninNodeBackgroundService, TMuninNodeBuilder>(this IServiceCollection services, Func<IMuninServiceBuilder, TMuninNodeBuilder> buildMunin) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeBuilder : MuninNodeBuilder {}
public static IServiceCollection AddHostedMuninNodeService<TMuninNodeBackgroundService, TMuninNodeService, TMuninNodeImplementation, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeService : class, IMuninNode where TMuninNodeImplementation : class, TMuninNodeService where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
}
public class MuninNodeBackgroundService : BackgroundService {
public MuninNodeBackgroundService(IMuninNode node) {}
public MuninNodeBackgroundService(IMuninNode node, ILogger<MuninNodeBackgroundService>? logger) {}
public EndPoint EndPoint { get; }
protected ILogger? Logger { get; }
public override void Dispose() {}
protected override async Task ExecuteAsync(CancellationToken stoppingToken) {}
public override async Task StartAsync(CancellationToken cancellationToken) {}
public override async Task StopAsync(CancellationToken cancellationToken) {}
}
}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.8.2.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.6.2.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)Full changes
Full changes in this release:
diff --git a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting.csproj b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting.csproj
index 7480902..8c83d27 100644
--- a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting.csproj
+++ b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting.csproj
@@ -1,11 +1,11 @@
-<!--
+<!--
SPDX-FileCopyrightText: 2025 smdn <smdn@smdn.jp>
SPDX-License-Identifier: MIT
-->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.1;net8.0;net10.0</TargetFrameworks>
- <VersionPrefix>3.2.0</VersionPrefix>
+ <VersionPrefix>3.3.0</VersionPrefix>
<VersionSuffix></VersionSuffix>
<PackageValidationBaselineVersion>3.0.0</PackageValidationBaselineVersion>
<NoWarn>CS1591;$(NoWarn)</NoWarn> <!-- CS1591: Missing XML comment for publicly visible type or member 'Type_or_Member' -->
@@ -31,8 +31,8 @@ This library uses [Smdn.Net.MuninNode](https://www.nuget.org/packages/Smdn.Net.M
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.0" />
- <ProjectOrPackageReference ReferencePackageVersion="[2.5.0,4.0.0)" Include="..\Smdn.Net.MuninNode\Smdn.Net.MuninNode.csproj" />
+ <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.0" />
+ <ProjectOrPackageReference ReferencePackageVersion="[2.7.0,4.0.0)" Include="..\Smdn.Net.MuninNode\Smdn.Net.MuninNode.csproj" />
</ItemGroup>
<Target Name="GenerateReadmeFileContent">
@@ -55,6 +55,8 @@ Using the API of the `Smdn.Net.MuninNode.DependencyInjection` and `Smdn.Net.Muni
$([System.IO.File]::ReadAllText('$(MSBuildThisFileDirectory)..\..\examples\$(PackageId)\getting-started\Program.cs').TrimEnd())+More examples can be found on the GitHub repository, including examples of using library features.
+
Contributing
This project welcomes contributions, feedbacks and suggestions. You can contribute to this project by submitting Issues or Pull Requests on the GitHub repository.
]]>
diff --git a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.LoggerMessages.cs b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.LoggerMessages.cs
new file mode 100644
index 0000000..72af8cb
--- /dev/null
+++ b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.LoggerMessages.cs
@@ -0,0 +1,37 @@
+// SPDX-FileCopyrightText: 2026 smdn smdn@smdn.jp
+// SPDX-License-Identifier: MIT
+using Microsoft.Extensions.Logging;
+
+namespace Smdn.Net.MuninNode.Hosting;
+
+#pragma warning disable IDE0040
+partial class MuninNodeBackgroundService {
+#pragma warning restore IDE0040
- [LoggerMessage(
- Level = LogLevel.Information,
- EventId = 1,
- Message = "Munin node '{HostName}' starting."
- )]
- private static partial void LogInformationStarting(ILogger logger, string hostName);
- [LoggerMessage(
- Level = LogLevel.Information,
- EventId = 2,
- Message = "Munin node '{HostName}' started."
- )]
- private static partial void LogInformationStarted(ILogger logger, string hostName);
- [LoggerMessage(
- Level = LogLevel.Information,
- EventId = 3,
- Message = "Munin node '{HostName}' stopping."
- )]
- private static partial void LogInformationStopping(ILogger logger, string hostName);
- [LoggerMessage(
- Level = LogLevel.Information,
- EventId = 4,
- Message = "Munin node '{HostName}' stopped."
- )]
- private static partial void LogInformationStopped(ILogger logger, string hostName);
+}
diff --git a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.cs b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.cs
index 459e79f..2f02262 100644
--- a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.cs
+++ b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.cs
@@ -1,5 +1,9 @@
// SPDX-FileCopyrightText: 2025 smdn smdn@smdn.jp
// SPDX-License-Identifier: MIT
+// cspell:ignore IMUNINNODELIFECYCLE
+#if SYSTEM_THREADING_TASKS_TASK_WAITASYNC
+#define IMUNINNODELIFECYCLE
+#endif
using System;
using System.Net;
using System.Threading;
@@ -7,31 +11,11 @@ using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
namespace Smdn.Net.MuninNode.Hosting;
-public class MuninNodeBackgroundService : BackgroundService {
- private static readonly Action<ILogger, string, Exception?> LogStarting = LoggerMessage.Define(
- LogLevel.Information,
- eventId: default, // TODO
- formatString: "Munin node '{HostName}' starting."
- );
- private static readonly Action<ILogger, string, Exception?> LogStarted = LoggerMessage.Define(
- LogLevel.Information,
- eventId: default, // TODO
- formatString: "Munin node '{HostName}' started."
- );
- private static readonly Action<ILogger, string, Exception?> LogStopping = LoggerMessage.Define(
- LogLevel.Information,
- eventId: default, // TODO
- formatString: "Munin node '{HostName}' stopping."
- );
- private static readonly Action<ILogger, string, Exception?> LogStopped = LoggerMessage.Define(
- LogLevel.Information,
- eventId: default, // TODO
- formatString: "Munin node '{HostName}' stopped."
- );
+public partial class MuninNodeBackgroundService : BackgroundService {
private IMuninNode node;
///
@@ -39,6 +23,10 @@ public class MuninNodeBackgroundService : BackgroundService {
protected ILogger? Logger { get; }
- // In addition to the Logger property exposed outside the class, provide an
- // ILogger field that is referenced by the LoggerMessage source generator.
- private readonly ILogger logger;
#if false
// TODO: support ServiceKey
// this code does not work currently
@@ -70,6 +58,10 @@ public class MuninNodeBackgroundService : BackgroundService {
{
this.node = node ?? throw new ArgumentNullException(nameof(node));
Logger = logger;
+
- // In addition to the Logger property, set a non-null ILogger field.
- // This field is used by the LoggerMessage source generator.
- this.logger = (ILogger?)logger ?? NullLogger.Instance;
}
public override void Dispose()
@@ -91,13 +83,16 @@ public class MuninNodeBackgroundService : BackgroundService {
cancellationToken.ThrowIfCancellationRequested();
- if (Logger is not null)
-
LogStarting(Logger, node.HostName, null);
-
LogInformationStarting(logger, node.HostName);
await base.StartAsync(cancellationToken).ConfigureAwait(false);
- if (Logger is not null)
-
LogStarted(Logger, node.HostName, null);
+#if IMUNINNODELIFECYCLE
- if (node is IMuninNodeLifecycle nodeLifecycle)
-
await nodeLifecycle.WaitForStartedAsync(cancellationToken).ConfigureAwait(false);
+#endif
+
- LogInformationStarted(logger, node.HostName);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
@@ -113,8 +108,7 @@ public class MuninNodeBackgroundService : BackgroundService {
if (node is null)
throw new ObjectDisposedException(GetType().FullName);
- if (Logger is not null)
-
LogStopping(Logger, node.HostName, null);
-
LogInformationStopping(logger, node.HostName);
await base.StopAsync(cancellationToken).ConfigureAwait(false);
@@ -123,9 +117,12 @@ public class MuninNodeBackgroundService : BackgroundService {
// attempt graceful shutdown if possible
if (node is NodeBase stoppableNode)
await stoppableNode.StopAsync(cancellationToken).ConfigureAwait(false);
+#if IMUNINNODELIFECYCLE
- else if (node is IMuninNodeLifecycle nodeLifecycle)
-
await nodeLifecycle.WaitForStoppedAsync(cancellationToken).ConfigureAwait(false);
+#endif
- if (Logger is not null)
-
LogStopped(Logger, node.HostName, null);
-
LogInformationStopped(logger, node.HostName);
if (node is IDisposable disposableNode)
disposableNode.Dispose();
</div>
</details>
## Notes
<!-- Release notes generated using configuration in .github/release.yml at releases/Smdn.Net.MuninNode.Hosting-3.3.0 -->
## What's Changed
### Notable changes (may include changes not directly related)
* Support AOT compilation by @smdn in https://github.com/smdn/Smdn.Net.MuninNode/pull/46
### Dependencies
* Bump the smdn-workflows-dotnet group with 2 updates by @dependabot[bot] in https://github.com/smdn/Smdn.Net.MuninNode/pull/41
* Bump github/codeql-action from 4.35.1 to 4.35.2 by @dependabot[bot] in https://github.com/smdn/Smdn.Net.MuninNode/pull/44
**Full Changelog**: https://github.com/smdn/Smdn.Net.MuninNode/compare/releases/Smdn.Net.MuninNode.Hosting-3.2.0...releases/Smdn.Net.MuninNode.Hosting-3.3.0