Skip to content

Commit

Permalink
Support new location source field on wifi heartbeats
Browse files Browse the repository at this point in the history
  • Loading branch information
bbalser committed Jul 17, 2024
1 parent fe83fa3 commit c257969
Show file tree
Hide file tree
Showing 10 changed files with 79 additions and 35 deletions.
50 changes: 31 additions & 19 deletions Cargo.lock

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

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ helium-lib = { git = "https://github.com/helium/helium-wallet-rs.git", branch =
hextree = { git = "https://github.com/jaykickliter/HexTree", branch = "main", features = [
"disktree",
] }
helium-proto = { git = "https://github.com/helium/proto", branch = "master", features = [
helium-proto = { git = "https://github.com/helium/proto", branch = "bbalser/wifi-location-source", features = [
"services",
] }
solana-client = "1.18"
Expand All @@ -82,7 +82,7 @@ reqwest = { version = "0", default-features = false, features = [
"json",
"rustls-tls",
] }
beacon = { git = "https://github.com/helium/proto", branch = "master" }
beacon = { git = "https://github.com/helium/proto", branch = "bbalser/wifi-location-source" }
humantime = "2"
humantime-serde = "1"
metrics = ">=0.22"
Expand Down
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 @@ -620,6 +623,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 @@ -787,6 +791,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
Loading

0 comments on commit c257969

Please sign in to comment.