diff --git a/.gitignore b/.gitignore index 4c13ae2..edad16a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ DerivedData/ Package.resolved *.pyc .docc-build +.vscode diff --git a/Sources/Configuration/Providers/Common/ReloadingFileProviderCore.swift b/Sources/Configuration/Providers/Common/ReloadingFileProviderCore.swift index afa7507..65b342a 100644 --- a/Sources/Configuration/Providers/Common/ReloadingFileProviderCore.swift +++ b/Sources/Configuration/Providers/Common/ReloadingFileProviderCore.swift @@ -94,8 +94,8 @@ internal final class ReloadingFileProviderCore SnapshotType ) async throws { self.filePath = filePath @@ -114,7 +114,7 @@ internal final class ReloadingFileProviderCore") logger[metadataKey: "\(providerName).pollInterval.seconds"] = .string( pollInterval.components.seconds.description @@ -123,7 +123,7 @@ internal final class ReloadingFileProviderCore = .none, - logger: Logger? = nil, - metrics: (any MetricsFactory)? = nil + logger: Logger = Logger(label: "ReloadingJSONProvider"), + metrics: any MetricsFactory = MetricsSystem.factory ) async throws { try await self.init( filePath: filePath, @@ -116,8 +116,8 @@ public final class ReloadingJSONProvider: Sendable { /// - bytesDecoder: A decoder of bytes from a string. /// - secretsSpecifier: A secrets specifier in case some of the values should be treated as secret. /// - fileSystem: The underlying file system. - /// - logger: The logger instance to use, or nil to create a default one. - /// - metrics: The metrics factory to use, or nil to use a no-op implementation. + /// - logger: The logger instance to use. + /// - metrics: The metrics factory to use. /// - Throws: If the file cannot be read or parsed, or if the JSON structure is invalid. internal init( filePath: FilePath, @@ -125,8 +125,8 @@ public final class ReloadingJSONProvider: Sendable { bytesDecoder: some ConfigBytesFromStringDecoder, secretsSpecifier: SecretsSpecifier, fileSystem: some CommonProviderFileSystem, - logger: Logger?, - metrics: (any MetricsFactory)? + logger: Logger, + metrics: any MetricsFactory ) async throws { self.core = try await ReloadingFileProviderCore( filePath: filePath, @@ -189,8 +189,8 @@ public final class ReloadingJSONProvider: Sendable { config: ConfigReader, bytesDecoder: some ConfigBytesFromStringDecoder = .base64, secretsSpecifier: SecretsSpecifier = .none, - logger: Logger? = nil, - metrics: (any MetricsFactory)? = nil + logger: Logger = Logger(label: "ReloadingJSONProvider"), + metrics: any MetricsFactory = MetricsSystem.factory ) async throws { try await self.init( filePath: config.requiredString(forKey: "filePath", as: FilePath.self), diff --git a/Sources/Configuration/Providers/YAML/ReloadingYAMLProvider.swift b/Sources/Configuration/Providers/YAML/ReloadingYAMLProvider.swift index 96c81fe..e765eb1 100644 --- a/Sources/Configuration/Providers/YAML/ReloadingYAMLProvider.swift +++ b/Sources/Configuration/Providers/YAML/ReloadingYAMLProvider.swift @@ -92,16 +92,16 @@ public final class ReloadingYAMLProvider: Sendable { /// - pollInterval: The interval between file modification checks. Defaults to 15 seconds. /// - bytesDecoder: The decoder used to convert string values to byte arrays. /// - secretsSpecifier: Specifies which configuration values should be treated as secrets. - /// - logger: The logger instance to use, or nil to create a default one. - /// - metrics: The metrics factory to use, or nil to use a no-op implementation. + /// - logger: The logger instance to use. + /// - metrics: The metrics factory to use. /// - Throws: If the file cannot be read or parsed, or if the YAML structure is invalid. public convenience init( filePath: FilePath, pollInterval: Duration = .seconds(15), bytesDecoder: some ConfigBytesFromStringDecoder = .base64, secretsSpecifier: SecretsSpecifier = .none, - logger: Logger? = nil, - metrics: (any MetricsFactory)? = nil + logger: Logger = Logger(label: "ReloadingYAMLProvider"), + metrics: any MetricsFactory = MetricsSystem.factory ) async throws { try await self.init( filePath: filePath, @@ -121,8 +121,8 @@ public final class ReloadingYAMLProvider: Sendable { /// - bytesDecoder: A decoder of bytes from a string. /// - secretsSpecifier: A secrets specifier in case some of the values should be treated as secret. /// - fileSystem: The underlying file system. - /// - logger: The logger instance to use, or nil to create a default one. - /// - metrics: The metrics factory to use, or nil to use a no-op implementation. + /// - logger: The logger instance to use. + /// - metrics: The metrics factory to use. /// - Throws: If the file cannot be read or parsed, or if the YAML structure is invalid. internal init( filePath: FilePath, @@ -130,8 +130,8 @@ public final class ReloadingYAMLProvider: Sendable { bytesDecoder: some ConfigBytesFromStringDecoder, secretsSpecifier: SecretsSpecifier, fileSystem: some CommonProviderFileSystem, - logger: Logger?, - metrics: (any MetricsFactory)? + logger: Logger, + metrics: any MetricsFactory ) async throws { self.core = try await ReloadingFileProviderCore( filePath: filePath, @@ -186,15 +186,15 @@ public final class ReloadingYAMLProvider: Sendable { /// - config: The configuration reader containing the file path. /// - bytesDecoder: The decoder used to convert string values to byte arrays. /// - secretsSpecifier: Specifies which configuration values should be treated as secrets. - /// - logger: The logger instance to use, or nil to create a default one. - /// - metrics: The metrics factory to use, or nil to use a no-op implementation. + /// - logger: The logger instance to use. + /// - metrics: The metrics factory to use. /// - Throws: If the file path is missing, or if the file cannot be read or parsed. public convenience init( config: ConfigReader, bytesDecoder: some ConfigBytesFromStringDecoder = .base64, secretsSpecifier: SecretsSpecifier = .none, - logger: Logger? = nil, - metrics: (any MetricsFactory)? = nil + logger: Logger = Logger(label: "ReloadingYAMLProvider"), + metrics: any MetricsFactory = MetricsSystem.factory ) async throws { try await self.init( filePath: config.requiredString(forKey: "filePath", as: FilePath.self), diff --git a/Tests/ConfigurationTests/ReloadingFileProviderCoreTests.swift b/Tests/ConfigurationTests/ReloadingFileProviderCoreTests.swift index 3348b10..c693528 100644 --- a/Tests/ConfigurationTests/ReloadingFileProviderCoreTests.swift +++ b/Tests/ConfigurationTests/ReloadingFileProviderCoreTests.swift @@ -20,6 +20,7 @@ import ConfigurationTestingInternal import Foundation import ConfigurationTesting import Logging +import Metrics import ServiceLifecycle import Synchronization import SystemPackage @@ -97,7 +98,7 @@ private func withTestProvider( providerName: "TestProvider", fileSystem: fileSystem, logger: .noop, - metrics: nil, + metrics: NOOPMetricsHandler.instance, createSnapshot: { data in try TestSnapshot(contents: String(decoding: data, as: UTF8.self)) } @@ -155,7 +156,7 @@ struct CoreTests { providerName: "TestProvider", fileSystem: fileSystem, logger: .noop, - metrics: nil, + metrics: NOOPMetricsHandler.instance, createSnapshot: { data in try TestSnapshot(contents: String(decoding: data, as: UTF8.self)) }