diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2018-06-30 18:12:42 -0700 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2018-06-30 18:12:42 -0700 |
commit | 08f7f1642eb8380c5b00f6a54e4b29e55713effd (patch) | |
tree | 8e5d7b62d43fc2ec0c5a589c5b574c91c7591c36 | |
parent | 473cf4244be5d2e8fce9b95d1a750cf538dfc74b (diff) | |
download | fatcat-08f7f1642eb8380c5b00f6a54e4b29e55713effd.tar.gz fatcat-08f7f1642eb8380c5b00f6a54e4b29e55713effd.zip |
respect more flag for stats endpoint
-rw-r--r-- | rust/src/api_server.rs | 53 | ||||
-rw-r--r-- | rust/tests/test_api_server.rs | 5 |
2 files changed, 35 insertions, 23 deletions
diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs index 408ad5a9..f895937e 100644 --- a/rust/src/api_server.rs +++ b/rust/src/api_server.rs @@ -962,7 +962,7 @@ impl Server { /// "more" parameter isn't used, but could be to indicate that "expensive" database queries /// should be run - fn get_stats_handler(&self, _more: Option<String>) -> Result<StatsResponse> { + fn get_stats_handler(&self, more: Option<String>) -> Result<StatsResponse> { let conn = self.db_pool.get().expect("db_pool error"); let merged_editgroups: i64 = changelog::table @@ -990,28 +990,35 @@ impl Server { .count() .first(&conn)?; - // these are probably expensive? - // this query is slightly inaccurate and over-counts: it includes files that have release - // links only to inactive releases - let files_with_releases: i64 = file_rev::table - .inner_join(file_ident::table) - .inner_join(file_release::table) - .filter(file_ident::is_live.eq(true)) - .filter(file_ident::redirect_id.is_null()) - .select(file_ident::id) - .distinct() - .count() - .first(&conn)?; - // this slightly overcounts also: it will include releases which are only linked to from - // inactive files - let releases_with_files: i64 = release_ident::table - .inner_join(file_release::table) - .filter(release_ident::is_live.eq(true)) - .filter(release_ident::redirect_id.is_null()) - .select(file_release::target_release_ident_id) - .distinct() - .count() - .first(&conn)?; + let files_with_releases: Option<i64> = if more.is_some() { + // this query is slightly inaccurate and over-counts: it includes files that have release + // links only to inactive releases + Some(file_rev::table + .inner_join(file_ident::table) + .inner_join(file_release::table) + .filter(file_ident::is_live.eq(true)) + .filter(file_ident::redirect_id.is_null()) + .select(file_ident::id) + .distinct() + .count() + .first(&conn)?) + } else { + None + }; + let releases_with_files: Option<i64> = if more.is_some() { + // this slightly overcounts also: it will include releases which are only linked to from + // inactive files + Some(release_ident::table + .inner_join(file_release::table) + .filter(release_ident::is_live.eq(true)) + .filter(release_ident::redirect_id.is_null()) + .select(file_release::target_release_ident_id) + .distinct() + .count() + .first(&conn)?) + } else { + None + }; let val = json!({ "entity_counts": { diff --git a/rust/tests/test_api_server.rs b/rust/tests/test_api_server.rs index ac03c3c1..b46367e0 100644 --- a/rust/tests/test_api_server.rs +++ b/rust/tests/test_api_server.rs @@ -509,6 +509,11 @@ fn test_stats() { status::Ok, Some("merged_editgroups"), ); + check_response( + request::get("http://localhost:9411/v0/stats?more=yes", headers, &router), + status::Ok, + Some("merged_editgroups"), + ); } #[test] |