@@ -34,6 +34,7 @@ type traceOptions struct {
34
34
ref string
35
35
containerName string
36
36
addr string
37
+ compare string
37
38
}
38
39
39
40
func loadTrace (ctx context.Context , ref string , nodes []builder.Node ) (string , []byte , error ) {
@@ -175,39 +176,48 @@ func runTrace(ctx context.Context, dockerCli command.Cli, opts traceOptions) err
175
176
}
176
177
}
177
178
178
- traceid , data , err := loadTrace (ctx , opts .ref , nodes )
179
+ traceID , data , err := loadTrace (ctx , opts .ref , nodes )
179
180
if err != nil {
180
181
return err
181
182
}
183
+ srv := jaegerui .NewServer (jaegerui.Config {})
184
+ if err := srv .AddTrace (traceID , bytes .NewReader (data )); err != nil {
185
+ return err
186
+ }
187
+ url := "/trace/" + traceID
188
+
189
+ if opts .compare != "" {
190
+ traceIDcomp , data , err := loadTrace (ctx , opts .compare , nodes )
191
+ if err != nil {
192
+ return errors .Wrapf (err , "failed to load trace for %s" , opts .compare )
193
+ }
194
+ if err := srv .AddTrace (traceIDcomp , bytes .NewReader (data )); err != nil {
195
+ return err
196
+ }
197
+ url = "/trace/" + traceIDcomp + "..." + traceID
198
+ }
182
199
183
200
var term bool
184
201
if _ , err := console .ConsoleFromFile (os .Stdout ); err == nil {
185
202
term = true
186
203
}
187
204
188
- if ! term {
205
+ if ! term && opts . compare == "" {
189
206
fmt .Fprintln (dockerCli .Out (), string (data ))
190
207
return nil
191
208
}
192
209
193
- srv := jaegerui .NewServer (jaegerui.Config {})
194
-
195
- if err := srv .AddTrace (traceid , bytes .NewReader (data )); err != nil {
196
- return err
197
- }
198
-
199
210
ln , err := net .Listen ("tcp" , opts .addr )
200
211
if err != nil {
201
212
return err
202
213
}
203
214
204
- url := "http://" + ln .Addr ().String () + "/trace/" + traceid
205
-
206
215
go func () {
207
216
time .Sleep (100 * time .Millisecond )
208
217
browser .OpenURL (url )
209
218
}()
210
219
220
+ url = "http://" + ln .Addr ().String () + url
211
221
fmt .Fprintf (dockerCli .Err (), "Trace available at %s\n " , url )
212
222
213
223
go func () {
@@ -246,6 +256,7 @@ func traceCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command {
246
256
flags := cmd .Flags ()
247
257
flags .StringVar (& options .containerName , "container" , "" , "Container name" )
248
258
flags .StringVar (& options .addr , "addr" , "127.0.0.1:0" , "Address to bind the UI server" )
259
+ flags .StringVar (& options .compare , "compare" , "" , "Compare with another build reference" )
249
260
250
261
return cmd
251
262
}
0 commit comments