Selaa lähdekoodia

Add server timing to static renders

George Baugh 3 vuotta sitten
vanhempi
sitoutus
3ae5237a08
1 muutettua tiedostoa jossa 11 lisäystä ja 6 poistoa
  1. 11 6
      lib/TCMS.pm

+ 11 - 6
lib/TCMS.pm

@@ -134,9 +134,10 @@ sub app {
 
     my $streaming = $env->{'psgi.streaming'};
     $query->{streaming} = $streaming;
+    $query->{start} = $start;
     if (!$active_user && !$has_query) {
-        return _static("$path.z",$streaming) if -f "www/statics/$path.z" && $deflate;
-        return _static($path,$streaming) if -f "www/statics/$path";
+        return _static("$path.z",$start) if -f "www/statics/$path.z" && $deflate;
+        return _static($path,$start) if -f "www/statics/$path";
     }
 
     return _serve("www/$path", $start, $streaming, $last_fetch, $deflate) if -f "www/$path";
@@ -198,8 +199,8 @@ sub app {
 };
 
 sub _generic($type, $query) {
-    return _static("$type.z",$query->{streaming}) if -f "www/statics/$type.z";
-    return _static($type, $query->{streaming}) if -f "www/statics/$type";
+    return _static("$type.z",$query->{start}) if -f "www/statics/$type.z";
+    return _static($type, $query->{start}) if -f "www/statics/$type";
     my %lookup = (
         notfound => \&Trog::Routes::HTML::notfound,
         forbidden => \&Trog::Routes::HTML::forbidden,
@@ -208,7 +209,7 @@ sub _generic($type, $query) {
     return $lookup{$type}->($query);
 }
 
-sub _notfound ( $query ) {
+sub _notfound ($query) {
     return _generic('notfound', $query);
 }
 
@@ -220,7 +221,7 @@ sub _badrequest($query) {
     return _generic('badrequest', $query);
 }
 
-sub _static($path,$streaming=0,$last_fetch=0) {
+sub _static($path,$start,$last_fetch=0) {
 
     # XXX because of psgi I can't just vomit the file directly
     if (open(my $fh, '<', "www/statics/$path")) {
@@ -240,6 +241,10 @@ sub _static($path,$streaming=0,$last_fetch=0) {
         my $code = $mt > $last_fetch ? $hdrs->getStatusCode() : 304;
         $headers_parsed->{"Last-Modified"} = $now_string;
 
+        # Append server-timing headers
+        my $tot = tv_interval($start) * 1000;
+        $headers_parsed->{'Server-Timing'} = "static;dur=$tot";
+
         return [$code, [%$headers_parsed], $fh];
     }
     return [ 403, ['Content-Type' => $Trog::Vars::content_types{plain}], ["STAY OUT YOU RED MENACE"]];