@@ -24,17 +24,17 @@ defmodule Helix.Event.Loggable.Flow do
2424 alias Helix.Event
2525 alias Helix.Event.Loggable.Utils , as: LoggableUtils
2626 alias Helix.Entity.Model.Entity
27+ alias Helix.Log.Model.Log
28+ alias Helix.Log.Model.LogType
2729 alias Helix.Log.Action.Log , as: LogAction
2830 alias Helix.Network.Model.Bounce
2931 alias Helix.Network.Model.Network
3032 alias Helix.Network.Model.Tunnel
3133 alias Helix.Network.Query.Bounce , as: BounceQuery
3234 alias Helix.Server.Model.Server
3335
34- @ type log_entry ::
35- { Server . id , Entity . id , log_msg }
36-
37- @ type log_msg :: String . t
36+ @ typep log_entry ::
37+ { Server . id , Entity . id , Log . info }
3838
3939 @ doc """
4040 Top-level macro for events wanting to implement the Loggable protocol.
@@ -66,13 +66,12 @@ defmodule Helix.Event.Loggable.Flow do
6666 """
6767 defmacro log_map ( map ) do
6868 quote do
69- map = unquote ( map )
69+ unquote ( map )
7070
7171 # Put default values (if not specified)
72- map
7372 |> Map . put_new ( :network_id , nil )
7473 |> Map . put_new ( :endpoint_id , nil )
75- |> Map . put_new ( :msg_endpoint , nil )
74+ |> Map . put_new ( :data_both , % { } )
7675 |> Map . put_new ( :opts , % { } )
7776 end
7877 end
@@ -119,8 +118,11 @@ defmodule Helix.Event.Loggable.Flow do
119118 gateway_id: gateway_id ,
120119 endpoint_id: endpoint_id ,
121120 network_id: network_id ,
122- msg_gateway: msg_gateway ,
123- msg_endpoint: msg_endpoint ,
121+ type_gateway: type_gateway ,
122+ data_gateway: data_gateway ,
123+ type_endpoint: type_endpoint ,
124+ data_endpoint: data_endpoint ,
125+ data_both: data_both ,
124126 opts: opts
125127 } )
126128 do
@@ -147,25 +149,36 @@ defmodule Helix.Event.Loggable.Flow do
147149 end
148150 |> customize_last_ip ( opts )
149151
150- msg_gateway = String . replace ( msg_gateway , "$first_ip" , first_ip )
151- msg_endpoint = String . replace ( msg_endpoint , "$last_ip" , last_ip )
152+ data_gateway =
153+ data_gateway
154+ |> replace_ips ( first_ip , last_ip )
155+ |> Map . merge ( data_both )
156+
157+ data_endpoint =
158+ data_endpoint
159+ |> replace_ips ( first_ip , last_ip )
160+ |> Map . merge ( data_both )
152161
153- log_gateway = build_entry ( gateway_id , entity_id , msg_gateway )
154- log_endpoint = build_entry ( endpoint_id , entity_id , msg_endpoint )
162+ log_gateway = { type_gateway , LogType . new ( type_gateway , data_gateway ) }
163+ log_endpoint = { type_endpoint , LogType . new ( type_endpoint , data_endpoint ) }
155164
156- bounce_logs =
165+ entry_gateway = build_entry ( gateway_id , entity_id , log_gateway )
166+ entry_endpoint = build_entry ( endpoint_id , entity_id , log_endpoint )
167+
168+ bounce_entries =
157169 if skip_bounce? do
158170 [ ]
159171 else
160172 build_bounce_entries (
161173 bounce ,
162174 { gateway_id , network_id , gateway_ip } ,
163175 { endpoint_id , network_id , endpoint_ip } ,
164- entity_id
176+ entity_id ,
177+ network_id
165178 )
166179 end
167180
168- [ log_gateway , log_endpoint , bounce_logs ] |> List . flatten ( )
181+ [ entry_gateway , entry_endpoint , bounce_entries ] |> List . flatten ( )
169182 end
170183
171184 @ doc """
@@ -178,10 +191,13 @@ defmodule Helix.Event.Loggable.Flow do
178191 event: _ ,
179192 server_id: server_id ,
180193 entity_id: entity_id ,
181- msg_server: msg_server
194+ type: type ,
195+ data: data
182196 } )
183197 do
184- [ build_entry ( server_id , entity_id , msg_server ) ]
198+ log_type = LogType . new ( type , data )
199+
200+ [ build_entry ( server_id , entity_id , { type , log_type } ) ]
185201 end
186202
187203 @ doc """
@@ -249,7 +265,7 @@ defmodule Helix.Event.Loggable.Flow do
249265 defdelegate format_ip ( ip ) ,
250266 to: LoggableUtils
251267
252- @ spec build_entry ( Server . id , Entity . id , log_msg ) ::
268+ @ spec build_entry ( Server . id , Entity . id , Log . info ) ::
253269 log_entry
254270 @ doc """
255271 Returns data required to insert the log
@@ -263,16 +279,23 @@ defmodule Helix.Event.Loggable.Flow do
263279
264280 Messages follow the format "Connection bounced from hop (n-1) to (n+1)"
265281 """
266- def build_bounce_entries ( nil , _ , _ , _ ) ,
282+ def build_bounce_entries ( nil , _ , _ , _ , _ ) ,
267283 do: [ ]
268- def build_bounce_entries ( bounce_id = % Bounce.ID { } , gateway , endpoint , entity ) do
284+ def build_bounce_entries (
285+ bounce_id = % Bounce.ID { } , gateway , endpoint , entity , network
286+ ) do
269287 bounce_id
270288 |> BounceQuery . fetch ( )
271- |> build_bounce_entries ( gateway , endpoint , entity )
289+ |> build_bounce_entries ( gateway , endpoint , entity , network )
272290 end
291+
273292 def build_bounce_entries (
274- bounce = % Bounce { } , gateway = { _ , _ , _ } , endpoint = { _ , _ , _ } , entity_id )
275- do
293+ bounce = % Bounce { } ,
294+ gateway = { _ , _ , _ } ,
295+ endpoint = { _ , _ , _ } ,
296+ entity_id ,
297+ network_id
298+ ) do
276299 full_path = [ gateway | bounce . links ] ++ [ endpoint ]
277300 length_hop = length ( full_path )
278301
@@ -298,8 +321,11 @@ defmodule Helix.Event.Loggable.Flow do
298321 { _ , _ , ip_prev } = bounce_map [ idx - 1 ]
299322 { _ , _ , ip_next } = bounce_map [ idx + 1 ]
300323
301- msg = "Connection bounced from #{ ip_prev } to #{ ip_next } "
302- entry = build_entry ( server_id , entity_id , msg )
324+ data = % { ip_prev: ip_prev , ip_next: ip_next , network_id: network_id }
325+ # TODO
326+ log_type = { :connection_bounced , LogType . new ( :connection_bounced , data ) }
327+
328+ entry = build_entry ( server_id , entity_id , log_type )
303329
304330 { idx + 1 , acc ++ [ entry ] }
305331 end
@@ -321,8 +347,8 @@ defmodule Helix.Event.Loggable.Flow do
321347 do: save ( [ log_entry ] )
322348 def save ( logs ) do
323349 logs
324- |> Enum . map ( fn { server_id , entity_id , msg } ->
325- { :ok , _ , events } = LogAction . create ( server_id , entity_id , msg )
350+ |> Enum . map ( fn { server_id , entity_id , log_type } ->
351+ { :ok , _ , events } = LogAction . create ( server_id , entity_id , log_type )
326352 events
327353 end )
328354 |> List . flatten ( )
@@ -378,4 +404,24 @@ defmodule Helix.Event.Loggable.Flow do
378404 do: censor_ip ( ip )
379405 defp customize_last_ip ( ip , _ ) ,
380406 do: ip
407+
408+ defp replace_ips ( params , first_ip , last_ip ) do
409+ params
410+ |> Enum . reduce ( [ ] , fn { k , v } , acc ->
411+ new_v =
412+ case v do
413+ "$first_ip" ->
414+ first_ip
415+
416+ "$last_ip" ->
417+ last_ip
418+
419+ _ ->
420+ v
421+ end
422+
423+ [ { k , new_v } | acc ]
424+ end )
425+ |> Enum . into ( % { } )
426+ end
381427end
0 commit comments