Skip to content

Releases: smdn/Smdn.Net.MuninNode

Smdn.Net.MuninNode.Hosting version 3.1.0

01 Jun 09:48
a8da76e
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
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 387ee95..4d934a8 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,43 +1,50 @@
-// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.0.0)
+// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.1.0)
 //   Name: Smdn.Net.MuninNode.Hosting
-//   AssemblyVersion: 3.0.0.0
-//   InformationalVersion: 3.0.0+0830d2fdea4a5b05d99958b5116ff7b474590f2f
+//   AssemblyVersion: 3.1.0.0
+//   InformationalVersion: 3.1.0+d9b937573b3b1dd41eaf878498bcf5d285c10471
 //   TargetFramework: .NETCoreApp,Version=v8.0
 //   Configuration: Release
 //   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.2.0.0, Culture=neutral
+//     Smdn.Net.MuninNode, Version=2.5.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.5.0.0.
 // Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.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 3162c84..a325383 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,42 +1,48 @@
-// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.0.0)
+// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.1.0)
 //   Name: Smdn.Net.MuninNode.Hosting
-//   AssemblyVersion: 3.0.0.0
-//   InformationalVersion: 3.0.0+0830d2fdea4a5b05d99958b5116ff7b474590f2f
+//   AssemblyVersion: 3.1.0.0
+//   InformationalVersion: 3.1.0+d9b937573b3b1dd41eaf878498bcf5d285c10471
 //   TargetFramework: .NETStandard,Version=v2.1
 //   Configuration: Release
 //   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.2.0.0, Culture=neutral
+//     Smdn.Net.MuninNode, Version=2.5.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 c...
Read more

Smdn.Net.MuninNode version 2.5.0

01 Jun 09:40
d9b9375
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
index 3caafc0..a379024 100644
--- a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
@@ -1,509 +1,546 @@
-// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-2.4.0)
+// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-2.5.0)
 //   Name: Smdn.Net.MuninNode
-//   AssemblyVersion: 2.4.0.0
-//   InformationalVersion: 2.4.0+6578cec572157dafbc9518cc746aae28f7f1ce6d
+//   AssemblyVersion: 2.5.0.0
+//   InformationalVersion: 2.5.0+41ff114bf69b864033a05a389896010d3eefe4d5
 //   TargetFramework: .NETCoreApp,Version=v8.0
 //   Configuration: Release
 //   Referenced assemblies:
 //     Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Options, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.IO.Pipelines, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
 using System.Buffers;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
 using System.Text.RegularExpressions;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Smdn.Net.MuninNode;
 using Smdn.Net.MuninNode.DependencyInjection;
 using Smdn.Net.MuninNode.Protocol;
 using Smdn.Net.MuninNode.Transport;
 using Smdn.Net.MuninPlugin;
 
 namespace Smdn.Net.MuninNode {
   public interface IAccessRule {
     bool IsAcceptable(IPEndPoint remoteEndPoint);
   }
 
   public interface IMuninNode {
     EndPoint EndPoint { get; }
     string HostName { get; }
 
     Task RunAsync(CancellationToken cancellationToken);
   }
 
   public static class IAccessRuleServiceCollectionExtensions {
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IAccessRule accessRule) {}
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IReadOnlyList<IPAddress> addressListAllowFrom) {}
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IReadOnlyList<IPAddress> addressListAllowFrom, bool shouldConsiderIPv4MappedIPv6Address) {}
     public static IServiceCollection AddMuninNodeLoopbackOnlyAccessRule(this IServiceCollection services) {}
   }
 
   public abstract class LocalNode : NodeBase {
     public static LocalNode Create(IPluginProvider pluginProvider, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
     public static LocalNode Create(IReadOnlyCollection<IPlugin> plugins, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
 
     [Obsolete("Use a constructor overload that takes IMuninNodeListenerFactory as an argument.")]
     protected LocalNode(IAccessRule? accessRule, ILogger? logger = null) {}
     protected LocalNode(IMuninNodeListenerFactory? listenerFactory, IAccessRule? accessRule, ILogger? logger) {}
 
     [Obsolete("Use IMuninNodeListenerFactory and StartAsync instead.")]
     protected override Socket CreateServerSocket() {}
   }
 
-  public sealed class MuninNodeOptions {
+  public class MuninNodeOptions {
     public const string DefaultHostName = "munin-node.localhost";
     public const int DefaultPort = 4949;
 
     public static IPAddress DefaultAddress { get; }
 
     public MuninNodeOptions() {}
 
     public IAccessRule? AccessRule { get; set; }
     public IPAddress Address { get; set; }
     public string HostName { get; set; }
     public int Port { get; set; }
 
     public MuninNodeOptions AllowFrom(IReadOnlyList<IPAddress> addresses, bool shouldConsiderIPv4MappedIPv6Address = true) {}
     public MuninNodeOptions AllowFromLoopbackOnly() {}
+    internal protected virtual void Configure(MuninNodeOptions baseOptions) {}
     public MuninNodeOptions UseAnyAddress() {}
     public MuninNodeOptions UseAnyAddress(int port) {}
     public MuninNodeOptions UseLoopbackAddress() {}
     public MuninNodeOptions UseLoopbackAddress(int port) {}
   }
 
   public abstract class NodeBase :
     IAsyncDisposable,
     IDisposable,
     IMuninNode,
     IMuninNodeProfile
   {
     [Obsolete("Use a constructor overload that takes IMuninNodeListenerFactory as an argument.")]
     protected NodeBase(IAccessRule? accessRule, ILogger? logger) {}
     protected NodeBase(IMuninNodeListenerFactory listenerFactory, IAccessRule? accessRule, ILogger? logger) {}
     protected NodeBase(IMuninProtocolHandlerFactory protocolHandlerFactory, IMuninNodeListenerFactory listenerFactory, IAccessRule? accessRule, ILogger? logger) {}
 
     public virtual Encoding Encoding { get; }
     public EndPoint EndPoint { get; }
     public abstract string HostName { get; }
     protected IMuninNodeListener? Listener { get; }
     [Obsolete("Use EndPoint instead.")]
     public EndPoint LocalEndPoint { get; }
     protected ILogger? Logger { get; }
     public virtual Version NodeVersion { get; }
     public abstract IPluginProvider PluginProvider { get; }
     string IMuninNodeProfile.Version { get; }
 
     public async ValueTask AcceptAsync(bool throwIfCancellationRequested, CancellationToken cancellationToken) {}
     public async ValueTask AcceptSingleSessionAsync(CancellationToken cancellationToken = default) {}
     [Obsolete("Use IMuninNodeListenerFactory and StartAsync instead.")]
     protected virtual Socket CreateServerSocket() {}
     protected virtual void Dispose(bool disposing) {}
     public void Dispose() {}
     public async ValueTask DisposeAsync() {}
     protected virtual async ValueTask DisposeAsyncCore() {}
     protected virtual EndPoint GetLocalEndPointToBind() {}
     protected virtual IMuninNodeProfile GetNodeProfile() {}
     public Task RunAsync(CancellationToken cancellationToken) {}
     [Obsolete("This method will be deprecated in the future.Use IMuninNodeListenerFactory and StartAsync instead.Make sure to override CreateServerSocket if you need to use this method.")]
     public void Start() {}
     public ValueTask StartAsync(CancellationToken cancellationToken = default) {}
+    protected virtual ValueTask StartedAsync(CancellationToken cancellationToken) {}
+    protected virtual ValueTask StartingAsync(CancellationToken cancellationToken) {}
     public ValueTask StopAsync(CancellationToken cancellationToken = default) {}
+    protected virtual ValueTask StoppedAsync(CancellationToken cancellationToken) {}
+    protected virtual ValueTask StoppingAsync(CancellationToken cancellationToken) {}
     protected void ThrowIfDisposed() {}
     protected void ThrowIfPluginProviderIsNull() {}
   }
 }
 
 namespace Smdn.Net.MuninNode.DependencyInjection {
+  [Obs...
Read more

Smdn.Net.MuninNode version 2.4.0

24 May 10:00
7c09ac0
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
index d6b659a..3caafc0 100644
--- a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
@@ -1,492 +1,509 @@
-// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-2.3.0)
+// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-2.4.0)
 //   Name: Smdn.Net.MuninNode
-//   AssemblyVersion: 2.3.0.0
-//   InformationalVersion: 2.3.0+805f911ac4e163898a8e18be3121fd9baf3a44f5
+//   AssemblyVersion: 2.4.0.0
+//   InformationalVersion: 2.4.0+6578cec572157dafbc9518cc746aae28f7f1ce6d
 //   TargetFramework: .NETCoreApp,Version=v8.0
 //   Configuration: Release
 //   Referenced assemblies:
 //     Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Options, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.IO.Pipelines, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+//     System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
 using System.Buffers;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
 using System.Text.RegularExpressions;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Smdn.Net.MuninNode;
 using Smdn.Net.MuninNode.DependencyInjection;
 using Smdn.Net.MuninNode.Protocol;
 using Smdn.Net.MuninNode.Transport;
 using Smdn.Net.MuninPlugin;
 
 namespace Smdn.Net.MuninNode {
   public interface IAccessRule {
     bool IsAcceptable(IPEndPoint remoteEndPoint);
   }
 
   public interface IMuninNode {
     EndPoint EndPoint { get; }
     string HostName { get; }
 
     Task RunAsync(CancellationToken cancellationToken);
   }
 
   public static class IAccessRuleServiceCollectionExtensions {
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IAccessRule accessRule) {}
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IReadOnlyList<IPAddress> addressListAllowFrom) {}
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IReadOnlyList<IPAddress> addressListAllowFrom, bool shouldConsiderIPv4MappedIPv6Address) {}
     public static IServiceCollection AddMuninNodeLoopbackOnlyAccessRule(this IServiceCollection services) {}
   }
 
   public abstract class LocalNode : NodeBase {
     public static LocalNode Create(IPluginProvider pluginProvider, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
     public static LocalNode Create(IReadOnlyCollection<IPlugin> plugins, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
 
     [Obsolete("Use a constructor overload that takes IMuninNodeListenerFactory as an argument.")]
     protected LocalNode(IAccessRule? accessRule, ILogger? logger = null) {}
     protected LocalNode(IMuninNodeListenerFactory? listenerFactory, IAccessRule? accessRule, ILogger? logger) {}
 
     [Obsolete("Use IMuninNodeListenerFactory and StartAsync instead.")]
     protected override Socket CreateServerSocket() {}
   }
 
   public sealed class MuninNodeOptions {
     public const string DefaultHostName = "munin-node.localhost";
     public const int DefaultPort = 4949;
 
     public static IPAddress DefaultAddress { get; }
 
     public MuninNodeOptions() {}
 
     public IAccessRule? AccessRule { get; set; }
     public IPAddress Address { get; set; }
     public string HostName { get; set; }
     public int Port { get; set; }
 
     public MuninNodeOptions AllowFrom(IReadOnlyList<IPAddress> addresses, bool shouldConsiderIPv4MappedIPv6Address = true) {}
     public MuninNodeOptions AllowFromLoopbackOnly() {}
     public MuninNodeOptions UseAnyAddress() {}
     public MuninNodeOptions UseAnyAddress(int port) {}
     public MuninNodeOptions UseLoopbackAddress() {}
     public MuninNodeOptions UseLoopbackAddress(int port) {}
   }
 
   public abstract class NodeBase :
     IAsyncDisposable,
     IDisposable,
     IMuninNode,
     IMuninNodeProfile
   {
     [Obsolete("Use a constructor overload that takes IMuninNodeListenerFactory as an argument.")]
     protected NodeBase(IAccessRule? accessRule, ILogger? logger) {}
     protected NodeBase(IMuninNodeListenerFactory listenerFactory, IAccessRule? accessRule, ILogger? logger) {}
     protected NodeBase(IMuninProtocolHandlerFactory protocolHandlerFactory, IMuninNodeListenerFactory listenerFactory, IAccessRule? accessRule, ILogger? logger) {}
 
     public virtual Encoding Encoding { get; }
     public EndPoint EndPoint { get; }
     public abstract string HostName { get; }
     protected IMuninNodeListener? Listener { get; }
     [Obsolete("Use EndPoint instead.")]
     public EndPoint LocalEndPoint { get; }
     protected ILogger? Logger { get; }
     public virtual Version NodeVersion { get; }
     public abstract IPluginProvider PluginProvider { get; }
     string IMuninNodeProfile.Version { get; }
 
     public async ValueTask AcceptAsync(bool throwIfCancellationRequested, CancellationToken cancellationToken) {}
     public async ValueTask AcceptSingleSessionAsync(CancellationToken cancellationToken = default) {}
     [Obsolete("Use IMuninNodeListenerFactory and StartAsync instead.")]
     protected virtual Socket CreateServerSocket() {}
     protected virtual void Dispose(bool disposing) {}
     public void Dispose() {}
     public async ValueTask DisposeAsync() {}
     protected virtual async ValueTask DisposeAsyncCore() {}
     protected virtual EndPoint GetLocalEndPointToBind() {}
     protected virtual IMuninNodeProfile GetNodeProfile() {}
     public Task RunAsync(CancellationToken cancellationToken) {}
     [Obsolete("This method will be deprecated in the future.Use IMuninNodeListenerFactory and StartAsync instead.Make sure to override CreateServerSocket if you need to use this method.")]
     public void Start() {}
     public ValueTask StartAsync(CancellationToken cancellationToken = default) {}
+    public ValueTask StopAsync(CancellationToken cancellationToken = default) {}
     protected void ThrowIfDisposed() {}
     protected void ThrowIfPluginProviderIsNull() {}
   }
 }
 
 namespace Smdn.Net.MuninNode.DependencyInjection {
   public interface IMuninNodeBuilder {
     string ServiceKey { get; }
     IServiceCollection Services { get; }
 
     IMuninNode Build(IServiceProvider serviceProvider);
   }
 
   public interface IMuninServiceBuilder {
     IServiceCollection Services { get; }
   }
 
   public static class IMuninNodeBuilderExtensions {
     public static IMuninNodeBuilder AddPlugin(this IMuninNodeBuilder builder, Func<IServiceProvider, IPlugin> buildPlugin) {}
  ...
Read more

Smdn.Net.MuninNode version 2.3.0

18 May 06:20
127cfbc
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
index b0e6eda..d6b659a 100644
--- a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
@@ -1,352 +1,492 @@
-// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-2.2.0)
+// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-2.3.0)
 //   Name: Smdn.Net.MuninNode
-//   AssemblyVersion: 2.2.0.0
-//   InformationalVersion: 2.2.0+04e5ff38096e4d62b2c9bc5a716d8b2c5a6ad72d
+//   AssemblyVersion: 2.3.0.0
+//   InformationalVersion: 2.3.0+805f911ac4e163898a8e18be3121fd9baf3a44f5
 //   TargetFramework: .NETCoreApp,Version=v8.0
 //   Configuration: Release
 //   Referenced assemblies:
 //     Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Options, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Smdn.Fundamental.Exception, Version=3.0.0.0, Culture=neutral
 //     System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+//     System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.IO.Pipelines, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
 using System.Buffers;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
+using System.Text.RegularExpressions;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Smdn.Net.MuninNode;
 using Smdn.Net.MuninNode.DependencyInjection;
+using Smdn.Net.MuninNode.Protocol;
 using Smdn.Net.MuninNode.Transport;
 using Smdn.Net.MuninPlugin;
 
 namespace Smdn.Net.MuninNode {
   public interface IAccessRule {
     bool IsAcceptable(IPEndPoint remoteEndPoint);
   }
 
   public interface IMuninNode {
     EndPoint EndPoint { get; }
     string HostName { get; }
 
     Task RunAsync(CancellationToken cancellationToken);
   }
 
   public static class IAccessRuleServiceCollectionExtensions {
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IAccessRule accessRule) {}
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IReadOnlyList<IPAddress> addressListAllowFrom) {}
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IReadOnlyList<IPAddress> addressListAllowFrom, bool shouldConsiderIPv4MappedIPv6Address) {}
     public static IServiceCollection AddMuninNodeLoopbackOnlyAccessRule(this IServiceCollection services) {}
   }
 
   public abstract class LocalNode : NodeBase {
     public static LocalNode Create(IPluginProvider pluginProvider, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
     public static LocalNode Create(IReadOnlyCollection<IPlugin> plugins, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
 
     [Obsolete("Use a constructor overload that takes IMuninNodeListenerFactory as an argument.")]
     protected LocalNode(IAccessRule? accessRule, ILogger? logger = null) {}
     protected LocalNode(IMuninNodeListenerFactory? listenerFactory, IAccessRule? accessRule, ILogger? logger) {}
 
     [Obsolete("Use IMuninNodeListenerFactory and StartAsync instead.")]
     protected override Socket CreateServerSocket() {}
   }
 
   public sealed class MuninNodeOptions {
     public const string DefaultHostName = "munin-node.localhost";
     public const int DefaultPort = 4949;
 
     public static IPAddress DefaultAddress { get; }
 
     public MuninNodeOptions() {}
 
     public IAccessRule? AccessRule { get; set; }
     public IPAddress Address { get; set; }
     public string HostName { get; set; }
     public int Port { get; set; }
 
     public MuninNodeOptions AllowFrom(IReadOnlyList<IPAddress> addresses, bool shouldConsiderIPv4MappedIPv6Address = true) {}
     public MuninNodeOptions AllowFromLoopbackOnly() {}
     public MuninNodeOptions UseAnyAddress() {}
     public MuninNodeOptions UseAnyAddress(int port) {}
     public MuninNodeOptions UseLoopbackAddress() {}
     public MuninNodeOptions UseLoopbackAddress(int port) {}
   }
 
   public abstract class NodeBase :
     IAsyncDisposable,
     IDisposable,
-    IMuninNode
+    IMuninNode,
+    IMuninNodeProfile
   {
     [Obsolete("Use a constructor overload that takes IMuninNodeListenerFactory as an argument.")]
     protected NodeBase(IAccessRule? accessRule, ILogger? logger) {}
     protected NodeBase(IMuninNodeListenerFactory listenerFactory, IAccessRule? accessRule, ILogger? logger) {}
+    prote...
Read more

Smdn.Net.MuninNode.Hosting version 3.0.0

01 May 14:24
b771f7a
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
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
new file mode 100644
index 0000000..387ee95
--- /dev/null
+++ b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net8.0.apilist.cs
@@ -0,0 +1,43 @@
+// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.0.0)
+//   Name: Smdn.Net.MuninNode.Hosting
+//   AssemblyVersion: 3.0.0.0
+//   InformationalVersion: 3.0.0+0830d2fdea4a5b05d99958b5116ff7b474590f2f
+//   TargetFramework: .NETCoreApp,Version=v8.0
+//   Configuration: Release
+//   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.2.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.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 class MuninNodeBackgroundService : BackgroundService {
+    public MuninNodeBackgroundService(IMuninNode node) {}
+    public MuninNodeBackgroundService(IMuninNode node, ILogger<MuninNodeBackgroundService>? logger) {}
+
+    public EndPoint EndPoint { get; }
+
+    public override void Dispose() {}
+    protected override async Task ExecuteAsync(CancellationToken stoppingToken) {}
+  }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.5.0.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.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
new file mode 100644
index 0000000..3162c84
--- /dev/null
+++ b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-netstandard2.1.apilist.cs
@@ -0,0 +1,42 @@
+// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.0.0)
+//   Name: Smdn.Net.MuninNode.Hosting
+//   AssemblyVersion: 3.0.0.0
+//   InformationalVersion: 3.0.0+0830d2fdea4a5b05d99958b5116ff7b474590f2f
+//   TargetFramework: .NETStandard,Version=v2.1
+//   Configuration: Release
+//   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.2.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 class MuninNodeBackgroundService : BackgroundService {
+    public MuninNodeBackgroundService(IMuninNode node) {}
+    public MuninNodeBackgroundService(IMuninNode node, ILogger<MuninNodeBackgroundService>? logger) {}
+
+    public EndPoint EndPoint { get; }
+
+    public override void Dispose() {}
+    protected override async Task ExecuteAsync(CancellationToken stoppingToken) {}
+  }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.5.0.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.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
new file mode 100644
index 0000000..f3af407
--- /dev/null
+++ b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting.csproj
@@ -0,0 +1,65 @@
+<!--
+SPDX-FileCopyrightText: 2025 smdn <smdn@smdn.jp>
+SPDX-License-Identifier: MIT
+-->
+<Project Sdk="Microsoft.NET.Sdk">
+  <PropertyGroup>
+    <TargetFrameworks>netstandard2.1;net8.0</TargetFrameworks>
+    <VersionPrefix>3.0.0</VersionPrefix>
+    <VersionSuffix></VersionSuffix>
+    <!--<PackageValidationBaselineVersion>3.0.0</PackageValidationBaselineVersion>-->
+    <RootNamespace/> <!-- empty the root namespace so that the namespace is determined only by the directory name, for code style rule IDE0030 -->
+    <Nullable>enable</Nullable>
+    <NoWarn>CS1591;$(NoWarn)</NoWarn> <!-- CS1591: Missing XML comment for publicly visible type or member 'Type_or_Member' -->
+  </PropertyGroup>
+
+  <PropertyGroup Label="assembly attributes">
+    <Description>
+<![CDATA[A .NET implementation of [Munin-Node](https://guide.munin-monitoring.org/en/latest/node/index.html) for [.NET Generic Host](https://learn.microsoft.com/dotnet/core/extensions/generic-host).
+
+This library provides APIs to run Munin-Node as a background service running on a .NET Generic Host.
+
+This library mainly provides a `MuninNodeBackgroundService` class derived from `BackgroundService`, and extension methods to register the Munin-Node service to the `ServiceCollection`.
+
+This library uses [Smdn.Net.MuninNode](https://www.nuget.org/packages/Smdn.Net.MuninNode) and the API is provided as an extension to `Smdn.Net.MuninNode`.
+]]>
+    </Description>
+    <CopyrightYear>2025</CopyrightYear>
+  </PropertyGroup>
+
+  <PropertyGroup Label="package properties">
+    <PackageTags>Munin,Munin-Node,Munin-Plugin,hosting,generic-host,dependency-injection</PackageTags>
+    <GenerateNupkgReadmeFileDependsOnTargets>$(GenerateNupkgReadmeFileDependsOnTargets);GenerateReadmeFileContent</GenerateNupkgReadmeFileDependsOnTargets>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.0" />
+    <ProjectOrPackageReference ReferencePackageVersion="[2.2.0,4.0.0)" Include="..\Smdn.Net.MuninNode\Smdn.Net.MuninNode.csproj" />
+  </ItemGroup>
+
+  <Target Name="GenerateReadmeFileContent">
+    <PropertyGroup>
+      <PackageReadmeFileContent><![CDATA[# $(PackageId) $(PackageVersion)
+$(Description)
+
+## Getting started
+First, add the [$(PackageId)](https://www.nuget.org/packages/$(PackageId)) package and any other packages you need to the project file.
+
+```
+dotnet add package $(PackageId)
+dotnet add package Microsoft.Extensions.Hosting
+dotnet add package Microsoft.Extensions.Logging.Console
+```
+
+Using the API of the `Smdn.Net.MuninNode.DependencyInjection` and `Smdn.Net.MuninNode.Hosting` namespaces, and the `HostApplicationBuilder`, `WebApplicationBuilder` and so on, you can configure and run a Munin-Node as a hosted service in the following way.
+
+```cs
+$([System.IO.File]::ReadAllText('$(MSBuildThisFileDirectory)..\..\examples\$(PackageId)\getting-started\Program.cs').TrimEnd())
+```
+
+## Contributing
+This project welcomes contributions, feedbacks and suggestions. You can contribute to this project by submitting [Issues]($(RepositoryUrl)/issues/new/choose) or [Pull Requests]($(RepositoryUrl)/pulls/) on the [GitHub repository]($(RepositoryUrl)).
+]]></PackageReadmeFileContent>
+    </PropertyGroup>
+  </Target>
+</Project>
diff --git a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/IServiceCollectionExtensions.cs b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/IServiceCollectionExtensions.cs
new file mode 100644
index 0000000..4a3b85a
--- /dev/null
+++ b/src/Smdn.Net.M...
Read more

Smdn.Net.MuninNode version 2.2.0

01 May 14:07
08e899a
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
index 51f7e32..b0e6eda 100644
--- a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net8.0.apilist.cs
@@ -1,221 +1,352 @@
-// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-2.1.0)
+// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-2.2.0)
 //   Name: Smdn.Net.MuninNode
-//   AssemblyVersion: 2.1.0.0
-//   InformationalVersion: 2.1.0+16b4425cbed9d9331220cdef22e4c3e669122124
+//   AssemblyVersion: 2.2.0.0
+//   InformationalVersion: 2.2.0+04e5ff38096e4d62b2c9bc5a716d8b2c5a6ad72d
 //   TargetFramework: .NETCoreApp,Version=v8.0
 //   Configuration: Release
 //   Referenced assemblies:
-//     Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Microsoft.Extensions.Options, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Smdn.Fundamental.Exception, Version=3.0.0.0, Culture=neutral
 //     System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.IO.Pipelines, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
+using System.Buffers;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Smdn.Net.MuninNode;
+using Smdn.Net.MuninNode.DependencyInjection;
+using Smdn.Net.MuninNode.Transport;
 using Smdn.Net.MuninPlugin;
 
 namespace Smdn.Net.MuninNode {
   public interface IAccessRule {
     bool IsAcceptable(IPEndPoint remoteEndPoint);
   }
 
+  public interface IMuninNode {
+    EndPoint EndPoint { get; }
+    string HostName { get; }
+
+    Task RunAsync(CancellationToken cancellationToken);
+  }
+
   public static class IAccessRuleServiceCollectionExtensions {
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IAccessRule accessRule) {}
     public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IReadOnlyList<IPAddress> addressListAllowFrom) {}
+    public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IReadOnlyList<IPAddress> addressListAllowFrom, bool shouldConsiderIPv4MappedIPv6Address) {}
+    public static IServiceCollection AddMuninNodeLoopbackOnlyAccessRule(this IServiceCollection services) {}
   }
 
   public abstract class LocalNode : NodeBase {
     public static LocalNode Create(IPluginProvider pluginProvider, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
     public static LocalNode Create(IReadOnlyCollection<IPlugin> plugins, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
 
+    [Obsolete("Use a constructor overload that takes IMuninNodeListenerFactory as an argument.")]
     protected LocalNode(IAccessRule? accessRule, ILogger? logger = null) {}
+    protected LocalNode(IMuninNodeListenerFactory? listenerFactory, IAccessRule? accessRule, ILogger? logger) {}
 
+    [Obsolete("Use IMuninNodeListenerFactory and StartAsync instead.")]
     protected override Socket CreateServerSocket() {}
-    protected virtual EndPoint GetLocalEndPointToBind() {}
+  }
+
+  public sealed class MuninNodeOptions {
+    public const string DefaultHostName = "munin-node.localhost";
+    public const int DefaultPort = 4949;
+
+    public static IPAddress DefaultAddress { get; }
+
+    public MuninNodeOptions() {}
+
+    pu...
Read more

Smdn.Net.MuninNode version 2.1.0

03 Apr 14:10
e74581d
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
deleted file mode 100644
index 62a4f2b..0000000
--- a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
+++ /dev/null
@@ -1,221 +0,0 @@
-// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-2.0.0)
-//   Name: Smdn.Net.MuninNode
-//   AssemblyVersion: 2.0.0.0
-//   InformationalVersion: 2.0.0+0c4121c0bc87932e6486c3b38a123cb59460ac02
-//   TargetFramework: .NETCoreApp,Version=v6.0
-//   Configuration: Release
-//   Referenced assemblies:
-//     Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Smdn.Fundamental.Exception, Version=3.0.0.0, Culture=neutral
-//     System.Collections, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.ComponentModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.IO.Pipelines, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
-//     System.Linq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
-//     System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.Net.Sockets, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.Security.Cryptography.Algorithms, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-//     System.Text.RegularExpressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-#nullable enable annotations
-
-using System;
-using System.Collections.Generic;
-using System.Net;
-using System.Net.Sockets;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using Smdn.Net.MuninNode;
-using Smdn.Net.MuninPlugin;
-
-namespace Smdn.Net.MuninNode {
-  public interface IAccessRule {
-    bool IsAcceptable(IPEndPoint remoteEndPoint);
-  }
-
-  public static class IAccessRuleServiceCollectionExtensions {
-    public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IAccessRule accessRule) {}
-    public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IReadOnlyList<IPAddress> addressListAllowFrom) {}
-  }
-
-  public abstract class LocalNode : NodeBase {
-    public static LocalNode Create(IPluginProvider pluginProvider, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
-    public static LocalNode Create(IReadOnlyCollection<IPlugin> plugins, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
-
-    protected LocalNode(IAccessRule? accessRule, ILogger? logger = null) {}
-
-    protected override Socket CreateServerSocket() {}
-    protected virtual EndPoint GetLocalEndPointToBind() {}
-  }
-
-  public abstract class NodeBase :
-    IAsyncDisposable,
-    IDisposable
-  {
-    protected NodeBase(IAccessRule? accessRule, ILogger? logger) {}
-
-    public virtual Encoding Encoding { get; }
-    public abstract string HostName { get; }
-    public EndPoint LocalEndPoint { get; }
-    protected ILogger? Logger { get; }
-    public virtual Version NodeVersion { get; }
-    public abstract IPluginProvider PluginProvider { get; }
-
-    public async ValueTask AcceptAsync(bool throwIfCancellationRequested, CancellationToken cancellationToken) {}
-    public async ValueTask AcceptSingleSessionAsync(CancellationToken cancellationToken = default) {}
-    protected abstract Socket CreateServerSocket();
-    protected virtual void Dispose(bool disposing) {}
-    public void Dispose() {}
-    public async ValueTask DisposeAsync() {}
-    protected virtual async ValueTask DisposeAsyncCore() {}
-    public void Start() {}
-    protected void ThrowIfPluginProviderIsNull() {}
-  }
-}
-
-namespace Smdn.Net.MuninPlugin {
-  public interface INodeSessionCallback {
-    ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken);
-    ValueTask ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken);
-  }
-
-  public interface IPlugin {
-    IPluginDataSource DataSource { get; }
-    IPluginGraphAttributes GraphAttributes { get; }
-    string Name { get; }
-    INodeSessionCallback? SessionCallback { get; }
-  }
-
-  public interface IPluginDataSource {
-    IReadOnlyCollection<IPluginField> Fields { get; }
-  }
-
-  public interface IPluginField {
-    PluginFieldAttributes Attributes { get; }
-    string Name { get; }
-
-    ValueTask<string> GetFormattedValueStringAsync(CancellationToken cancellationToken);
-  }
-
-  public interface IPluginGraphAttributes {
-    IEnumerable<string> EnumerateAttributes();
-  }
-
-  public interface IPluginProvider {
-    IReadOnlyCollection<IPlugin> Plugins { get; }
-    INodeSessionCallback? SessionCallback { get; }
-  }
-
-  public enum PluginFieldGraphStyle : int {
-    Area = 1,
-    AreaStack = 3,
-    Default = 0,
-    Line = 100,
-    LineStack = 200,
-    LineStackWidth1 = 201,
-    LineStackWidth2 = 202,
-    LineStackWidth3 = 203,
-    LineWidth1 = 101,
-    LineWidth2 = 102,
-    LineWidth3 = 103,
-    Stack = 2,
-  }
-
-  public class Plugin :
-    INodeSessionCallback,
-    IPlugin,
-    IPluginDataSource
-  {
-    public Plugin(string name, PluginGraphAttributes graphAttributes, IReadOnlyCollection<IPluginField> fields) {}
-
-    public IReadOnlyCollection<IPluginField> Fields { get; }
-    public PluginGraphAttributes GraphAttributes { get; }
-    public string Name { get; }
-    IPluginDataSource IPlugin.DataSource { get; }
-    IPluginGraphAttributes IPlugin.GraphAttributes { get; }
-    INodeSessionCallback? IPlugin.SessionCallback { get; }
-    IReadOnlyCollection<IPluginField> IPluginDataSource.Fields { get; }
-
-    protected virtual ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken) {}
-    protected virtual ValueTask ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken) {}
-    ValueTask INodeSessionCallback.ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken) {}
-    ValueTask INodeSessionCallback.ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken) {}
-  }
-
-  public static class PluginFactory {
-    public static IPluginField CreateField(string label, Func<double?> fetchValue) {}
-    public static IPluginField CreateField(string label, PluginFieldGraphStyle graphStyle, Func<double?> fetchValue) {}
-    public static IPluginField CreateField(string label, PluginFieldGraphStyle graphStyle, PluginFieldNormalValueRange normalRangeForWarning, PluginFieldNormalValueRange normalRangeForCritical, Func<double?> fetchValue) {}
-    public static IPluginField CreateField(string name, string label, PluginFieldGraphStyle graphStyle, PluginFieldNormalValueRange normalRangeForWarning, PluginFieldNormalValueRange normalRangeForCritical, Func<double?> fetchValue) {}
-    public static IPluginField CreateField(string name, string label, PluginFieldGraphStyle graphStyle, PluginFieldNormalValueRange normalRangeForWarning, PluginFieldNormalValueRange normalRangeForCritical, string? negativeFieldName, Func<double?> fetchValue) {}
-    public static IPlugin CreatePlugin(string name, PluginGraphAttributes graphAttributes, IReadOnlyCollection<IPluginField> fields) {}
-    public static IPlugin CreatePlugin(string name, PluginGraphAttributes graphAttributes, IReadOnlyCollection<PluginFieldBase> fields) {}
-    public static IPlugin CreatePlugin(string name, PluginGraphAttributes graphAttributes, PluginFieldBase field) {}
-    public static IPlugin CreatePlugin(string name, string fieldLabel, Func<double?> fetchFieldValue, PluginGraphAttributes graphAttributes) {}
-    public static IPlugin CreatePlugin(string name, string fieldLabel, PluginFieldGraphStyle fieldGraphStyle, Func<double?> fetchFieldValue, PluginGraphAttributes graphAttributes) {}
-  }
-
-  public abstract class PluginFieldBase : IPluginField {
-    protected PluginFieldBase(string label, string? name, ...
Read more

Smdn.Net.MuninNode version 2.0.0

03 Nov 14:06
a565585
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
index 130febd..62a4f2b 100644
--- a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
@@ -1,215 +1,221 @@
-// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-1.3.0)
+// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-2.0.0)
 //   Name: Smdn.Net.MuninNode
-//   AssemblyVersion: 1.3.0.0
-//   InformationalVersion: 1.3.0+191d215fe57392cb544e2ffea221644a1007cfc0
+//   AssemblyVersion: 2.0.0.0
+//   InformationalVersion: 2.0.0+0c4121c0bc87932e6486c3b38a123cb59460ac02
 //   TargetFramework: .NETCoreApp,Version=v6.0
 //   Configuration: Release
 //   Referenced assemblies:
 //     Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Smdn.Fundamental.Exception, Version=3.0.0.0, Culture=neutral
 //     System.Collections, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.ComponentModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.IO.Pipelines, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Linq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Net.Sockets, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Security.Cryptography.Algorithms, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Text.RegularExpressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
 using System.Collections.Generic;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Smdn.Net.MuninNode;
 using Smdn.Net.MuninPlugin;
 
 namespace Smdn.Net.MuninNode {
-  public class LocalNode : NodeBase {
-    public LocalNode(IPluginProvider pluginProvider, string hostName, int port, ILogger? logger = null) {}
-    public LocalNode(IPluginProvider pluginProvider, string hostName, int port, IServiceProvider? serviceProvider = null) {}
-    public LocalNode(IReadOnlyCollection<IPlugin> plugins, int port, IServiceProvider? serviceProvider = null) {}
-    public LocalNode(IReadOnlyCollection<IPlugin> plugins, string hostName, int port, IServiceProvider? serviceProvider = null) {}
+  public interface IAccessRule {
+    bool IsAcceptable(IPEndPoint remoteEndPoint);
+  }
+
+  public static class IAccessRuleServiceCollectionExtensions {
+    public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IAccessRule accessRule) {}
+    public static IServiceCollection AddMuninNodeAccessRule(this IServiceCollection services, IReadOnlyList<IPAddress> addressListAllowFrom) {}
+  }
 
-    public IPEndPoint LocalEndPoint { get; }
+  public abstract class LocalNode : NodeBase {
+    public static LocalNode Create(IPluginProvider pluginProvider, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
+    public static LocalNode Create(IReadOnlyCollection<IPlugin> plugins, int port, string? hostName = null, IReadOnlyList<IPAddress>? addressListAllowFrom = null, IServiceProvider? serviceProvider = null) {}
+
+    protected LocalNode(IAccessRule? accessRule, ILogger? logger = null) {}
 
     protected override Socket CreateServerSocket() {}
-    protected override bool IsClientAcceptable(IPEndPoint remoteEndPoint) {}
+    protected virtual EndPoint GetLocalEndPointToBind() {}
   }
 
   public abstract class NodeBase :
     IAsyncDisposable,
     IDisposable
   {
-    private protected class PluginProvider : IPluginProvider {
-      public PluginProvider(IReadOnlyCollection<IPlugin> plugins) {}
-
-      public IReadOnlyCollection<IPlugin> Plugins { get; }
-      public INodeSessionCallback? SessionCallback { get; }
-    }
-
-    protected NodeBase(IPluginProvider pluginProvider, string hostName, ILogger? logger) {}
-    protected NodeBase(IReadOnlyCollection<IPlugin> plugins, string hostName, ILogger? logger) {}
+    protected NodeBase(IAccessRule? accessRule, ILogger? logger) {}
 
     public virtual Encoding Encoding { get; }
-    public string HostName { get; }
+    public abstract string HostName { get; }
+    public EndPoint LocalEndPoint { get; }
     protected ILogger? Logger { get; }
     public virtual Version NodeVersion { get; }
-    [Obsolete("This member will be deprecated in future version.")]
-    public IReadOnlyCollection<IPlugin> Plugins { get; }
+    public abstract IPluginProvider PluginProvider { get; }
 
     public async ValueTask AcceptAsync(bool throwIfCancellationRequested, CancellationToken cancellationToken) {}
     public async ValueTask AcceptSingleSessionAsync(CancellationToken cancellationToken = default) {}
     protected abstract Socket CreateServerSocket();
     protected virtual void Dispose(bool disposing) {}
     public void Dispose() {}
     public async ValueTask DisposeAsync() {}
     protected virtual async ValueTask DisposeAsyncCore() {}
-    protected abstract bool IsClientAcceptable(IPEndPoint remoteEndPoint);
     public void Start() {}
+    protected void ThrowIfPluginProviderIsNull() {}
   }
 }
 
 namespace Smdn.Net.MuninPlugin {
   public interface INodeSessionCallback {
     ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken);
     ValueTask ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken);
   }
 
   public interface IPlugin {
     IPluginDataSource DataSource { get; }
-    PluginGraphAttributes GraphAttributes { get; }
+    IPluginGraphAttributes GraphAttributes { get; }
     string Name { get; }
     INodeSessionCallback? SessionCallback { get; }
   }
 
   public interface IPluginDataSource {
     IReadOnlyCollection<IPluginField> Fields { get; }
   }
 
   public interface IPluginField {
     PluginFieldAttributes Attributes { get; }
     string Name { get; }
 
     ValueTask<string> GetFormattedValueStringAsync(CancellationToken cancellationToken);
   }
 
+  public interface IPluginGraphAttributes {
+    IEnumerable<string> EnumerateAttributes();
+  }
+
   public interface IPluginProvider {
     IReadOnlyCollection<IPlugin> Plugins { get; }
     INodeSessionCallback? SessionCallback { get; }
   }
 
   public enum PluginFieldGraphStyle : int {
     Area = 1,
     AreaStack = 3,
     Default = 0,
     Line = 100,
     LineStack = 200,
     LineStackWidth1 = 201,
     LineStackWidth2 = 202,
     LineStackWidth3 = 203,
     LineWidth1 = 101,
     LineWidth2 = 102,
     LineWidth3 = 103,
     Stack = 2,
   }
 
   public class Plugin :
     INodeSessionCallback,
     IPlugin,
     IPluginDataSource
   {
     public Plugin(string name, PluginGraphAttributes graphAttributes, IReadOnlyCollection<IPluginField> fields) {}
 
     public IReadOnlyCollection<IPluginField> Fields { get; }
     public PluginGraphAttributes GraphAttributes { get; }
     public string Name { get; }
     IPluginDataSource IPlugin.DataSource { get; }
+    IPluginGraphAttributes IPlugin.GraphAttributes { get; }
     INodeSessionCallback? IPlugin.SessionCallback { get; }
     IReadOnlyCollection<IPluginField> IPluginDataSource.Fields { get; }
 
     protected virtual ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken) {}
     protected virtual ValueTask ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken) {}
     ValueTask INodeSessionCallback.ReportSessionClosedAsync(string sessionId, CancellationToken cancellati...
Read more

Smdn.Net.MuninNode version 1.3.0

11 Oct 11:32
1e4f59b
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
index 4bf85bf..130febd 100644
--- a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
@@ -1,210 +1,215 @@
-// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-1.2.0)
+// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-1.3.0)
 //   Name: Smdn.Net.MuninNode
-//   AssemblyVersion: 1.2.0.0
-//   InformationalVersion: 1.2.0+b0e11cd6b408018ad93f29b49e58cab7e9ef6b1b
+//   AssemblyVersion: 1.3.0.0
+//   InformationalVersion: 1.3.0+191d215fe57392cb544e2ffea221644a1007cfc0
 //   TargetFramework: .NETCoreApp,Version=v6.0
 //   Configuration: Release
 //   Referenced assemblies:
 //     Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Smdn.Fundamental.Exception, Version=3.0.0.0, Culture=neutral
 //     System.Collections, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.ComponentModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.IO.Pipelines, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Linq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Net.Sockets, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Security.Cryptography.Algorithms, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Text.RegularExpressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
 using System.Collections.Generic;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.Logging;
 using Smdn.Net.MuninNode;
 using Smdn.Net.MuninPlugin;
 
 namespace Smdn.Net.MuninNode {
   public class LocalNode : NodeBase {
     public LocalNode(IPluginProvider pluginProvider, string hostName, int port, ILogger? logger = null) {}
     public LocalNode(IPluginProvider pluginProvider, string hostName, int port, IServiceProvider? serviceProvider = null) {}
     public LocalNode(IReadOnlyCollection<IPlugin> plugins, int port, IServiceProvider? serviceProvider = null) {}
     public LocalNode(IReadOnlyCollection<IPlugin> plugins, string hostName, int port, IServiceProvider? serviceProvider = null) {}
 
     public IPEndPoint LocalEndPoint { get; }
 
     protected override Socket CreateServerSocket() {}
     protected override bool IsClientAcceptable(IPEndPoint remoteEndPoint) {}
   }
 
   public abstract class NodeBase :
     IAsyncDisposable,
     IDisposable
   {
     private protected class PluginProvider : IPluginProvider {
       public PluginProvider(IReadOnlyCollection<IPlugin> plugins) {}
 
       public IReadOnlyCollection<IPlugin> Plugins { get; }
       public INodeSessionCallback? SessionCallback { get; }
     }
 
     protected NodeBase(IPluginProvider pluginProvider, string hostName, ILogger? logger) {}
     protected NodeBase(IReadOnlyCollection<IPlugin> plugins, string hostName, ILogger? logger) {}
 
     public virtual Encoding Encoding { get; }
     public string HostName { get; }
     protected ILogger? Logger { get; }
     public virtual Version NodeVersion { get; }
     [Obsolete("This member will be deprecated in future version.")]
     public IReadOnlyCollection<IPlugin> Plugins { get; }
 
     public async ValueTask AcceptAsync(bool throwIfCancellationRequested, CancellationToken cancellationToken) {}
     public async ValueTask AcceptSingleSessionAsync(CancellationToken cancellationToken = default) {}
     protected abstract Socket CreateServerSocket();
     protected virtual void Dispose(bool disposing) {}
     public void Dispose() {}
     public async ValueTask DisposeAsync() {}
     protected virtual async ValueTask DisposeAsyncCore() {}
     protected abstract bool IsClientAcceptable(IPEndPoint remoteEndPoint);
     public void Start() {}
   }
 }
 
 namespace Smdn.Net.MuninPlugin {
   public interface INodeSessionCallback {
     ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken);
     ValueTask ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken);
   }
 
   public interface IPlugin {
     IPluginDataSource DataSource { get; }
     PluginGraphAttributes GraphAttributes { get; }
     string Name { get; }
     INodeSessionCallback? SessionCallback { get; }
   }
 
   public interface IPluginDataSource {
     IReadOnlyCollection<IPluginField> Fields { get; }
   }
 
   public interface IPluginField {
     PluginFieldAttributes Attributes { get; }
     string Name { get; }
 
     ValueTask<string> GetFormattedValueStringAsync(CancellationToken cancellationToken);
   }
 
   public interface IPluginProvider {
     IReadOnlyCollection<IPlugin> Plugins { get; }
     INodeSessionCallback? SessionCallback { get; }
   }
 
   public enum PluginFieldGraphStyle : int {
     Area = 1,
     AreaStack = 3,
     Default = 0,
     Line = 100,
     LineStack = 200,
     LineStackWidth1 = 201,
     LineStackWidth2 = 202,
     LineStackWidth3 = 203,
     LineWidth1 = 101,
     LineWidth2 = 102,
     LineWidth3 = 103,
     Stack = 2,
   }
 
   public class Plugin :
     INodeSessionCallback,
     IPlugin,
     IPluginDataSource
   {
     public Plugin(string name, PluginGraphAttributes graphAttributes, IReadOnlyCollection<IPluginField> fields) {}
 
     public IReadOnlyCollection<IPluginField> Fields { get; }
     public PluginGraphAttributes GraphAttributes { get; }
     public string Name { get; }
     IPluginDataSource IPlugin.DataSource { get; }
     INodeSessionCallback? IPlugin.SessionCallback { get; }
     IReadOnlyCollection<IPluginField> IPluginDataSource.Fields { get; }
 
     protected virtual ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken) {}
     protected virtual ValueTask ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken) {}
     ValueTask INodeSessionCallback.ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken) {}
     ValueTask INodeSessionCallback.ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken) {}
   }
 
   public static class PluginFactory {
     public static IPluginField CreateField(string label, Func<double?> fetchValue) {}
     public static IPluginField CreateField(string label, PluginFieldGraphStyle graphStyle, Func<double?> fetchValue) {}
     public static IPluginField CreateField(string label, PluginFieldGraphStyle graphStyle, PluginFieldNormalValueRange normalRangeForWarning, PluginFieldNormalValueRange normalRangeForCritical, Func<double?> fetchValue) {}
     public static IPluginField CreateField(string name, string label, PluginFieldGraphStyle graphStyle, PluginFieldNormalValueRange normalRangeForWarning, PluginFieldNormalValueRange normalRangeForCritical, Func<double?> fetchValue) {}
+    public static IPluginField CreateField(string name, string label, PluginFieldGraphStyle graphStyle, PluginFieldNormalValueRange normalRangeForWarning, PluginFieldNormalValueRange normalRangeForCritical, string? negativeFieldName, Func<double?> fetchValue) {}
     public static IPlugin CreatePlugin(string name, PluginGraphAttributes graphAttributes, IReadOnlyCollection<IPluginField> fields) {}
     public static IPlugin CreatePlugin(string name, PluginGraphAttributes graphAttributes, IReadOnlyCollection<PluginFieldBase> fields) {}
     public static IPlugin CreatePlugin(string name, PluginGraphAttributes graphAttributes, PluginFieldBase field) {}
     public static IPlugin CreatePlugin(string name, string fieldLabel, Func<double?> fetchFieldValue, PluginGraphAttributes graphAttributes) {}
     public static IPlugin CreatePlugin(string name, string fieldL...
Read more

Smdn.Net.MuninNode version 1.2.0

27 Jul 10:55
a648f49
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
index 421f9f1..4bf85bf 100644
--- a/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode/Smdn.Net.MuninNode-net6.0.apilist.cs
@@ -1,188 +1,210 @@
-// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-1.1.0)
+// Smdn.Net.MuninNode.dll (Smdn.Net.MuninNode-1.2.0)
 //   Name: Smdn.Net.MuninNode
-//   AssemblyVersion: 1.1.0.0
-//   InformationalVersion: 1.1.0+8c512e91195981258988a30fdf9c0ff4c53a6acc
+//   AssemblyVersion: 1.2.0.0
+//   InformationalVersion: 1.2.0+b0e11cd6b408018ad93f29b49e58cab7e9ef6b1b
 //   TargetFramework: .NETCoreApp,Version=v6.0
 //   Configuration: Release
 //   Referenced assemblies:
 //     Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
 //     Smdn.Fundamental.Exception, Version=3.0.0.0, Culture=neutral
 //     System.Collections, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.ComponentModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.IO.Pipelines, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Linq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Net.Sockets, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Security.Cryptography.Algorithms, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Text.RegularExpressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
 using System.Collections.Generic;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.Logging;
 using Smdn.Net.MuninNode;
 using Smdn.Net.MuninPlugin;
 
 namespace Smdn.Net.MuninNode {
   public class LocalNode : NodeBase {
+    public LocalNode(IPluginProvider pluginProvider, string hostName, int port, ILogger? logger = null) {}
+    public LocalNode(IPluginProvider pluginProvider, string hostName, int port, IServiceProvider? serviceProvider = null) {}
     public LocalNode(IReadOnlyCollection<IPlugin> plugins, int port, IServiceProvider? serviceProvider = null) {}
     public LocalNode(IReadOnlyCollection<IPlugin> plugins, string hostName, int port, IServiceProvider? serviceProvider = null) {}
 
     public IPEndPoint LocalEndPoint { get; }
 
     protected override Socket CreateServerSocket() {}
     protected override bool IsClientAcceptable(IPEndPoint remoteEndPoint) {}
   }
 
   public abstract class NodeBase :
     IAsyncDisposable,
     IDisposable
   {
+    private protected class PluginProvider : IPluginProvider {
+      public PluginProvider(IReadOnlyCollection<IPlugin> plugins) {}
+
+      public IReadOnlyCollection<IPlugin> Plugins { get; }
+      public INodeSessionCallback? SessionCallback { get; }
+    }
+
+    protected NodeBase(IPluginProvider pluginProvider, string hostName, ILogger? logger) {}
     protected NodeBase(IReadOnlyCollection<IPlugin> plugins, string hostName, ILogger? logger) {}
 
     public virtual Encoding Encoding { get; }
     public string HostName { get; }
+    protected ILogger? Logger { get; }
     public virtual Version NodeVersion { get; }
+    [Obsolete("This member will be deprecated in future version.")]
     public IReadOnlyCollection<IPlugin> Plugins { get; }
 
     public async ValueTask AcceptAsync(bool throwIfCancellationRequested, CancellationToken cancellationToken) {}
     public async ValueTask AcceptSingleSessionAsync(CancellationToken cancellationToken = default) {}
     protected abstract Socket CreateServerSocket();
     protected virtual void Dispose(bool disposing) {}
     public void Dispose() {}
     public async ValueTask DisposeAsync() {}
     protected virtual async ValueTask DisposeAsyncCore() {}
     protected abstract bool IsClientAcceptable(IPEndPoint remoteEndPoint);
     public void Start() {}
   }
 }
 
 namespace Smdn.Net.MuninPlugin {
   public interface INodeSessionCallback {
     ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken);
     ValueTask ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken);
   }
 
   public interface IPlugin {
     IPluginDataSource DataSource { get; }
     PluginGraphAttributes GraphAttributes { get; }
     string Name { get; }
     INodeSessionCallback? SessionCallback { get; }
   }
 
   public interface IPluginDataSource {
     IReadOnlyCollection<IPluginField> Fields { get; }
   }
 
   public interface IPluginField {
     PluginFieldAttributes Attributes { get; }
     string Name { get; }
 
     ValueTask<string> GetFormattedValueStringAsync(CancellationToken cancellationToken);
   }
 
+  public interface IPluginProvider {
+    IReadOnlyCollection<IPlugin> Plugins { get; }
+    INodeSessionCallback? SessionCallback { get; }
+  }
+
   public enum PluginFieldGraphStyle : int {
     Area = 1,
     AreaStack = 3,
     Default = 0,
     Line = 100,
     LineStack = 200,
     LineStackWidth1 = 201,
     LineStackWidth2 = 202,
     LineStackWidth3 = 203,
     LineWidth1 = 101,
     LineWidth2 = 102,
     LineWidth3 = 103,
     Stack = 2,
   }
 
   public class Plugin :
     INodeSessionCallback,
     IPlugin,
     IPluginDataSource
   {
     public Plugin(string name, PluginGraphAttributes graphAttributes, IReadOnlyCollection<IPluginField> fields) {}
 
     public IReadOnlyCollection<IPluginField> Fields { get; }
     public PluginGraphAttributes GraphAttributes { get; }
     public string Name { get; }
     IPluginDataSource IPlugin.DataSource { get; }
     INodeSessionCallback? IPlugin.SessionCallback { get; }
     IReadOnlyCollection<IPluginField> IPluginDataSource.Fields { get; }
 
     protected virtual ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken) {}
     protected virtual ValueTask ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken) {}
     ValueTask INodeSessionCallback.ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken) {}
     ValueTask INodeSessionCallback.ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken) {}
   }
 
   public static class PluginFactory {
     public static IPluginField CreateField(string label, Func<double?> fetchValue) {}
     public static IPluginField CreateField(string label, PluginFieldGraphStyle graphStyle, Func<double?> fetchValue) {}
     public static IPluginField CreateField(string label, PluginFieldGraphStyle graphStyle, PluginFieldNormalValueRange normalRangeForWarning, PluginFieldNormalValueRange normalRangeForCritical, Func<double?> fetchValue) {}
+    public static IPluginField CreateField(string name, string label, PluginFieldGraphStyle graphStyle, PluginFieldNormalValueRange normalRangeForWarning, PluginFieldNormalValueRange normalRangeForCritical, Func<double?> fetchValue) {}
     public static IPlugin CreatePlugin(string name, PluginGraphAttributes graphAttributes, IReadOnlyCollection<IPluginField> fields) {}
     public static IPlugin CreatePlugin(string name, PluginGraphAttributes graphAttributes, IReadOnlyCollection<PluginFieldBase> fields) {}
     public static IPlugin CreatePlugin(string name, PluginGraphAttributes graphAttributes, PluginFieldBase field) {}
     public static IPlugin CreatePlugin(string name, string fieldLabel, Func<double?> fetchFieldValue, PluginGraphAttributes graphAttributes) {}
     public static IPlugin CreatePlugin(string name, string fieldLabel, PluginFieldGraphStyle fieldGraphStyle, Func<double?> fetchFieldValue, PluginGraphAttributes graphAttributes) {}
   }
 
   public abstract class PluginFieldBase : IPluginField {
     protected PluginFieldBase(string label, string? name, PluginFieldGraphStyle graphStyle = PluginFieldGraphStyle.Default, PluginFieldNormalValueRa...
Read more