mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-04-25 05:20:07 +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
d3dd14b029
commit
8dfaefb10c
@ -31,11 +31,11 @@ create table fuota_deployment_device (
|
|||||||
dev_eui bytea not null references device on delete cascade,
|
dev_eui bytea not null references device on delete cascade,
|
||||||
created_at timestamp with time zone not null,
|
created_at timestamp with time zone not null,
|
||||||
updated_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_group_setup_completed_at timestamp with time zone null,
|
||||||
mc_session_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_session_setup_completed_at timestamp with time zone null,
|
||||||
frag_status_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)
|
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,
|
dev_eui blob not null references device on delete cascade,
|
||||||
created_at datetime not null,
|
created_at datetime not null,
|
||||||
updated_at datetime not null,
|
updated_at datetime not null,
|
||||||
|
|
||||||
mc_group_setup_completed_at datetime null,
|
mc_group_setup_completed_at datetime null,
|
||||||
mc_session_completed_at datetime null,
|
mc_session_completed_at datetime null,
|
||||||
frag_session_setup_completed_at datetime null,
|
frag_session_setup_completed_at datetime null,
|
||||||
frag_status_completed_at datetime null,
|
frag_status_completed_at datetime null,
|
||||||
|
return_msg text not null,
|
||||||
|
|
||||||
primary key (fuota_deployment_id, dev_eui)
|
primary key (fuota_deployment_id, dev_eui)
|
||||||
);
|
);
|
||||||
|
@ -101,6 +101,7 @@ pub struct FuotaDeploymentDevice {
|
|||||||
pub mc_session_completed_at: Option<DateTime<Utc>>,
|
pub mc_session_completed_at: Option<DateTime<Utc>>,
|
||||||
pub frag_session_setup_completed_at: Option<DateTime<Utc>>,
|
pub frag_session_setup_completed_at: Option<DateTime<Utc>>,
|
||||||
pub frag_status_completed_at: Option<DateTime<Utc>>,
|
pub frag_status_completed_at: Option<DateTime<Utc>>,
|
||||||
|
pub return_msg: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for FuotaDeploymentDevice {
|
impl Default for FuotaDeploymentDevice {
|
||||||
@ -116,6 +117,7 @@ impl Default for FuotaDeploymentDevice {
|
|||||||
mc_session_completed_at: None,
|
mc_session_completed_at: None,
|
||||||
frag_session_setup_completed_at: None,
|
frag_session_setup_completed_at: None,
|
||||||
frag_status_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)
|
let res = diesel::insert_into(fuota_deployment_device::table)
|
||||||
.values(&FuotaDeploymentDevice {
|
.values(&FuotaDeploymentDevice {
|
||||||
fuota_deployment_id: fuota_deployment_id.into(),
|
fuota_deployment_id: fuota_deployment_id.into(),
|
||||||
dev_eui: dev_eui,
|
dev_eui,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.execute(&mut get_async_db_conn().await?)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
@ -349,6 +351,39 @@ pub async fn get_devices(
|
|||||||
.map_err(|e| Error::from_diesel(e, "".into()))
|
.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> {
|
pub async fn remove_devices(fuota_deployment_id: Uuid, dev_euis: Vec<EUI64>) -> Result<(), Error> {
|
||||||
diesel::delete(
|
diesel::delete(
|
||||||
fuota_deployment_device::table
|
fuota_deployment_device::table
|
||||||
@ -842,6 +877,12 @@ mod test {
|
|||||||
assert_eq!(dev.dev_eui, devices[0].dev_eui);
|
assert_eq!(dev.dev_eui, devices[0].dev_eui);
|
||||||
assert_eq!(d.id, devices[0].fuota_deployment_id);
|
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
|
||||||
remove_devices(d.id.into(), vec![dev.dev_eui])
|
remove_devices(d.id.into(), vec![dev.dev_eui])
|
||||||
.await
|
.await
|
||||||
|
@ -226,6 +226,7 @@ diesel::table! {
|
|||||||
mc_session_completed_at -> Nullable<Timestamptz>,
|
mc_session_completed_at -> Nullable<Timestamptz>,
|
||||||
frag_session_setup_completed_at -> Nullable<Timestamptz>,
|
frag_session_setup_completed_at -> Nullable<Timestamptz>,
|
||||||
frag_status_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>,
|
mc_session_completed_at -> Nullable<TimestamptzSqlite>,
|
||||||
frag_session_setup_completed_at -> Nullable<TimestamptzSqlite>,
|
frag_session_setup_completed_at -> Nullable<TimestamptzSqlite>,
|
||||||
frag_status_completed_at -> Nullable<TimestamptzSqlite>,
|
frag_status_completed_at -> Nullable<TimestamptzSqlite>,
|
||||||
|
return_msg -> Text,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user