@@ -8,6 +8,7 @@ namespace Docker.DotNet
88 using System . Threading . Tasks ;
99 using System . Threading ;
1010 using Models ;
11+ using System . IO ;
1112
1213 internal class SwarmOperations : ISwarmOperations
1314 {
@@ -156,7 +157,42 @@ async Task<ServiceUpdateResponse> ISwarmOperations.UpdateServiceAsync(string id,
156157 return this . _client . JsonSerializer . DeserializeObject < ServiceUpdateResponse > ( response . Body ) ;
157158 }
158159
159- async Task ISwarmOperations . UpdateSwarmAsync ( SwarmUpdateParameters parameters , CancellationToken cancellationToken )
160+ public Task < Stream > GetServiceLogsAsync ( string id , ServiceLogsParameters parameters , CancellationToken cancellationToken = default ( CancellationToken ) )
161+ {
162+ if ( string . IsNullOrEmpty ( id ) )
163+ {
164+ throw new ArgumentNullException ( nameof ( id ) ) ;
165+ }
166+
167+ if ( parameters == null )
168+ {
169+ throw new ArgumentNullException ( nameof ( parameters ) ) ;
170+ }
171+
172+ IQueryString queryParameters = new QueryString < ServiceLogsParameters > ( parameters ) ;
173+ return this . _client . MakeRequestForStreamAsync ( new [ ] { SwarmResponseHandler } , HttpMethod . Get , $ "services/{ id } /logs", queryParameters , cancellationToken ) ;
174+ }
175+
176+ public async Task < MultiplexedStream > GetServiceLogsAsync ( string id , bool tty , ServiceLogsParameters parameters , CancellationToken cancellationToken = default ( CancellationToken ) )
177+ {
178+ if ( string . IsNullOrEmpty ( id ) )
179+ {
180+ throw new ArgumentNullException ( nameof ( id ) ) ;
181+ }
182+
183+ if ( parameters == null )
184+ {
185+ throw new ArgumentNullException ( nameof ( parameters ) ) ;
186+ }
187+
188+ IQueryString queryParameters = new QueryString < ServiceLogsParameters > ( parameters ) ;
189+
190+ Stream result = await this . _client . MakeRequestForStreamAsync ( new [ ] { SwarmResponseHandler } , HttpMethod . Get , $ "services/{ id } /logs", queryParameters , cancellationToken ) . ConfigureAwait ( false ) ;
191+
192+ return new MultiplexedStream ( result , ! tty ) ;
193+ }
194+
195+ async Task ISwarmOperations . UpdateSwarmAsync ( SwarmUpdateParameters parameters , CancellationToken cancellationToken )
160196 {
161197 var query = new QueryString < SwarmUpdateParameters > ( parameters ?? throw new ArgumentNullException ( nameof ( parameters ) ) ) ;
162198 var body = new JsonRequestContent < Spec > ( parameters . Spec ?? throw new ArgumentNullException ( nameof ( parameters . Spec ) ) , this . _client . JsonSerializer ) ;
@@ -211,7 +247,7 @@ async Task<NodeListResponse> ISwarmOperations.InspectNodeAsync(string id, Cancel
211247 async Task ISwarmOperations . RemoveNodeAsync ( string id , bool force , CancellationToken cancellationToken )
212248 {
213249 if ( string . IsNullOrEmpty ( id ) ) throw new ArgumentNullException ( nameof ( id ) ) ;
214- var parameters = new NodeRemoveParameters { Force = force } ;
250+ var parameters = new NodeRemoveParameters { Force = force } ;
215251 var query = new QueryString < NodeRemoveParameters > ( parameters ) ;
216252 await this . _client . MakeRequestAsync ( new [ ] { SwarmResponseHandler } , HttpMethod . Delete , $ "nodes/{ id } ", query , cancellationToken ) . ConfigureAwait ( false ) ;
217253 }
0 commit comments