Skip to content

Commit 86723fe

Browse files
committed
fix: use the UUID for some of the SBOM APIs
1 parent cd7e7d4 commit 86723fe

File tree

3 files changed

+40
-28
lines changed

3 files changed

+40
-28
lines changed

scenarios/full-20250323.json5

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// RHOSE-4.14 seems to be the biggest (by packages)
33
"get_sbom": "sha256:f293eb898192085804419f9dd40a738f20d67dd81846e88c6720f692ec5f3081",
44
"get_sbom_advisories": "sha256:f293eb898192085804419f9dd40a738f20d67dd81846e88c6720f692ec5f3081",
5-
"get_sbom_packages": "sha256:f293eb898192085804419f9dd40a738f20d67dd81846e88c6720f692ec5f3081",
6-
"get_sbom_related": "sha256:f293eb898192085804419f9dd40a738f20d67dd81846e88c6720f692ec5f3081",
5+
"get_sbom_packages": "0195baea-42e3-7842-a0e3-4c7874263954",
6+
"get_sbom_related": "0195baea-42e3-7842-a0e3-4c7874263954",
77
"get_vulnerability": "CVE-2023-39325",
88
}

src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ async fn main() -> Result<(), anyhow::Error> {
4747
None | Some("false" | "0")
4848
) {
4949
let scenario = scenario::Scenario::eval().await?;
50-
println!("{}", serde_json5::to_string(&scenario)?);
50+
println!("{}", serde_json::to_string_pretty(&scenario)?);
5151
return Ok(());
5252
}
5353

src/scenario.rs

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use anyhow::{Context, anyhow};
2-
use sqlx::{Executor, Row};
2+
use sqlx::{Executor, Row, any::AnyRow};
33
use std::io::BufReader;
44

55
/// implement to that we can explicitly state what we want
@@ -97,14 +97,16 @@ impl Scenario {
9797

9898
let loader = Loader::new(db);
9999

100-
let large_sbom = Some(loader.large_sbom().await?);
100+
let large_sbom = loader.large_sbom().await?;
101+
let large_sbom_id = Some(large_sbom.0);
102+
let large_sbom_digest = Some(large_sbom.1);
101103
let max_vuln = Some(loader.max_vuln().await?);
102104

103105
Ok(Self {
104-
get_sbom: large_sbom.clone(),
105-
get_sbom_advisories: large_sbom.clone(),
106-
get_sbom_related: large_sbom.clone(),
107-
get_sbom_packages: large_sbom,
106+
get_sbom: large_sbom_digest.clone(),
107+
get_sbom_advisories: large_sbom_digest.clone(),
108+
get_sbom_related: large_sbom_id.clone(),
109+
get_sbom_packages: large_sbom_id.clone(),
108110

109111
get_vulnerability: max_vuln,
110112
})
@@ -121,42 +123,52 @@ impl Loader {
121123
}
122124

123125
async fn find(&self, sql: &str) -> anyhow::Result<String> {
126+
Ok(self.find_row(sql).await?.get("result"))
127+
}
128+
129+
async fn find_row(&self, sql: &str) -> anyhow::Result<AnyRow> {
124130
let mut db = crate::db::connect(&self.db).await?;
125131

126-
// get the largest SBOM in the database
127-
let row = db
128-
.fetch_optional(sql)
132+
db.fetch_optional(sql)
129133
.await?
130-
.ok_or_else(|| anyhow!("nothing found"))?;
131-
132-
Ok(row.get("result"))
134+
.ok_or_else(|| anyhow!("nothing found"))
133135
}
134136

135137
/// get the SHA256 of the largest SBOM (by number of packages)
136-
pub async fn large_sbom(&self) -> anyhow::Result<String> {
138+
pub async fn large_sbom(&self) -> anyhow::Result<(String, String)> {
137139
// get the largest SBOM in the database
138-
self.find(
139-
r#"
140-
select concat('sha256:', c.sha256) as result,
141-
count(b.node_id) as num
140+
let row = self
141+
.find_row(
142+
r#"
143+
select
144+
b.sbom_id::text as id,
145+
concat('sha256:', c.sha256) as sha,
146+
count(b.node_id) as num
142147
from sbom a
143-
join sbom_node b on a.sbom_id = b.sbom_id
144-
join source_document c on a.source_document_id = c.id
145-
group by c.sha256
146-
order by num desc
148+
join sbom_node b on a.sbom_id = b.sbom_id
149+
join source_document c on a.source_document_id = c.id
150+
group by
151+
b.sbom_id,
152+
c.sha256
153+
order by
154+
num desc
147155
limit 1
148156
"#,
149-
)
150-
.await
157+
)
158+
.await?;
159+
160+
Ok((row.get("id"), row.get("sha")))
151161
}
152162

153163
/// A vulnerability, referenced by a lot of advisories
154164
pub async fn max_vuln(&self) -> anyhow::Result<String> {
155165
self.find(
156166
r#"
157-
select a.id as result
167+
select
168+
a.id as result,
169+
count(b.vulnerability_id) as num
158170
from vulnerability a
159-
join advisory_vulnerability b on a.id = b.vulnerability_id
171+
join advisory_vulnerability b on a.id = b.vulnerability_id
160172
group by
161173
a.id
162174
order by num desc

0 commit comments

Comments
 (0)