1616package executor
1717
1818import (
19- "bufio"
2019 "bytes"
2120 "fmt"
2221 "io"
2322 "path"
2423 "syscall"
2524
26- "github.com/fatih/color"
2725 "github.com/quickfixgo/enum"
26+ "github.com/quickfixgo/examples/cmd/utils"
2827 "github.com/quickfixgo/field"
2928 "github.com/quickfixgo/tag"
3029 "github.com/shopspring/decimal"
@@ -101,6 +100,7 @@ func (e *executor) OnFIX40NewOrderSingle(msg fix40nos.NewOrderSingle, sessionID
101100 }
102101
103102 if ordType != enum .OrdType_LIMIT {
103+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
104104 return quickfix .ValueIsIncorrect (tag .OrdType )
105105 }
106106
@@ -146,7 +146,7 @@ func (e *executor) OnFIX40NewOrderSingle(msg fix40nos.NewOrderSingle, sessionID
146146
147147 sendErr := quickfix .SendToTarget (execReport , sessionID )
148148 if sendErr != nil {
149- fmt . Println (sendErr )
149+ utils . PrintBad (sendErr . Error () )
150150 }
151151
152152 return nil
@@ -158,6 +158,7 @@ func (e *executor) OnFIX41NewOrderSingle(msg fix41nos.NewOrderSingle, sessionID
158158 return
159159 }
160160 if ordType != enum .OrdType_LIMIT {
161+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
161162 return quickfix .ValueIsIncorrect (tag .OrdType )
162163 }
163164
@@ -205,7 +206,7 @@ func (e *executor) OnFIX41NewOrderSingle(msg fix41nos.NewOrderSingle, sessionID
205206
206207 sendErr := quickfix .SendToTarget (execReport , sessionID )
207208 if sendErr != nil {
208- fmt . Println (sendErr )
209+ utils . PrintBad (sendErr . Error () )
209210 }
210211 return
211212}
@@ -217,6 +218,7 @@ func (e *executor) OnFIX42NewOrderSingle(msg fix42nos.NewOrderSingle, sessionID
217218 }
218219
219220 if ordType != enum .OrdType_LIMIT {
221+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
220222 return quickfix .ValueIsIncorrect (tag .OrdType )
221223 }
222224
@@ -273,7 +275,7 @@ func (e *executor) OnFIX42NewOrderSingle(msg fix42nos.NewOrderSingle, sessionID
273275
274276 sendErr := quickfix .SendToTarget (execReport , sessionID )
275277 if sendErr != nil {
276- fmt . Println (sendErr )
278+ utils . PrintBad (sendErr . Error () )
277279 }
278280
279281 return
@@ -285,6 +287,7 @@ func (e *executor) OnFIX43NewOrderSingle(msg fix43nos.NewOrderSingle, sessionID
285287 return err
286288 }
287289 if ordType != enum .OrdType_LIMIT {
290+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
288291 return quickfix .ValueIsIncorrect (tag .OrdType )
289292 }
290293
@@ -340,7 +343,7 @@ func (e *executor) OnFIX43NewOrderSingle(msg fix43nos.NewOrderSingle, sessionID
340343
341344 sendErr := quickfix .SendToTarget (execReport , sessionID )
342345 if sendErr != nil {
343- fmt . Println (sendErr )
346+ utils . PrintBad (sendErr . Error () )
344347 }
345348
346349 return
@@ -353,6 +356,7 @@ func (e *executor) OnFIX44NewOrderSingle(msg fix44nos.NewOrderSingle, sessionID
353356 }
354357
355358 if ordType != enum .OrdType_LIMIT {
359+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
356360 return quickfix .ValueIsIncorrect (tag .OrdType )
357361 }
358362
@@ -408,7 +412,7 @@ func (e *executor) OnFIX44NewOrderSingle(msg fix44nos.NewOrderSingle, sessionID
408412
409413 sendErr := quickfix .SendToTarget (execReport , sessionID )
410414 if sendErr != nil {
411- fmt . Println (sendErr )
415+ utils . PrintBad (sendErr . Error () )
412416 }
413417
414418 return
@@ -421,6 +425,7 @@ func (e *executor) OnFIX50NewOrderSingle(msg fix50nos.NewOrderSingle, sessionID
421425 }
422426
423427 if ordType != enum .OrdType_LIMIT {
428+ utils .PrintBad ("incoming order was not a limit order and was rejected" )
424429 return quickfix .ValueIsIncorrect (tag .OrdType )
425430 }
426431
@@ -476,26 +481,26 @@ func (e *executor) OnFIX50NewOrderSingle(msg fix50nos.NewOrderSingle, sessionID
476481
477482 sendErr := quickfix .SendToTarget (execReport , sessionID )
478483 if sendErr != nil {
479- fmt . Println (sendErr )
484+ utils . PrintBad (sendErr . Error () )
480485 }
481486
482487 return
483488}
484489
485490const (
486491 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 ."
489494)
490495
491496var (
492- // Cmd is the quote command.
497+ // Cmd is the executor command.
493498 Cmd = & cobra.Command {
494499 Use : usage ,
495500 Short : short ,
496501 Long : long ,
497502 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) " ,
499504 RunE : execute ,
500505 }
501506)
@@ -506,6 +511,8 @@ func execute(cmd *cobra.Command, args []string) error {
506511 switch argLen {
507512 case 0 :
508513 {
514+ utils .PrintInfo ("FIX config file not provided..." )
515+ utils .PrintInfo ("attempting to use default location './config/executor.cfg' ..." )
509516 cfgFileName = path .Join ("config" , "executor.cfg" )
510517 }
511518 case 1 :
@@ -532,40 +539,27 @@ func execute(cmd *cobra.Command, args []string) error {
532539 return fmt .Errorf ("error reading cfg: %s," , err )
533540 }
534541
535- logFactory := quickfix . NewScreenLogFactory ()
542+ logger := utils . NewFancyLog ()
536543 app := newExecutor ()
537544
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 )
540547 if err != nil {
541548 return fmt .Errorf ("unable to create acceptor: %s" , err )
542549 }
543550
544551 err = acceptor .Start ()
545552 if err != nil {
546- return fmt .Errorf ("unable to start acceptor: %s" , err )
553+ return fmt .Errorf ("unable to start FIX acceptor: %s" , err )
547554 }
548555
549556 interrupt := make (chan os.Signal , 1 )
550557 signal .Notify (interrupt , os .Interrupt , syscall .SIGTERM )
551558 <- interrupt
552559
560+ utils .PrintInfo ("stopping FIX acceptor service.." )
553561 acceptor .Stop ()
562+ utils .PrintInfo ("stopped" )
554563
555564 return nil
556565}
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