[Cascavel-pm] Erro na herança de subrotina
Ednardo Lobo
ednardo em elobo.cjb.net
Quinta Março 6 12:28:08 CST 2003
On Thu, Mar 06, 2003 at 02:52:00PM -0300, Marcia Henke wrote:
> Olá pessoal !!
>
>
> Estou tendo o seguinte erro quando executo meu arquivo Monitor.pl
> : Can't locate object method "getNameSystem" via package
> "ServiceController" (perhaps you forgot to load "ServiceController"?)
> at SNMPManager.pm line 8. Compilation failed in require at
> ./Monitor.pl line 6. BEGIN failed--compilation aborted at ./Monitor.pl
> line 6.
>
>
> No arquivo Monitor.pl tenho a seguinte implementação
>
> #!/usr/bin/perl -I/home/monitor
> use SNMPManager; # LINHA 6
> $objSNMP = new SNMPManager();
> $serviceSNMP = SNMPManager->checkService();
> $config = ServerManager->getValue("STATUS_MONITOR");
> if ($config == 1){
> if (index($serviceSNMP, "No Response") != -1) {
> SNMPManager -> restart();
> }#FIM TESTE STATUS SERVIÇO "SNMP"
> }
>
>
> No arquivo SNMPManager.pm esta implementado da seguinte forma :
>
> package SNMPManager;
> use ServiceController;
> our @ISA = ("ServiceController");
> $objSNMP = new ServiceController();
> $dir = "/home/monitor/novo/logs/2003";
> $nameFile = ServiceController->getNameSystem(); # LINHA 8
> sub new {
> my $SNMPService = {};
> checkStatus();
> bless $SNMPService, "SNMPManager";
> return $SNMPService;
> }
>
> sub checkService {
> system("snmpwalk suryatec -c public -v 2c sysUptime > SNMP-scplog 2> SNMP-scplog");
> $result = `cat SNMP-scplog`;
> system("rm -rf SNMP-scplog");
> return $result;
> }
>
> sub restart {
> system("/etc/init.d/snmpd restart >> $dir/$nameFile");
> }
> 1;
>
>
> E o arquivo ServiceController.pm, que servirá como um controlador,
> onde SNMPManager.pm não sabe que existe o LogManager.pm :
>
> package ServiceController;
> use StatusManager;
> use LogManager;
> our @ISA = ("LogManager", "StatusManager");
> $objLog=new LogManager();
> $objStatus=statusManager StatusManager();
> sub new {
> $class = shift;
> $self = {};
> bless ($self,$class);
> return $self;
> }
> 1;
>
> O que estou fazendo errado, pois não consigo visualizar onde está o
> erro. O objetos estão carregados. Agradeço ajuda anciosa
>
Márcia, a estruturação dos pacotes não está muito boa e você não
está utilizando a herança de forma muito adequada, mas, por agora, tente
substituir a linha 8:
$nameFile = ServiceController->getNameSystem();
por
$nameFile = ServiceController::getNameSystem();
Acho que irá resolver seu problema!!
--
Ednardo Lobo - www.elobo.cjb.net
Por favor, evitem enviar anexos no formato MS-Office, obrigado!
Veja: http://www.fsf.org/philosophy/no-word-attachments.pt.html
--
Air Force Inertia Axiom:
Consistency is always easier to defend than correctness.
Mais detalhes sobre a lista de discussão Cascavel-pm