libreccm-legacy/tools-legacy/tools/lib/CCM/Server.pm

205 lines
4.2 KiB
Perl
Executable File

# CCM::Server
#
# Copyright (C) 2004 Red Hat Inc. All Rights Reserved.
#
# The contents of this file are subject to the CCM Public
# License (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of
# the License at http://www.redhat.com/licenses/ccmpl.html
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# Daniel Berrange <berrange@redhat.com>
# Dennis Gregorovic <dgregor@redhat.com>
#
# $Id: Server.pm 288 2005-02-22 00:55:45Z sskracic $
=pod
=head1 NAME
CCM:Server
=head1 SYNOPSIS
=head1 DESCRIPTION
=head1 METHODS
=over 4
=cut
package CCM::Server;
use vars qw(@ISA);
use CCM::Runtime;
use CCM::Util;
@ISA = qw(CCM::Runtime);
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $self = $class->SUPER::new(@_);
$self->{verbose} = 0;
$self->{args} = [];
bless $self, $class;
return $self;
}
sub name {
my $self = shift;
return "";
}
sub args {
my $self = shift;
if (@_) {
$self->{args} = shift;
}
return $self->{args};
}
sub verbose {
my $self = shift;
if (@_) {
$self->{verbose} = shift;
}
return $self->{verbose};
}
sub start {
my $self = shift;
my $command = $self->getCommandLine() . " start";
if (@{$self->args()}) {
$command .= " " . join(" ", @{$self->args()});
}
if (@_) {
$command .= " " . join(" ", @_);
}
CCM::Util::setuser();
$self->runExec($command);
}
sub stop {
my $self = shift;
my $command = $self->getCommandLine() . " stop";
if (@{$self->args()}) {
$command .= " " . join(" ", @{$self->args()});
}
if (@_) {
$command .= " " . join(" ", @_);
}
CCM::Util::setuser();
$self->run($command);
}
sub getServiceName {
my $self = shift;
if (!defined $self->{service_name}) {
if (open (IN, $self->windowsServiceLockFile())) {
$self->{service_name} = <IN>;
close IN;
} else {
$self->{service_name} = `ccm get --value waf.web.site_name`;
$self->{service_name} =~ s/://g;
chomp($self->{service_name});
if ($self->name()) {
$self->{service_name} = $self->name() . "-" . $self->{service_name};
}
}
}
return $self->{service_name};
}
sub windowsStart {
my $self = shift;
$self->windowsInstall() unless $self->windowsServiceInstalled();
my $service_name = $self->getServiceName();
$self->run("net start $service_name");
}
sub windowsStop {
my $self = shift;
my $service_name = $self->getServiceName();
$self->run("net stop $service_name");
}
sub windowsReinstall {
my $self = shift;
$self->windowsUninstall(@_);
$self->windowsInstall(@_);
}
sub windowsServiceLockFile {
my $self = shift;
if (!defined $self->{service_lock_file}) {
$self->{service_lock_file} = File::Spec->catfile($self->getCCMHome(),'data',$self->name() . '_service');
}
return $self->{service_lock_file};
}
sub windowsServiceInstalled {
my $self = shift;
return (-f $self->windowsServiceLockFile());
}
sub getClassPath {
my $self = shift;
my $classpath = $self->SUPER::getClassPath();
$classpath = CCM::Util::catpath($classpath, File::Spec->catfile($self->getJavaHome(),'lib','tools.jar'));
return $classpath;
}
sub getServer {
my $sc = shift;
if ( ! defined $sc ) {
$sc = $ENV{'CCM_SERVLET_CONTAINER'};
if ( ! defined $sc ) {
CCM::Util::error("servlet container not specified");
}
}
$sc = uc (substr($sc,0,1)) . lc(substr($sc,1));
my $server = eval "use CCM::Server::$sc; CCM::Server::$sc->new()";
if ($@) {
CCM::Util::error("servlet container '$sc' not recognized");
}
return $server;
}
sub run {
my $self = shift;
if ($self->{verbose} > 0) {
print "@_\n";
}
system @_;
}
sub runExec {
my $self = shift;
if ($self->{verbose} > 0) {
print "@_\n";
}
exec @_;
}
1 # So that the require or use succeeds.
__END__
=back 4
=head1 AUTHORS
=head1 COPYRIGHT
=head1 SEE ALSO
L<perl(1)>
=cut