#!/usr/bin/perl use strict; use warnings; use File::Find; use Time::HiRes qw(gettimeofday tv_interval); use BSD::Resource; # For memory and granular CPU usage # 1. Start Benchmark Timer my $start_time = [gettimeofday]; sub escape_html { my $str = shift; return "" unless defined $str; $str =~ s/&/&/g; $str =~ s/</g; $str =~ s/>/>/g; $str =~ s/"/"/g; $str =~ s/'/'/g; return $str; } my %params; if ($ENV{QUERY_STRING}) { foreach my $pair (split /&/, $ENV{QUERY_STRING}) { my ($key, $value) = split /=/, $pair; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $params{$key} = $value; } } my $search_text = $params{'q'} || ''; $search_text = substr($search_text, 0, 64); $search_text =~ s/[^a-zA-Z0-9 ]//g; my $directory = '../log/'; my @results; my %excluded_files = ( 'index.html' => 1, ); # Track IO operations (simple count) my $files_read = 0; if ($search_text =~ /\S/) { find({ wanted => sub { return unless -f $_ && $_ eq 'index.html'; my $rel_path = $File::Find::name; $rel_path =~ s|^\Q$directory\E/?||; return if $excluded_files{$rel_path}; if (open my $fh, '<', $_) { $files_read++; # Tracking IO my $content = do { local $/; <$fh> }; close $fh; if ($content =~ /\Q$search_text\E/i) { my ($title) = $content =~ /
]*>(.*?)<\/p>/is; my $snippet = $p_content || ""; $snippet =~ s/<[^>]*>//g; $snippet =~ s/\s+/ /g; $snippet = escape_html(substr($snippet, 0, 50)); $snippet .= "..." if length($p_content || "") > 50; push @results, { path => $File::Find::name, title => $title, snippet => $snippet }; } } }, no_chdir => 0, follow => 0, }, $directory); } # --- 2. Calculate Metrics --- my $end_time = [gettimeofday]; my $elapsed = tv_interval($start_time, $end_time); # CPU & RAM Usage via BSD::Resource my $rusage = getrusage(); my $user_cpu = $rusage->utime; # User CPU time my $system_cpu = $rusage->stime; # System CPU time my $max_rss = $rusage->maxrss; # Peak RAM (usually in KB on Linux) # --- 3. Output --- print "Content-Type: text/html\n\n"; my $list; if ($search_text eq '') { $list = "
Please enter a search term above.
"; } elsif (@results == 0) { $list = "No results found for \"$search_text\".
"; } else { $list = "