diff options
| author | B. Watson <yalhcru@gmail.com> | 2018-08-28 21:52:43 -0400 | 
|---|---|---|
| committer | B. Watson <yalhcru@gmail.com> | 2018-08-28 21:52:43 -0400 | 
| commit | 5d86ccd8cf07f1afac8734112635bdd200bb572c (patch) | |
| tree | 4685251a485585c856d2abe724d2d752be37cfa2 | |
| parent | f407dbfeabc99b2a48c42ea05176e3aff8432a14 (diff) | |
| download | misc-scripts-5d86ccd8cf07f1afac8734112635bdd200bb572c.tar.gz | |
slacktopic.pl: cache results of reading ChangeLog (save bandwidth)
| -rw-r--r-- | slacktopic.pl | 17 | 
1 files changed, 15 insertions, 2 deletions
diff --git a/slacktopic.pl b/slacktopic.pl index 4471584..256db09 100644 --- a/slacktopic.pl +++ b/slacktopic.pl @@ -290,7 +290,7 @@ sub finish_update {  	}  	# Make sure this is a security fix update. -	return unless is_security_update(); +	return unless is_security_update($new_date);  	# Ask ChanServ to change the topic for us. We don't need +o in  	# the channel, so long as we're logged in to services and have +t. @@ -325,12 +325,24 @@ sub exec_update {  			0); # last arg is unused  } +# Without %sec_check_cache, every non-security update would result in us +# wasting bandwidth rechecking the ChangeLog every $update_frequency sec. +our %sec_check_cache = (); +  # Return true if the first ChangeLog entry is a security update. Unlike  # the regular check-for-update that happens periodically, this one blocks  # for up to $cmd_timeout seconds. The updates only happen every few days,  # I don't see this as a real problem that needs extra complexity to solve.  sub is_security_update { -	debugmsg("is_security_update() called"); +	my $date = shift; +	debugmsg("is_security_update($date) called"); + +	if(exists($sec_check_cache{$date})) { +		debugmsg("already checked & got '$sec_check_cache{$date}' for $date"); +		return $sec_check_cache{$date}; +	} + +	debugmsg("getting start of ChangeLog");  	my $result = 0;  	my $lines = 0; @@ -365,6 +377,7 @@ sub is_security_update {  	}  	debugmsg("read $lines lines from ChangeLog, returning $result"); +	$sec_check_cache{$date} = $result;  	return $result;  }  | 
