@@ -20,7 +20,8 @@ use helium_proto::services::poc_mobile::{
2020 RadioUsageStatsResV1 , ServiceProviderBoostedRewardsBannedRadioIngestReportV1 ,
2121 ServiceProviderBoostedRewardsBannedRadioReqV1 , ServiceProviderBoostedRewardsBannedRadioRespV1 ,
2222 SpeedtestIngestReportV1 , SpeedtestReqV1 , SpeedtestRespV1 , SubscriberLocationIngestReportV1 ,
23- SubscriberLocationReqV1 , SubscriberLocationRespV1 ,
23+ SubscriberLocationReqV1 , SubscriberLocationRespV1 , SubscriberMappingActivityIngestReportV1 ,
24+ SubscriberMappingActivityReqV1 , SubscriberMappingActivityResV1 ,
2425 SubscriberVerifiedMappingEventIngestReportV1 , SubscriberVerifiedMappingEventReqV1 ,
2526 SubscriberVerifiedMappingEventResV1 , UniqueConnectionsIngestReportV1 ,
2627 WifiHeartbeatIngestReportV1 , WifiHeartbeatReqV1 , WifiHeartbeatRespV1 ,
@@ -55,6 +56,7 @@ pub struct GrpcServer<AV> {
5556 hex_usage_stats_event_sink : FileSinkClient < HexUsageStatsIngestReportV1 > ,
5657 radio_usage_stats_event_sink : FileSinkClient < RadioUsageStatsIngestReportV1 > ,
5758 unique_connections_sink : FileSinkClient < UniqueConnectionsIngestReportV1 > ,
59+ subscriber_mapping_activity_sink : FileSinkClient < SubscriberMappingActivityIngestReportV1 > ,
5860 required_network : Network ,
5961 address : SocketAddr ,
6062 api_token : MetadataValue < Ascii > ,
@@ -103,6 +105,7 @@ where
103105 hex_usage_stats_event_sink : FileSinkClient < HexUsageStatsIngestReportV1 > ,
104106 radio_usage_stats_event_sink : FileSinkClient < RadioUsageStatsIngestReportV1 > ,
105107 unique_connections_sink : FileSinkClient < UniqueConnectionsIngestReportV1 > ,
108+ subscriber_mapping_activity_sink : FileSinkClient < SubscriberMappingActivityIngestReportV1 > ,
106109 required_network : Network ,
107110 address : SocketAddr ,
108111 api_token : MetadataValue < Ascii > ,
@@ -121,6 +124,7 @@ where
121124 hex_usage_stats_event_sink,
122125 radio_usage_stats_event_sink,
123126 unique_connections_sink,
127+ subscriber_mapping_activity_sink,
124128 required_network,
125129 address,
126130 api_token,
@@ -478,6 +482,33 @@ where
478482 Ok ( Response :: new ( SubscriberVerifiedMappingEventResV1 { id } ) )
479483 }
480484
485+ async fn submit_subscriber_mapping_activity (
486+ & self ,
487+ request : Request < SubscriberMappingActivityReqV1 > ,
488+ ) -> GrpcResult < SubscriberMappingActivityResV1 > {
489+ let timestamp = Utc :: now ( ) . timestamp_millis ( ) as u64 ;
490+ let event = request. into_inner ( ) ;
491+
492+ custom_tracing:: record_b58 ( "subscriber_id" , & event. subscriber_id ) ;
493+ custom_tracing:: record_b58 ( "pub_key" , & event. carrier_pub_key ) ;
494+
495+ let report = self
496+ . verify_public_key ( & event. carrier_pub_key )
497+ . and_then ( |public_key| self . verify_network ( public_key) )
498+ . and_then ( |public_key| self . verify_signature ( public_key, event) )
499+ . map ( |( _, event) | SubscriberMappingActivityIngestReportV1 {
500+ received_timestamp : timestamp,
501+ report : Some ( event) ,
502+ } ) ?;
503+
504+ _ = self
505+ . subscriber_mapping_activity_sink
506+ . write ( report, [ ] )
507+ . await ;
508+
509+ Ok ( Response :: new ( SubscriberMappingActivityResV1 { timestamp } ) )
510+ }
511+
481512 async fn submit_hex_usage_stats_report (
482513 & self ,
483514 request : Request < HexUsageStatsReqV1 > ,
@@ -690,6 +721,16 @@ pub async fn grpc_server(settings: &Settings) -> Result<()> {
690721 )
691722 . await ?;
692723
724+ let ( subscriber_mapping_activity_sink, subscriber_mapping_activity_server) =
725+ SubscriberMappingActivityIngestReportV1 :: file_sink (
726+ store_base_path,
727+ file_upload. clone ( ) ,
728+ FileSinkCommitStrategy :: Automatic ,
729+ FileSinkRollTime :: Duration ( settings. roll_time ) ,
730+ env ! ( "CARGO_PKG_NAME" ) ,
731+ )
732+ . await ?;
733+
693734 let Some ( api_token) = settings
694735 . token
695736 . as_ref ( )
@@ -715,6 +756,7 @@ pub async fn grpc_server(settings: &Settings) -> Result<()> {
715756 hex_usage_stats_event_sink,
716757 radio_usage_stats_event_sink,
717758 unique_connections_sink,
759+ subscriber_mapping_activity_sink,
718760 settings. network ,
719761 settings. listen_addr ,
720762 api_token,
@@ -741,6 +783,7 @@ pub async fn grpc_server(settings: &Settings) -> Result<()> {
741783 . add_task ( hex_usage_stats_event_server)
742784 . add_task ( radio_usage_stats_event_server)
743785 . add_task ( unique_connections_server)
786+ . add_task ( subscriber_mapping_activity_server)
744787 . add_task ( grpc_server)
745788 . build ( )
746789 . start ( )
0 commit comments