From bd635f22d08c2b6f84323b8b322061b02330a493 Mon Sep 17 00:00:00 2001 From: Mitchell Livingston Date: Thu, 25 Feb 2010 23:06:05 +0000 Subject: [PATCH] for scrapes: add a new field to distinguish from error messages returned from the tracker, and scrape timeouts, so that they can be displayed differently --- daemon/remote.c | 4 ++++ doc/rpc-spec.txt | 3 +++ libtransmission/announcer.c | 3 +++ libtransmission/rpcimpl.c | 3 ++- libtransmission/transmission.h | 3 +++ macosx/TrackerNode.m | 4 +++- 6 files changed, 18 insertions(+), 2 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 6f76a58b3..90ffc4b18 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -1357,6 +1357,7 @@ printDetails( tr_benc * top ) tr_bool lastScrapeSucceeded; int64_t lastScrapeStartTime; int64_t lastScrapeTime; + tr_bool lastScrapeTimedOut; int64_t leecherCount; int64_t nextAnnounceTime; int64_t nextScrapeTime; @@ -1382,6 +1383,7 @@ printDetails( tr_benc * top ) tr_bencDictFindInt ( t, "lastScrapeStartTime", &lastScrapeStartTime ) && tr_bencDictFindBool( t, "lastScrapeSucceeded", &lastScrapeSucceeded ) && tr_bencDictFindInt ( t, "lastScrapeTime", &lastScrapeTime ) && + tr_bencDictFindBool( t, "lastScrapeTimedOut", &lastScrapeTimedOut ) && tr_bencDictFindInt ( t, "leecherCount", &leecherCount ) && tr_bencDictFindInt ( t, "nextAnnounceTime", &nextAnnounceTime ) && tr_bencDictFindInt ( t, "nextScrapeTime", &nextScrapeTime ) && @@ -1436,6 +1438,8 @@ printDetails( tr_benc * top ) if( lastScrapeSucceeded ) printf( " Tracker had %'d seeders and %'d leechers %s ago\n", (int)seederCount, (int)leecherCount, buf ); + else if( lastScrapeTimedOut ) + printf( " Tracker scrape timed out; will retry\n" ); else printf( " Got a scrape error \"%s\" %s ago\n", lastScrapeResult, buf ); diff --git a/doc/rpc-spec.txt b/doc/rpc-spec.txt index cdb9e9bd7..6fc04f2ff 100644 --- a/doc/rpc-spec.txt +++ b/doc/rpc-spec.txt @@ -272,6 +272,7 @@ | lastScrapeStartTime | number | tr_tracker_stat | lastScrapeSucceeded | boolean | tr_tracker_stat | lastScrapeTime | number | tr_tracker_stat + | lastScrapeTimedOut | boolean | tr_tracker_stat | leecherCount | number | tr_tracker_stat | nextAnnounceTime | number | tr_tracker_stat | nextScrapeTime | number | tr_tracker_stat @@ -582,3 +583,5 @@ | | yes | session-get | new arg "config-dir" | | yes | torrent-add | new arg "bandwidthPriority" | | yes | torrent-get | new trackerStats arg "lastAnnounceTimedOut" + ------+---------+-----------+----------------+------------------------------- + 8 | 1.92 | yes | torrent-get | new trackerStats arg "lastScrapeTimedOut" diff --git a/libtransmission/announcer.c b/libtransmission/announcer.c index 3964b551a..d471991a1 100644 --- a/libtransmission/announcer.c +++ b/libtransmission/announcer.c @@ -377,6 +377,7 @@ typedef struct time_t lastScrapeStartTime; time_t lastScrapeTime; tr_bool lastScrapeSucceeded; + tr_bool lastScrapeTimedOut; time_t announceAt; time_t manualAnnounceAllowedAt; @@ -1714,6 +1715,7 @@ onScrapeDone( tr_session * session, } tier->lastScrapeSucceeded = success; + tier->lastScrapeTimedOut = responseCode == 0; if( success && tier->currentTracker->host ) tier->currentTracker->host->lastSuccessfulRequest = now; @@ -1959,6 +1961,7 @@ tr_announcerStats( const tr_torrent * torrent, if(( st->hasScraped = tier->lastScrapeTime != 0 )) { st->lastScrapeTime = tier->lastScrapeTime; st->lastScrapeSucceeded = tier->lastScrapeSucceeded; + st->lastScrapeTimedOut = tier->lastScrapeTimedOut; tr_strlcpy( st->lastScrapeResult, tier->lastScrapeStr, sizeof( st->lastScrapeResult ) ); } diff --git a/libtransmission/rpcimpl.c b/libtransmission/rpcimpl.c index 1b0f35530..0d614a193 100644 --- a/libtransmission/rpcimpl.c +++ b/libtransmission/rpcimpl.c @@ -381,7 +381,7 @@ addTrackerStats( const tr_tracker_stat * st, int n, tr_benc * list ) for( i=0; iannounce ); tr_bencDictAddInt ( d, "announceState", s->announceState ); tr_bencDictAddInt ( d, "downloadCount", s->downloadCount ); @@ -400,6 +400,7 @@ addTrackerStats( const tr_tracker_stat * st, int n, tr_benc * list ) tr_bencDictAddInt ( d, "lastScrapeStartTime", s->lastScrapeStartTime ); tr_bencDictAddBool( d, "lastScrapeSucceeded", s->lastScrapeSucceeded ); tr_bencDictAddInt ( d, "lastScrapeTime", s->lastScrapeTime ); + tr_bencDictAddInt ( d, "lastScrapeTimedOut", s->lastScrapeTimedOut ); tr_bencDictAddInt ( d, "leecherCount", s->leecherCount ); tr_bencDictAddInt ( d, "nextAnnounceTime", s->nextAnnounceTime ); tr_bencDictAddInt ( d, "nextScrapeTime", s->nextScrapeTime ); diff --git a/libtransmission/transmission.h b/libtransmission/transmission.h index 40447ec15..3dc392cce 100644 --- a/libtransmission/transmission.h +++ b/libtransmission/transmission.h @@ -1447,6 +1447,9 @@ typedef struct if "hasAnnounced" is false, this field is undefined */ tr_bool lastScrapeSucceeded; + /* whether or not the last scrape timed out. */ + tr_bool lastScrapeTimedOut; + /* when the last scrape was completed. if "hasScraped" is false, this field is undefined */ time_t lastScrapeTime; diff --git a/macosx/TrackerNode.m b/macosx/TrackerNode.m index a08eee022..958060c31 100644 --- a/macosx/TrackerNode.m +++ b/macosx/TrackerNode.m @@ -182,7 +182,9 @@ dateString = NSLocalizedString(@"N/A", "Tracker last scrape"); NSString * baseString; - if (fStat.hasScraped && !fStat.lastScrapeSucceeded) + if (fStat.hasScraped && fStat.lastScrapeTimedOut) + baseString = [NSLocalizedString(@"Scrape timed out", "Tracker last scrape") stringByAppendingFormat: @": %@", dateString]; + else if (fStat.hasScraped && !fStat.lastScrapeSucceeded) { baseString = NSLocalizedString(@"Scrape error", "Tracker last scrape");