3
3
4
4
using System ;
5
5
using System . Collections . Generic ;
6
+ using System . Runtime . CompilerServices ;
6
7
using System . Threading ;
7
8
using System . Threading . Tasks ;
8
9
@@ -14,6 +15,8 @@ namespace Azure.Monitor.OpenTelemetry.Exporter
14
15
{
15
16
internal partial class ApplicationInsightsRestClient
16
17
{
18
+ private RawRequestUriBuilder _rawRequestUriBuilder ;
19
+
17
20
/// <summary>
18
21
/// This operation sends a sequence of telemetry events that will be monitored by Azure Monitor.
19
22
/// </summary>
@@ -75,42 +78,42 @@ internal async Task<HttpMessage> InternalTrackAsync(ReadOnlyMemory<byte> body, C
75
78
76
79
internal HttpMessage CreateTrackRequest ( IEnumerable < TelemetryItem > body )
77
80
{
78
- var message = _pipeline . CreateMessage ( ) ;
79
- var request = message . Request ;
80
- request . Method = RequestMethod . Post ;
81
- var uri = new RawRequestUriBuilder ( ) ;
82
- uri . AppendRaw ( _host , false ) ;
83
- uri . AppendRaw ( "/v2" , false ) ;
84
- uri . AppendPath ( "/track" , false ) ;
85
- request . Uri = uri ;
86
- request . Headers . Add ( "Content-Type" , "application/json" ) ;
87
- request . Headers . Add ( "Accept" , "application/json" ) ;
88
81
using var content = new NDJsonWriter ( ) ;
89
82
foreach ( var item in body )
90
83
{
91
84
content . JsonWriter . WriteObjectValue ( item ) ;
92
85
content . WriteNewLine ( ) ;
93
86
}
94
- request . Content = RequestContent . Create ( content . ToBytes ( ) ) ;
87
+
95
88
TelemetryDebugWriter . WriteTelemetry ( content ) ;
96
- return message ;
89
+
90
+ return CreateRequest ( RequestContent . Create ( content . ToBytes ( ) ) ) ;
97
91
}
98
92
99
93
internal HttpMessage CreateTrackRequest ( ReadOnlyMemory < byte > body )
94
+ {
95
+ TelemetryDebugWriter . WriteTelemetryFromStorage ( body ) ;
96
+
97
+ return CreateRequest ( RequestContent . Create ( body ) ) ;
98
+ }
99
+
100
+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
101
+ private HttpMessage CreateRequest ( RequestContent requestContent )
100
102
{
101
103
var message = _pipeline . CreateMessage ( ) ;
102
104
var request = message . Request ;
103
105
request . Method = RequestMethod . Post ;
104
- var uri = new RawRequestUriBuilder ( ) ;
105
- uri . AppendRaw ( _host , false ) ;
106
- uri . AppendRaw ( "/v2" , false ) ;
107
- uri . AppendPath ( "/track" , false ) ;
108
- request . Uri = uri ;
106
+ request . Uri = LazyInitializer . EnsureInitialized ( ref _rawRequestUriBuilder , ( ) =>
107
+ {
108
+ var uri = new RawRequestUriBuilder ( ) ;
109
+ uri . AppendRaw ( _host , false ) ;
110
+ uri . AppendRaw ( "/v2/track" , false ) ;
111
+ return uri ;
112
+ } ) ;
109
113
request . Headers . Add ( "Content-Type" , "application/json" ) ;
110
114
request . Headers . Add ( "Accept" , "application/json" ) ;
111
- using var content = new NDJsonWriter ( ) ;
112
- request . Content = RequestContent . Create ( body ) ;
113
- TelemetryDebugWriter . WriteTelemetry ( content ) ;
115
+ request . Content = requestContent ;
116
+
114
117
return message ;
115
118
}
116
119
}
0 commit comments