@@ -32,12 +32,20 @@ defmodule PhoenixContainerExample.Autoscaling do
3232 def trigger_event ( event_name , opts \\ [ ] ) do
3333 Logger . debug ( "event: #{ event_name } " )
3434
35- with { :ok , events } <- lookup_event ( event_name , opts ) ,
36- event = events ,
37- aws_data = map_keys ( event ) ,
38- { :ok , data } <- rate_limit ( aws_data , opts ) do
39- :ok = aws_request ( request_data )
40- :ok
35+ case lookup_event ( event_name , opts ) do
36+ { :ok , events } ->
37+ Enum . reduce_while ( events , :ok , fn event , acc ->
38+ case acc do
39+ :ok ->
40+ process_event ( event , opts )
41+
42+ error ->
43+ { :halt , error }
44+ end
45+ end )
46+
47+ { :error , :unknown_event } ->
48+ { :error , :unknown_event }
4149 end
4250 end
4351
@@ -55,13 +63,23 @@ defmodule PhoenixContainerExample.Autoscaling do
5563 end
5664 end
5765
66+ @ spec process_event ( map ( ) , keyword ( ) ) :: :ok | { :error , :rate_limit | term ( ) }
67+ def process_event ( event , opts ) do
68+ with { :ok , aws_data } <- map_keys ( event ) ,
69+ { :ok , data } <- rate_limit ( aws_data , opts ) ,
70+ do: aws_request ( data )
71+ end
72+
5873 # Convert Elixir-style keys in the config to PascalCase format AWS expects.
59- @ spec map_keys ( map ( ) ) :: map ( )
74+ @ spec map_keys ( map ( ) ) :: { :ok , map ( ) }
6075 defp map_keys ( data ) do
61- for { key , value } <- data , into: % { } do
62- camel_key = key |> to_string ( ) |> Macro . camelize ( )
63- { camel_key , value }
64- end
76+ result =
77+ for { key , value } <- data , into: % { } do
78+ camel_key = key |> to_string ( ) |> Macro . camelize ( )
79+ { camel_key , value }
80+ end
81+
82+ { :ok , result }
6583 end
6684
6785 @ spec rate_limit ( map ( ) , keyword ( ) ) :: { :ok , map ( ) } | { :error , :rate_limit }
0 commit comments