[LON-CAPA-cvs] cvs: loncom /interface/statistics lonstathelpers.pm

matthew lon-capa-cvs@mail.lon-capa.org
Wed, 03 Nov 2004 16:13:09 -0000


matthew		Wed Nov  3 11:13:09 2004 EDT

  Modified files:              
    /loncom/interface/statistics	lonstathelpers.pm 
  Log:
  No longer store the answer but the analysis in the caches.
  
  
Index: loncom/interface/statistics/lonstathelpers.pm
diff -u loncom/interface/statistics/lonstathelpers.pm:1.28 loncom/interface/statistics/lonstathelpers.pm:1.29
--- loncom/interface/statistics/lonstathelpers.pm:1.28	Mon Oct  4 15:11:38 2004
+++ loncom/interface/statistics/lonstathelpers.pm	Wed Nov  3 11:13:08 2004
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstathelpers.pm,v 1.28 2004/10/04 19:11:38 matthew Exp $
+# $Id: lonstathelpers.pm,v 1.29 2004/11/03 16:13:08 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -584,7 +584,7 @@
                                                  &mt('last student'));
         $student->{'answer'} = $answer;
     }
-    &Apache::lonstathelpers::write_answer_cache();
+    &Apache::lonstathelpers::write_analysis_cache();
     return if ($c->aborted());
     $r->rflush();
     # close progress window
@@ -633,20 +633,21 @@
     my $returnvalue;
     my $url = $resource->{'src'};
     my $symb = $resource->{'symb'};
-    my $answer = &get_from_answer_cache($sname,$sdom,$symb,$partid,$respid);
-    if (defined($answer)) {
-        return($answer);
-    }
-    my $courseid = $ENV{'request.course.id'};
-    my $Answ=&Apache::lonnet::ssi($url,('grade_target' => 'analyze',
-                                        'grade_domain' => $sdom,
-                                        'grade_username' => $sname,
-                                        'grade_symb' => $symb,
-                                        'grade_courseid' => $courseid));
-    (my $garbage,$Answ)=split(/_HASH_REF__/,$Answ,2);
-    my %Answer=&Apache::lonnet::str2hash($Answ);
+    my $analysis = &get_from_analysis_cache($sname,$sdom,$symb);
+    if (! defined($analysis)) {
+        &Apache::lonnet::logthis('uncached analysis');
+        my $courseid = $ENV{'request.course.id'};
+        my $Answ=&Apache::lonnet::ssi($url,('grade_target' => 'analyze',
+                                            'grade_domain' => $sdom,
+                                            'grade_username' => $sname,
+                                            'grade_symb' => $symb,
+                                            'grade_courseid' => $courseid));
+        (my $garbage,$analysis)=split(/_HASH_REF__/,$Answ,2);
+        &store_analysis($sname,$sdom,$symb,$analysis);
+    }
+    my %Answer=&Apache::lonnet::str2hash($analysis);
     #
-    undef($answer);
+    my $answer;
     foreach my $partid (@{$resource->{'parts'}}) {
         my $partdata = $resource->{'partdata'}->{$partid};
         foreach my $respid (@{$partdata->{'ResponseIds'}}) {
@@ -655,7 +656,6 @@
             $answer->{$partid}->{$respid} = &get_answer($prefix,$key,%Answer);
         }
     }
-    &store_answer($sname,$sdom,$symb,undef,undef,$answer);
     if (! defined($partid)) {
         $returnvalue = $answer;
     } elsif (! defined($respid)) {
@@ -700,7 +700,6 @@
     return $returnvalue;
 }
 
-
 #####################################################
 #####################################################
 
@@ -710,7 +709,7 @@
 
 =over 4
 
-=item &load_answer_cache($symb)
+=item &load_analysis_cache($symb)
 
 Loads the cache for the given symb into memory from disk.  
 Requires the cache filename be set.  
@@ -725,7 +724,7 @@
     my $current_symb = undef;
     my %cache;
 
-sub load_answer_cache {
+sub load_analysis_cache {
     my ($symb) = @_;
     return if (! defined($cache_filename));
     if (! defined($current_symb) || $current_symb ne $symb) {
@@ -748,34 +747,20 @@
 
 =pod
 
-=item &get_from_answer_cache($sname,$sdom,$symb,$partid,$respid)
+=item &get_from_analysis_cache($sname,$sdom,$symb,$partid,$respid)
 
 Returns the appropriate data from the cache, or undef if no data exists.
-If $respid is undefined, a hash ref containing the answers for the given 
-$partid is returned.  If $partid is undefined, a hash ref containing answers
-for all of the parts is returned.
 
 =cut
 
 #####################################################
 #####################################################
-sub get_from_answer_cache {
-    my ($sname,$sdom,$symb,$partid,$respid) = @_;
+sub get_from_analysis_cache {
+    my ($sname,$sdom,$symb) = @_;
     &ensure_proper_cache($symb);
     my $returnvalue;
-    if (exists($cache{$sname.':'.$sdom}) &&
-        ref($cache{$sname.':'.$sdom}) eq 'HASH') {
-        if (defined($partid) &&
-            exists($cache{$sname.':'.$sdom}->{$partid})) {
-            if (defined($respid) &&
-                exists($cache{$sname.':'.$sdom}->{$partid}->{$respid})) {
-                $returnvalue = $cache{$sname.':'.$sdom}->{$partid}->{$respid};
-            } else {
-                $returnvalue = $cache{$sname.':'.$sdom}->{$partid};
-            }
-        } else {
-            $returnvalue = $cache{$sname.':'.$sdom};
-        }
+    if (exists($cache{$sname.':'.$sdom})) {
+        $returnvalue = $cache{$sname.':'.$sdom};
     } else {
         $returnvalue = undef;
     }
@@ -787,16 +772,16 @@
 
 =pod
 
-=item &write_answer_cache($symb)
+=item &write_analysis_cache($symb)
 
 Writes the in memory cache to disk so that it can be read in with
-&load_answer_cache($symb).
+&load_analysis_cache($symb).
 
 =cut
 
 #####################################################
 #####################################################
-sub write_answer_cache {
+sub write_analysis_cache {
     return if (! defined($current_symb) || ! defined($cache_filename));
     my %cache_db;
     my $key = &Apache::lonnet::escape($current_symb);
@@ -820,7 +805,7 @@
 =item &ensure_proper_cache($symb)
 
 Called to make sure we have the proper cache set up.  This is called
-prior to every answer lookup.
+prior to every analysis lookup.
 
 =cut
 
@@ -830,16 +815,16 @@
     my ($symb) = @_;
     my $cid = $ENV{'request.course.id'};
     my $new_filename =  '/home/httpd/perl/tmp/'.
-        'problemanalysis_'.$cid.'_answer_cache.db';
+        'problemanalysis_'.$cid.'_analysis_cache.db';
     if (! defined($cache_filename) ||
         $cache_filename ne $new_filename ||
         ! defined($current_symb)   ||
         $current_symb ne $symb) {
         $cache_filename = $new_filename;
         # Notice: $current_symb is not set to $symb until after the cache is
-        # loaded.  This is what tells &load_answer_cache to load in a new
+        # loaded.  This is what tells &load_analysis_cache to load in a new
         # symb cache.
-        &load_answer_cache($symb);
+        &load_analysis_cache($symb);
         $current_symb = $symb;
     }
 }
@@ -849,26 +834,18 @@
 
 =pod
 
-=item &store_answer($sname,$sdom,$symb,$partid,$respid,$dataset)
+=item &store_analysis($sname,$sdom,$symb,$partid,$respid,$dataset)
 
-Stores the answer data in the in memory cache.
+Stores the analysis data in the in memory cache.
 
 =cut
 
 #####################################################
 #####################################################
-sub store_answer {
-    my ($sname,$sdom,$symb,$partid,$respid,$dataset) = @_;
+sub store_analysis {
+    my ($sname,$sdom,$symb,$dataset) = @_;
     return if ($symb ne $current_symb);
-    if (defined($partid)) {
-        if (defined($respid)) {
-            $cache{$sname.':'.$sdom}->{$partid}->{$respid} = $dataset;
-        } else {
-            $cache{$sname.':'.$sdom}->{$partid} = $dataset;
-        }
-    } else {
-        $cache{$sname.':'.$sdom}=$dataset;
-    }
+    $cache{$sname.':'.$sdom}=$dataset;
     return;
 }