@@ -12,12 +12,6 @@ defmodule Quantum.ExecutionBroadcaster do
1212
1313  alias  Quantum.ClockBroadcaster.Event ,  as:  ClockEvent 
1414
15-   alias  Quantum . { 
16-     DateLibrary , 
17-     DateLibrary.InvalidDateTimeForTimezoneError , 
18-     DateLibrary.InvalidTimezoneError 
19-   } 
20- 
2115  alias  Quantum.ExecutionBroadcaster.Event ,  as:  ExecuteEvent 
2216  alias  Quantum.ExecutionBroadcaster.InitOpts 
2317  alias  Quantum.ExecutionBroadcaster.State 
@@ -202,7 +196,7 @@ defmodule Quantum.ExecutionBroadcaster do
202196         }  =  state , 
203197         time 
204198       )  do 
205-     case  NaiveDateTime . compare ( time ,  time_to_execute )  do 
199+     case  DateTime . compare ( time ,  time_to_execute )  do 
206200      :gt  -> 
207201        raise  "Jobs were skipped" 
208202
@@ -226,7 +220,7 @@ defmodule Quantum.ExecutionBroadcaster do
226220          jobs 
227221          |>  Enum . reduce ( 
228222            % { state  |  execution_timeline:  tail } , 
229-             & add_job_to_state ( & 1 ,  & 2 ,  NaiveDateTime . add ( time ,  1 ,  :second ) ) 
223+             & add_job_to_state ( & 1 ,  & 2 ,  DateTime . add ( time ,  1 ,  :second ) ) 
230224          ) 
231225          |>  sort_state 
232226          |>  execute_events_to_fire ( time ) 
@@ -240,11 +234,17 @@ defmodule Quantum.ExecutionBroadcaster do
240234         state , 
241235         time 
242236       )  do 
243-     job 
244-     |>  get_next_execution_time ( time ) 
245-     |>  case  do 
246-       { :ok ,  date }  -> 
247-         add_to_state ( state ,  time ,  date ,  job ) 
237+     with  { :ok ,  execution_date }  <-  get_next_execution_time ( job ,  time )  do 
238+       add_to_state ( state ,  time ,  execution_date ,  job ) 
239+     else 
240+       { :error ,  :time_zone_not_found }  -> 
241+         Logger . error ( 
242+           "Invalid Timezone #{ inspect ( timezone ) }   provided for job #{ inspect ( name ) }  ." , 
243+           job:  job , 
244+           error:  :time_zone_not_found 
245+         ) 
246+ 
247+         state 
248248
249249      { :error ,  _ }  -> 
250250        Logger . warning ( fn  -> 
@@ -256,54 +256,32 @@ defmodule Quantum.ExecutionBroadcaster do
256256
257257        state 
258258    end 
259-   rescue 
260-     e  in  InvalidTimezoneError  -> 
261-       Logger . error ( 
262-         "Invalid Timezone #{ inspect ( timezone ) }   provided for job #{ inspect ( name ) }  ." , 
263-         job:  job , 
264-         error:  e 
265-       ) 
266- 
267-       state 
268259  end 
269260
270261  defp  get_next_execution_time ( 
271-          % Job { schedule:  schedule ,  timezone:  timezone ,   name:  name }   =   job , 
262+          % Job { schedule:  schedule ,  timezone:  :utc } , 
272263         time 
273264       )  do 
274-     schedule 
275-     |>  CrontabScheduler . get_next_run_date ( DateLibrary . to_tz! ( time ,  timezone ) ) 
276-     |>  case  do 
277-       { :ok ,  date }  -> 
278-         { :ok ,  DateLibrary . to_utc! ( date ,  timezone ) } 
265+     CrontabScheduler . get_next_run_date ( schedule ,  time ) 
266+   end 
279267
280-       { :error ,  _ }  =  error  -> 
281-         error 
268+   defp  get_next_execution_time ( 
269+          % Job { schedule:  schedule ,  timezone:  timezone } , 
270+          time 
271+        )  do 
272+     with  { :ok ,  localized_time }  <-  DateTime . shift_zone ( time ,  timezone ) , 
273+          { :ok ,  localized_execution_time }  <- 
274+            CrontabScheduler . get_next_run_date ( schedule ,  localized_time )  do 
275+       DateTime . shift_zone ( localized_execution_time ,  "Etc/UTC" ) 
282276    end 
283-   rescue 
284-     _  in  InvalidDateTimeForTimezoneError  -> 
285-       next_time  =  NaiveDateTime . add ( time ,  60 ,  :second ) 
286- 
287-       Logger . warning ( fn  -> 
288-         """ 
289-         Next execution time for job #{ inspect ( name ) }   is not a valid time. 
290-         Retrying with #{ inspect ( next_time ) }  
291-         """ 
292-       end ) 
293- 
294-       get_next_execution_time ( job ,  next_time ) 
295277  end 
296278
297279  defp  sort_state ( % State { execution_timeline:  execution_timeline }  =  state )  do 
298-     % { 
299-       state 
300-       |  execution_timeline: 
301-            Enum . sort_by ( execution_timeline ,  fn  { date ,  _ }  ->  NaiveDateTime . to_erl ( date )  end ) 
302-     } 
280+     % { state  |  execution_timeline:  Enum . sort_by ( execution_timeline ,  & elem ( & 1 ,  0 ) ,  DateTime ) } 
303281  end 
304282
305283  defp  add_to_state ( % State { execution_timeline:  execution_timeline }  =  state ,  time ,  date ,  job )  do 
306-     unless  NaiveDateTime . compare ( time ,  date )  in  [ :lt ,  :eq ]  do 
284+     unless  DateTime . compare ( time ,  date )  in  [ :lt ,  :eq ]  do 
307285      raise  Quantum.ExecutionBroadcaster.JobInPastError 
308286    end 
309287
0 commit comments