Skip to content

Commit 992c7e2

Browse files
authored
Merge pull request #445 from QuietMisdreavus/build-metrics
add build success/fail counts to metrics
2 parents ffe043c + 8663847 commit 992c7e2

File tree

6 files changed

+53
-8
lines changed

6 files changed

+53
-8
lines changed

src/db/add_package.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,7 @@ pub(crate) fn add_package_into_database(conn: &Connection,
3737
let rustdoc = get_rustdoc(metadata_pkg, source_dir).unwrap_or(None);
3838
let readme = get_readme(metadata_pkg, source_dir).unwrap_or(None);
3939
let (release_time, yanked, downloads) = try!(get_release_time_yanked_downloads(metadata_pkg));
40-
let is_library = match metadata_pkg.targets[0].kind.as_slice() {
41-
&[ref kind] if kind == "lib" || kind == "proc-macro" => true,
42-
_ => false,
43-
};
40+
let is_library = metadata_pkg.is_library();
4441
let metadata = Metadata::from_source_dir(source_dir)?;
4542

4643
let release_id: i32 = {

src/docbuilder/queue.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,17 @@ impl DocBuilder {
6262
match builder.build_package(self, &name, &version) {
6363
Ok(_) => {
6464
let _ = conn.execute("DELETE FROM queue WHERE id = $1", &[&id]);
65+
::web::metrics::TOTAL_BUILDS.inc();
6566
}
6667
Err(e) => {
6768
// Increase attempt count
68-
let _ = conn.execute("UPDATE queue SET attempt = attempt + 1 WHERE id = $1",
69-
&[&id]);
69+
let rows = try!(conn.query("UPDATE queue SET attempt = attempt + 1 WHERE id = $1 RETURNING attempt",
70+
&[&id]));
71+
let attempt: i32 = rows.get(0).get(0);
72+
if attempt >= 5 {
73+
::web::metrics::FAILED_BUILDS.inc();
74+
::web::metrics::TOTAL_BUILDS.inc();
75+
}
7076
error!("Failed to build package {}-{} from queue: {}",
7177
name,
7278
version,

src/docbuilder/rustwide_builder.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,13 @@ impl RustwideBuilder {
310310
}
311311

312312
let has_examples = build.host_source_dir().join("examples").is_dir();
313+
if res.successful {
314+
::web::metrics::SUCCESSFUL_BUILDS.inc();
315+
} else if res.cargo_metadata.root().is_library() {
316+
::web::metrics::FAILED_BUILDS.inc();
317+
} else {
318+
::web::metrics::NON_LIBRARY_BUILDS.inc();
319+
}
313320
let release_id = add_package_into_database(
314321
&conn,
315322
res.cargo_metadata.root(),

src/utils/cargo_metadata.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,15 @@ pub(crate) struct Package {
7878
pub(crate) authors: Vec<String>,
7979
}
8080

81+
impl Package {
82+
pub(crate) fn is_library(&self) -> bool {
83+
match self.targets[0].kind.as_slice() {
84+
&[ref kind] if kind == "lib" || kind == "proc-macro" => true,
85+
_ => false,
86+
}
87+
}
88+
}
89+
8190
#[derive(RustcDecodable)]
8291
pub(crate) struct Target {
8392
pub(crate) name: String,

src/web/metrics.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use super::pool::Pool;
22
use iron::headers::ContentType;
33
use iron::prelude::*;
44
use iron::status::Status;
5-
use prometheus::{Encoder, IntGauge, TextEncoder};
5+
use prometheus::{Encoder, IntGauge, IntCounter, TextEncoder};
66

77
lazy_static! {
88
static ref QUEUED_CRATES_COUNT: IntGauge = register_int_gauge!(
@@ -15,6 +15,26 @@ lazy_static! {
1515
"Number of crates that failed to build"
1616
)
1717
.unwrap();
18+
pub static ref TOTAL_BUILDS: IntCounter = register_int_counter!(
19+
"docsrs_total_builds",
20+
"Number of crates built"
21+
)
22+
.unwrap();
23+
pub static ref SUCCESSFUL_BUILDS: IntCounter = register_int_counter!(
24+
"docsrs_successful_builds",
25+
"Number of builds that successfully generated docs"
26+
)
27+
.unwrap();
28+
pub static ref FAILED_BUILDS: IntCounter = register_int_counter!(
29+
"docsrs_failed_builds",
30+
"Number of builds that generated a compile error"
31+
)
32+
.unwrap();
33+
pub static ref NON_LIBRARY_BUILDS: IntCounter = register_int_counter!(
34+
"docsrs_non_library_builds",
35+
"Number of builds that did not complete due to not being a library"
36+
)
37+
.unwrap();
1838
}
1939

2040
pub fn metrics_handler(req: &mut Request) -> IronResult<Response> {

src/web/mod.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ mod file;
4444
mod builds;
4545
mod error;
4646
mod sitemap;
47-
mod metrics;
47+
pub mod metrics;
4848

4949
use std::{env, fmt};
5050
use std::error::Error;
@@ -433,6 +433,12 @@ fn latest_version(versions_json: &Vec<String>, req_version: &str) -> Option<Stri
433433

434434
/// Starts cratesfyi web server
435435
pub fn start_web_server(sock_addr: Option<&str>) {
436+
// poke all the metrics counters to instantiate and register them
437+
metrics::TOTAL_BUILDS.inc_by(0);
438+
metrics::SUCCESSFUL_BUILDS.inc_by(0);
439+
metrics::FAILED_BUILDS.inc_by(0);
440+
metrics::NON_LIBRARY_BUILDS.inc_by(0);
441+
436442
let cratesfyi = CratesfyiHandler::new();
437443
Iron::new(cratesfyi).http(sock_addr.unwrap_or("0.0.0.0:3000")).unwrap();
438444
}

0 commit comments

Comments
 (0)