diff --git a/.editorconfig b/.editorconfig
index 5951410dbb4..ba58fbd2d2e 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -4,13 +4,13 @@
###############################
# All files
[*]
+charset = utf-8
indent_style = space
+indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
-# Code files
-[*.cs]
+[*.{cs,cshtml,htm,html,md,py,sln,xml}]
indent_size = 4
-charset = utf-8
###############################
# .NET Coding Conventions #
###############################
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bd8040a5131..66e1d3f4ed1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -76,14 +76,14 @@ helper methods.
in each framework that you target.
* Add the following lines to your csproj:
+
```xml
-
-
+
+
```
+
* Use
[IntelliSense](https://docs.microsoft.com/visualstudio/ide/using-intellisense)
diff --git a/build/sanitycheck.py b/build/sanitycheck.py
index 86a25df70b8..901d364f46e 100644
--- a/build/sanitycheck.py
+++ b/build/sanitycheck.py
@@ -8,7 +8,7 @@
CRLF = b'\r\n'
LF = b'\n'
-def sanitycheck(pattern, allow_utf8 = False, allow_eol = (CRLF, LF)):
+def sanitycheck(pattern, allow_utf8 = False, allow_eol = (CRLF, LF), indent = 1):
error_count = 0
for filename in glob.glob(pattern, recursive=True):
@@ -26,6 +26,8 @@ def sanitycheck(pattern, allow_utf8 = False, allow_eol = (CRLF, LF)):
for line in content.splitlines(True):
if allow_utf8 and lineno == 1 and line.startswith(b'\xef\xbb\xbf'):
line = line[3:]
+ if any(b == 7 for b in line):
+ error.append(' TAB found at Ln:{} {}'.format(lineno, line))
if any(b > 127 for b in line):
error.append(' Non-ASCII character found at Ln:{} {}'.format(lineno, line))
if line[-2:] == CRLF:
@@ -47,6 +49,14 @@ def sanitycheck(pattern, allow_utf8 = False, allow_eol = (CRLF, LF)):
if eol not in allow_eol:
error.append(' Line ending {} not allowed at Ln:{}'.format(eol, lineno))
break
+ if line.startswith(b' '):
+ spc_count = 0
+ for c in line:
+ if c != 32:
+ break
+ spc_count += 1
+ if not indent or spc_count % indent:
+ error.append(' {} SPC found at Ln:{} {}'.format(spc_count, lineno, line))
if line[-1:] == b' ' or line[-1:] == b'\t':
error.append(' Trailing space found at Ln:{} {}'.format(lineno, line))
lineno += 1
@@ -62,23 +72,23 @@ def sanitycheck(pattern, allow_utf8 = False, allow_eol = (CRLF, LF)):
return error_count
retval = 0
-retval += sanitycheck('.editorconfig', allow_eol = (LF,))
-retval += sanitycheck('**/Dockerfile', allow_eol = (LF,))
-retval += sanitycheck('**/*.cmd', allow_eol = (CRLF,))
-retval += sanitycheck('**/*.config', allow_utf8 = True, allow_eol = (LF,))
+retval += sanitycheck('.editorconfig', allow_eol = (LF,), indent = 0)
+retval += sanitycheck('**/Dockerfile', allow_eol = (LF,), indent = 2)
+retval += sanitycheck('**/*.cmd', allow_eol = (CRLF,), indent = 2)
+retval += sanitycheck('**/*.config', allow_utf8 = True, allow_eol = (LF,), indent = 2)
retval += sanitycheck('**/*.cs', allow_utf8 = True, allow_eol = (LF,))
-retval += sanitycheck('**/*.cshtml', allow_utf8 = True, allow_eol = (LF,))
-retval += sanitycheck('**/*.csproj', allow_utf8 = True, allow_eol = (LF,))
-retval += sanitycheck('**/*.htm', allow_eol = (LF,))
-retval += sanitycheck('**/*.html', allow_eol = (LF,))
+retval += sanitycheck('**/*.cshtml', allow_utf8 = True, allow_eol = (LF,), indent = 4)
+retval += sanitycheck('**/*.csproj', allow_utf8 = True, allow_eol = (LF,), indent = 2)
+retval += sanitycheck('**/*.htm', allow_eol = (LF,), indent = 4)
+retval += sanitycheck('**/*.html', allow_eol = (LF,), indent = 4)
retval += sanitycheck('**/*.md', allow_eol = (LF,))
-retval += sanitycheck('**/*.proj', allow_eol = (LF,))
-retval += sanitycheck('**/*.props', allow_eol = (LF,))
-retval += sanitycheck('**/*.py', allow_eol = (LF,))
-retval += sanitycheck('**/*.ruleset', allow_utf8 = True, allow_eol = (LF,))
-retval += sanitycheck('**/*.sln', allow_utf8 = True, allow_eol = (LF,))
-retval += sanitycheck('**/*.targets', allow_eol = (LF,))
-retval += sanitycheck('**/*.xml', allow_eol = (LF,))
-retval += sanitycheck('**/*.yml', allow_eol = (LF,))
+retval += sanitycheck('**/*.proj', allow_eol = (LF,), indent = 2)
+retval += sanitycheck('**/*.props', allow_eol = (LF,), indent = 2)
+retval += sanitycheck('**/*.py', allow_eol = (LF,), indent = 4)
+retval += sanitycheck('**/*.ruleset', allow_utf8 = True, allow_eol = (LF,), indent = 2)
+retval += sanitycheck('**/*.sln', allow_utf8 = True, allow_eol = (LF,), indent = 4)
+retval += sanitycheck('**/*.targets', allow_eol = (LF,), indent = 2)
+retval += sanitycheck('**/*.xml', allow_eol = (LF,), indent = 4)
+retval += sanitycheck('**/*.yml', allow_eol = (LF,), indent = 2)
sys.exit(retval)
diff --git a/docs/metrics/customizing-the-sdk/Program.cs b/docs/metrics/customizing-the-sdk/Program.cs
index c6a51ec40ac..b3b5c853934 100644
--- a/docs/metrics/customizing-the-sdk/Program.cs
+++ b/docs/metrics/customizing-the-sdk/Program.cs
@@ -44,15 +44,15 @@ public static void Main(string[] args)
// Advanced selection criteria and config via Func
.AddView((instrument) =>
- {
- if (instrument.Meter.Name.Equals("CompanyA.ProductB.Library2") &&
- instrument.GetType().Name.Contains("Histogram"))
- {
- return new ExplicitBucketHistogramConfiguration() { Boundaries = new double[] { 10, 20 } };
- }
-
- return null;
- })
+ {
+ if (instrument.Meter.Name.Equals("CompanyA.ProductB.Library2") &&
+ instrument.GetType().Name.Contains("Histogram"))
+ {
+ return new ExplicitBucketHistogramConfiguration() { Boundaries = new double[] { 10, 20 } };
+ }
+
+ return null;
+ })
// An instrument which does not match any views
// gets processed with default behavior. (SDK default)
diff --git a/docs/metrics/customizing-the-sdk/README.md b/docs/metrics/customizing-the-sdk/README.md
index a2e67cddda1..228bf127fa7 100644
--- a/docs/metrics/customizing-the-sdk/README.md
+++ b/docs/metrics/customizing-the-sdk/README.md
@@ -119,22 +119,22 @@ particularly useful if there are conflicting instrument names, and you do not
own the instrument to create it with a different name.
```csharp
- // Rename an instrument to new name.
- .AddView(instrumentName: "MyCounter", name: "MyCounterRenamed")
+ // Rename an instrument to new name.
+ .AddView(instrumentName: "MyCounter", name: "MyCounterRenamed")
```
```csharp
- // Advanced selection criteria and config via Func
- .AddView((instrument) =>
- {
- if (instrument.Meter.Name == "CompanyA.ProductB.LibraryC" &&
+ // Advanced selection criteria and config via Func
+ .AddView((instrument) =>
+ {
+ if (instrument.Meter.Name == "CompanyA.ProductB.LibraryC" &&
instrument.Name == "MyCounter")
- {
+ {
return new MetricStreamConfiguration() { Name = "MyCounterRenamed" };
- }
+ }
- return null;
- })
+ return null;
+ })
```
#### Drop an instrument
@@ -145,22 +145,22 @@ instrument from a Meter. If the goal is to drop every instrument from a `Meter`,
then it is recommended to simply not add that `Meter` using `AddMeter`.
```csharp
- // Drop the instrument "MyCounterDrop".
- .AddView(instrumentName: "MyCounterDrop", MetricStreamConfiguration.Drop)
+ // Drop the instrument "MyCounterDrop".
+ .AddView(instrumentName: "MyCounterDrop", MetricStreamConfiguration.Drop)
```
```csharp
- // Advanced selection criteria and config via Func
- .AddView((instrument) =>
- {
- if (instrument.Meter.Name == "CompanyA.ProductB.LibraryC" &&
+ // Advanced selection criteria and config via Func
+ .AddView((instrument) =>
+ {
+ if (instrument.Meter.Name == "CompanyA.ProductB.LibraryC" &&
instrument.Name == "MyCounterDrop")
- {
+ {
return MetricStreamConfiguration.Drop;
- }
+ }
- return null;
- })
+ return null;
+ })
```
#### Select specific tags
@@ -173,52 +173,52 @@ with the metric are of interest to you.
```csharp
// Only choose "name" as the dimension for the metric "MyFruitCounter"
- .AddView(
- instrumentName: "MyFruitCounter",
- metricStreamConfiguration: new MetricStreamConfiguration
- {
- TagKeys = new string[] { "name" },
- })
-
- ...
- // Only the dimension "name" is selected, "color" is dropped
- MyFruitCounter.Add(1, new("name", "apple"), new("color", "red"));
- MyFruitCounter.Add(2, new("name", "lemon"), new("color", "yellow"));
- MyFruitCounter.Add(2, new("name", "apple"), new("color", "green"));
- ...
-
- // If you provide an empty `string` array as `TagKeys` to the `MetricStreamConfiguration`
- // the SDK will drop all the dimensions associated with the metric
- .AddView(
- instrumentName: "MyFruitCounter",
- metricStreamConfiguration: new MetricStreamConfiguration
- {
- TagKeys = new string[] { },
- })
-
- ...
- // both "name" and "color" are dropped
- MyFruitCounter.Add(1, new("name", "apple"), new("color", "red"));
- MyFruitCounter.Add(2, new("name", "lemon"), new("color", "yellow"));
- MyFruitCounter.Add(2, new("name", "apple"), new("color", "green"));
- ...
+ .AddView(
+ instrumentName: "MyFruitCounter",
+ metricStreamConfiguration: new MetricStreamConfiguration
+ {
+ TagKeys = new string[] { "name" },
+ })
+
+ ...
+ // Only the dimension "name" is selected, "color" is dropped
+ MyFruitCounter.Add(1, new("name", "apple"), new("color", "red"));
+ MyFruitCounter.Add(2, new("name", "lemon"), new("color", "yellow"));
+ MyFruitCounter.Add(2, new("name", "apple"), new("color", "green"));
+ ...
+
+ // If you provide an empty `string` array as `TagKeys` to the `MetricStreamConfiguration`
+ // the SDK will drop all the dimensions associated with the metric
+ .AddView(
+ instrumentName: "MyFruitCounter",
+ metricStreamConfiguration: new MetricStreamConfiguration
+ {
+ TagKeys = new string[] { },
+ })
+
+ ...
+ // both "name" and "color" are dropped
+ MyFruitCounter.Add(1, new("name", "apple"), new("color", "red"));
+ MyFruitCounter.Add(2, new("name", "lemon"), new("color", "yellow"));
+ MyFruitCounter.Add(2, new("name", "apple"), new("color", "green"));
+ ...
```
```csharp
- // Advanced selection criteria and config via Func
- .AddView((instrument) =>
- {
- if (instrument.Meter.Name == "CompanyA.ProductB.LibraryC" &&
+ // Advanced selection criteria and config via Func
+ .AddView((instrument) =>
+ {
+ if (instrument.Meter.Name == "CompanyA.ProductB.LibraryC" &&
instrument.Name == "MyFruitCounter")
- {
+ {
return new MetricStreamConfiguration
{
- TagKeys = new string[] { "name" },
+ TagKeys = new string[] { "name" },
};
- }
+ }
- return null;
- })
+ return null;
+ })
```
#### Specify custom boundaries for Histogram
@@ -229,41 +229,43 @@ By default, the boundaries used for a Histogram are [`{ 0, 5, 10, 25, 50, 75, 10
Views can be used to provide custom boundaries for a Histogram. The measurements
are then aggregated using the custom boundaries provided instead of the the
default boundaries. This requires the use of `ExplicitBucketHistogramConfiguration`.
+[Monday 08:36 PM] Reiley Yang
+
```csharp
- // Change Histogram boundaries to count measurements under the following buckets:
- // (-inf, 10]
- // (10, 20]
- // (20, +inf)
- .AddView(
- instrumentName: "MyHistogram",
- new ExplicitBucketHistogramConfiguration
- { Boundaries = new double[] { 10, 20 } })
-
- // If you provide an empty `double` array as `Boundaries` to the `ExplicitBucketHistogramConfiguration`,
- // the SDK will only export the sum and count for the measurements.
- // There are no buckets exported in this case.
- .AddView(
- instrumentName: "MyHistogram",
- new ExplicitBucketHistogramConfiguration { Boundaries = new double[] { } })
+ // Change Histogram boundaries to count measurements under the following buckets:
+ // (-inf, 10]
+ // (10, 20]
+ // (20, +inf)
+ .AddView(
+ instrumentName: "MyHistogram",
+ new ExplicitBucketHistogramConfiguration { Boundaries = new double[] { 10, 20 } })
+
+ // If you provide an empty `double` array as `Boundaries` to the `ExplicitBucketHistogramConfiguration`,
+ // the SDK will only export the sum and count for the measurements.
+ // There are no buckets exported in this case.
+ .AddView(
+ instrumentName: "MyHistogram",
+ new ExplicitBucketHistogramConfiguration { Boundaries = new double[] { } })
```
+
```csharp
- // Advanced selection criteria and config via Func
- .AddView((instrument) =>
- {
- if (instrument.Meter.Name == "CompanyA.ProductB.LibraryC" &&
+ // Advanced selection criteria and config via Func
+ .AddView((instrument) =>
+ {
+ if (instrument.Meter.Name == "CompanyA.ProductB.LibraryC" &&
instrument.Name == "MyHistogram")
- {
+ {
// `ExplicitBucketHistogramConfiguration` is a child class of `MetricStreamConfiguration`
return new ExplicitBucketHistogramConfiguration
{
- Boundaries = new double[] { 10, 20 },
+ Boundaries = new double[] { 10, 20 },
};
- }
+ }
- return null;
- })
+ return null;
+ })
```
**NOTE:** The SDK currently does not support any changes to `Aggregation` type
diff --git a/docs/trace/extending-the-sdk/README.md b/docs/trace/extending-the-sdk/README.md
index 056712fc877..3234dcba210 100644
--- a/docs/trace/extending-the-sdk/README.md
+++ b/docs/trace/extending-the-sdk/README.md
@@ -251,13 +251,13 @@ When using such a filtering processor, instead of using extension method to
register the exporter, they must be registered manually as shown below:
```csharp
- using var tracerProvider = Sdk.CreateTracerProviderBuilder()
- .SetSampler(new MySampler())
- .AddSource("OTel.Demo")
- .AddProcessor(new MyFilteringProcessor(
- new SimpleActivityExportProcessor(new MyExporter("ExporterX")),
- (act) => true))
- .Build();
+using var tracerProvider = Sdk.CreateTracerProviderBuilder()
+ .SetSampler(new MySampler())
+ .AddSource("OTel.Demo")
+ .AddProcessor(new MyFilteringProcessor(
+ new SimpleActivityExportProcessor(new MyExporter("ExporterX")),
+ (act) => true))
+ .Build();
```
Most [instrumentation libraries](#instrumentation-library) shipped from this
diff --git a/src/OpenTelemetry.Exporter.Jaeger/README.md b/src/OpenTelemetry.Exporter.Jaeger/README.md
index b0f4ecf0094..d9e9237b64b 100644
--- a/src/OpenTelemetry.Exporter.Jaeger/README.md
+++ b/src/OpenTelemetry.Exporter.Jaeger/README.md
@@ -112,7 +112,7 @@ built-in `AddHttpClient` extension:
```csharp
services.AddHttpClient(
"JaegerExporter",
- configureClient: (client) =>
+ configureClient: (client) =>
client.DefaultRequestHeaders.Add("X-MyCustomHeader", "value"));
```
diff --git a/src/OpenTelemetry.Instrumentation.AspNetCore/README.md b/src/OpenTelemetry.Instrumentation.AspNetCore/README.md
index bbbd43a0645..91fab9f38b8 100644
--- a/src/OpenTelemetry.Instrumentation.AspNetCore/README.md
+++ b/src/OpenTelemetry.Instrumentation.AspNetCore/README.md
@@ -43,11 +43,10 @@ using OpenTelemetry.Trace;
public void ConfigureServices(IServiceCollection services)
{
- services.AddOpenTelemetryTracing(
- (builder) => builder
- .AddAspNetCoreInstrumentation()
- .AddJaegerExporter()
- );
+ services.AddOpenTelemetryTracing((builder) => builder
+ .AddAspNetCoreInstrumentation()
+ .AddJaegerExporter()
+ );
}
```
@@ -65,19 +64,18 @@ method of you applications `Startup` class as shown below.
```csharp
// Configure
services.Configure(options =>
- {
- options.Filter = (httpContext) =>
- {
- // only collect telemetry about HTTP GET requests
- return httpContext.Request.Method.Equals("GET");
- };
- });
-
-services.AddOpenTelemetryTracing(
- (builder) => builder
- .AddAspNetCoreInstrumentation()
- .AddJaegerExporter()
- );
+{
+ options.Filter = (httpContext) =>
+ {
+ // only collect telemetry about HTTP GET requests
+ return httpContext.Request.Method.Equals("GET");
+ };
+});
+
+services.AddOpenTelemetryTracing((builder) => builder
+ .AddAspNetCoreInstrumentation()
+ .AddJaegerExporter()
+);
```
### Filter
@@ -93,17 +91,14 @@ The following code snippet shows how to use `Filter` to only allow GET
requests.
```csharp
-services.AddOpenTelemetryTracing(
- (builder) => builder
- .AddAspNetCoreInstrumentation(
- (options) => options.Filter =
- (httpContext) =>
- {
- // only collect telemetry about HTTP GET requests
- return httpContext.Request.Method.Equals("GET");
- })
+services.AddOpenTelemetryTracing((builder) => builder
+ .AddAspNetCoreInstrumentation((options) => options.Filter = httpContext =>
+ {
+ // only collect telemetry about HTTP GET requests
+ return httpContext.Request.Method.Equals("GET");
+ })
.AddJaegerExporter()
- );
+);
```
It is important to note that this `Filter` option is specific to this
@@ -126,8 +121,7 @@ The following code snippet shows how to add additional tags using `Enrich`.
```csharp
services.AddOpenTelemetryTracing((builder) =>
{
- builder
- .AddAspNetCoreInstrumentation((options) => options.Enrich
+ builder.AddAspNetCoreInstrumentation((options) => options.Enrich
= (activity, eventName, rawObject) =>
{
if (eventName.Equals("OnStartActivity"))