16
16
package executor
17
17
18
18
import (
19
- "bufio"
20
19
"bytes"
21
20
"fmt"
22
21
"io"
23
22
"path"
24
23
"syscall"
25
24
26
- "github.com/fatih/color"
27
25
"github.com/quickfixgo/enum"
26
+ "github.com/quickfixgo/examples/cmd/utils"
28
27
"github.com/quickfixgo/field"
29
28
"github.com/quickfixgo/tag"
30
29
"github.com/shopspring/decimal"
@@ -101,6 +100,7 @@ func (e *executor) OnFIX40NewOrderSingle(msg fix40nos.NewOrderSingle, sessionID
101
100
}
102
101
103
102
if ordType != enum .OrdType_LIMIT {
103
+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
104
104
return quickfix .ValueIsIncorrect (tag .OrdType )
105
105
}
106
106
@@ -146,7 +146,7 @@ func (e *executor) OnFIX40NewOrderSingle(msg fix40nos.NewOrderSingle, sessionID
146
146
147
147
sendErr := quickfix .SendToTarget (execReport , sessionID )
148
148
if sendErr != nil {
149
- fmt . Println (sendErr )
149
+ utils . PrintBad (sendErr . Error () )
150
150
}
151
151
152
152
return nil
@@ -158,6 +158,7 @@ func (e *executor) OnFIX41NewOrderSingle(msg fix41nos.NewOrderSingle, sessionID
158
158
return
159
159
}
160
160
if ordType != enum .OrdType_LIMIT {
161
+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
161
162
return quickfix .ValueIsIncorrect (tag .OrdType )
162
163
}
163
164
@@ -205,7 +206,7 @@ func (e *executor) OnFIX41NewOrderSingle(msg fix41nos.NewOrderSingle, sessionID
205
206
206
207
sendErr := quickfix .SendToTarget (execReport , sessionID )
207
208
if sendErr != nil {
208
- fmt . Println (sendErr )
209
+ utils . PrintBad (sendErr . Error () )
209
210
}
210
211
return
211
212
}
@@ -217,6 +218,7 @@ func (e *executor) OnFIX42NewOrderSingle(msg fix42nos.NewOrderSingle, sessionID
217
218
}
218
219
219
220
if ordType != enum .OrdType_LIMIT {
221
+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
220
222
return quickfix .ValueIsIncorrect (tag .OrdType )
221
223
}
222
224
@@ -273,7 +275,7 @@ func (e *executor) OnFIX42NewOrderSingle(msg fix42nos.NewOrderSingle, sessionID
273
275
274
276
sendErr := quickfix .SendToTarget (execReport , sessionID )
275
277
if sendErr != nil {
276
- fmt . Println (sendErr )
278
+ utils . PrintBad (sendErr . Error () )
277
279
}
278
280
279
281
return
@@ -285,6 +287,7 @@ func (e *executor) OnFIX43NewOrderSingle(msg fix43nos.NewOrderSingle, sessionID
285
287
return err
286
288
}
287
289
if ordType != enum .OrdType_LIMIT {
290
+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
288
291
return quickfix .ValueIsIncorrect (tag .OrdType )
289
292
}
290
293
@@ -340,7 +343,7 @@ func (e *executor) OnFIX43NewOrderSingle(msg fix43nos.NewOrderSingle, sessionID
340
343
341
344
sendErr := quickfix .SendToTarget (execReport , sessionID )
342
345
if sendErr != nil {
343
- fmt . Println (sendErr )
346
+ utils . PrintBad (sendErr . Error () )
344
347
}
345
348
346
349
return
@@ -353,6 +356,7 @@ func (e *executor) OnFIX44NewOrderSingle(msg fix44nos.NewOrderSingle, sessionID
353
356
}
354
357
355
358
if ordType != enum .OrdType_LIMIT {
359
+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
356
360
return quickfix .ValueIsIncorrect (tag .OrdType )
357
361
}
358
362
@@ -408,7 +412,7 @@ func (e *executor) OnFIX44NewOrderSingle(msg fix44nos.NewOrderSingle, sessionID
408
412
409
413
sendErr := quickfix .SendToTarget (execReport , sessionID )
410
414
if sendErr != nil {
411
- fmt . Println (sendErr )
415
+ utils . PrintBad (sendErr . Error () )
412
416
}
413
417
414
418
return
@@ -421,6 +425,7 @@ func (e *executor) OnFIX50NewOrderSingle(msg fix50nos.NewOrderSingle, sessionID
421
425
}
422
426
423
427
if ordType != enum .OrdType_LIMIT {
428
+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
424
429
return quickfix .ValueIsIncorrect (tag .OrdType )
425
430
}
426
431
@@ -476,26 +481,26 @@ func (e *executor) OnFIX50NewOrderSingle(msg fix50nos.NewOrderSingle, sessionID
476
481
477
482
sendErr := quickfix .SendToTarget (execReport , sessionID )
478
483
if sendErr != nil {
479
- fmt . Println (sendErr )
484
+ utils . PrintBad (sendErr . Error () )
480
485
}
481
486
482
487
return
483
488
}
484
489
485
490
const (
486
491
usage = "executor"
487
- short = "Start an executor "
488
- long = "Start an executor ."
492
+ short = "Start an order execution (FIX acceptor) service "
493
+ long = "Start an order execution (FIX acceptor) service ."
489
494
)
490
495
491
496
var (
492
- // Cmd is the quote command.
497
+ // Cmd is the executor command.
493
498
Cmd = & cobra.Command {
494
499
Use : usage ,
495
500
Short : short ,
496
501
Long : long ,
497
502
Aliases : []string {"x" },
498
- Example : "qf ordermatch config/executor.cfg" ,
503
+ Example : "qf executor [YOUR_FIX_CONFIG_FILE_HERE.cfg] (default is ./ config/executor.cfg) " ,
499
504
RunE : execute ,
500
505
}
501
506
)
@@ -506,6 +511,8 @@ func execute(cmd *cobra.Command, args []string) error {
506
511
switch argLen {
507
512
case 0 :
508
513
{
514
+ utils .PrintInfo ("FIX config file not provided..." )
515
+ utils .PrintInfo ("attempting to use default location './config/executor.cfg' ..." )
509
516
cfgFileName = path .Join ("config" , "executor.cfg" )
510
517
}
511
518
case 1 :
@@ -532,40 +539,27 @@ func execute(cmd *cobra.Command, args []string) error {
532
539
return fmt .Errorf ("error reading cfg: %s," , err )
533
540
}
534
541
535
- logFactory := quickfix . NewScreenLogFactory ()
542
+ logger := utils . NewFancyLog ()
536
543
app := newExecutor ()
537
544
538
- printConfig ( bytes .NewReader (stringData ))
539
- acceptor , err := quickfix .NewAcceptor (app , quickfix .NewMemoryStoreFactory (), appSettings , logFactory )
545
+ utils . PrintConfig ( "acceptor" , bytes .NewReader (stringData ))
546
+ acceptor , err := quickfix .NewAcceptor (app , quickfix .NewMemoryStoreFactory (), appSettings , logger )
540
547
if err != nil {
541
548
return fmt .Errorf ("unable to create acceptor: %s" , err )
542
549
}
543
550
544
551
err = acceptor .Start ()
545
552
if err != nil {
546
- return fmt .Errorf ("unable to start acceptor: %s" , err )
553
+ return fmt .Errorf ("unable to start FIX acceptor: %s" , err )
547
554
}
548
555
549
556
interrupt := make (chan os.Signal , 1 )
550
557
signal .Notify (interrupt , os .Interrupt , syscall .SIGTERM )
551
558
<- interrupt
552
559
560
+ utils .PrintInfo ("stopping FIX acceptor service.." )
553
561
acceptor .Stop ()
562
+ utils .PrintInfo ("stopped" )
554
563
555
564
return nil
556
565
}
557
-
558
- func printConfig (reader io.Reader ) {
559
- scanner := bufio .NewScanner (reader )
560
- color .Set (color .Bold )
561
- fmt .Println ("Starting FIX acceptor with config:" )
562
- color .Unset ()
563
-
564
- color .Set (color .FgHiMagenta )
565
- for scanner .Scan () {
566
- line := scanner .Text ()
567
- fmt .Println (line )
568
- }
569
-
570
- color .Unset ()
571
- }
0 commit comments