Changeset 30520

Show
Ignore:
Timestamp:
09.05.2016 22:38:09 (4 years ago)
Author:
ak19
Message:

Refactoring activate.pl into activate.pm (class, OOP) and activate.pl. Now buildcolutils.pm uses do_deactivate() from activate.pm.

Location:
main/trunk/greenstone2
Files:
1 added
3 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/bin/script/activate.pl

    r30517 r30520  
    9090use File::Find; 
    9191 
    92 use HTTP::Response; 
    93 use LWP::Simple qw($ua !head); # import useragent object as $ua from the full LWP to use along with LWP::Simple 
    94         # don't import LWP::Simple's head function by name since it can conflict with CGI:head())            
    95 #use CGI qw(:standard);  # then only CGI.pm defines a head() 
    96 use Net::Ping; 
    97 use URI; 
    98  
     92# Greenstone modules 
     93use activate; 
    9994use colcfg; 
    10095use scriptutil; 
    10196use util; 
    102 #use enum; 
    103  
    104 # enumerations in perl, http://stackoverflow.com/questions/473666/does-perl-have-an-enumeration-type 
    105 # Unfortunately, not part of perl's core 
    106 #use enum qw(LEVEL_NONE LEVEL_ERROR LEVEL_INFO LEVEL_DEBUG); # debugging levels NONE == 0, ERROR=1 INFO=2 DEBUG=3 
    107  
    108 # global variables 
    109 #my $default_verbosity = LEVEL_ERROR; # by default we display basic error messages 
    110  
    111 my $default_verbosity = 2; # by default we display basic error and info messages 
    112  
    113 sub print_task_msg { 
    114     my ($task_msg, $verbosity_setting) = @_; 
    115      
    116     $verbosity_setting = $default_verbosity unless $verbosity_setting; 
    117     #$verbosity_setting = 1 unless defined $verbosity; 
    118     if($verbosity_setting >= 1) { 
    119     print STDERR "\n"; 
    120     print STDERR "************************\n"; 
    121     print STDERR "* $task_msg\n"; 
    122     print STDERR "************************\n"; 
    123     } 
    124 } 
    125  
    126 # Prints messages if the verbosity is right. Does not add new lines. 
    127 sub print_msg { 
    128     my ($msg, $min_verbosity, $verbosity_setting) = @_; 
    129      
    130     # only display error messages if the current  
    131     # verbosity setting >= the minimum verbosity level 
    132     # needed for that message to be displayed. 
    133      
    134     $verbosity_setting = $default_verbosity unless defined $verbosity_setting; 
    135     $min_verbosity = 1 unless defined $min_verbosity; 
    136     if($verbosity_setting >= $min_verbosity) { # by default display all 1 messages 
    137     print STDERR "$msg"; 
    138     } 
    139 } 
    140  
    141 # Method to send a command to a GS2 or GS3 library_URL 
    142 # the commands used in this script can be activate, deactivate, ping,  
    143 # and is-persistent (is-persistent only implemented for GS2). 
    144 sub config { 
    145     my ($library_url, $command, $check_message_against_regex, $site, $expected_error_code, $silent) = @_;  
    146     # Gatherer.java's configGS3Server doesn't use the site variable 
    147     # so we don't have to either 
    148      
    149     # for GS2, getting the HTTP status isn't enough, we need to read the output 
    150     # since this is what CollectionManager.config() stipulates. 
    151     # Using LWP::UserAgent::get($url) for this   
    152      
    153     if(!defined $library_url) { 
    154     return 0; 
    155     } 
    156     else { 
    157     $ua->timeout(5); # set LWP useragent to 5s max timeout for testing the URL 
    158     # Need to set this, else it takes I don't know how long to timeout  
    159     # http://www.perlmonks.org/?node_id=618534 
    160      
    161     # http://search.cpan.org/~gaas/libwww-perl-6.04/lib/LWP/UserAgent.pm 
    162     # use LWP::UserAgent's get($url) since it returns an HTTP::Response code 
    163      
    164     my $response_obj = $ua->get( $library_url.$command); 
    165      
    166     # $response_obj->content stores the content and $response_obj->code the HTTP response code 
    167     my $response_code = $response_obj->code(); 
    168      
    169     if(LWP::Simple::is_success($response_code)) {# $response_code eq RC_OK) { # LWP::Simple::is_success($response_code) 
    170         &print_msg("*** Command $library_url$command\n", 3); 
    171         &print_msg("*** HTTP Response Status: $response_code - Complete.", 3); 
    172          
    173         # check the page content is as expected 
    174         my $response_content = $response_obj->content; 
    175         my $resultstr = $response_content; 
    176         $resultstr =~ s@.*gs_content\"\>@@s;         
    177         $resultstr =~ s@</div>.*@@s; 
    178          
    179         if($response_content =~ m/$check_message_against_regex/) { 
    180         &print_msg(" Response as expected.\n", 3); 
    181         &print_msg("@@@@@@ Got result:\n$resultstr\n", 4); 
    182         return 1; 
    183         } else { 
    184         # if we expect the collection to be inactive, then we'd be in silent mode: if so, 
    185         # don't print out the "ping did not succeed" response, but print out any other messages 
    186          
    187         # So we only suppress the ping col "did not succeed" response if we're in silent mode 
    188         # But if any message other than ping "did not succeed" is returned, we always print it 
    189         if($response_content !~ m/did not succeed/ || !$silent) { 
    190             &print_msg("\n\tBUT: command $library_url$command response UNEXPECTED.\n", 3); 
    191             &print_msg("*** Got message:\n$response_content.\n", 4); 
    192             &print_msg("*** Got result:\n$resultstr\n", 3); 
    193         } 
    194         return 0; # ping on a collection may "not succeed." 
    195         } 
    196     }  
    197     elsif(LWP::Simple::is_error($response_code)) { # method exported by LWP::Simple, along with HTTP::Status constants 
    198         # check the page content is as expected 
    199         if(defined $expected_error_code && $response_code == $expected_error_code) { 
    200         &print_msg(" Response status $response_code as expected.\n", 3); 
    201         } else { 
    202         &print_msg("*** Command $library_url$command\n"); 
    203         &print_msg("*** Unexpected error. HTTP Response Status: $response_code - Failed.\n"); 
    204         } 
    205         return 0; # return false, since the response_code was an error, expected or not 
    206     } 
    207     else { 
    208         &print_msg("*** Command $library_url$command\n"); 
    209         &print_msg("*** Unexpected error. HTTP Response Status: $response_code - Failed.\n"); 
    210         return 0; 
    211     } 
    212     }    
    213 } 
    214  
    215 sub deactivate_collection { 
    216     my ($library_url, $gs_mode, $qualified_collection, $site) = @_;  
    217      
    218     if($gs_mode eq "gs2") { 
    219     my $DEACTIVATE_COMMAND = "?a=config&cmd=release-collection&c="; 
    220     my $check_message_against_regex = q/configured release-collection/; 
    221     config($library_url, $DEACTIVATE_COMMAND.$qualified_collection, $check_message_against_regex); 
    222     } 
    223     elsif ($gs_mode eq "gs3") { 
    224     my $DEACTIVATE_COMMAND = "?a=s&sa=d&st=collection&sn="; 
    225     my $check_message_against_regex = "collection: $qualified_collection deactivated"; 
    226     config($library_url, $DEACTIVATE_COMMAND.$qualified_collection, $check_message_against_regex, $site); 
    227     }    
    228 } 
    229  
    230 sub activate_collection { 
    231     my ($library_url, $gs_mode, $qualified_collection, $site) = @_;  
    232      
    233     if($gs_mode eq "gs2") { 
    234     my $ACTIVATE_COMMAND = "?a=config&cmd=add-collection&c="; 
    235     my $check_message_against_regex = q/configured add-collection/; 
    236     config($library_url, $ACTIVATE_COMMAND.$qualified_collection, $check_message_against_regex); 
    237     } 
    238     elsif ($gs_mode eq "gs3") { 
    239     my $ACTIVATE_COMMAND = "?a=s&sa=a&st=collection&sn="; 
    240     my $check_message_against_regex = "collection: $qualified_collection activated"; 
    241     config($library_url, $ACTIVATE_COMMAND.$qualified_collection, $check_message_against_regex, $site); 
    242     }    
    243 } 
    244  
    245 sub ping { 
    246     my ($library_url, $command, $gs_mode, $site, $silent) = @_; 
    247      
    248     # If the GS server is not running, we *expect* to see a "500" status code. 
    249     # If the GS server is running, then "Ping" ... "succeeded" is expected on success.  
    250     # When pinging an inactive collection, it will say it did "not succeed". This is 
    251     # a message of interest to return. 
    252     my $check_responsemsg_against_regex = q/(succeeded)/; 
    253     my $expected_error_code = 500; 
    254      
    255     &print_msg("*** COMMAND WAS: |$command|***\n", 4); 
    256      
    257     return config($library_url, $command, $check_responsemsg_against_regex, $site, $expected_error_code, $silent); 
    258 } 
    259  
    260 # send a pingaction to the GS library. General server-level ping. 
    261 sub ping_library { 
    262     my ($library_url, $gs_mode, $site) = @_; 
    263      
    264     my $command = ""; 
    265     if($gs_mode eq "gs2") {      
    266     $command = "?a=ping";        
    267     } 
    268     elsif ($gs_mode eq "gs3") {      
    269     $command = "?a=s&sa=ping"; 
    270     } 
    271     return &ping($library_url, $command, $gs_mode, $site); 
    272 } 
    273  
    274  
    275 # send a pingaction to a collection in GS library to check if it's active 
    276 sub ping_library_collection { 
    277     my ($library_url, $gs_mode, $qualified_collection, $site, $silent) = @_; 
    278      
    279     my $command = ""; 
    280     if($gs_mode eq "gs2") {      
    281     $command = "?a=ping&c=$qualified_collection"; 
    282     } 
    283     elsif ($gs_mode eq "gs3") {      
    284     $command = "?a=s&sa=ping&st=collection&sn=$qualified_collection";        
    285     } 
    286     return &ping($library_url, $command, $gs_mode, $site, $silent); 
    287 } 
    288  
    289 # return true if server is persistent, by calling is-persistent on library_url 
    290 # this is only for GS2, since the GS3 server is always persistent 
    291 sub is_persistent { 
    292     my ($library_url, $gs_mode) = @_; 
    293      
    294     if($gs_mode eq "gs3") { # GS3 server is always persistent 
    295     return 1; 
    296     } 
    297      
    298     my $command = "?a=is-persistent";    
    299     my $check_responsemsg_against_regex = q/true/;  # isPersistent: true versus isPersistent: false      
    300     return config($library_url, $command, $check_responsemsg_against_regex); 
    301 } 
    302  
    303 sub get_library_URL { 
    304     my ($gs_mode, $lib_name) = @_; # gs_mode can be gs3 or gs2, lib_name is the custom servlet name 
    305      
    306     # If we get here, we are dealing with a server included with GS. 
    307     # For GS3, we ask ant for the library URL. 
    308     # For GS2, we derive the URL from the llssite.cfg file. 
    309      
    310     my $url = undef;     
    311      
    312     if($gs_mode eq "gs2") {      
    313     my $llssite_cfg = &FileUtils::filenameConcatenate($ENV{'GSDLHOME'}, "llssite.cfg"); 
    314      
    315     if(-f $llssite_cfg) { 
    316         # check llssite.cfg for line with url property 
    317         # for server.exe also need to use portnumber and enterlib properties             
    318          
    319         # Read in the entire contents of the file in one hit 
    320         if (!open (FIN, $llssite_cfg)) { 
    321         &print_msg("activate.pl::get_library_URL failed to open $llssite_cfg ($!)\n"); 
    322         return undef; 
    323         } 
    324          
    325         my $contents; 
    326         sysread(FIN, $contents, -s FIN);             
    327         close(FIN); 
    328          
    329         my @lines = split(/[\n\r]+/, $contents); # split on carriage-returns and/or linefeeds 
    330         my $enterlib = ""; 
    331         my $portnumber = ""; # will remain empty (implicit port 80) unless it's specifically been assigned 
    332          
    333         foreach my $line (@lines) {              
    334         if($line =~ m/^url=(.*)$/) { 
    335             $url = $1;                   
    336         } elsif($line =~ m/^enterlib=(.*)$/) { 
    337             $enterlib = $1;                  
    338         } elsif($line =~ m/^portnumber=(.*)$/) { 
    339             $portnumber = $1;                    
    340         }    
    341         } 
    342          
    343         if(!$url) { 
    344         return undef; 
    345         } 
    346         elsif($url eq "URL_pending") { # library is not running 
    347         # do not process url=URL_pending in the file, since for server.exe  
    348         # this just means the Enter Library button hasn't been pressed yet               
    349         $url = undef; 
    350         } 
    351         else {  
    352         # In the case of server.exe, need to do extra work to get the proper URL 
    353         # But first, need to know whether we're indeed dealing with server.exe: 
    354          
    355         # compare the URL's domain to the full URL 
    356         # E.g. for http://localhost:8383/greenstone3/cgi-bin, the domain is localhost:8383 
    357         my $uri = URI->new( $url ); 
    358         my $host = $uri->host; 
    359         #print STDERR "@@@@@ host: $host\n"; 
    360         if($url =~ m/http:\/\/$host(\/)?$/) { 
    361             #if($url !~ m/http:\/\/$host:$portnumber(\/)?/ || $url =~ m/http:\/\/$host(\/)?$/) { 
    362             # (if the URL does not contain the portnumber, OR if the port is implicitly 80 and)                  
    363             # If the domain with http:// prefix is completely the same as the URL, assume server.exe 
    364             # then the actual URL is the result of suffixing the port and enterlib properties in llssite.cfg 
    365             $url = $url.":".$portnumber.$enterlib;           
    366         } # else, apache web server          
    367                  
    368         }            
    369     } 
    370     } elsif($gs_mode eq "gs3") { 
    371     # Either check build.properties for tomcat.server, tomcat.port and app.name (and default servlet name). 
    372     # app.name is stored in app.path by build.xml. Need to move app.name in build.properties from build.xml 
    373      
    374     # Or, run the new target get-default-servlet-url 
    375     # the output can look like: 
    376     # 
    377     # Buildfile: build.xml 
    378     #   [echo] os.name: Windows Vista 
    379     # 
    380     # get-default-servlet-url: 
    381     #   [echo] http://localhost:8383/greenstone3/library 
    382     # BUILD SUCCESSFUL 
    383     # Total time: 0 seconds 
    384      
    385     #my $output = qx/ant get-default-servlet-url/; # backtick operator, to get STDOUT (else 2>&1) 
    386     # see http://stackoverflow.com/questions/799968/whats-the-difference-between-perls-backticks-system-and-exec 
    387      
    388     # The get-default-servlet-url ant target can be run from anywhere by specifying the 
    389     # location of GS3's ant build.xml buildfile. Activate.pl can be run from anywhere for GS3 
    390     # GSDL3SRCHOME will be set for GS3 by gs3-setup.sh, a step that would have been necessary 
    391     # to run the activate.pl script in the first place 
    392     my $perl_command = "ant -buildfile \"$ENV{'GSDL3SRCHOME'}/build.xml\" get-default-servlet-url"; 
    393      
    394     if (open(PIN, "$perl_command |")) { 
    395         while (defined (my $perl_output_line = <PIN>)) { 
    396         if($perl_output_line =~ m@http:\/\/(\S*)@) { # grab all the non-whitespace chars 
    397             $url="http://".$1; 
    398         } 
    399         } 
    400         close(PIN); 
    401     } else { 
    402         &print_msg("activate.pl::get_library_URL: Failed to run $perl_command to work out library URL for $gs_mode\n"); 
    403     } 
    404     if(defined $lib_name) { 
    405         # replace the servlet_name portion of the url found, with the given library_name 
    406         $url =~ s@/[^/]*$@/$lib_name@; 
    407     } 
    408     } 
    409      
    410     # either the url is still undef or it is now set 
    411     #print STDERR "\n@@@@@ final URL:|$url|\n" if $url;      
    412     #print STDERR "\n@@@@@ URL still undef\n" if !$url; 
    413     return $url; 
    414 } 
    415  
    416 ### UNUSED METHODS TO MOVE TO util.pm? 
    417  
    418 # This method is now unused. Using ping_library instead to send the ping action to a 
    419 # GS2/GS3 server. This method can be used more generally to test whether a URL is alive. 
    420 # http://search.cpan.org/dist/libwww-perl/lib/LWP/Simple.pm 
    421 # and http://www.perlmonks.org/?node_id=618534 
    422 sub is_URL_active { 
    423     my $url = shift(@_); # gs3 or gs2 URL    
    424      
    425     my $status = 0; 
    426     if(defined $url) { 
    427     $ua->timeout(10); # set LWP useragent to 5s max timeout for testing the URL 
    428     # Need to set this, else it takes I don't know how long to timeout  
    429     # http://www.perlmonks.org/?node_id=618534 
    430      
    431     $status = LWP::Simple::head($url); # returns empty list of headers if it fails 
    432     # LWP::Simple::get($url) is more intensive, so don't need to do that 
    433     #print STDERR "**** $url is alive.\n" if $status; 
    434     } 
    435     return $status; 
    436 } 
    437  
    438 # Pinging seems to always return true, so this method doesn't work 
    439 sub pingHost { 
    440     my $url = shift(@_); # gs3 or gs2 URL 
    441      
    442     my $status = 0; 
    443     if(defined $url) { 
    444     # Get just the domain. "http://localhost/gsdl?uq=332033495" becomes "localhost" 
    445     # "http://localhost/greenstone/cgi-bin/library.cgi" becomes "localhost" too  
    446      
    447     #my $host = $url;        
    448     #$host =~ s@^http:\/\/(www.)?@@;         
    449     #$host =~ s@\/.*@@; 
    450     #print STDERR "**** HOST: $host\n"; 
    451      
    452     # More robust way 
    453     # http://stackoverflow.com/questions/827024/how-do-i-extract-the-domain-out-of-an-url 
    454     my $uri = URI->new( $url ); 
    455     my $host = $uri->host;  
    456      
    457     # Ping the host. http://perldoc.perl.org/Net/Ping.html   
    458     my $p = Net::Ping->new();        
    459     $status = $p->ping($host); # || 0. Appears to set to undef rather than 0 
    460     print STDERR "**** $host is alive.\n" if $status; #print "$host is alive.\n" if $p->ping($host); 
    461     $p->close();         
    462     }  
    463     # return whether pinging was a success or failure 
    464     return $status; 
    465 } 
    466  
    467 sub do_deactivate { 
    468     my($is_persistent_server, $library_url, $gs_mode, $site, $qualified_collection) = @_; 
    469  
    470  
    471     &print_msg("Pinging $library_url\n");        
    472     if (&ping_library($library_url, $gs_mode, $site)) { # server running 
    473          
    474         # server is running, so release the collection if  
    475         # the server is persistent and the collection is active 
    476         &print_msg("Checking if Greenstone server is persistent\n"); 
    477         $is_persistent_server = &is_persistent($library_url, $gs_mode);          
    478          
    479         if ($is_persistent_server) { # only makes sense to issue activate and deactivate cmds to a persistent server 
    480          
    481         &print_msg("Checking if the collection $qualified_collection is already active\n"); 
    482         my $collection_active = &ping_library_collection($library_url, $gs_mode, $qualified_collection, $site); 
    483          
    484         if ($collection_active) { 
    485             &print_msg("De-activating collection $qualified_collection\n"); 
    486             &deactivate_collection($library_url, $gs_mode, $qualified_collection, $site); 
    487         } 
    488         else { 
    489             &print_msg("Collection is not active => No need to deactivate\n"); 
    490         } 
    491         } 
    492         else { 
    493         &print_msg("Server is not persistent => No need to deactivate collection\n"); 
    494         } 
    495     } 
    496     else { 
    497         &print_msg("No response to Ping => Taken to mean server is not running\n"); 
    498     } 
    499  
    500     return $is_persistent_server; 
    501 } 
    502  
    503 sub do_activate { 
    504     my($is_persistent_server, $library_url, $gs_mode, $site, $qualified_collection) = @_; 
    505  
    506  
    507         &print_msg("Pinging $library_url\n"); 
    508         if (&ping_library($library_url, $gs_mode, $site)) { # server running 
    509          
    510         # don't need to work out persistency of server more than once, since the libraryURL hasn't changed               
    511         if (!defined $is_persistent_server) { 
    512             &print_msg("Checking if Greenstone server is persistent\n"); 
    513             $is_persistent_server = &is_persistent($library_url, $gs_mode); 
    514         } 
    515          
    516          
    517         if ($is_persistent_server) { # persistent server, so can try activating collection 
    518              
    519             &print_msg("Checking if the collection $qualified_collection is not already active\n"); 
    520              
    521             # Since we could have deactivated the collection at this point, 
    522             # it is likely that it is not yet active. When pinging the collection 
    523             # a "ping did not succeed" message is expected, therefore tell the ping 
    524             # to proceed silently 
    525             my $silent = 1; 
    526             my $collection_active = &ping_library_collection($library_url, $gs_mode, $qualified_collection, $site, $silent); 
    527              
    528             if (!$collection_active) { 
    529             &print_msg(" Collection is not active.\n"); 
    530             &print_msg("Activating collection $qualified_collection\n"); 
    531             &activate_collection($library_url, $gs_mode, $qualified_collection, $site); 
    532              
    533             # unless an error occurred, the collection should now be active: 
    534             $collection_active = &ping_library_collection($library_url, $gs_mode, $qualified_collection, $site); # not silent if ping did not succeed 
    535             if(!$collection_active) { 
    536                 &print_msg("ERROR: collection $qualified_collection did not get activated\n"); 
    537             } 
    538             } 
    539             else { 
    540             &print_msg("Collection is already active => No need to activate\n"); 
    541             } 
    542         } 
    543         else { 
    544             &print_msg("Server is not persistent => No need to activate collection\n"); 
    545         } 
    546         } 
    547         else { 
    548         &print_msg("No response to Ping => Taken to mean server is not running\n"); 
    549         } 
    550  
    551     return $is_persistent_server; 
    552 } 
    55397 
    55498 
     
    577121     
    578122    # http://stackoverflow.com/questions/6156742/how-can-i-capture-the-complete-commandline-in-perl 
    579     #print STDERR "@@@@@@@@@ ACTIVATE CMD: " . join " ", $0, @ARGV; 
     123    #print STDERR "@@@@@@@@@ ACTIVATE CMD: " . join " ", $0, @ARGV . "\n"; 
    580124     
    581125    # get the collection details 
     
    592136    my $keepold = 0; 
    593137    my $incremental = 0; # used by solr 
    594      
    595     # some further parameters 
    596     my $just_activate = 0; # don't do anything else than activating the collection if the server is running 
    597     my $just_deactivate = 0; # don't do anything else than deactivating the collection if the server is running 
    598  
    599  
    600     my $library_url = $ENV{'GSDL_LIBRARY_URL'} || undef; # to be specified on the cmdline if not using a GS-included web server 
     138 
     139    my $default_verbosity = 2; 
     140 
     141    my $library_url = undef; # to be specified on the cmdline if not using a GS-included web server 
    601142    # the GSDL_LIBRARY_URL env var is useful when running cmdline buildcol.pl in the linux package manager versions of GS3 
    602143     
     
    627168    elsif ($arg eq "-incremental") { 
    628169        $incremental = 1; 
    629     }    
    630     elsif ($arg eq "-justactivate") { 
    631         $just_activate = 1; 
    632     } 
    633     elsif ($arg eq "-justdeactivate") { 
    634         $just_deactivate = 1; 
    635170    } 
    636171    elsif ($arg eq "-library_url") { 
     
    653188    $build_dir = &FileUtils::filenameConcatenate($collection_dir, "building") unless (defined $build_dir); 
    654189    $index_dir = &FileUtils::filenameConcatenate($collection_dir, "index") unless (defined $index_dir); 
    655      
    656     &print_task_msg("Running  Collection  Activation  Stage"); 
     190 
     191    my $gsserver = new activate($qualified_collection, $site, $default_verbosity, $build_dir, $index_dir, $collect_dir, $library_url, $library_name); 
     192 
     193    $gsserver->print_task_msg("Running  Collection  Activation  Stage"); 
    657194     
    658195    # get and check the collection name 
    659196    if ((&colcfg::use_collection($site, $qualified_collection, $collect_dir)) eq "") { 
    660     &print_msg("Unable to use collection \"$qualified_collection\" within \"$collect_dir\"\n"); 
     197    $gsserver->print_msg("Unable to use collection \"$qualified_collection\" within \"$collect_dir\"\n"); 
    661198    exit -1; 
    662199    } 
     
    665202    # Beware: Only if $site is specified in the cmdline does collectionConfig.xml get  
    666203    # generated and does $gs_mode=gs3, else collect.cfg gets generated and $gs_mode=gs2 
    667     my $gs_mode = "gs2"; 
    668     if ((defined $site) && ($site ne "")) { # GS3 
    669     $gs_mode = "gs3"; 
    670     } 
     204    my $gs_mode = $gsserver->{'gs_mode'}; # "gs2" or "gs3", based on $site variable 
     205 
    671206    my $collect_cfg_filename = &colcfg::get_collect_cfg_name(STDERR, $gs_mode); 
    672207    my $collectcfg = &colcfg::read_collection_cfg ($collect_cfg_filename,$gs_mode); 
     
    701236    # activate and deactivate collections including for the incremental case 
    702237    if(!&FileUtils::directoryExists($build_dir)) { 
    703     &print_msg("No building folder at $build_dir to move to index.\n"); 
     238    $gsserver->print_msg("No building folder at $build_dir to move to index.\n"); 
    704239    exit -1 unless ($buildtype eq "solr"); #&& $incremental); 
    705240    } elsif (&FileUtils::isDirectoryEmpty($build_dir)) { 
    706     &print_msg("Nothing in building folder $build_dir to move into index folder.\n"); 
     241    $gsserver->print_msg("Nothing in building folder $build_dir to move into index folder.\n"); 
    707242    exit -1 unless ($buildtype eq "solr"); #&& $incremental); 
    708243    } 
     
    718253    # and apache for GS2), we work out the library URL: 
    719254    if(!$library_url) {  
    720     $library_url = &get_library_URL($gs_mode, $library_name); # returns undef if no server is running 
     255    $library_url = $gsserver->get_library_URL(); # returns undef if no server is running 
    721256    } 
    722257     
    723258    # CollectionManager's installCollection phase in GLI 
    724     # 2. Ping the library URL, and if it's a persistent server and running, release the collection 
    725     my $is_persistent_server = undef; 
    726     if($library_url && !$skipactivation) { # undef if no valid server URL 
    727     if($just_deactivate || !$just_activate) { # either $justdeactivate is provided or neither $justactivate and $justdeactivate are provided 
    728         # and deactivation will go through 
    729         $is_persistent_server = &do_deactivate($is_persistent_server, $library_url, $gs_mode, $site, $qualified_collection); 
    730     } 
     259    # 2. Ping the library URL, and if it's a persistent server and running, release the collection     
     260    if($library_url && !$skipactivation) { # undef if no valid server URL    
     261    $gsserver->do_deactivate();  
    731262    } 
    732263 
    733264    # 2b. If we're working with a solr collection, then start up the solrserver now. 
    734265    my $solr_server; 
    735 if(!$just_activate && !$just_deactivate) { 
    736266    my @corenames = (); 
    737267    if($buildtype eq "solr") { # start up the jetty server   
     
    778308     
    779309    if(&FileUtils::directoryExists($index_dir)) { 
    780         &print_task_msg("Removing \"index\""); 
     310        $gsserver->print_task_msg("Removing \"index\""); 
    781311         
    782312        if ($buildtype eq "solr") { 
     
    793323         
    794324        if (&FileUtils::directoryExists($index_dir)) { 
    795         &print_msg("The index directory $index_dir could not be deleted.\n"); # CollectionManager.Index_Not_Deleted 
     325        $gsserver->print_msg("The index directory $index_dir could not be deleted.\n"); # CollectionManager.Index_Not_Deleted 
    796326        } 
    797327    } 
     
    808338     
    809339    # Move the building directory to become the new index directory 
    810     &print_task_msg("Moving \"building\" -> \"index\""); 
     340    $gsserver->print_task_msg("Moving \"building\" -> \"index\""); 
    811341    &FileUtils::moveFiles($build_dir, $index_dir); 
    812342    if(&FileUtils::directoryExists($build_dir) || !&FileUtils::directoryExists($index_dir)) {            
    813         &print_msg("Could not move $build_dir to $index_dir.\n"); # CollectionManager.Build_Not_Moved 
     343        $gsserver->print_msg("Could not move $build_dir to $index_dir.\n"); # CollectionManager.Build_Not_Moved 
    814344    } 
    815345    } 
     
    823353     
    824354    if($build_dir eq $index_dir) { # building_dir can have been set to "index" folder, see incremental-buildcol.pl 
    825         &print_task_msg("building folder is index folder, not moving"); 
     355        $gsserver->print_task_msg("building folder is index folder, not moving"); 
    826356    } else { 
    827357        # Copy just the contents of building dir into the index dir, overwriting  
    828358        # existing files, but don't replace index with building. 
    829         &print_task_msg("Moving \"building\" -> \"index\"");         
     359        $gsserver->print_task_msg("Moving \"building\" -> \"index\"");       
    830360        &FileUtils::moveDirectoryContents($build_dir, $index_dir); 
    831361    } 
     
    854384    $solr_server->solr_xml_to_solr_xml_in(); 
    855385    } 
    856 }#end if(!$just_activate && !$just_deactivate) 
     386 
    857387     
    858388    # 4. Ping the library URL, and if it's a persistent server and running, activate the collection again    
     
    861391    if($build_dir eq $index_dir || !&FileUtils::directoryExists($build_dir) || &FileUtils::isDirectoryEmpty($build_dir)) { 
    862392     
    863     if($library_url && (!$skipactivation)) { # undef if no valid server URL 
    864         if($just_activate || !$just_deactivate) { # either $justactivate is provided or neither $justdeactivate and $justactivate are provided  
    865         # then activation will go through        
    866         $is_persistent_server = &do_activate($is_persistent_server, $library_url, $gs_mode, $site, $qualified_collection); 
    867         }     
     393    if($library_url && !$skipactivation) { # undef if no valid server URL 
     394        $gsserver->do_activate(); 
    868395    } 
    869396    } else { # installcollection failed      
    870397    #CollectionManager.Preview_Ready_Failed 
    871     &print_msg("Building directory is not empty or still exists. Failed to properly move $build_dir to $index_dir.\n"); 
    872     } 
    873      
    874     &print_msg("\n"); 
    875      
    876     if(!$just_activate && !$just_deactivate && $buildtype eq "solr") { 
     398    $gsserver->print_msg("Building directory is not empty or still exists. Failed to properly move $build_dir to $index_dir.\n"); 
     399    } 
     400     
     401    $gsserver->print_msg("\n"); 
     402     
     403    if($buildtype eq "solr") { 
    877404    if ($solr_server->explicitly_started()) { 
    878405        $solr_server->stop(); 
  • main/trunk/greenstone2/perllib/buildcolutils.pm

    r30518 r30520  
    3333use File::Basename; 
    3434 
     35use activate; 
    3536use colcfg; 
    3637use dbutil; 
     
    685686     
    686687        if(!$dbSupportsConcurrentRW) { 
    687         #$self->{'justdeactivate'} = 1; 
    688         #$self->activate_collection(); 
    689         #$self->{'justdeactivate'} = 0; 
    690         $self->activate_collection("just_deactivate");       
     688        # all except the collection (1st parameter) can be empty. For GS3, also set the site parameter 
     689        my $gsserver = new activate( $self->get_collection(), $self->{'site'}, $self->{'verbosity'}, $self->{'builddir'}, $self->{'indexdir'}, $self->{'collectdir'}, $self->{'library_url'}, $self->{'library_name'}); 
     690        $gsserver->print_task_msg("About to deactivate collection ".$self->get_collection()); 
     691        #$self->{'library_url'} = $gsserver->get_library_URL(); 
     692        $gsserver->do_deactivate();      
    691693        } 
    692694        $_->make_infodatabase();         
     
    718720     
    719721        if(!$dbSupportsConcurrentRW) { 
    720         $self->activate_collection("just_deactivate");       
     722        # all except the collection (1st parameter) can be empty. For GS3, also set the site parameter 
     723        my $gsserver = new activate( $self->get_collection(), $self->{'site'}, $self->{'verbosity'}, $self->{'builddir'}, $self->{'indexdir'}, $self->{'collectdir'}, $self->{'library_url'}, $self->{'library_name'}); 
     724        $gsserver->print_task_msg("About to deactivate collection ".$self->get_collection()); 
     725        #$self->{'library_url'} = $gsserver->get_library_URL(); 
     726        $gsserver->do_deactivate(); 
    721727        } 
    722728        $_->make_infodatabase();  
     
    794800sub activate_collection 
    795801{ 
    796   my $self = shift(@_);   
    797   my $activation_cmd = shift(@_); 
    798   my($just_activate, $just_deactivate); 
    799   if(defined $activation_cmd) { 
    800       $just_deactivate = 1 if($activation_cmd eq "just_deactivate"); 
    801       $just_activate = 1 if($activation_cmd eq "just_activate"); 
    802       if($activation_cmd eq "just_deactivate_and_activate") { 
    803       $just_deactivate = 1; 
    804       $just_activate = 1; 
    805       } 
    806   } 
     802  my $self = shift(@_); 
    807803 
    808804  # if buildcol.pl was run with -activate, need to run activate.pl 
     
    812808    #my $quoted_argv = join(" ", map { "\"$_\"" } @ARGV); 
    813809    my @activate_argv = (); 
     810    push(@activate_argv, '-library_url', $self->{'library_url'}) if ($self->{'library_url'}); 
     811    push(@activate_argv, '-library_name', $self->{'library_name'}) if ($self->{'library_name'}); 
    814812    push(@activate_argv, '-collectdir', $self->{'collectdir'}) if ($self->{'collectdir'}); 
    815813    push(@activate_argv, '-builddir', $self->{'builddir'}) if ($self->{'builddir'}); 
     814    push(@activate_argv, '-indexdir', $self->{'indexdir'}) if ($self->{'indexdir'}); 
    816815    push(@activate_argv, '-site', $self->{'site'}) if ($self->{'site'}); 
    817816    push(@activate_argv, '-verbosity', $self->{'verbosity'}) if ($self->{'verbosity'}); 
     
    819818    push(@activate_argv, '-keepold') if ($self->{'keepold'}); 
    820819    push(@activate_argv, '-incremental') if ($self->{'incremental'}); 
    821     push(@activate_argv, '-justactivate') if ($just_activate || $self->{'justactivate'}); 
    822     push(@activate_argv, '-justdeactivate') if ($just_deactivate || $self->{'justdeactivate'}); 
     820    push(@activate_argv, '-skipactivation', $self->{'skipactivation'}) if ($self->{'skipactivation'}); 
     821 
    823822    my $quoted_argv = join(' ', map { "\"$_\"" } @activate_argv); 
    824823    my $activatecol_cmd = '"' . &util::get_perl_exec(). '" -S activate.pl ' . $quoted_argv . ' "' . $self->get_collection() . '"'; 
  • main/trunk/greenstone2/perllib/downloaders/WgetDownload.pm

    r28560 r30520  
    246246    #print STDOUT "Command is: $command\n"; 
    247247 
    248     # Wget's output needs to be monitored to find out when it has naturally termianted. 
     248    # Wget's output needs to be monitored to find out when it has naturally terminated. 
    249249    # Wget's output is sent to its STDERR so we can't use open2 without doing 2>&1. 
    250250    # On linux, 2>&1 launches a subshell which then launches wget, meaning that killing