@@ -26,6 +26,7 @@ defmodule Astarte.DataUpdaterPlant.DataUpdater.Impl do
26
26
alias Astarte.DataUpdaterPlant.DataUpdater.State
27
27
alias Astarte.Core.Triggers.DataTrigger
28
28
alias Astarte.Core.Triggers.SimpleTriggersProtobuf.DataTrigger , as: ProtobufDataTrigger
29
+ alias Astarte.Core.Triggers.SimpleTriggersProtobuf.DeviceTrigger , as: ProtobufDeviceTrigger
29
30
alias Astarte.Core.Triggers.SimpleTriggersProtobuf.Utils , as: SimpleTriggersProtobufUtils
30
31
alias Astarte.DataAccess.Data
31
32
alias Astarte.DataAccess.Database
@@ -66,7 +67,6 @@ defmodule Astarte.DataUpdaterPlant.DataUpdater.Impl do
66
67
device_triggers: % { } ,
67
68
data_triggers: % { } ,
68
69
volatile_triggers: [ ] ,
69
- introspection_triggers: % { } ,
70
70
interface_exchanged_bytes: % { } ,
71
71
interface_exchanged_msgs: % { } ,
72
72
last_seen_message: 0 ,
@@ -1078,14 +1078,14 @@ defmodule Astarte.DataUpdaterPlant.DataUpdater.Impl do
1078
1078
1079
1079
any_interface_id = SimpleTriggersProtobufUtils . any_interface_object_id ( )
1080
1080
1081
- % { introspection_triggers: introspection_triggers } =
1081
+ % { device_triggers: device_triggers } =
1082
1082
populate_triggers_for_object! ( new_state , db_client , any_interface_id , :any_interface )
1083
1083
1084
1084
realm = new_state . realm
1085
1085
device_id_string = Device . encode_device_id ( new_state . device_id )
1086
1086
1087
1087
on_introspection_targets =
1088
- Map . get ( introspection_triggers , { :on_incoming_introspection , :any_interface } , [ ] )
1088
+ Map . get ( device_triggers , { :on_incoming_introspection , :any_interface } , [ ] )
1089
1089
1090
1090
TriggersHandler . incoming_introspection (
1091
1091
on_introspection_targets ,
@@ -1129,8 +1129,9 @@ defmodule Astarte.DataUpdaterPlant.DataUpdater.Impl do
1129
1129
1130
1130
minor = Map . get ( db_introspection_minor_map , interface_name )
1131
1131
1132
+ # TODO: move away from :any_interface, I guess
1132
1133
interface_added_targets =
1133
- Map . get ( introspection_triggers , { :on_interface_added , :any_interface } , [ ] )
1134
+ Map . get ( device_triggers , { :on_interface_added , :any_interface } , [ ] )
1134
1135
1135
1136
TriggersHandler . interface_added (
1136
1137
interface_added_targets ,
@@ -1159,8 +1160,9 @@ defmodule Astarte.DataUpdaterPlant.DataUpdater.Impl do
1159
1160
:ok
1160
1161
end
1161
1162
1163
+ # TODO: move away from :any_interface, I guess
1162
1164
interface_removed_targets =
1163
- Map . get ( introspection_triggers , { :on_interface_deleted , :any_interface } , [ ] )
1165
+ Map . get ( device_triggers , { :on_interface_deleted , :any_interface } , [ ] )
1164
1166
1165
1167
TriggersHandler . interface_removed (
1166
1168
interface_removed_targets ,
@@ -1495,9 +1497,6 @@ defmodule Astarte.DataUpdaterPlant.DataUpdater.Impl do
1495
1497
{ { :error , reason } , state }
1496
1498
end
1497
1499
1498
- { :introspection_trigger , _ } ->
1499
- { :ok , new_state }
1500
-
1501
1500
{ :device_trigger , _ } ->
1502
1501
{ :ok , load_trigger ( new_state , trigger , target ) }
1503
1502
end
@@ -1611,30 +1610,6 @@ defmodule Astarte.DataUpdaterPlant.DataUpdater.Impl do
1611
1610
{ :ok , % { state | device_triggers: updated_device_triggers } }
1612
1611
end
1613
1612
1614
- defp delete_volatile_trigger (
1615
- state ,
1616
- { _obj_id , _obj_type } ,
1617
- { { :introspection_trigger , proto_buf_introspection_trigger } , trigger_target }
1618
- ) do
1619
- introspection_triggers = state . introspection_triggers
1620
-
1621
- event_type = EventTypeUtils . pretty_change_type ( proto_buf_introspection_trigger . change_type )
1622
-
1623
- introspection_trigger_key =
1624
- { event_type , proto_buf_introspection_trigger . match_interface || :any_interface }
1625
-
1626
- updated_targets_list =
1627
- Map . get ( introspection_triggers , introspection_trigger_key , [ ] )
1628
- |> Enum . reject ( fn target ->
1629
- target == trigger_target
1630
- end )
1631
-
1632
- updated_introspection_triggers =
1633
- Map . put ( introspection_triggers , introspection_trigger_key , updated_targets_list )
1634
-
1635
- { :ok , % { state | introspection_triggers: updated_introspection_triggers } }
1636
- end
1637
-
1638
1613
defp reload_groups_on_expiry ( state , timestamp , db_client ) do
1639
1614
if state . last_groups_refresh + @ groups_lifespan_decimicroseconds <= timestamp do
1640
1615
{ :ok , groups } = Queries . get_device_groups ( db_client , state . device_id )
@@ -2161,49 +2136,52 @@ defmodule Astarte.DataUpdaterPlant.DataUpdater.Impl do
2161
2136
end
2162
2137
2163
2138
# TODO: implement on_incoming_introspection, on_interface_minor_updated
2164
- defp load_trigger (
2165
- state ,
2166
- { :introspection_trigger , proto_buf_introspection_trigger } ,
2167
- trigger_target
2168
- ) do
2169
- introspection_triggers = state . introspection_triggers
2170
-
2171
- event_type = EventTypeUtils . pretty_change_type ( proto_buf_introspection_trigger . change_type )
2172
-
2173
- introspection_trigger_key =
2174
- { event_type , proto_buf_introspection_trigger . match_interface || :any_interface }
2175
-
2176
- existing_trigger_targets = Map . get ( introspection_triggers , introspection_trigger_key , [ ] )
2177
-
2178
- new_targets = [ trigger_target | existing_trigger_targets ]
2179
-
2180
- next_introspection_triggers =
2181
- Map . put ( introspection_triggers , introspection_trigger_key , new_targets )
2182
-
2183
- # Register the new target
2184
- :ok = TriggersHandler . register_target ( trigger_target )
2185
-
2186
- Map . put ( state , :introspection_triggers , next_introspection_triggers )
2187
- end
2188
-
2189
2139
# TODO: implement on_empty_cache_received
2190
2140
defp load_trigger ( state , { :device_trigger , proto_buf_device_trigger } , trigger_target ) do
2191
2141
device_triggers = state . device_triggers
2192
2142
2143
+ # device event type is one of
2144
+ # :on_device_connected, :on_device_disconnected, :on_device_empty_cache_received, :on_device_error,
2145
+ # :on_incoming_introspection, :on_interface_added, :on_interface_removed, :on_interface_minor_updated
2193
2146
event_type =
2194
2147
EventTypeUtils . pretty_device_event_type ( proto_buf_device_trigger . device_event_type )
2195
2148
2196
- existing_trigger_targets = Map . get ( device_triggers , event_type , [ ] )
2149
+ # introspection triggers have a pair as key, device ones do not
2150
+ # TODO make a beautiful function
2151
+ trigger_key =
2152
+ case event_type do
2153
+ :on_incoming_introspection ->
2154
+ { event_type , introspection_trigger_interface ( proto_buf_device_trigger ) }
2155
+
2156
+ :on_interface_added ->
2157
+ { event_type , introspection_trigger_interface ( proto_buf_device_trigger ) }
2158
+
2159
+ :on_interface_removed ->
2160
+ { event_type , introspection_trigger_interface ( proto_buf_device_trigger ) }
2161
+
2162
+ :on_interface_minor_updated ->
2163
+ { event_type , introspection_trigger_interface ( proto_buf_device_trigger ) }
2164
+
2165
+ _ ->
2166
+ event_type
2167
+ end
2168
+
2169
+ existing_trigger_targets = Map . get ( device_triggers , trigger_key , [ ] )
2197
2170
2198
2171
new_targets = [ trigger_target | existing_trigger_targets ]
2199
2172
2200
2173
# Register the new target
2201
2174
:ok = TriggersHandler . register_target ( trigger_target )
2202
2175
2203
- next_device_triggers = Map . put ( device_triggers , event_type , new_targets )
2176
+ next_device_triggers = Map . put ( device_triggers , trigger_key , new_targets )
2204
2177
Map . put ( state , :device_triggers , next_device_triggers )
2205
2178
end
2206
2179
2180
+ # TODO
2181
+ # defp introspection_tigger_interface(%ProtobufDeviceTrigger{match_interface: interface}),
2182
+ # do: interface
2183
+ defp introspection_trigger_interface ( % ProtobufDeviceTrigger { } ) , do: :any_interface
2184
+
2207
2185
defp resolve_path ( path , interface_descriptor , mappings ) do
2208
2186
case interface_descriptor . aggregation do
2209
2187
:individual ->
0 commit comments