Skip to content

Commit

Permalink
Support new location source field on wifi heartbeats (#833)
Browse files Browse the repository at this point in the history
* Support new location source field on wifi heartbeats

* fix imports

* Reset proto back to master
  • Loading branch information
bbalser authored Aug 12, 2024
1 parent bcfc9f0 commit 024dccb
Show file tree
Hide file tree
Showing 9 changed files with 45 additions and 14 deletions.
8 changes: 4 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion file_store/src/wifi_heartbeat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ use crate::{
};
use chrono::{DateTime, Utc};
use helium_crypto::PublicKeyBinary;
use helium_proto::services::poc_mobile::{WifiHeartbeatIngestReportV1, WifiHeartbeatReqV1};
use helium_proto::services::poc_mobile::{
LocationSource, WifiHeartbeatIngestReportV1, WifiHeartbeatReqV1,
};
use serde::{Deserialize, Serialize};
use uuid::Uuid;

Expand All @@ -17,6 +19,7 @@ pub struct WifiHeartbeat {
pub location_validation_timestamp: Option<DateTime<Utc>>,
pub coverage_object: Vec<u8>,
pub timestamp: DateTime<Utc>,
pub location_source: LocationSource,
}

impl WifiHeartbeat {
Expand Down Expand Up @@ -47,6 +50,7 @@ impl TryFrom<WifiHeartbeatReqV1> for WifiHeartbeat {
} else {
v.location_validation_timestamp.to_timestamp().ok()
};
let location_source = v.location_source();
Ok(Self {
pubkey: v.pub_key.into(),
lat: v.lat,
Expand All @@ -55,6 +59,7 @@ impl TryFrom<WifiHeartbeatReqV1> for WifiHeartbeat {
coverage_object: v.coverage_object,
timestamp: v.timestamp.to_timestamp()?,
location_validation_timestamp,
location_source,
})
}
}
Expand Down Expand Up @@ -107,6 +112,7 @@ mod tests {
coverage_object: vec![],
timestamp: Utc::now().timestamp() as u64,
location_validation_timestamp: now as u64,
location_source: LocationSource::Skyhook.into(),
signature: vec![],
}),
};
Expand All @@ -120,6 +126,7 @@ mod tests {
coverage_object: vec![],
timestamp: Utc::now().timestamp() as u64,
location_validation_timestamp: 0,
location_source: LocationSource::Gps.into(),
signature: vec![],
}),
};
Expand Down
7 changes: 6 additions & 1 deletion mobile_verifier/src/heartbeats/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use file_store::{
use futures::stream::{Stream, StreamExt};
use h3o::{CellIndex, LatLng};
use helium_crypto::PublicKeyBinary;
use helium_proto::services::poc_mobile as proto;
use helium_proto::services::poc_mobile::{self as proto, LocationSource};
use retainer::Cache;
use rust_decimal::{prelude::ToPrimitive, Decimal};
use rust_decimal_macros::dec;
Expand Down Expand Up @@ -207,6 +207,7 @@ pub struct Heartbeat {
pub lon: f64,
pub coverage_object: Option<Uuid>,
pub location_validation_timestamp: Option<DateTime<Utc>>,
pub location_source: LocationSource,
pub timestamp: DateTime<Utc>,
}

Expand Down Expand Up @@ -254,6 +255,7 @@ impl From<CbrsHeartbeatIngestReport> for Heartbeat {
lat: value.report.lat,
lon: value.report.lon,
location_validation_timestamp: None,
location_source: LocationSource::Gps,
timestamp: value.received_timestamp,
}
}
Expand All @@ -270,6 +272,7 @@ impl From<WifiHeartbeatIngestReport> for Heartbeat {
lat: value.report.lat,
lon: value.report.lon,
location_validation_timestamp: value.report.location_validation_timestamp,
location_source: value.report.location_source,
timestamp: value.received_timestamp,
}
}
Expand Down Expand Up @@ -629,6 +632,7 @@ impl ValidatedHeartbeat {
.location_validation_timestamp
.map_or(0, |v| v.timestamp() as u64),
distance_to_asserted: self.distance_to_asserted.map_or(0, |v| v as u64),
location_source: self.heartbeat.location_source.into(),
..Default::default()
},
&[("validity", self.validity.as_str_name())],
Expand Down Expand Up @@ -796,6 +800,7 @@ mod test {
cbsd_id: None,
coverage_object: Some(coverage_object),
location_validation_timestamp: None,
location_source: LocationSource::Skyhook,
},
validity: Default::default(),
location_trust_score_multiplier: dec!(1.0),
Expand Down
4 changes: 3 additions & 1 deletion mobile_verifier/tests/integrations/heartbeats.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use chrono::{DateTime, Utc};
use futures_util::TryStreamExt;
use helium_crypto::PublicKeyBinary;
use helium_proto::services::poc_mobile::HeartbeatValidity;
use helium_proto::services::poc_mobile::{HeartbeatValidity, LocationSource};
use mobile_verifier::{
cell_type::CellType,
heartbeats::{HbType, Heartbeat, HeartbeatReward, ValidatedHeartbeat},
Expand All @@ -27,6 +27,7 @@ async fn test_save_wifi_heartbeat(pool: PgPool) -> anyhow::Result<()> {
coverage_object: Some(coverage_object),
location_validation_timestamp: None,
timestamp: "2023-08-23 00:00:00.000000000 UTC".parse().unwrap(),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::SercommIndoor,
distance_to_asserted: Some(1000), // Cannot be null
Expand Down Expand Up @@ -64,6 +65,7 @@ async fn test_save_cbrs_heartbeat(pool: PgPool) -> anyhow::Result<()> {
coverage_object: Some(coverage_object),
location_validation_timestamp: None,
timestamp: "2023-08-23 00:00:00.000000000 UTC".parse().unwrap(),
location_source: LocationSource::Gps,
},
cell_type: CellType::SercommIndoor,
distance_to_asserted: None,
Expand Down
13 changes: 11 additions & 2 deletions mobile_verifier/tests/integrations/hex_boosting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ use helium_crypto::PublicKeyBinary;
use helium_proto::services::{
poc_lora::UnallocatedRewardType,
poc_mobile::{
CoverageObjectValidity, HeartbeatValidity, RadioRewardV2, SeniorityUpdateReason,
SignalLevel, UnallocatedReward,
CoverageObjectValidity, HeartbeatValidity, LocationSource, RadioRewardV2,
SeniorityUpdateReason, SignalLevel, UnallocatedReward,
},
};
use hextree::Cell;
Expand Down Expand Up @@ -1393,6 +1393,7 @@ async fn seed_heartbeats_v2(
coverage_object: Some(cov_obj_1.coverage_object.uuid),
location_validation_timestamp: Some(ts - ChronoDuration::hours(24)),
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::NovaGenericWifiIndoor,
distance_to_asserted: Some(10),
Expand Down Expand Up @@ -1420,6 +1421,7 @@ async fn seed_heartbeats_v2(
coverage_object: Some(cov_obj_2.coverage_object.uuid),
location_validation_timestamp: Some(ts - ChronoDuration::hours(24)),
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::NovaGenericWifiIndoor,
distance_to_asserted: Some(10),
Expand Down Expand Up @@ -1447,6 +1449,7 @@ async fn seed_heartbeats_v2(
coverage_object: Some(cov_obj_3.coverage_object.uuid),
location_validation_timestamp: Some(ts - ChronoDuration::hours(24)),
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::NovaGenericWifiIndoor,
distance_to_asserted: Some(10),
Expand Down Expand Up @@ -1502,6 +1505,7 @@ async fn seed_heartbeats_with_location_trust(
coverage_object: Some(cov_obj_1.coverage_object.uuid),
location_validation_timestamp: Some(ts - ChronoDuration::hours(24)),
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::NovaGenericWifiIndoor,
distance_to_asserted: Some(hs_1_location.meters),
Expand Down Expand Up @@ -1529,6 +1533,7 @@ async fn seed_heartbeats_with_location_trust(
coverage_object: Some(cov_obj_2.coverage_object.uuid),
location_validation_timestamp: Some(ts - ChronoDuration::hours(24)),
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::NovaGenericWifiIndoor,
distance_to_asserted: Some(hs_2_location.meters),
Expand Down Expand Up @@ -1556,6 +1561,7 @@ async fn seed_heartbeats_with_location_trust(
coverage_object: Some(cov_obj_3.coverage_object.uuid),
location_validation_timestamp: Some(ts - ChronoDuration::hours(24)),
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::NovaGenericWifiIndoor,
distance_to_asserted: Some(hs_3_location.meters),
Expand Down Expand Up @@ -1604,6 +1610,7 @@ async fn seed_heartbeats_v4(
coverage_object: Some(cov_obj_1.coverage_object.uuid),
location_validation_timestamp: Some(ts - ChronoDuration::hours(24)),
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::NovaGenericWifiIndoor,
distance_to_asserted: Some(10),
Expand Down Expand Up @@ -1631,6 +1638,7 @@ async fn seed_heartbeats_v4(
coverage_object: Some(cov_obj_2.coverage_object.uuid),
location_validation_timestamp: Some(ts - ChronoDuration::hours(24)),
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::NovaGenericWifiIndoor,
distance_to_asserted: Some(10),
Expand Down Expand Up @@ -1659,6 +1667,7 @@ async fn seed_heartbeats_v4(
coverage_object: Some(cov_obj_3.coverage_object.uuid),
location_validation_timestamp: Some(ts - ChronoDuration::hours(24)),
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::SercommOutdoor,
distance_to_asserted: Some(1),
Expand Down
3 changes: 2 additions & 1 deletion mobile_verifier/tests/integrations/last_location.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use chrono::{DateTime, Duration, Utc};
use file_store::coverage::RadioHexSignalLevel;
use h3o::LatLng;
use helium_crypto::PublicKeyBinary;
use helium_proto::services::poc_mobile as proto;
use helium_proto::services::poc_mobile::{self as proto, LocationSource};
use mobile_verifier::{
coverage::{CoverageObject, CoverageObjectCache},
geofence::GeofenceValidator,
Expand Down Expand Up @@ -285,6 +285,7 @@ impl HeartbeatBuilder {
coverage_object: Some(self.coverage_object.coverage_object.uuid),
location_validation_timestamp: self.location_validation_timestamp,
timestamp: self.timestamp.unwrap_or(Utc::now()),
location_source: LocationSource::Skyhook,
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion mobile_verifier/tests/integrations/modeled_coverage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use h3o::{CellIndex, LatLng};
use helium_crypto::PublicKeyBinary;
use helium_proto::services::{
mobile_config::NetworkKeyRole,
poc_mobile::{CoverageObjectValidity, SignalLevel},
poc_mobile::{CoverageObjectValidity, LocationSource, SignalLevel},
};
use hextree::Cell;
use mobile_config::boosted_hex_info::{BoostedHexInfo, BoostedHexes};
Expand Down Expand Up @@ -1395,6 +1395,7 @@ async fn ensure_lower_trust_score_for_distant_heartbeats(pool: PgPool) -> anyhow
location_validation_timestamp: Some(DateTime::<Utc>::MIN_UTC),
operation_mode: true,
coverage_object: Vec::from(coverage_object_uuid.into_bytes()),
location_source: LocationSource::Skyhook,
},
received_timestamp: Utc::now(),
};
Expand Down
7 changes: 5 additions & 2 deletions mobile_verifier/tests/integrations/rewarder_poc_dc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use file_store::{
};
use helium_crypto::PublicKeyBinary;
use helium_proto::services::poc_mobile::{
CoverageObjectValidity, GatewayReward, HeartbeatValidity, RadioRewardV2, SeniorityUpdateReason,
SignalLevel,
CoverageObjectValidity, GatewayReward, HeartbeatValidity, LocationSource, RadioRewardV2,
SeniorityUpdateReason, SignalLevel,
};
use mobile_verifier::{
cell_type::CellType,
Expand Down Expand Up @@ -175,6 +175,7 @@ async fn seed_heartbeats(
coverage_object: Some(cov_obj_1.coverage_object.uuid),
location_validation_timestamp: None,
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Gps,
},
cell_type: CellType::SercommIndoor,
distance_to_asserted: None,
Expand Down Expand Up @@ -203,6 +204,7 @@ async fn seed_heartbeats(
coverage_object: Some(cov_obj_2.coverage_object.uuid),
location_validation_timestamp: None,
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Gps,
},
cell_type: CellType::SercommOutdoor,
distance_to_asserted: None,
Expand Down Expand Up @@ -230,6 +232,7 @@ async fn seed_heartbeats(
coverage_object: Some(cov_obj_3.coverage_object.uuid),
location_validation_timestamp: Some(ts - ChronoDuration::hours(24)),
timestamp: ts + ChronoDuration::hours(n),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::NovaGenericWifiIndoor,
distance_to_asserted: Some(10),
Expand Down
5 changes: 4 additions & 1 deletion mobile_verifier/tests/integrations/seniority.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use chrono::{DateTime, Utc};
use helium_proto::services::poc_mobile::{HeartbeatValidity, SeniorityUpdateReason};
use helium_proto::services::poc_mobile::{
HeartbeatValidity, LocationSource, SeniorityUpdateReason,
};
use mobile_verifier::cell_type::CellType;
use mobile_verifier::heartbeats::{HbType, Heartbeat, ValidatedHeartbeat};
use mobile_verifier::seniority::{Seniority, SeniorityUpdate, SeniorityUpdateAction};
Expand All @@ -23,6 +25,7 @@ async fn test_seniority_updates(pool: PgPool) -> anyhow::Result<()> {
coverage_object: Some(coverage_object),
location_validation_timestamp: None,
timestamp: "2023-08-23 00:00:00.000000000 UTC".parse().unwrap(),
location_source: LocationSource::Skyhook,
},
cell_type: CellType::SercommIndoor,
distance_to_asserted: None,
Expand Down

0 comments on commit 024dccb

Please sign in to comment.