diff --git a/.github/workflows/opentelemetry.yml b/.github/workflows/opentelemetry.yml index defb9d9b..16d0101e 100644 --- a/.github/workflows/opentelemetry.yml +++ b/.github/workflows/opentelemetry.yml @@ -1,17 +1,16 @@ --- +# Look up results at https://ela.st/oblt-ci-cd-stats +# There will be one service per GitHub repository, including the org name, and one Transaction per Workflow. name: OpenTelemetry Export Trace on: workflow_run: - workflows: - - pre-commit - - release - - release-main - - test - - test-reporter - - update-specs + workflows: [ "*" ] types: [completed] +permissions: + contents: read + jobs: otel-export-trace: runs-on: ubuntu-latest diff --git a/.github/workflows/test-docs.yml b/.github/workflows/test-docs.yml new file mode 100644 index 00000000..59a8daae --- /dev/null +++ b/.github/workflows/test-docs.yml @@ -0,0 +1,34 @@ +# This workflow sets the 'test' status check to success in case it's a docs only PR and e2e.yml is not triggered +# https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks#handling-skipped-but-required-checks +name: test # The name must be the same as in test.yml + +on: + pull_request: + paths-ignore: # This expression needs to match the paths ignored on e2e.yml. + - '**' + - '!*.md' + - '!*.asciidoc' + - '!docs/**' + +permissions: + contents: read + +## Concurrency only allowed in the main branch. +## So old builds running for old commits within the same Pull Request are cancelled +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +jobs: + + test-windows: + runs-on: windows-latest + + steps: + - run: 'echo "Not required for docs"' + + test-linux: + runs-on: ubuntu-latest + + steps: + - run: 'echo "Not required for docs"' \ No newline at end of file diff --git a/.github/workflows/test-reporter.yml b/.github/workflows/test-reporter.yml index 065635f6..33c323c6 100644 --- a/.github/workflows/test-reporter.yml +++ b/.github/workflows/test-reporter.yml @@ -8,6 +8,10 @@ on: types: - completed +permissions: + contents: read + actions: read + jobs: report: runs-on: ubuntu-latest diff --git a/examples/Elastic.Serilog.Sinks.Example/Elastic.Serilog.Sinks.Example.csproj b/examples/Elastic.Serilog.Sinks.Example/Elastic.Serilog.Sinks.Example.csproj index 34cc4e9f..782ccf14 100644 --- a/examples/Elastic.Serilog.Sinks.Example/Elastic.Serilog.Sinks.Example.csproj +++ b/examples/Elastic.Serilog.Sinks.Example/Elastic.Serilog.Sinks.Example.csproj @@ -12,7 +12,7 @@ - + diff --git a/examples/Elastic.Serilog.Sinks.Example/Program.cs b/examples/Elastic.Serilog.Sinks.Example/Program.cs index 66c16b1b..6d9d755a 100644 --- a/examples/Elastic.Serilog.Sinks.Example/Program.cs +++ b/examples/Elastic.Serilog.Sinks.Example/Program.cs @@ -9,6 +9,7 @@ using Elastic.Serilog.Sinks.Example; using Elastic.Elasticsearch.Ephemeral; using Elastic.Ingest.Elasticsearch; +using Elastic.Transport; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; diff --git a/examples/aspnetcore-with-extensions-logging/aspnetcore-with-extensions-logging.csproj b/examples/aspnetcore-with-extensions-logging/aspnetcore-with-extensions-logging.csproj index 6b14af2b..f259b915 100644 --- a/examples/aspnetcore-with-extensions-logging/aspnetcore-with-extensions-logging.csproj +++ b/examples/aspnetcore-with-extensions-logging/aspnetcore-with-extensions-logging.csproj @@ -9,7 +9,7 @@ - + diff --git a/examples/aspnetcore-with-serilog/README.md b/examples/aspnetcore-with-serilog/README.md index 83ca7854..07ebc97b 100644 --- a/examples/aspnetcore-with-serilog/README.md +++ b/examples/aspnetcore-with-serilog/README.md @@ -33,19 +33,13 @@ public static IWebHost BuildWebHost(string[] args) => .UseStartup() .UseSerilog((ctx, config) => { - config.ReadFrom.Configuration(ctx.Configuration); - - // Ensure HttpContextAccessor is accessible + // Ensure HttpContextAccessor is accessible var httpAccessor = ctx.Configuration.Get(); - - // Create a formatter configuration to se this accessor - var formatterConfig = new EcsTextFormatterConfiguration(); - formatterConfig.MapHttpContext(httpAccessor); - - // Write events to the console using this configration - var formatter = new EcsTextFormatter(formatterConfig); - config.WriteTo.Console(formatter); + config + .ReadFrom.Configuration(ctx.Configuration) + .Enrich.WithEcsHttpContext(httpAccessor) + .WriteTo.Async(a => a.Console(new EcsTextFormatter())); }) .UseKestrel() .Build(); diff --git a/src/Elastic.CommonSchema.BenchmarkDotNetExporter/ElasticsearchBenchmarkExporter.cs b/src/Elastic.CommonSchema.BenchmarkDotNetExporter/ElasticsearchBenchmarkExporter.cs index 568bc115..76b214d9 100644 --- a/src/Elastic.CommonSchema.BenchmarkDotNetExporter/ElasticsearchBenchmarkExporter.cs +++ b/src/Elastic.CommonSchema.BenchmarkDotNetExporter/ElasticsearchBenchmarkExporter.cs @@ -33,7 +33,7 @@ public ElasticsearchBenchmarkExporter(ElasticsearchBenchmarkExporterOptions opti { Options = options; var config = Options.CreateTransportConfiguration(); - Transport = new DefaultHttpTransport(config); + Transport = new DistributedTransport(config); } // ReSharper disable once UnusedMember.Global @@ -41,11 +41,11 @@ public ElasticsearchBenchmarkExporter(ElasticsearchBenchmarkExporterOptions opti public ElasticsearchBenchmarkExporter(ElasticsearchBenchmarkExporterOptions options, Func configure) { Options = options; - Transport = new DefaultHttpTransport(configure(Options)); + Transport = new DistributedTransport(configure(Options)); } - private HttpTransport Transport { get; } + private ITransport Transport { get; } private ElasticsearchBenchmarkExporterOptions Options { get; } // We only log when we cannot write to Elasticsearch diff --git a/src/Elastic.Extensions.Logging/ElasticsearchLoggerProvider.cs b/src/Elastic.Extensions.Logging/ElasticsearchLoggerProvider.cs index 00fe5609..1a25d7a9 100644 --- a/src/Elastic.Extensions.Logging/ElasticsearchLoggerProvider.cs +++ b/src/Elastic.Extensions.Logging/ElasticsearchLoggerProvider.cs @@ -125,7 +125,7 @@ private static NodePool CreateNodePool(ElasticsearchLoggerOptions loggerOptions) } } - private static HttpTransport CreateTransport(ElasticsearchLoggerOptions loggerOptions) + private static ITransport CreateTransport(ElasticsearchLoggerOptions loggerOptions) { // TODO: Check if Uri has changed before recreating // TODO: Injectable factory? Or some way of testing. @@ -137,7 +137,7 @@ private static HttpTransport CreateTransport(ElasticsearchLoggerOptions loggerOp if (loggerOptions.ShipTo.NodePoolType != NodePoolType.Cloud) config = SetAuthenticationOnTransport(loggerOptions, config); - var transport = new DefaultHttpTransport(config); + var transport = new DistributedTransport(config); return transport; } diff --git a/src/Elastic.Extensions.Logging/LoggingBuilderExtensions.cs b/src/Elastic.Extensions.Logging/LoggingBuilderExtensions.cs index 8ba5d319..34825d0a 100644 --- a/src/Elastic.Extensions.Logging/LoggingBuilderExtensions.cs +++ b/src/Elastic.Extensions.Logging/LoggingBuilderExtensions.cs @@ -129,13 +129,13 @@ Action> configureChannel /// /// Log to Elasticsearch - /// This overload also allows you to reuse an instance of + /// This overload also allows you to reuse an instance of /// Further configuration can be provided through the parameter /// Expert channel configuration can be provided to the parameter /// public static ILoggingBuilder AddElasticsearch( this ILoggingBuilder builder, - HttpTransport transport, + ITransport transport, Action? configure = null, Action>? configureChannel = null ) diff --git a/src/Elastic.Extensions.Logging/Options/ElasticsearchLoggerOptions.cs b/src/Elastic.Extensions.Logging/Options/ElasticsearchLoggerOptions.cs index 9656912b..35793e6b 100644 --- a/src/Elastic.Extensions.Logging/Options/ElasticsearchLoggerOptions.cs +++ b/src/Elastic.Extensions.Logging/Options/ElasticsearchLoggerOptions.cs @@ -81,9 +81,9 @@ public class ElasticsearchLoggerOptions : IEcsDocumentCreationOptions public string[]? Tags { get; set; } /// - /// Allows the direct setting of a to be used to communicate with Elasticsearch. + /// Allows the direct setting of a to be used to communicate with Elasticsearch. /// If set takes precedence over /// - public HttpTransport? Transport { get; set; } + public ITransport? Transport { get; set; } } } diff --git a/src/Elastic.Ingest.Elasticsearch.CommonSchema/Elastic.Ingest.Elasticsearch.CommonSchema.csproj b/src/Elastic.Ingest.Elasticsearch.CommonSchema/Elastic.Ingest.Elasticsearch.CommonSchema.csproj index 7c6f0d74..cd43a297 100644 --- a/src/Elastic.Ingest.Elasticsearch.CommonSchema/Elastic.Ingest.Elasticsearch.CommonSchema.csproj +++ b/src/Elastic.Ingest.Elasticsearch.CommonSchema/Elastic.Ingest.Elasticsearch.CommonSchema.csproj @@ -10,7 +10,7 @@ - + diff --git a/src/Elastic.Serilog.Sinks/ElasticsearchSink.cs b/src/Elastic.Serilog.Sinks/ElasticsearchSink.cs index 1b99127b..fe4fc3f8 100644 --- a/src/Elastic.Serilog.Sinks/ElasticsearchSink.cs +++ b/src/Elastic.Serilog.Sinks/ElasticsearchSink.cs @@ -26,20 +26,20 @@ public class ElasticsearchSinkOptions : ElasticsearchSinkOptions public ElasticsearchSinkOptions() { } /// - public ElasticsearchSinkOptions(HttpTransport transport) : base(transport) { } + public ElasticsearchSinkOptions(ITransport transport) : base(transport) { } } /// public class ElasticsearchSinkOptions where TEcsDocument : EcsDocument, new() { /// - public ElasticsearchSinkOptions() : this(new DefaultHttpTransport(TransportHelper.Default())) { } + public ElasticsearchSinkOptions() : this(new DistributedTransport(TransportHelper.Default())) { } /// - public ElasticsearchSinkOptions(HttpTransport transport) => Transport = transport; + public ElasticsearchSinkOptions(ITransport transport) => Transport = transport; - /// - internal HttpTransport Transport { get; } + /// + internal ITransport Transport { get; } /// public EcsTextFormatterConfiguration TextFormatting { get; set; } = new(); diff --git a/src/Elastic.Serilog.Sinks/ElasticsearchSinkExtensions.cs b/src/Elastic.Serilog.Sinks/ElasticsearchSinkExtensions.cs index 3276caef..fafb58b7 100644 --- a/src/Elastic.Serilog.Sinks/ElasticsearchSinkExtensions.cs +++ b/src/Elastic.Serilog.Sinks/ElasticsearchSinkExtensions.cs @@ -56,7 +56,7 @@ public static LoggerConfiguration Elasticsearch( var transportConfig = useSniffing ? TransportHelper.Static(nodes) : TransportHelper.Sniffing(nodes); configureTransport?.Invoke(transportConfig); - var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); + var sinkOptions = new ElasticsearchSinkOptions(new DistributedTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); @@ -80,7 +80,7 @@ public static LoggerConfiguration Elasticsearch( { var transportConfig = useSniffing ? TransportHelper.Static(nodes) : TransportHelper.Sniffing(nodes); configureTransport?.Invoke(transportConfig); - var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); + var sinkOptions = new ElasticsearchSinkOptions(new DistributedTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); @@ -104,7 +104,7 @@ public static LoggerConfiguration ElasticCloud( { var transportConfig = TransportHelper.Cloud(cloudId, apiKey); configureTransport?.Invoke(transportConfig); - var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); + var sinkOptions = new ElasticsearchSinkOptions(new DistributedTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); @@ -129,7 +129,7 @@ public static LoggerConfiguration ElasticCloud( { var transportConfig = TransportHelper.Cloud(cloudId, apiKey); configureTransport?.Invoke(transportConfig); - var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); + var sinkOptions = new ElasticsearchSinkOptions(new DistributedTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); @@ -154,7 +154,7 @@ public static LoggerConfiguration ElasticCloud( { var transportConfig = TransportHelper.Cloud(cloudId, username, password); configureTransport?.Invoke(transportConfig); - var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); + var sinkOptions = new ElasticsearchSinkOptions(new DistributedTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); @@ -180,7 +180,7 @@ public static LoggerConfiguration ElasticCloud( { var transportConfig = TransportHelper.Cloud(cloudId, username, password); configureTransport?.Invoke(transportConfig); - var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); + var sinkOptions = new ElasticsearchSinkOptions(new DistributedTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); diff --git a/tests-integration/Elasticsearch.IntegrationDefaults/Elasticsearch.IntegrationDefaults.csproj b/tests-integration/Elasticsearch.IntegrationDefaults/Elasticsearch.IntegrationDefaults.csproj index 678b00ab..7e11fe5c 100644 --- a/tests-integration/Elasticsearch.IntegrationDefaults/Elasticsearch.IntegrationDefaults.csproj +++ b/tests-integration/Elasticsearch.IntegrationDefaults/Elasticsearch.IntegrationDefaults.csproj @@ -9,9 +9,9 @@ - + - +