Ok. So you are thinking it might be the loop then too?
TIA
- Jim
At 11:48 AM 7/8/2001 -0700, Sandor W. Sklar wrote:
>you might want to look at "swatch", by Todd Atkins, to see how it is done
>there ...
>
><http://www.oit.ucsb.edu/~eta/swatch/>
>
>There is a File::Tail module which might work for you as well, or, at
>least show you another way to do it.
>
>-s-
>
>
>At 2:20 PM -0400 7/8/01, Jim Conner wrote:
>>I am writing a script that is quite cool imo once I get it done. But
>>already I am seeing that it takes a ton of system resources. Simply put,
>>the script watches a log file (like tail -f) and then reacts to certain
>>things that occur. I am thinking that the loop that it is in might be
>>taking up all the resources but that doesn't quite jive with my knowledge
>>of how this kind of thing works. Here is a snippet of the resource usage
>>from top(3):
>>
>>Swap: 34236K av, 7268K used, 26968K free 35756K cached
>>
>> PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
>> 8400 qadmin 17 0 3560 3560 1404 R 0 98.8 5.6 0:28 perl
>>
>>
>>Here is a snippet of the part of the code that does the tail -f:
>>
>>
>>if ( !chdir($qlogdir) ) {
>> print "Cannot read $qlogdir: $!\n";
>> return(undef);
>>} else {
>> my $curpos;
>>
>> &dmsg( __LINE__,
>> "Reading at end of Quake logfile: $qlogfile\n");
>>
>> open(QLOG,$qlogfile)
>> or die("Unable to open $qlogfile: $!\n");
>>
>> while ( <QLOG> ) {
>> $curpos++;
>> }
>>
>> &dmsg( __LINE__, "Cursor Pos: $curpos\n");
>>
>> # Following tail -f code provided by http://www.PerlMonks.org
>> # Monk unknown.
>>
>> for ( ; ; ) {
>> my $vip = 0; # vote in progress
>> my $input;
>> my $timestart; # Leave this here
>> # until I know I dont
>> # need it.
>> my $timestop;
>> my $player_name;
>> my $reqed_map;
>> my $command;
>>
>> for ( $curpos = tell(QLOG) ;
>> $input = <QLOG> ;
>> $curpos = tell(QLOG) ) {
>> chomp $input;
>>
>> if ( defined $input ) {
>> &dmsg( __LINE__,"$input\n");
>> } else {
>> &dmsg( __LINE__,
>> basename($qlogfile) . " : EMPTY SET!\n");
>> }
>>
>> $_ = $input;
>>
>> ## START OUR SWITCH BLOCK!
>>
>> switch: {
>>
>> ##
>> # This next block for map voting.
>> ##
>>
>> /.*] (.*): \!$keyword_map/ && do {
>> $input =~ /] (.*): \!($keyword_map)
>> ([a-zA-Z0-9].*)/;
>> ($player_name,
>> $command ,
>> $reqed_map ) = ($1,$2,$3);
>> my $current_map = ¤t_map;
>>
>> if ( !defined $reqed_map && $player_name ne
>> /[Cc]onsole/ ) {
>> &usage("vote_assist");
>> } else {
>> # This is where we decide what kind of vote
>> we are
>> # in. See comments.
>>
>> if ( $vote_type == 0 ) {
>> &type_votemap($reqed_map) if (
>> $current_map eq $vote_map );
>>
>> } elsif ( $vote_type == 2 ) {
>> # check what map we are in here.
>> # then if we are in votemap, react :
>> # or if we are in regular map, react
>> ( $current_map eq $vote_map ) ?
>> &type_votemap ($reqed_map):
>>&type_no_votemap($reqed_map);
>> }
>>
>> sub type_votemap($) {
>> my $funcName = (caller(0))[3];
>> my $reqed_map = shift;
>>
>> print STDERR "Now in $funcName\n";
>> # This section will work in votemap ONLY and
>> # players can only vote during this map.
>> &map_vote($player_name,0,$reqed_map);
>> }
>>
>> sub type_no_votemap($) {
>> my $funcName = (caller(0))[3];
>> my $reqed_map = shift;
>>
>> print STDERR "Now in $funcName\n";
>> # This section will work in any map and
>> # players can vote anytime during play.
>> # Must use vote session.
>> print STDERR "Requested map is:
>> $reqed_map from $funcName\n";
>> $vip = &map_vote($player_name,1,
>> $reqed_map );
>> }
>>
>> }
>> };
>> last switch;
>>
>> ## END OF SWITCH BLOCK!
>>
>> if ( $vip ) {
>> # Set my timestop (time limit for an active vote)
>> ($timestart,
>> $timestop) = &get_seconds();
>> print "Timestart is: $timestart and " .
>> "timestop is: $timestop\n";
>> }
>>
>> }
>>
>> }
>> seek(QLOG, $curpos, 0);
>> }
>>}
>>
>>
>>
>>
>>
>>- Jim
>>
>>-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
>>http://www.perlmonks.org/index.pl?node_id=67861&lastnode_id=67861
>>
>>-----BEGIN PERL GEEK CODE BLOCK----- ------BEGIN GEEK CODE BLOCK------
>>Version: 0.01 Version: 3.12
>>P++>*@$c?P6?R+++>++++@$M GIT/CM/J d++(--) s++:++ a-
>>>++++$O!MA->++++E!> PU-->+++BD C++++(+) UB++++$L++++$S++++$
>>$C-@D!>++++(-)$S++++@$X?WP+>++++MO!>+++ P++(+)>+++++ L+++(++++)>+++++$ !E*
>>+PP+++>++++n-CO?PO!o >++++G W++(+++) N+ o !K w--- PS---(-)@ PE
>>>*(!)$A-->++++@$Ee---(-)Ev++uL++>*@$uB+ Y+>+++ PGP t+(+++)>+++@ 5- X++ R@
>>>*@$uS+>*@$uH+uo+w-@$m! tv+ b? DI-(+++) D+++(++) G(++++)
>>------END PERL GEEK CODE BLOCK------ ------END GEEK CODE BLOCK------
>
>
>--
>------------------------------------------------
>sandor w. sklar | Non impediti
>unix systems administrator | ratione
>stanford university itss-css | cogitationis
>------------------------------------------------
- Jim
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
http://www.perlmonks.org/index.pl?node_id=67861&lastnode_id=67861
-----BEGIN PERL GEEK CODE BLOCK----- ------BEGIN GEEK CODE BLOCK------
Version: 0.01 Version: 3.12
P++>*@$c?P6?R+++>++++@$M GIT/CM/J d++(--) s++:++ a-
>++++$O!MA->++++E!> PU-->+++BD C++++(+) UB++++$L++++$S++++$
$C-@D!>++++(-)$S++++@$X?WP+>++++MO!>+++ P++(+)>+++++ L+++(++++)>+++++$ !E*
+PP+++>++++n-CO?PO!o >++++G W++(+++) N+ o !K w--- PS---(-)@ PE
>*(!)$A-->++++@$Ee---(-)Ev++uL++>*@$uB+ Y+>+++ PGP t+(+++)>+++@ 5- X++ R@
>*@$uS+>*@$uH+uo+w-@$m! tv+ b? DI-(+++) D+++(++) G(++++)
------END PERL GEEK CODE BLOCK------ ------END GEEK CODE BLOCK------