Skip to content

Commit

Permalink
Merge branch 'feature/9.x' of https://github.com/dotnet/dotnet-monitor
Browse files Browse the repository at this point in the history
…into release/9.x
  • Loading branch information
jander-msft committed Jul 1, 2024
2 parents 567ba94 + 2132b86 commit ed8739f
Show file tree
Hide file tree
Showing 234 changed files with 1,745 additions and 2,540 deletions.
2 changes: 1 addition & 1 deletion .github/learning-path-sha.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
8e99fe93461686b50ea276b406c5046b252b05e4
3c31273c42196ec0813b7b5b947ab8e1bd1801ac
3 changes: 3 additions & 0 deletions .github/linters/check-markdown-links-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
},
{
"pattern": "^https://www\\.dotnetfoundation.org/.*"
},
{
"pattern": "^https://hub\\.docker\\.com/.*"
}
],
"aliveStatusCodes": [
Expand Down
19 changes: 4 additions & 15 deletions .github/releases.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
"unsupported": [
"7.3",
"7.2",
"7.1",
"7.0"
"7.1"
],
"releases": {
"6.3": {
Expand All @@ -26,16 +25,6 @@
"netcoreapp3.1"
]
},
"7.0": {
"tag": "v7.0.2",
"minorReleaseDate": "2022-11-11T00:00:00.000Z",
"patchReleaseDate": "2023-02-14T00:00:00.000Z",
"supportedFrameworks": [
"net6.0",
"net7.0"
],
"outOfSupportDate": "2023-06-14T00:00:00.000Z"
},
"7.1": {
"tag": "v7.1.3",
"minorReleaseDate": "2023-03-14T00:00:00.000Z",
Expand Down Expand Up @@ -75,9 +64,9 @@
"outOfSupportDate": "2024-05-14T00:00:00.000Z"
},
"9.0": {
"tag": "v9.0.0-preview.4.24270.1",
"minorReleaseDate": "2024-05-21T00:00:00.000Z",
"patchReleaseDate": "2024-05-21T00:00:00.000Z",
"tag": "v9.0.0-preview.5.24307.6",
"minorReleaseDate": "2024-06-11T00:00:00.000Z",
"patchReleaseDate": "2024-06-11T00:00:00.000Z",
"supportedFrameworks": [
"net9.0"
]
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/check-markdown-links.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
persist-credentials: false

- name: Check markdown links
uses: gaurav-nelson/github-action-markdown-link-check@5c5dfc0ac2e225883c0e5f03a85311ec2830d368
uses: gaurav-nelson/github-action-markdown-link-check@7d83e59a57f3c201c76eed3d33dff64ec4452d27
with:
config-file: .github/linters/check-markdown-links-config.json
use-quiet-mode: 'yes'
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/spellcheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,23 @@ jobs:
with:
persist-credentials: false

- uses: streetsidesoftware/cspell-action@104110db58e8c9a11c1c6be025e2082f4dded3bb
- uses: streetsidesoftware/cspell-action@542d05c6a8980c81277ec229f9beadf4ab3f5a34
name: Documentation spellcheck
if: ${{ !cancelled() }}
with:
files: '**/*.md'
inline: error
incremental_files_only: true

- uses: streetsidesoftware/cspell-action@104110db58e8c9a11c1c6be025e2082f4dded3bb
- uses: streetsidesoftware/cspell-action@542d05c6a8980c81277ec229f9beadf4ab3f5a34
name: Resx spellcheck
if: ${{ !cancelled() }}
with:
files: 'src/**/*.resx'
inline: error
incremental_files_only: true

- uses: streetsidesoftware/cspell-action@104110db58e8c9a11c1c6be025e2082f4dded3bb
- uses: streetsidesoftware/cspell-action@542d05c6a8980c81277ec229f9beadf4ab3f5a34
name: Source code spellcheck
if: ${{ !cancelled() }}
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/submit-linter-suggestions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
# The default artifact download action doesn't support cross-workflow
# artifacts, so use a 3rd party one.
- name: 'Download linting results'
uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe
uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11
with:
workflow: ${{env.workflow_name}}
run_id: ${{github.event.workflow_run.id }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/submit-to-do-issue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
# The default artifact download action doesn't support cross-workflow
# artifacts, so use a 3rd party one.
- name: 'Download linting results'
uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe
uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11
with:
workflow: ${{env.workflow_name}}
run_id: ${{github.event.workflow_run.id }}
Expand Down
1 change: 1 addition & 0 deletions cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"msbuild",
"msdata",
"MSRC",
"mvid",
"ndjson",
"netcoreapp",
"newtonsoft",
Expand Down
7 changes: 5 additions & 2 deletions documentation/api/definitions.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,11 @@ First Available: 8.0 Preview 7
| Name | Type | Description |
|---|---|---|
| `methodName` | string | Name of the method for this frame. This includes generic parameters. |
| `methodToken` | int | TypeDef token for the method. |
| `parameterTypes` | string[] | Array of parameter types. Empty array if none. |
| `typeName` | string | Name of the class for this frame. This includes generic parameters. |
| `moduleName` | string | Name of the module for this frame. |
| `moduleVersionId` | guid | Unique identifier used to distinguish between two versions of the same module. An empty value: `00000000-0000-0000-0000-000000000000`. |

## CallStackResult

Expand All @@ -54,7 +57,7 @@ Object describing the basic state of a collection rule for the executing instanc

| Name | Type | Description |
|---|---|---|
| State | [CollectionRuleState](#collectionrulestate-63) | Indicates what state the collection rule is in for the current process. |
| State | [CollectionRuleState](#collectionrulestate) | Indicates what state the collection rule is in for the current process. |
| StateReason | string | Human-readable explanation for the current state of the collection rule. |

## CollectionRuleDetailedDescription
Expand All @@ -65,7 +68,7 @@ Object describing the detailed state of a collection rule for the executing inst

| Name | Type | Description |
|---|---|---|
| State | [CollectionRuleState](#collectionrulestate-63) | Indicates what state the collection rule is in for the current process. |
| State | [CollectionRuleState](#collectionrulestate) | Indicates what state the collection rule is in for the current process. |
| StateReason | string | Human-readable explanation for the current state of the collection rule. |
| LifetimeOccurrences | int | The number of times the trigger has executed for a process in its lifetime. |
| SlidingWindowOccurrences | int | The number of times the trigger has executed within the current sliding window. |
Expand Down
50 changes: 48 additions & 2 deletions documentation/api/exceptions.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,54 @@ Accept: application/x-ndjson
HTTP/1.1 200 OK
Content-Type: application/x-ndjson
{"id":2,"timestamp":"2023-07-13T21:45:11.8056355Z","typeName":"System.InvalidOperationException","moduleName":"System.Private.CoreLib.dll","message":"Operation is not valid due to the current state of the object.","innerExceptions":[],"stack":{"threadId":4768,"threadName":null,"frames":[{"methodName":"MoveNext","parameterTypes":[],"typeName":"WebApplication3.Pages.IndexModel\u002B\u003CGetData\u003Ed__3","moduleName":"WebApplication3.dll"},{"methodName":"RunInternal","parameterTypes":["System.Threading.ExecutionContext","System.Threading.ContextCallback","System.Object"],"typeName":"System.Threading.ExecutionContext","moduleName":"System.Private.CoreLib.dll"},{"methodName":"MoveNext","parameterTypes":["System.Threading.Thread"],"typeName":"System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601[System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601\u002BTResult,System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601\u002BTStateMachine]","moduleName":"System.Private.CoreLib.dll"},{"methodName":"\u003COutputCorrelationEtwEvent\u003Eb__6_0","parameterTypes":["System.Action","System.Threading.Tasks.Task"],"typeName":"System.Runtime.CompilerServices.YieldAwaitable\u002BYieldAwaiter\u002B\u003C\u003Ec","moduleName":"System.Private.CoreLib.dll"},{"methodName":"Dispatch","parameterTypes":[],"typeName":"System.Threading.ThreadPoolWorkQueue","moduleName":"System.Private.CoreLib.dll"},{"methodName":"WorkerThreadStart","parameterTypes":[],"typeName":"System.Threading.PortableThreadPool\u002BWorkerThread","moduleName":"System.Private.CoreLib.dll"}]}}
{"id":3,"timestamp":"2023-07-13T21:46:18.7530773Z","typeName":"System.ObjectDisposedException","moduleName":"System.Private.CoreLib.dll","message":"Cannot access a disposed object.\r\nObject name: \u0027System.Net.Sockets.NetworkStream\u0027.","innerExceptions":[],"stack":{"threadId":15912,"threadName":null,"frames":[{"methodName":"ThrowObjectDisposedException","parameterTypes":["System.Object"],"typeName":"System.ThrowHelper","moduleName":"System.Private.CoreLib.dll"},{"methodName":"ThrowIf","parameterTypes":["System.Boolean","System.Object"],"typeName":"System.ObjectDisposedException","moduleName":"System.Private.CoreLib.dll"},{"methodName":"ReadAsync","parameterTypes":["System.Memory\u00601[[System.Byte, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]][System.Byte]","System.Threading.CancellationToken"],"typeName":"System.Net.Sockets.NetworkStream","moduleName":"System.Net.Sockets.dll"},{"methodName":"MoveNext","parameterTypes":[],"typeName":"System.Net.Http.HttpConnection\u002B\u003C\u003CEnsureReadAheadTaskHasStarted\u003Eg__ReadAheadWithZeroByteReadAsync|43_0\u003Ed","moduleName":"System.Net.Http.dll"},{"methodName":"ExecutionContextCallback","parameterTypes":["System.Object"],"typeName":"System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601[System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601\u002BTResult,System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601\u002BTStateMachine]","moduleName":"System.Private.CoreLib.dll"},{"methodName":"RunInternal","parameterTypes":["System.Threading.ExecutionContext","System.Threading.ContextCallback","System.Object"],"typeName":"System.Threading.ExecutionContext","moduleName":"System.Private.CoreLib.dll"},{"methodName":"MoveNext","parameterTypes":["System.Threading.Thread"],"typeName":"System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601[System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601\u002BTResult,System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601\u002BTStateMachine]","moduleName":"System.Private.CoreLib.dll"},{"methodName":"MoveNext","parameterTypes":[],"typeName":"System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601[System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601\u002BTResult,System.Runtime.CompilerServices.AsyncTaskMethodBuilder\u00601\u002BAsyncStateMachineBox\u00601\u002BTStateMachine]","moduleName":"System.Private.CoreLib.dll"},{"methodName":"\u003C.cctor\u003Eb__176_0","parameterTypes":["System.UInt32","System.UInt32","System.Threading.NativeOverlapped*"],"typeName":"System.Net.Sockets.SocketAsyncEventArgs\u002B\u003C\u003Ec","moduleName":"System.Net.Sockets.dll"},{"methodName":"Invoke","parameterTypes":["System.Threading.PortableThreadPool\u002BIOCompletionPoller\u002BEvent"],"typeName":"System.Threading.PortableThreadPool\u002BIOCompletionPoller\u002BCallback","moduleName":"System.Private.CoreLib.dll"},{"methodName":"System.Threading.IThreadPoolWorkItem.Execute","parameterTypes":[],"typeName":"System.Threading.ThreadPoolTypedWorkItemQueue\u00602[System.Threading.ThreadPoolTypedWorkItemQueue\u00602\u002BT,System.Threading.ThreadPoolTypedWorkItemQueue\u00602\u002BTCallback]","moduleName":"System.Private.CoreLib.dll"},{"methodName":"Dispatch","parameterTypes":[],"typeName":"System.Threading.ThreadPoolWorkQueue","moduleName":"System.Private.CoreLib.dll"},{"methodName":"WorkerThreadStart","parameterTypes":[],"typeName":"System.Threading.PortableThreadPool\u002BWorkerThread","moduleName":"System.Private.CoreLib.dll"}]}}
{
"id": 2,
"timestamp": "2023-07-13T21:45:11.8056355Z",
"typeName": "System.InvalidOperationException",
"moduleName": "System.Private.CoreLib.dll",
"message": "Operation is not valid due to the current state of the object.",
"innerExceptions": [],
"stack": {
"threadId": 4768,
"threadName": null,
"frames": [
{
"methodName": "MoveNext",
"methodToken": 100663639,
"parameterTypes": [],
"typeName": "WebApplication3.Pages.IndexModel\u002B\u003CGetData\u003Ed__3",
"moduleName": "WebApplication3.dll",
"moduleVersionId": "bf769014-c2e2-496a-93b7-76fbbcd04be5"
},
... // see stacks.md
]
}
}
{
"id": 3,
"timestamp": "2023-07-13T21:46:18.7530773Z",
"typeName": "System.ObjectDisposedException",
"moduleName": "System.Private.CoreLib.dll",
"message": "Cannot access a disposed object.\r\nObject name: \u0027System.Net.Sockets.NetworkStream\u0027.",
"innerExceptions": [],
"stack": {
"threadId": 15912,
"threadName": null,
"frames": [
{
"methodName": "ThrowObjectDisposedException",
"methodToken": 100663639,
"parameterTypes": [
"System.Object"
],
"typeName": "System.ThrowHelper",
"moduleName": "System.Private.CoreLib.dll",
"moduleVersionId": "bf769014-c2e2-496a-93b7-76fbbcd04be5"
},
... // see stacks.md
]
}
}
```

## Supported Runtimes
Expand Down
7 changes: 2 additions & 5 deletions documentation/api/parameters.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,13 +128,10 @@ Content-Type: application/x-ndjson

## Additional Requirements

- The target application must use ASP.NET Core.
- The target application cannot have [Hot Reload](https://learn.microsoft.com/visualstudio/debugger/hot-reload) enabled.
- `dotnet-monitor` must be set to `Listen` mode, and the target application must start suspended. See [diagnostic port configuration](../configuration/diagnostic-port-configuration.md) for information on how to do this.
- The target application must have [`ILogger`](https://learn.microsoft.com/dotnet/api/microsoft.extensions.logging.ilogger) available via [ASP.NET Core's dependency injection](https://learn.microsoft.com/aspnet/core/fundamentals/dependency-injection).
- This feature relies on a hosting startup assembly. If the target application [disabled automatic loading](https://learn.microsoft.com/aspnet/core/fundamentals/host/platform-specific-configuration#disable-automatic-loading-of-hosting-startup-assemblies) of these, this feature will not be available.
- `dotnet-monitor` must be set to `Listen` mode. See [diagnostic port configuration](../configuration/diagnostic-port-configuration.md) for information on how to do this.
- If the target application is using .NET 7 then the dotnet-monitor startup hook must be manually configured and the target application must start suspended. In .NET 8+ this is not a requirement.
- This feature relies on a [ICorProfilerCallback](https://docs.microsoft.com/dotnet/framework/unmanaged-api/profiling/icorprofilercallback-interface) implementation. If the target application is already using an `ICorProfiler` that isn't notify-only, this feature will not be available.
- If a target application is using .NET 7 then the `dotnet-monitor` startup hook must be configured. This is automatically done in .NET 8+.

## Additional Notes

Expand Down
18 changes: 16 additions & 2 deletions documentation/api/stacks.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ Allowed schemes:
### Sample Request

```http
GET /stack?pid=21632 HTTP/1.1
GET /stacks?pid=21632 HTTP/1.1
Host: localhost:52323
Authorization: Bearer fffffffffffffffffffffffffffffffffffffffffff=
Accept: application/json
Expand All @@ -81,26 +81,40 @@ Location: localhost:52323/operations/67f07e40-5cca-4709-9062-26302c484f18
"frames": [
{
"methodName": "GetQueuedCompletionStatus",
"methodToken": 100663634,
"parameterTypes": [],
"typeName": "Interop\u002BKernel32",
"moduleName": "System.Private.CoreLib.dll",
"moduleVersionId": "194ddabd-a802-4520-90ef-854e2f1cd606"
},
{
"methodName": "WaitForSignal",
"methodToken": 100663639,
"parameterTypes": [
"System.Threading.ExecutionContext",
"System.Threading.ContextCallback",
"System.Object"
],
"typeName": "System.Threading.LowLevelLifoSemaphore",
"moduleName": "System.Private.CoreLib.dll",
"moduleVersionId": "194ddabd-a802-4520-90ef-854e2f1cd606"
},
{
"methodName": "Wait",
"methodToken": 100663643,
"parameterTypes": [],
"typeName": "System.Threading.LowLevelLifoSemaphore",
"moduleName": "System.Private.CoreLib.dll",
"moduleVersionId": "194ddabd-a802-4520-90ef-854e2f1cd606"
}
]
}
```

### Sample Request

```http
GET /stack?pid=21632 HTTP/1.1
GET /stacks?pid=21632 HTTP/1.1
Host: localhost:52323
Authorization: Bearer fffffffffffffffffffffffffffffffffffffffffff=
Accept: text/plain
Expand Down
21 changes: 21 additions & 0 deletions documentation/configuration/egress-configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,8 @@ The Queue Message's payload will be the blob name (`<BlobPrefix>/<ArtifactName>`
| preSignedUrlExpiry | TimeStamp? | false | When specified, a pre-signed url is returned after successful upload; this value specifies the amount of time the generated pre-signed url should be accessible. The value has to be between 1 minute and 1 day. |
| forcePathStyle | bool | false | The boolean flag set for AWS connection configuration ForcePathStyle option. |
| copyBufferSize | int | false | The buffer size to use when copying data from the original artifact to the blob stream. There is a minimum size of 5 MB which is set when the given value is lower.|
| useKmsEncryption | bool | false | A boolean flag which controls whether the Egress should use KMS server side encryption. |
| kmsEncryptionKey | string | false | If UseKmsEncryption is true, this specifies the arn of the "customer managed" KMS encryption key to be used for server side encryption. If no value is set for this field then S3 will use an AWS managed key for KMS encryption. |

### Example S3 storage provider

Expand All @@ -184,6 +186,25 @@ The Queue Message's payload will be the blob name (`<BlobPrefix>/<ArtifactName>`
```
</details>

<details>
<summary>JSON with customer managed KMS encryption</summary>

```json
{
"Egress": {
"S3Storage": {
"monitorS3Blob": {
"endpoint": "http://localhost:9000",
"bucketName": "myS3Bucket",
"useKmsEncryption": true,
"kmsEncryptionKey": "arn:aws:kms:{region}:{account-id}:key/{resource-id}"
}
}
}
}
```
</details>

<details>
<summary>Kubernetes Secret</summary>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

First Available: 8.0 Preview 7

> [!NOTE]
> In-process features are only supported when running dotnet-monitor in `Listen` mode.
> See [Diagnostic Port](./diagnostic-port-configuration.md) configuration for details.
Some features of `dotnet monitor` require loading libraries into target applications. These libraries ship with `dotnet monitor` and are provisioned to be available to target applications using the `DefaultSharedPath` option in the [storage configuration](./storage-configuration.md) section. The following features require these in-process libraries to be used:

- [Call Stacks](#call-stacks)
Expand Down
2 changes: 1 addition & 1 deletion documentation/learningPath/aks.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ In addition to its availability as a .NET CLI tool, the `dotnet monitor` tool is

This workflow takes your local development copy of `dotnet-monitor`, patches it with a local development copy of the [.NET Core Diagnostics Repo](https://github.com/dotnet/diagnostics#net-core-diagnostics-repo), and makes it available as an image for you to consume in an ACR (Azure Container Registry). Note that there are many other ways to do this - this is meant to serve as a basic template that can be adapted to match your needs.

1. Open `pwsh` and run the [generate-dev-sln script](https://github.com/dotnet/dotnet-monitor/blob/8e99fe93461686b50ea276b406c5046b252b05e4/generate-dev-sln.ps1), providing a path to your local copy of the diagnostics repo.
1. Open `pwsh` and run the [generate-dev-sln script](https://github.com/dotnet/dotnet-monitor/blob/3c31273c42196ec0813b7b5b947ab8e1bd1801ac/generate-dev-sln.ps1), providing a path to your local copy of the diagnostics repo.

> [!NOTE]
> If your changes do not involve the [.NET Core Diagnostics Repo](https://github.com/dotnet/diagnostics#net-core-diagnostics-repo), you don't need to complete this step.
Expand Down
Loading

0 comments on commit ed8739f

Please sign in to comment.