1- using System . Diagnostics . CodeAnalysis ;
1+ using System . Diagnostics ;
2+ using System . Diagnostics . CodeAnalysis ;
23using System . Net . Http . Json ;
34using System . Text . Json ;
45using System . Text . Json . Serialization . Metadata ;
6+ using Catglobe . CgScript . Common ;
57using Microsoft . Extensions . Logging ;
68
79namespace Catglobe . CgScript . Runtime ;
810
911internal abstract class ApiClientBase ( HttpClient httpClient , ILogger < ICgScriptApiClient > logger ) : ICgScriptApiClient
1012{
11- public async Task < ScriptResult < TR > > Execute < TP , TR > ( string scriptName , TP parameter , JsonTypeInfo < TP > callJsonTypeInfo , JsonTypeInfo < TR > resultJsonTypeInfo , CancellationToken cancellationToken ) =>
12- await ParseResponse ( await httpClient . PostAsync ( await GetPath ( scriptName ) , await GetJsonContent ( scriptName , parameter , callJsonTypeInfo ) , cancellationToken ) . ConfigureAwait ( false ) , resultJsonTypeInfo , cancellationToken ) ;
13+ public async Task < ScriptResult < TR > > Execute < TP , TR > ( string scriptName , TP parameter , JsonTypeInfo < TP > callJsonTypeInfo , JsonTypeInfo < TR > resultJsonTypeInfo , CancellationToken cancellationToken )
14+ {
15+ using var activity = CgScriptTelemetry . Source . StartActivity ( scriptName ) ;
16+ return await ParseResponse ( await httpClient . PostAsync ( await GetPath ( scriptName ) , await GetJsonContent ( scriptName , parameter , callJsonTypeInfo ) , cancellationToken ) . ConfigureAwait ( false ) , resultJsonTypeInfo , cancellationToken ) ;
17+ }
1318
14- public async Task < ScriptResult < TR > > ExecuteArray < TP , TR > ( string scriptName , TP parameter , JsonTypeInfo < TP > callJsonTypeInfo , JsonTypeInfo < TR > resultJsonTypeInfo , CancellationToken cancellationToken ) =>
15- await ParseResponse ( await httpClient . PostAsync ( await GetPath ( scriptName , "?expandParameters=true" ) , await GetJsonContent ( scriptName , parameter , callJsonTypeInfo ) , cancellationToken ) . ConfigureAwait ( false ) , resultJsonTypeInfo , cancellationToken ) ;
19+ public async Task < ScriptResult < TR > > ExecuteArray < TP , TR > ( string scriptName , TP parameter , JsonTypeInfo < TP > callJsonTypeInfo , JsonTypeInfo < TR > resultJsonTypeInfo , CancellationToken cancellationToken )
20+ {
21+ using var activity = CgScriptTelemetry . Source . StartActivity ( scriptName ) ;
22+ return await ParseResponse ( await httpClient . PostAsync ( await GetPath ( scriptName , "?expandParameters=true" ) , await GetJsonContent ( scriptName , parameter , callJsonTypeInfo ) , cancellationToken ) . ConfigureAwait ( false ) , resultJsonTypeInfo , cancellationToken ) ;
23+ }
1624
17- public async Task < ScriptResult < TR > > Execute < TR > ( string scriptName , JsonTypeInfo < TR > resultJsonTypeInfo , CancellationToken cancellationToken = default ) =>
18- await ParseResponse ( await httpClient . PostAsync ( await GetPath ( scriptName , "?expandParameters=true" ) , await GetJsonContent ( scriptName , null , ( JsonTypeInfo < object > ) null ! ) , cancellationToken ) . ConfigureAwait ( false ) , resultJsonTypeInfo , cancellationToken ) ;
25+ public async Task < ScriptResult < TR > > Execute < TR > ( string scriptName , JsonTypeInfo < TR > resultJsonTypeInfo , CancellationToken cancellationToken = default )
26+ {
27+ using var activity = CgScriptTelemetry . Source . StartActivity ( scriptName ) ;
28+ return await ParseResponse ( await httpClient . PostAsync ( await GetPath ( scriptName , "?expandParameters=true" ) , await GetJsonContent ( scriptName , null , ( JsonTypeInfo < object > ) null ! ) , cancellationToken ) . ConfigureAwait ( false ) , resultJsonTypeInfo , cancellationToken ) ;
29+ }
1930
2031 private async Task < ScriptResult < TR > > ParseResponse < TR > ( HttpResponseMessage call , JsonTypeInfo < TR > resultJsonTypeInfo , CancellationToken cancellationToken )
2132 {
2233 var jsonTypeInfo = JsonMetadataServices . CreateValueInfo < ScriptResult < TR > > ( new ( ) { TypeInfoResolver = new DummyResolver < TR > ( resultJsonTypeInfo ) } , new ScriptResultConverterWithTypeInfo < TR > ( resultJsonTypeInfo ) ) ;
2334 //if not successful, log the error the server sent
2435 if ( ! call . IsSuccessStatusCode )
2536 {
37+ Activity . Current ? . SetStatus ( ActivityStatusCode . Error ) ;
2638 logger . LogInformation ( await call . Content . ReadAsStringAsync ( cancellationToken ) . ConfigureAwait ( false ) ) ;
2739 call . EnsureSuccessStatusCode ( ) ;
2840 }
2941 var result = await call . Content . ReadFromJsonAsync ( jsonTypeInfo , cancellationToken ) . ConfigureAwait ( false ) ;
42+ if ( result ? . Error is not null )
43+ {
44+ Activity . Current ? . SetStatus ( ActivityStatusCode . Error ) ;
45+ }
3046 return result ?? throw new IOException ( "Could not deserialize result" ) ;
3147 }
3248
3349 [ RequiresUnreferencedCode ( "JSON" ) ]
34- public async Task < ScriptResult < TR > > Execute < TP , TR > ( string scriptName , TP parameter , JsonSerializerOptions ? options , CancellationToken cancellationToken = default ) =>
35- await ParseResponse < TR > ( await httpClient . PostAsync ( await GetPath ( scriptName ) , await GetJsonContent ( scriptName , parameter , options ) , cancellationToken ) . ConfigureAwait ( false ) , options , cancellationToken ) ;
50+ public async Task < ScriptResult < TR > > Execute < TP , TR > ( string scriptName , TP parameter , JsonSerializerOptions ? options , CancellationToken cancellationToken = default )
51+ {
52+ using var activity = CgScriptTelemetry . Source . StartActivity ( scriptName ) ;
53+ return await ParseResponse < TR > ( await httpClient . PostAsync ( await GetPath ( scriptName ) , await GetJsonContent ( scriptName , parameter , options ) , cancellationToken ) . ConfigureAwait ( false ) , options , cancellationToken ) ;
54+ }
55+
3656 [ RequiresUnreferencedCode ( "JSON" ) ]
37- public async Task < ScriptResult < TR > > ExecuteArray < TP , TR > ( string scriptName , TP parameter , JsonSerializerOptions ? options , CancellationToken cancellationToken = default ) =>
38- await ParseResponse < TR > ( await httpClient . PostAsync ( await GetPath ( scriptName , "?expandParameters=true" ) , await GetJsonContent ( scriptName , parameter , options ) , cancellationToken ) . ConfigureAwait ( false ) , options , cancellationToken ) ;
57+ public async Task < ScriptResult < TR > > ExecuteArray < TP , TR > ( string scriptName , TP parameter , JsonSerializerOptions ? options , CancellationToken cancellationToken = default )
58+ {
59+ using var activity = CgScriptTelemetry . Source . StartActivity ( scriptName ) ;
60+ return await ParseResponse < TR > ( await httpClient . PostAsync ( await GetPath ( scriptName , "?expandParameters=true" ) , await GetJsonContent ( scriptName , parameter , options ) , cancellationToken ) . ConfigureAwait ( false ) , options , cancellationToken ) ;
61+ }
3962
4063 [ RequiresUnreferencedCode ( "JSON" ) ]
41- public async Task < ScriptResult < TR > > Execute < TR > ( string scriptName , IReadOnlyCollection < object > parameters , JsonSerializerOptions ? options = null , CancellationToken cancellationToken = default ) =>
42- await ParseResponse < TR > ( await httpClient . PostAsync ( await GetPath ( scriptName , "?expandParameters=true" ) , await GetJsonContent ( scriptName , parameters , options ) , cancellationToken ) . ConfigureAwait ( false ) , options , cancellationToken ) ;
64+ public async Task < ScriptResult < TR > > Execute < TR > ( string scriptName , IReadOnlyCollection < object > parameters , JsonSerializerOptions ? options = null , CancellationToken cancellationToken = default )
65+ {
66+ using var activity = CgScriptTelemetry . Source . StartActivity ( scriptName ) ;
67+ return await ParseResponse < TR > ( await httpClient . PostAsync ( await GetPath ( scriptName , "?expandParameters=true" ) , await GetJsonContent ( scriptName , parameters , options ) , cancellationToken ) . ConfigureAwait ( false ) , options , cancellationToken ) ;
68+ }
4369
4470 [ RequiresUnreferencedCode ( "JSON" ) ]
45- public async Task < ScriptResult < TR > > Execute < TR > ( string scriptName , JsonSerializerOptions ? options = null , CancellationToken cancellationToken = default ) =>
46- await ParseResponse < TR > ( await httpClient . PostAsync ( await GetPath ( scriptName ) , await GetJsonContent ( scriptName , null , ( JsonTypeInfo < object > ) null ! ) , cancellationToken ) . ConfigureAwait ( false ) , options , cancellationToken ) ;
71+ public async Task < ScriptResult < TR > > Execute < TR > ( string scriptName , JsonSerializerOptions ? options = null , CancellationToken cancellationToken = default )
72+ {
73+ using var activity = CgScriptTelemetry . Source . StartActivity ( scriptName ) ;
74+ return await ParseResponse < TR > ( await httpClient . PostAsync ( await GetPath ( scriptName ) , await GetJsonContent ( scriptName , null , ( JsonTypeInfo < object > ) null ! ) , cancellationToken ) . ConfigureAwait ( false ) , options , cancellationToken ) ;
75+ }
4776
4877 [ RequiresUnreferencedCode ( "JSON" ) ]
4978 private async Task < ScriptResult < TR > > ParseResponse < TR > ( HttpResponseMessage call , JsonSerializerOptions ? options , CancellationToken cancellationToken )
@@ -52,10 +81,15 @@ private async Task<ScriptResult<TR>> ParseResponse<TR>(HttpResponseMessage call,
5281 //if not successful, log the error the server sent
5382 if ( ! call . IsSuccessStatusCode )
5483 {
84+ Activity . Current ? . SetStatus ( ActivityStatusCode . Error ) ;
5585 logger . LogInformation ( await call . Content . ReadAsStringAsync ( cancellationToken ) . ConfigureAwait ( false ) ) ;
5686 call . EnsureSuccessStatusCode ( ) ;
5787 }
5888 var result = ( ScriptResult < TR > ? ) await call . Content . ReadFromJsonAsync ( typeof ( ScriptResult < TR > ) , retOptions , cancellationToken ) . ConfigureAwait ( false ) ;
89+ if ( result ? . Error is not null )
90+ {
91+ Activity . Current ? . SetStatus ( ActivityStatusCode . Error ) ;
92+ }
5993 return result ?? throw new IOException ( "Could not deserialize result" ) ;
6094 }
6195
0 commit comments