11namespace DotNet . Testcontainers . Clients
22{
33 using System ;
4+ using System . Text . Json ;
45 using Docker . DotNet . Models ;
56 using Microsoft . Extensions . Logging ;
67
@@ -15,29 +16,40 @@ public TraceProgress(ILogger logger)
1516
1617 public void Report ( JSONMessage value )
1718 {
18- #pragma warning disable CA1848 , CA2254
19+ if ( value . Error != null )
20+ {
21+ _logger . LogError ( "ID={ID}: {Error}" , value . ID , value . Error . Message ) ;
22+ return ;
23+ }
1924
20- if ( ! string . IsNullOrWhiteSpace ( value . Status ) )
25+ if ( ! _logger . IsEnabled ( LogLevel . Debug ) )
2126 {
22- _logger . LogDebug ( value . Status . TrimEnd ( ) ) ;
27+ return ;
2328 }
2429
2530 if ( ! string . IsNullOrWhiteSpace ( value . Stream ) )
2631 {
27- _logger . LogDebug ( value . Stream . TrimEnd ( ) ) ;
32+ _logger . LogDebug ( "{Stream}" , value . Stream . Trim ( ) ) ;
33+ return ;
2834 }
2935
30- if ( ! string . IsNullOrWhiteSpace ( value . ProgressMessage ) )
36+ if ( value . Progress != null && value . Progress . Total > 0 )
3137 {
32- _logger . LogDebug ( value . ProgressMessage . TrimEnd ( ) ) ;
38+ var percentage = ( double ) value . Progress . Current / value . Progress . Total * 100 ;
39+ _logger . LogDebug ( "ID={ID}: {Status} {Percentage,6:F2}% ({Current}/{Total})" , value . ID , value . Status , percentage , value . Progress . Current , value . Progress . Total ) ;
40+ return ;
3341 }
3442
35- if ( ! string . IsNullOrWhiteSpace ( value . ErrorMessage ) )
43+ if ( ! string . IsNullOrWhiteSpace ( value . Status ) )
3644 {
37- _logger . LogError ( value . ErrorMessage . TrimEnd ( ) ) ;
45+ _logger . LogDebug ( "ID={ID}: {Status}" , value . ID , value . Status ) ;
46+ return ;
3847 }
3948
40- #pragma warning restore CA1848 , CA2254
49+ if ( value . Aux != null )
50+ {
51+ _logger . LogDebug ( "Auxiliary data: {ExtensionData}" , JsonSerializer . Serialize ( value . Aux . ExtensionData ) ) ;
52+ }
4153 }
4254 }
4355}
0 commit comments