1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-01-30 19:03:04 +00:00

feat: log which tracker is giving a warning (#4544)

This commit is contained in:
Cœur 2023-01-17 15:46:43 +08:00 committed by GitHub
parent 6a3ead4c5d
commit e4c5981545
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 30 additions and 13 deletions

View file

@ -118,7 +118,7 @@ bool handleAnnounceResponse(tr_web::FetchResponse const& web_response, tr_announ
if (status != HTTP_OK)
{
auto const* const response_str = tr_webGetResponseStr(status);
response->errmsg = fmt::format(FMT_STRING("Tracker HTTP response {:d} ({:s}"), status, response_str);
response->errmsg = fmt::format(FMT_STRING("Tracker HTTP response {:d} ({:s})"), status, response_str);
return false;
}

View file

@ -856,8 +856,10 @@ void on_announce_error(tr_tier* tier, char const* err, tr_announce_event e)
{
using namespace announce_helpers;
/* increment the error count */
auto* current_tracker = tier->currentTracker();
std::string announce_url = current_tracker != nullptr ? tr_urlTrackerLogName(current_tracker->announce_url) : "nullptr";
/* increment the error count */
if (current_tracker != nullptr)
{
++current_tracker->consecutive_failures;
@ -871,12 +873,14 @@ void on_announce_error(tr_tier* tier, char const* err, tr_announce_event e)
if (isUnregistered(err))
{
tr_logAddErrorTier(tier, fmt::format(_("Announce error: {error}"), fmt::arg("error", err)));
tr_logAddErrorTier(
tier,
fmt::format(_("Announce error: {error}"), fmt::arg("error", err)).append(fmt::format(" ({})", announce_url)));
}
else
{
/* schedule a reannounce */
int const interval = current_tracker->getRetryInterval();
auto const interval = current_tracker->getRetryInterval();
tr_logAddWarnTier(
tier,
fmt::format(
@ -885,7 +889,8 @@ void on_announce_error(tr_tier* tier, char const* err, tr_announce_event e)
"Announce error: {error} (Retrying in {count} seconds)",
interval),
fmt::arg("error", err),
fmt::arg("count", interval)));
fmt::arg("count", interval))
.append(fmt::format(" ({})", announce_url)));
tier_announce_event_push(tier, e, tr_time() + interval);
}
}
@ -1275,13 +1280,7 @@ void checkMultiscrapeMax(tr_announcer_impl* announcer, tr_scrape_response const&
if (multiscrape_max != n)
{
// don't log the full URL, since that might have a personal announce id
// (note: we know 'parsed' will be successful since this url has a scrape_info)
if (auto const parsed = tr_urlParse(url); parsed)
{
tr_logAddDebug(
fmt::format(FMT_STRING("Reducing multiscrape max to {:d}"), n),
fmt::format(FMT_STRING("{:s}://{:s}:{:d}"), parsed->scheme, parsed->host, parsed->port));
}
tr_logAddDebug(fmt::format(FMT_STRING("Reducing multiscrape max to {:d}"), n), tr_urlTrackerLogName(url));
multiscrape_max = n;
}

View file

@ -2213,7 +2213,10 @@ void tr_torrent::onTrackerResponse(tr_tracker_event const* event)
break;
case tr_tracker_event::Type::Warning:
tr_logAddWarnTor(this, fmt::format(_("Tracker warning: '{warning}'"), fmt::arg("warning", event->text)));
tr_logAddWarnTor(
this,
fmt::format(_("Tracker warning: '{warning}'"), fmt::arg("warning", event->text))
.append(fmt::format(" ({})", tr_urlTrackerLogName(event->announce_url))));
error = TR_STAT_TRACKER_WARNING;
error_announce_url = event->announce_url;
error_string = event->text;

View file

@ -373,6 +373,17 @@ bool tr_urlIsValid(std::string_view url)
return parsed && std::find(std::begin(Schemes), std::end(Schemes), parsed->scheme) != std::end(Schemes);
}
std::string tr_urlTrackerLogName(std::string_view url)
{
if (auto const parsed = tr_urlParse(url); parsed)
{
return fmt::format(FMT_STRING("{:s}://{:s}:{:d}"), parsed->scheme, parsed->host, parsed->port);
}
// we have an invalid URL, we log the full string
return std::string{ url };
}
tr_url_query_view::iterator& tr_url_query_view::iterator::operator++()
{
auto pair = tr_strvSep(&remain, '&');

View file

@ -45,6 +45,10 @@ struct tr_url_parsed_t
// must be one we that Transmission supports for announce and scrape
[[nodiscard]] std::optional<tr_url_parsed_t> tr_urlParseTracker(std::string_view url);
// Convenience function to get a log-safe version of a tracker URL.
// This is to avoid logging sensitive info, e.g. a personal announcer id in the URL.
[[nodiscard]] std::string tr_urlTrackerLogName(std::string_view url);
// example use: `for (auto const [key, val] : tr_url_query_view{ querystr })`
struct tr_url_query_view
{