2222
2323class DefaultConfigFactory
2424{
25- public function createRunner (Queue $ queue , Logger $ logger , string $ executorsConfigFile = null ): Runner
25+ private $ queueName ;
26+ private $ connectionUri ;
27+ private $ username ;
28+ private $ password ;
29+ private $ logFile ;
30+ private $ logLevel ;
31+ private $ executorsConfigFile ;
32+
33+ public function setQueueName (string $ name ): self
34+ {
35+ $ this ->queueName = $ name ;
36+
37+ return $ this ;
38+ }
39+
40+ public function setConnectionUri (string $ uri ): self
41+ {
42+ $ this ->connectionUri = $ uri ;
43+
44+ return $ this ;
45+ }
46+
47+ public function setCredentials (string $ username , string $ password ): self
48+ {
49+ $ this ->username = $ username ;
50+ $ this ->password = $ password ;
51+
52+ return $ this ;
53+ }
54+
55+ public function setLogFile (string $ logFile ): self
56+ {
57+ $ this ->logFile = $ logFile ;
58+
59+ return $ this ;
60+ }
61+
62+ public function setLogLevel ($ logLevel ): self
63+ {
64+ $ this ->logLevel = self ::normalizeLogLevel ($ logLevel );
65+
66+ return $ this ;
67+ }
68+
69+ public function setExecutorsConfigFile (string $ configFile ): self
70+ {
71+ $ this ->executorsConfigFile = $ configFile ;
72+
73+ return $ this ;
74+ }
75+
76+ public function createRunner (string $ executorsConfigFile = null ): Runner
2677 {
2778 return new ParallelRunner (
28- $ queue ,
79+ $ this -> createQueue () ,
2980 $ this ->createSuccessHandler (),
3081 $ this ->createFailureHandler (),
31- $ logger ,
82+ $ this -> createLogger () ,
3283 $ executorsConfigFile
3384 );
3485 }
3586
36- public function createQueue (string $ name , $ client ): Queue
87+ public function createQueue (): Queue
3788 {
38- return new Queue ($ client , $ name );
89+ $ this ->ensureQueueName ();
90+
91+ return new Queue ($ this ->createClient (), $ this ->queueName );
3992 }
4093
41- public function createClient (string $ uri )
94+ public function createClient (): Client
4295 {
43- $ conn = new StreamConnection ($ uri );
96+ if (!$ this ->connectionUri ) {
97+ throw new \LogicException ('Connection URI is not defined. ' );
98+ }
99+
100+ $ conn = new StreamConnection ($ this ->connectionUri );
44101 $ conn = new Retryable ($ conn );
102+ $ client = new Client ($ conn , new PurePacker ());
45103
46- return new Client ($ conn , new PurePacker ());
104+ if ($ this ->username ) {
105+ // TODO make it lazy
106+ $ client ->authenticate ($ this ->username , $ this ->password );
107+ }
108+
109+ return $ client ;
47110 }
48111
49- public function createLogger (string $ queueName , string $ logFile = null , int $ logLevel = null ): Logger
112+ public function createLogger (): Logger
50113 {
51- if (!$ logFile ) {
114+ if (!$ this -> logFile ) {
52115 return new NullLogger ();
53116 }
54117
55- return new MonologLogger ("$ queueName:worker " , [new StreamHandler ($ logFile , $ logLevel )]);
118+ $ this ->ensureQueueName ();
119+ $ handlers = [new StreamHandler ($ this ->logFile , $ this ->logLevel )];
120+
121+ return new MonologLogger ("$ this ->queueName :worker " , $ handlers );
56122 }
57123
58124 public function createSuccessHandler (): Handler
@@ -72,4 +138,28 @@ public function createRetryStrategyFactory(): RetryStrategyFactory
72138 {
73139 return new RetryStrategyFactory ();
74140 }
141+
142+ private function ensureQueueName (): void
143+ {
144+ if (!$ this ->queueName ) {
145+ throw new \LogicException ('Queue name is not defined. ' );
146+ }
147+ }
148+
149+ private static function normalizeLogLevel ($ name ): int
150+ {
151+ // level is already translated to logger constant, return as-is
152+ if (is_int ($ name )) {
153+ return $ name ;
154+ }
155+
156+ $ levels = MonologLogger::getLevels ();
157+ $ upper = strtoupper ($ name );
158+
159+ if (!isset ($ levels [$ upper ])) {
160+ throw new \InvalidArgumentException ("Provided logging level ' $ name' does not exist. Must be a valid monolog logging level. " );
161+ }
162+
163+ return $ levels [$ upper ];
164+ }
75165}
0 commit comments