Skip to content

Commit 3bb5017

Browse files
authored
Merge pull request #120 from samueltardieu/pubsubhubbub
Add real-time PubSubHubBub to the feed
2 parents a6207bc + 87e685c commit 3bb5017

File tree

5 files changed

+40
-5
lines changed

5 files changed

+40
-5
lines changed

src/docbuilder/queue.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ impl DocBuilder {
3535

3636

3737
/// Builds packages from queue
38-
pub fn build_packages_queue(&mut self) -> Result<()> {
38+
pub fn build_packages_queue(&mut self) -> Result<usize> {
3939
let conn = try!(connect_db());
40+
let mut build_count = 0;
4041

4142
for row in &try!(conn.query("SELECT id, name, version
4243
FROM queue
@@ -49,6 +50,7 @@ impl DocBuilder {
4950

5051
match self.build_package(&name[..], &version[..]) {
5152
Ok(_) => {
53+
build_count += 1;
5254
let _ = conn.execute("DELETE FROM queue WHERE id = $1", &[&id]);
5355
}
5456
Err(e) => {
@@ -63,7 +65,7 @@ impl DocBuilder {
6365
}
6466
}
6567

66-
Ok(())
68+
Ok(build_count)
6769
}
6870
}
6971

src/utils/daemon.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use libc::fork;
1313
use time;
1414
use DocBuilderOptions;
1515
use DocBuilder;
16-
use utils::{update_sources, update_release_activity, github_updater};
16+
use utils::{update_sources, update_release_activity, github_updater, pubsubhubbub};
1717
use db::{connect_db, update_search_index};
1818

1919

@@ -94,8 +94,16 @@ pub fn start_daemon() {
9494
// This only panicked twice in the last 6 months but its just a better
9595
// idea to do this.
9696
let res = thread::spawn(move || {
97-
if let Err(e) = doc_builder.build_packages_queue() {
98-
error!("Failed build new crates: {}", e);
97+
match doc_builder.build_packages_queue() {
98+
Err(e) => error!("Failed build new crates: {}", e),
99+
Ok(n) => {
100+
if n > 0 {
101+
match pubsubhubbub::ping_hubs() {
102+
Err(e) => error!("Failed to ping hub: {}", e),
103+
Ok(n) => debug!("Succesfully pinged {} hubs", n)
104+
}
105+
}
106+
}
99107
}
100108

101109
if let Err(e) = doc_builder.save_cache() {

src/utils/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ mod build_doc;
1212
mod copy;
1313
mod release_activity_updater;
1414
mod daemon;
15+
mod pubsubhubbub;

src/utils/pubsubhubbub.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
use std::collections::HashMap;
2+
3+
use reqwest::*;
4+
5+
fn ping_hub(url: &str) -> Result<Response> {
6+
let mut params = HashMap::new();
7+
params.insert("hub.mode", "publish");
8+
params.insert("hub.url", "https://docs.rs/releases/feed");
9+
let client = try!(Client::new());
10+
client.post(url).form(&params).send()
11+
}
12+
13+
/// Ping the two predefined hubs. Return either the number of successfully
14+
/// pinged hubs, or the first error.
15+
pub fn ping_hubs() -> Result<usize> {
16+
vec!["https://pubsubhubbub.appspot.com",
17+
"https://pubsubhubbub.superfeedr.com"]
18+
.into_iter()
19+
.map(ping_hub)
20+
.collect::<Result<Vec<_>>>()
21+
.map(|v| v.len())
22+
}

templates/releases_feed.hbs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
<subtitle>Recent Rust crates</subtitle>
55
<link href="https://docs.rs/releases/feed" rel="self" />
66
<link href="https://docs.rs/" />
7+
<link href="https://pubsubhubbub.appspot.com" rel="hub" />
8+
<link href="https://pubsubhubbub.superfeedr.com" rel="hub" />
79
<id>urn:docs-rs:{{cratesfyi_version_safe}}</id>
810
<updated>{{content[0].release_time_rfc3339}}</updated>
911
{{#each content}}

0 commit comments

Comments
 (0)