Skip to content

Commit 30bb03d

Browse files
ctronhelio-frota
authored andcommitted
chore: add more instrumentation
1 parent ae658b5 commit 30bb03d

File tree

4 files changed

+67
-4
lines changed

4 files changed

+67
-4
lines changed

modules/fundamental/src/sbom/model/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@ pub struct SbomHead {
4444
}
4545

4646
impl SbomHead {
47+
#[instrument(
48+
skip(sbom, db),
49+
fields(
50+
sbom=%sbom.sbom_id,
51+
)
52+
err(level=tracing::Level::INFO),
53+
)]
4754
pub async fn from_entity<C: ConnectionTrait>(
4855
sbom: &sbom::Model,
4956
sbom_node: Option<sbom_node::Model>,

modules/fundamental/src/vulnerability/model/details/mod.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ pub use vulnerability_advisory::*;
55
use crate::{Error, vulnerability::model::VulnerabilityHead};
66
use sea_orm::{ConnectionTrait, ModelTrait};
77
use serde::{Deserialize, Serialize};
8+
use tracing::{info_span, instrument};
9+
use tracing_futures::Instrument;
810
use trustify_common::memo::Memo;
911
use trustify_cvss::cvss3::severity::Severity;
1012
use trustify_entity::{advisory_vulnerability, cvss3, vulnerability};
@@ -29,6 +31,13 @@ pub struct VulnerabilityDetails {
2931
}
3032

3133
impl VulnerabilityDetails {
34+
#[instrument(
35+
skip(vulnerability, tx),
36+
fields(
37+
vulnerability=vulnerability.id,
38+
)
39+
err(level=tracing::Level::INFO),
40+
)]
3241
pub async fn from_entity<C: ConnectionTrait>(
3342
vulnerability: &vulnerability::Model,
3443
deprecation: Deprecation,
@@ -38,9 +47,14 @@ impl VulnerabilityDetails {
3847
.find_related(advisory_vulnerability::Entity)
3948
.with_deprecation_related(deprecation)
4049
.all(tx)
50+
.instrument(info_span!("find related"))
4151
.await?;
4252

43-
let cvss3 = vulnerability.find_related(cvss3::Entity).all(tx).await?;
53+
let cvss3 = vulnerability
54+
.find_related(cvss3::Entity)
55+
.all(tx)
56+
.instrument(info_span!("find scores"))
57+
.await?;
4458

4559
let advisories = VulnerabilityAdvisorySummary::from_entities(
4660
vulnerability,

modules/fundamental/src/vulnerability/model/details/vulnerability_advisory.rs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ use sea_orm::{
1313
use sea_query::{Asterisk, Expr, Func, JoinType, SimpleExpr};
1414
use serde::{Deserialize, Serialize};
1515
use std::collections::{HashMap, HashSet};
16+
use tracing::{info_span, instrument};
17+
use tracing_futures::Instrument;
1618
use trustify_common::{
1719
db::{
1820
VersionMatches,
@@ -42,6 +44,15 @@ pub struct VulnerabilityAdvisoryHead {
4244
}
4345

4446
impl VulnerabilityAdvisoryHead {
47+
#[instrument(
48+
skip_all,
49+
fields(
50+
vulnerability=vulnerability.id,
51+
advisory_vulnerability_advisory_id=%advisory_vulnerability.advisory_id,
52+
advisory_vulnerability_vulnerability_id=advisory_vulnerability.vulnerability_id,
53+
),
54+
err(level=tracing::Level::INFO),
55+
)]
4556
pub async fn from_entity<C: ConnectionTrait>(
4657
vulnerability: &vulnerability::Model,
4758
advisory_vulnerability: &advisory_vulnerability::Model,
@@ -126,6 +137,15 @@ pub struct VulnerabilityAdvisorySummary {
126137
}
127138

128139
impl VulnerabilityAdvisorySummary {
140+
#[instrument(
141+
skip_all,
142+
fields(
143+
vulnerability=vulnerability.id,
144+
advisory_vulnerabilities=advisory_vulnerabilities.len(),
145+
vuln_cvss3=vuln_cvss3.len(),
146+
),
147+
err(level=tracing::Level::INFO),
148+
)]
129149
pub async fn from_entities<C: ConnectionTrait>(
130150
vulnerability: &vulnerability::Model,
131151
advisory_vulnerabilities: &[advisory_vulnerability::Model],
@@ -172,6 +192,7 @@ impl VulnerabilityAdvisorySummary {
172192
let mut vuln_sbom_statuses = sbom_status_query
173193
.try_into_multi_model::<SbomStatusCatcher>()?
174194
.all(tx)
195+
.instrument(info_span!("fetching statuses"))
175196
.await?;
176197

177198
// The query for now is in the raw form for couple of reasons
@@ -246,6 +267,7 @@ impl VulnerabilityAdvisorySummary {
246267
Relationship::Describes.into(),
247268
],
248269
))
270+
.instrument(info_span!("fetching product status"))
249271
.await?;
250272

251273
vuln_sbom_statuses.extend(
@@ -266,6 +288,7 @@ impl VulnerabilityAdvisorySummary {
266288
vuln_purl_statuses = purl_status_query
267289
.try_into_multi_model::<PurlStatusCatcher>()?
268290
.all(tx)
291+
.instrument(info_span!("fetch purl statuses"))
269292
.await?;
270293
}
271294

@@ -275,6 +298,11 @@ impl VulnerabilityAdvisorySummary {
275298
let number_of_vulnerabilities = advisory_vulnerability
276299
.find_linked(advisory_vulnerability::AdvisoryVulnerabilityToAdvisoryVulnerabilities)
277300
.count(tx)
301+
.instrument(info_span!(
302+
"counting vulnerabilities",
303+
advisory = %advisory_vulnerability.advisory_id,
304+
vulnerability = advisory_vulnerability.vulnerability_id
305+
))
278306
.await?;
279307

280308
let cvss3_scores = vuln_cvss3
@@ -299,7 +327,7 @@ impl VulnerabilityAdvisorySummary {
299327
)
300328
.await?,
301329
cvss3_scores,
302-
purls: VulnerabilityAdvisoryStatus::from_models(purl_statuses).await?,
330+
purls: VulnerabilityAdvisoryStatus::from_models(purl_statuses)?,
303331
sboms: VulnerabilitySbomStatus::from_models(sbom_statuses, tx).await?,
304332
number_of_vulnerabilities,
305333
});
@@ -415,7 +443,7 @@ pub struct VulnerabilityAdvisoryStatus {
415443
}
416444

417445
impl VulnerabilityAdvisoryStatus {
418-
async fn from_models<'i, I: Iterator<Item = &'i PurlStatusCatcher>>(
446+
fn from_models<'i, I: Iterator<Item = &'i PurlStatusCatcher>>(
419447
purls: I,
420448
) -> Result<HashMap<String, Vec<Self>>, Error> {
421449
let mut statuses = HashMap::new();

modules/fundamental/src/vulnerability/service/mod.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::{
66
};
77
use futures_util::{TryFutureExt, TryStreamExt};
88
use sea_orm::{EntityTrait, Statement, StreamTrait, prelude::*};
9+
use tracing::instrument;
910
use trustify_common::{
1011
db::{
1112
limiter::LimiterTrait,
@@ -150,14 +151,26 @@ impl VulnerabilityService {
150151
Ok(result)
151152
}
152153

154+
#[instrument(
155+
skip_all,
156+
fields(purl, id),
157+
err(level=tracing::Level::INFO),
158+
)]
153159
async fn to_vuln<C: ConnectionTrait>(
154160
&self,
155161
row: QueryResult,
156162
connection: &C,
157163
) -> Result<(String, VulnerabilityDetails), Error> {
164+
let span = tracing::Span::current();
165+
158166
let requested_purl: String = row.try_get("", "requested_purl")?;
167+
let id = row.try_get("", "id")?;
168+
169+
span.record("purl", &requested_purl);
170+
span.record("id", &id);
171+
159172
let vulnerability = vulnerability::Model {
160-
id: row.try_get("", "id")?,
173+
id,
161174
title: row.try_get("", "title")?,
162175
reserved: row.try_get("", "reserved")?,
163176
published: row.try_get("", "published")?,
@@ -167,6 +180,7 @@ impl VulnerabilityService {
167180
base_score: row.try_get("", "base_score")?,
168181
base_severity: row.try_get("", "base_severity")?,
169182
};
183+
170184
let vuln_details =
171185
VulnerabilityDetails::from_entity(&vulnerability, Deprecation::Ignore, connection)
172186
.await;

0 commit comments

Comments
 (0)