Index: openacs-4/packages/xotcl-request-monitor/xotcl-request-monitor.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-request-monitor/xotcl-request-monitor.info,v
diff -u -r1.14 -r1.15
--- openacs-4/packages/xotcl-request-monitor/xotcl-request-monitor.info 3 Nov 2018 10:40:10 -0000 1.14
+++ openacs-4/packages/xotcl-request-monitor/xotcl-request-monitor.info 14 Nov 2018 19:01:11 -0000 1.15
@@ -8,7 +8,7 @@
t
request-monitor
-
+
Gustaf Neumann
WU Vienna
Request Monitor with user tracking functionality
@@ -34,7 +34,7 @@
BSD-Style
2
-
+
@@ -45,6 +45,9 @@
+
Index: openacs-4/packages/xotcl-request-monitor/tcl/throttle_mod-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-request-monitor/tcl/throttle_mod-procs.tcl,v
diff -u -r1.63 -r1.64
--- openacs-4/packages/xotcl-request-monitor/tcl/throttle_mod-procs.tcl 14 Nov 2018 18:29:55 -0000 1.63
+++ openacs-4/packages/xotcl-request-monitor/tcl/throttle_mod-procs.tcl 14 Nov 2018 19:01:11 -0000 1.64
@@ -33,12 +33,13 @@
package_parameter log-dir \
-default [file dirname [file rootname [ns_config ns/parameters ServerLog]]]
- package_parameter max-url-stats -default 500
- package_parameter time-window -default 10
- package_parameter trend-elements -default 48
- package_parameter max-stats-elements -default 5
- package_parameter do_throttle -default on
- package_parameter do_track_activity -default off
+ package_parameter max-url-stats -default 500
+ package_parameter time-window -default 10
+ package_parameter trend-elements -default 48
+ package_parameter max-stats-elements -default 5
+ package_parameter do_throttle -default on
+ package_parameter do_track_activity -default off
+ package_parameter do_slowdown_overactive -default off
#
# When updates happen on
@@ -197,8 +198,12 @@
set is_embedded_request [expr {
[string match "image/*" $content_type]
|| [string match "video/*" $content_type]
- || $content_type in { application/vnd.apple.mpegurl text/css application/javascript application/x-javascript }
- }]
+ || $content_type in {
+ application/vnd.apple.mpegurl
+ text/css
+ application/javascript
+ application/x-javascript
+ }}]
if {[info exists $var] && !$is_embedded_request && !${:off}} {
#ns_log notice "### already $var"
return [list 0 0 1]
@@ -227,7 +232,7 @@
#
return [list 0 0 0]
- } else {
+ } elseif {[do_slowdown_overactive]} {
#
# Check, whether the last request from a user was within
# the minimum time interval. We are not keeping a full table
@@ -236,8 +241,10 @@
#
incr :alerts
if {[info exists :active($requestKey)]} {
- # if more than one request for this key is already active,
- # return blocking time
+ #
+ # If more than one request for this key is already active,
+ # return blocking time.
+ #
lassign [set :active($requestKey)] to cnt
set retMs [expr {$cnt > ${:startThrottle} ? 500 : 0}]
# cancel the timeout
@@ -254,6 +261,8 @@
set cnt 0
}
return [list $cnt $retMs 0]
+ } else {
+ return [list 0 0 1]
}
}
@@ -1527,8 +1536,11 @@
toMuch ms repeat
#set t1 [clock milliseconds]
- if {$repeat} {
+ if {$repeat > 0} {
:add_statistics repeat ${:requestor} ${:pa} ${:url} ${:query}
+ if {$repeat > 1} {
+ :log "*** requestor (user ${:requestor}) would be blocked, when parameter do_slowdown_overactive would be activated"
+ }
set result -1
} elseif {$toMuch} {
:log "*** we have to refuse user ${:requestor} with $toMuch requests"
@@ -1635,7 +1647,7 @@
}
namespace eval ::xo {
-
+
proc is_ip {key} {
expr { [string match "*.*" $key] || [string match "*:*" $key] }
}
@@ -1657,7 +1669,7 @@
proc job_enqueue {cmd} {
nsv_lappend request_monitor jobs $cmd
}
-
+
proc job_dequeue {} {
foreach cmd [nsv_set -reset request_monitor jobs {}] {
{*}$cmd
@@ -1673,8 +1685,8 @@
ns_job queue -detached async-cmd $cmd
}
}
-
+
proc request_monitor_record_activity {key pa seconds clicks reason} {
if {[::xo::is_ip $key]} {
set user_id -1