--- loncom/lonsql 2002/05/17 14:03:04 1.43 +++ loncom/lonsql 2002/06/17 20:25:51 1.45 @@ -3,7 +3,7 @@ # The LearningOnline Network # lonsql - LON TCP-MySQL-Server Daemon for handling database requests. # -# $Id: lonsql,v 1.43 2002/05/17 14:03:04 matthew Exp $ +# $Id: lonsql,v 1.45 2002/06/17 20:25:51 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -189,6 +189,36 @@ sub logthis { my $local=localtime($now); print $fh "$local ($$): $message\n"; } + + + +# -------------------------------------------- Return path to profile directory + +sub propath { + my ($udom,$uname)=@_; + $udom=~s/\W//g; + $uname=~s/\W//g; + my $subdir=$uname.'__'; + $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; + my $proname="$perlvar{'lonUsersDir'}/$udom/$subdir/$uname"; + return $proname; +} + +# ------------------------------------------------------------------ Course log + +sub courselog { + my ($path,$command)=@_; + return 'not_yet_implemented'; +} + +# -------------------------------------------------------------------- User log + +sub userlog { + my ($path,$command)=@_; + return 'not_yet_implemented'; +} + + # ---------------------------------------------------- Fork once and dissociate $fpid=fork; exit if $fpid; @@ -276,11 +306,9 @@ sub make_new_child { my $userinput = <$client>; chomp($userinput); - my ($conserver,$querytmp, - $customtmp,$customshowtmp)=split(/&/,$userinput); - my $query=unescape($querytmp); - my $custom=unescape($customtmp); - my $customshow=unescape($customshowtmp); + my ($conserver,$query, + $arg1,$arg2,$arg3)=split(/&/,$userinput); + my $query=unescape($query); #send query id which is pid_unixdatetime_runningcounter $queryid = $thisserver; @@ -290,11 +318,41 @@ sub make_new_child { print $client "$queryid\n"; &logthis("QUERY: $query"); - &logthis("QUERY: $query"); sleep 1; + + my $result=''; + +# ---------- At this point, query is received, query-ID assigned and sent back +# $query eq 'logquery' will mean that this is a query against log-files + + + if (($query eq 'userlog') || ($query eq 'courselog')) { +# ----------------------------------------------------- beginning of log query +# +# this goes against a user's log file +# + my $udom=&unescape($arg1); + my $uname=&unescape($arg2); + my $command=&unescape($arg3); + my $path=&propath($udom,$uname); + if (-e "$path/activity.log") { + if ($query eq 'userlog') { + $result=&userlog($path,$command); + } else { + $result=&courselog($path,$command); + } + } else { + &logthis('Unable to do log query: '.$uname.'@'.$udom); + $result='no_such_file'; + } +# ------------------------------------------------------------ end of log query + } else { +# -------------------------------------------------------- This is an sql query + my $custom=unescape($arg1); + my $customshow=unescape($arg2); #prepare and execute the query my $sth = $dbh->prepare($query); - my $result; + my @files; my $subsetflag=0; if ($query) { @@ -371,8 +429,11 @@ sub make_new_child { $result=join("&",@r2) unless $query; $result.=$customresult; } - # reply with result - $result.="\n" if $result; +# ------------------------------------------------------------ end of sql query + } + # reply with result, append \n unless already there + + $result.="\n" unless ($result=~/\n$/); &reply("queryreply:$queryid:$result",$conserver); }