+
+# Procedure explain-refresh
+proc explain-refresh {target finish} {
+ explain-check-0 $target {} {} $finish
+}
+
+# Procedure explain-check
+# Checks target for explain database.
+# Evals "$finish $target" on finish.
+proc explain-check {target finish} {
+ global profile
+
+ set refresh 0
+ set time [clock seconds]
+ set etime $profile($target,timeLastExplain)
+ if {[string length $etime]} {
+ # Check last explain. If 1 day since last explain do explain egain.
+ # 1 day = 86400
+ if {$time > [expr 180 + $etime]} {
+ set refresh 1
+ }
+ } else {
+ # Check last init. If never init or 1 week after do explain anyway.
+ # 1 week = 604800
+ set etime $profile($target,timeLastInit)
+ if {![string length $etime]} {
+ set refresh 1
+ } elseif {$time > [expr 604800 + $etime]} {
+ set refresh 1
+ }
+ }
+ if {$refresh} {
+ explain-refresh $target $finish
+ } else {
+ eval $finish [list $target]
+ }
+}