mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-03-23 04:25:30 +00:00
Add get_ and update_device to fuota storage + add return_msg.
The return_msg (text) field can be used to capture errors, e.g. when the end-device failed to setup the multicast-group.
This commit is contained in:
parent
e75b62f335
commit
b1e6c97942
@ -31,11 +31,11 @@ create table fuota_deployment_device (
|
||||
dev_eui bytea not null references device on delete cascade,
|
||||
created_at timestamp with time zone not null,
|
||||
updated_at timestamp with time zone not null,
|
||||
|
||||
mc_group_setup_completed_at timestamp with time zone null,
|
||||
mc_session_completed_at timestamp with time zone null,
|
||||
frag_session_setup_completed_at timestamp with time zone null,
|
||||
frag_status_completed_at timestamp with time zone null,
|
||||
return_msg text not null,
|
||||
|
||||
primary key (fuota_deployment_id, dev_eui)
|
||||
);
|
||||
|
@ -31,11 +31,11 @@ create table fuota_deployment_device (
|
||||
dev_eui blob not null references device on delete cascade,
|
||||
created_at datetime not null,
|
||||
updated_at datetime not null,
|
||||
|
||||
mc_group_setup_completed_at datetime null,
|
||||
mc_session_completed_at datetime null,
|
||||
frag_session_setup_completed_at datetime null,
|
||||
frag_status_completed_at datetime null,
|
||||
return_msg text not null,
|
||||
|
||||
primary key (fuota_deployment_id, dev_eui)
|
||||
);
|
||||
|
@ -101,6 +101,7 @@ pub struct FuotaDeploymentDevice {
|
||||
pub mc_session_completed_at: Option<DateTime<Utc>>,
|
||||
pub frag_session_setup_completed_at: Option<DateTime<Utc>>,
|
||||
pub frag_status_completed_at: Option<DateTime<Utc>>,
|
||||
pub return_msg: String,
|
||||
}
|
||||
|
||||
impl Default for FuotaDeploymentDevice {
|
||||
@ -116,6 +117,7 @@ impl Default for FuotaDeploymentDevice {
|
||||
mc_session_completed_at: None,
|
||||
frag_session_setup_completed_at: None,
|
||||
frag_status_completed_at: None,
|
||||
return_msg: "".into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -304,7 +306,7 @@ pub async fn add_devices(fuota_deployment_id: Uuid, dev_euis: Vec<EUI64>) -> Res
|
||||
let res = diesel::insert_into(fuota_deployment_device::table)
|
||||
.values(&FuotaDeploymentDevice {
|
||||
fuota_deployment_id: fuota_deployment_id.into(),
|
||||
dev_eui: dev_eui,
|
||||
dev_eui,
|
||||
..Default::default()
|
||||
})
|
||||
.execute(&mut get_async_db_conn().await?)
|
||||
@ -349,6 +351,39 @@ pub async fn get_devices(
|
||||
.map_err(|e| Error::from_diesel(e, "".into()))
|
||||
}
|
||||
|
||||
pub async fn get_device(
|
||||
fuota_deployment_id: Uuid,
|
||||
dev_eui: EUI64,
|
||||
) -> Result<FuotaDeploymentDevice, Error> {
|
||||
fuota_deployment_device::dsl::fuota_deployment_device
|
||||
.find((&fields::Uuid::from(fuota_deployment_id), &dev_eui))
|
||||
.first(&mut get_async_db_conn().await?)
|
||||
.await
|
||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))
|
||||
}
|
||||
|
||||
pub async fn update_device(d: FuotaDeploymentDevice) -> Result<FuotaDeploymentDevice, Error> {
|
||||
let d: FuotaDeploymentDevice = diesel::update(
|
||||
fuota_deployment_device::dsl::fuota_deployment_device
|
||||
.find((&d.fuota_deployment_id, &d.dev_eui)),
|
||||
)
|
||||
.set((
|
||||
fuota_deployment_device::updated_at.eq(Utc::now()),
|
||||
fuota_deployment_device::mc_group_setup_completed_at.eq(&d.mc_group_setup_completed_at),
|
||||
fuota_deployment_device::mc_session_completed_at.eq(&d.mc_session_completed_at),
|
||||
fuota_deployment_device::frag_session_setup_completed_at
|
||||
.eq(&d.frag_session_setup_completed_at),
|
||||
fuota_deployment_device::frag_status_completed_at.eq(&d.frag_status_completed_at),
|
||||
fuota_deployment_device::return_msg.eq(&d.return_msg),
|
||||
))
|
||||
.get_result(&mut get_async_db_conn().await?)
|
||||
.await
|
||||
.map_err(|e| Error::from_diesel(e, d.dev_eui.to_string()))?;
|
||||
|
||||
info!(fuota_deployment_id = %d.fuota_deployment_id, dev_eui = %d.dev_eui, "FUOTA deployment device updated");
|
||||
Ok(d)
|
||||
}
|
||||
|
||||
pub async fn remove_devices(fuota_deployment_id: Uuid, dev_euis: Vec<EUI64>) -> Result<(), Error> {
|
||||
diesel::delete(
|
||||
fuota_deployment_device::table
|
||||
@ -842,6 +877,12 @@ mod test {
|
||||
assert_eq!(dev.dev_eui, devices[0].dev_eui);
|
||||
assert_eq!(d.id, devices[0].fuota_deployment_id);
|
||||
|
||||
// get device
|
||||
let mut fuota_d = get_device(d.id.into(), dev.dev_eui).await.unwrap();
|
||||
fuota_d.return_msg = "Error: kaboom".into();
|
||||
let fuota_d = update_device(fuota_d).await.unwrap();
|
||||
assert_eq!("Error: kaboom", fuota_d.return_msg);
|
||||
|
||||
// remove devices
|
||||
remove_devices(d.id.into(), vec![dev.dev_eui])
|
||||
.await
|
||||
|
@ -226,6 +226,7 @@ diesel::table! {
|
||||
mc_session_completed_at -> Nullable<Timestamptz>,
|
||||
frag_session_setup_completed_at -> Nullable<Timestamptz>,
|
||||
frag_status_completed_at -> Nullable<Timestamptz>,
|
||||
return_msg -> Text,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -202,6 +202,7 @@ diesel::table! {
|
||||
mc_session_completed_at -> Nullable<TimestamptzSqlite>,
|
||||
frag_session_setup_completed_at -> Nullable<TimestamptzSqlite>,
|
||||
frag_status_completed_at -> Nullable<TimestamptzSqlite>,
|
||||
return_msg -> Text,
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user