Question

Perl onSuccess method not returning status

Asked by: voodoobamboo

Good morning all....
I have been learning Perl for about 2 months now and I guess I am getting there as much as I can however I am really stuck. I have a Perl script called postEvent.pl which uses a package called event.pm. PostEvent.pl depends on a meithod inside event.pm called isSuccess to tell the user if the message sent was a success.

For some reason I keep getting....
"Problems sending message to Tivoli"

Which is coming from...

if ($event->isSuccess()) {
        &info("Message sent to Tivoli, $flags{'m'}");
} else {
        &error("Problems sending message to Tivoli, ", $event->getStatusMsg);
}

In postEvent.pl.


The problem is that the message is in fact a success, for some reason its just not getting the message that it was a success from the event.pm package and I am not sure why. I am listed both sets of source code here in hopes that somebody can tell me what I am doing wrong and show me. I have been stuck on this for 2 days now ;-(

Thank you.

CODE FOR POSTEVENT.PL
 
#!/lcl/bin/perl -d
use Env;
use strict;
use Sys::Hostname;
use Getopt::Std;
my ($rtn, $help);
my %flags = ('t' => '', # Event class
             's' => '', # Severity
             'h' => hostname(), # hostname
             'p' => '', # Program
             'b' => '', # Business System
             'm' => '', # Message
             'g' => '', # on-call group
             'i' => '', # instructions
             'n' => 'Shell_API',
             'c' => '', # confirm an event with an email to the on-call team.
             'd' => '', # debug mode
             'u' => '', # specify a specific URL to post events
             '?' => ''  # help
             );
getopts('t:s:h:p:b:m:g:i:n:c:d:u', \%flags);
 
 
## Make sure GFS::Event is setup on this system
##
my $rtn = eval { require GFS::Event };
my $event = eval { return GFS::Event->new() };
 
if ($flags{'u'}) { $event->setURL($flags{'u'}); }
 
if ($help) { help();exit; }
 
&debug("Command line parameters: ", join (",", @ARGV)) if $flags{'d'};
&debug("Beginning $0, ", join (",", @ARGV)) if $flags{'d'};
 
my $event = GFS::Event->new();
if (! defined $event) {
        &error("Could not create event object, $@");
}
 
if ($flags{'c'}) { $event->setConfirmEventOn(); }
 
$event->postEvent(
        errorType => $flags{'t'},
        errorSeverity => $flags{'s'},
        errorGroup => $flags{'g'},
        errorProgram => $flags{'p'},
        errorSystem => $flags{'b'},
        errorMessage => "$flags{'m'}",
        errorHost => $flags{'h'},
        errorInstructions => $flags{'i'},
        errorNumber => "$flags{'n'}",
        errorSubsource => "$0",
        errorSource => "$0"
        );
 
if ($event->isSuccess()) {
        &info("Message sent to Tivoli, $flags{'m'}");
} else {
        &error("Problems sending message to Tivoli, ", $event->getStatusMsg);
}
 
sub help {
        my $usage = "Mandatory, these command line options must be specified.\n";
        $usage .= "\t-t  <Error Type>\n";
        $usage .= "\t-s <Severity Code>\n";
        $usage .= "\t-g <On-Call Group>\n";
        $usage .= "\t-m <Message>\n\n";
        $usage .= "\t-i <Operator's Instruction>\n";
        $usage .= "\t-n <errorNumber>\n";
        $usage .= "\t-c, no parameter.  If specified, an email notification will be generated in addition to the Tivoli post.\n";
        $usage .= "\t-p <Program>\n";
        $usage .= "\t-b <Business_System>\n";
        $usage .= "\t-d, no parameter.  If specified, set log level to debug.\n";
 
        &info($usage);
        return;
 
}
sub debug {
        if (! $flags{'d'}) { return }
        my $field;
        print STDOUT "[" . localtime() . "] [DEBUG] ";
        foreach $field (@_) { print STDOUT $field }
        print "\n";
}
sub info {
        my $field;
        print STDOUT "[" . localtime() . "] [INFO] ";
        foreach $field (@_) { print STDOUT $field }
        print "\n";
}
sub warn {
        my $field;
        print STDOUT "[" . localtime() . "] [WARN] ";
        foreach $field (@_) { print STDOUT $field }
        print "\n";
}
sub error {
        my $field;
        print STDOUT "[" . localtime() . "] [ERROR] ";
        foreach $field (@_) { print STDOUT $field }
        print "\n";
 
        exit 5;
}
 
 
 
 
CODE FOR EVENT.PM
package GFS::Event;
 
our $VERSION = '1.1.0';
 
## Core
use strict;
use Sys::Hostname;
use Date::Format;
 
## Location of postzmsg
use constant POSTZ_HOME => "/lcl/apps/esm/bin";
## Config file for postzmsg
use constant POSTZ_CONFIG => "/lcl/apps/esm/bin/eif.conf";
 
sub new {
        my $this = {};
    my $proto = shift;
    my $class = ref($proto) || $proto;
    bless $this, $class;
 
        my %args = @_;
 
        $this->{'STATUS'} = "";
    $this->{'POSTZ_HOME'} = $args{'postz'} || POSTZ_HOME;
    $this->{'POSTZ_CONFIG'} = $args{'postz_config'} || POSTZ_CONFIG;
 
        return $this;
}
 
sub postEvent {
        my $this = shift;
 
        my %parms = @_;
 
    my $severity = $parms{'errorSeverity'} || $parms{'err_severity'} || '';
    my $message = $parms{'errorMessage'} || $parms{'err_msg'} || '';
 
    # Removes all front white space
    $message =~ s/^\s+//;
 
    # Replaces sequence of white space with a single space
    $message =~ s/\s+/ /g;
 
    # Removes all end white space
    $message =~ s/\s+$//;
 
    # Remove carriage returns anywhere in the string
    $message =~ s/^M$//;
 
    # Remove Line Feeds
    $message =~ s/\n//g;
 
    my $type = $parms{'errorType'} || $parms{'err_type'} || '';
    my $source = $parms{'errorSource'} || $parms{'err_source'} || '';
    my $group = $parms{'errorGroup'} || $parms{'err_group'} || '';
    my $instructions = $parms{'errorInstructions'} || $parms{'err_inst'};
        if (! $instructions) { $instructions= "Please call ${group} as appropriate for severity (${severity})."; }
 
    # Removes all front white space
    $instructions =~ s/^\s+//;
 
    # Replaces sequence of white space with a single space
    $instructions =~ s/\s+/ /g;
 
    # Removes all end white space
    $instructions =~ s/\s+$//;
 
    # Remove carriage returns anywhere in the string
    $instructions =~ s/^M$//;
 
    # Remove Line Feeds
    $instructions =~ s/\n//g;
 
 
    my $host = $parms{'errorHost'} || $parms{'err_host'} || '';
    my $system = $parms{'errorSystem'} || $parms{'err_system'} || '';
    my $subSource = $parms{'errorSubSource'} || $parms{'err_subsource'} || '';
    my $program = $parms{'errorProgram'} || $parms{'err_prog'} || '';
 
$this->{'STATUS'} = system ("clear");
print "####################################################################################################  #################################### \n";
print "\n";
print "Output being sent to postzmsg....";
print "\n";
print ("$this->{'POSTZ_HOME'}/postzmsg -f $this->{'POSTZ_CONFIG'} -r ${severity} -m '${message}' OnCallGroup=${group} ISOC_Instructions='${instructions}' Node=${host} SubSource=${subSource} System=${system}
Program=${program} ${type} ${source} ");
print "\n";
print "####################################################################################################  #################################### \n";
print "\n";
 
    $this->{'STATUS'} = system("$this->{'POSTZ_HOME'}/postzmsg -f $this->{'POSTZ_CONFIG'} -r ${severity} -m '${message}' OnCallGroup=${group} ISOC_Instructions='${instructions}' Node=${host} SubSource=${subS
ource} System=${system} Program=${program} ${type} ${source}");
 
    return $this->{'STATUS'};
 
}
 
## Mostly legacy getters/setters for backwards compatibility
sub setLogFile { my $this = shift; $this->{'log_file'} = shift; }
sub setStatus { my $this = shift; $this->{'STATUS'} = shift; }
sub setStatusMsg { my $this = shift; $this->{'STATUS_MSG'} = shift; }
sub setConfirmEventOn { my $this = shift; $this->{'confirm_event'} = "TRUE"; }
sub setConfirmEventOff { my $this = shift; $this->{'confirm_event'} = ""; }
sub confirmEvent { my $this = shift; return $this->{'confirm_event'}; }
sub getLogFile { my $this = shift; return $this->{'log_file'}; }
sub getStatus { my $this = shift; return $this->{'STATUS'}; }
sub getStatusMsg { my $this = shift; return $this->{'STATUS_MSG'}; }
sub getContentMsg { my $this = shift; return $this->{'CONTENT_MSG'}; }
sub getFromAddr { my $this=shift; return $this->{'email_from_addr'}; }
sub getSuppDistList { my $this=shift; return $this->{'email_distribution_list'}; }
sub getOncallGrp { my $this=shift; return $this->{'default_oncall_group'}; }
sub getURL { my $this=shift; return $this->{'URL'} }
sub setURL { my $this=shift; $this->{'URL'} = shift;}
sub printURL { my $this=shift; return join ("\n", split /\|/, $this->{'URL'}) }
sub isSuccess { my $this = shift; return $this->{'STATUS'} }
 
## -----------------------------sendErrortoTivoli-------------------------------- ##
## Legacy method used to reformat a hashmap into the postEvent call.
##
sub sendError2Tivoli {
 
        my $class = shift;
        my $postEvent = shift;
        my %tivEvent = %{$postEvent};
        my $event = GFS::Event->new();
        $event->setConfirmEventOff();
 
        if (! $tivEvent{'err_host'}) { $tivEvent{'err_host'} = hostname(); }
        $event->postEvent(
                                        errorType => $tivEvent{'err_type'},
                                        errorSeverity => $tivEvent{'err_severity'},
                                        errorGroup => $tivEvent{'err_group'},
                                        errorProgram => $tivEvent{'err_prog'},
                                        errorSystem => $tivEvent{'err_system'},
                                        err_msg => $tivEvent{'err_msg'},
                                        errorHost => $tivEvent{'err_host'},
                                        errorInstructions => $tivEvent{'err_inst'},
                                        errorNumber => "$tivEvent{err_n}",
                                        errorSubsource => $tivEvent{'subsource'}
                                 );
        return $event->getStatusMsg();
}
1;
 
##
sub sendError2Tivoli {
 
        my $class = shift;
        my $postEvent = shift;
        my %tivEvent = %{$postEvent};
        my $event = GFS::Event->new();
        $event->setConfirmEventOff();
 
        if (! $tivEvent{'err_host'}) { $tivEvent{'err_host'} = hostname(); }
        $event->postEvent(
                                        errorType => $tivEvent{'err_type'},
                                        errorSeverity => $tivEvent{'err_severity'},
                                        errorGroup => $tivEvent{'err_group'},
                                        errorProgram => $tivEvent{'err_prog'},
                                        errorSystem => $tivEvent{'err_system'},
                                        err_msg => $tivEvent{'err_msg'},
                                        errorHost => $tivEvent{'err_host'},
                                        errorInstructions => $tivEvent{'err_inst'},
                                        errorNumber => "$tivEvent{err_n}",
                                        errorSubsource => $tivEvent{'subsource'}
                                 );
        return $event->getStatusMsg();
}
1;
 
__END__
# Documentation...

                                  
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-10-08 at 06:17:29ID24795760
Tags

perl

,

method

,

script

,

unix

,

linux

Topics

Perl Programming Language

,

Bourne Shell (sh)

,

Shell Scripting

Participating Experts
2
Points
500
Comments
22

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. PERL
    Hi experts, I have a website hosted on a Windows 2000 Server using IIS and I'm worried about simultaneous access to my CGI PERL scripts if say there were 10,000 members using my website and the various scripts. Someone said something once about how I should change my code f...
  2. Perl & Mysql UTF-8 Encoding (encoding flag, really) p…
    I've run into a problem with encoding (UTF-8, to be clear) and perl. I know: join the club. The short of it is: I'm trying to read UTF-8 data from a mysql database and post it to a web page. Unfortunately, it's not working out quite like that. I believe I've narrowed th...
  3. perl flags
    How can I make my script understand flags? as in perl myscript.pl --flag1=0 --flag2=0 I would like to use flags instead of simple arguments because each of my arguments have defaults and if the user only wants to specify flag2, I don't want to force him/her to have to speci...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: FishMongerPosted on 2009-10-08 at 08:15:37ID: 25526375

What was the exit code of the system call in the $event->postEvent method and what was returned in the $event->getStatusMsg call?

The $event->getStatusMsg call at this point is probably of no use since the $event->postEvent method didn't set it.

 

by: voodoobambooPosted on 2009-10-08 at 08:27:12ID: 25526523

Well good question.... I am not sure.  How would I find that out?
I am very new to Perl.  The person who did this is gone and I am attempting to get it working right.

Thank you for the help.

 

by: FishMongerPosted on 2009-10-08 at 09:13:01ID: 25527056

Try this:

if ($event->isSuccess()) {
        info("Message sent to Tivoli, $flags{'m'}");
} else {
        error("Problems sending message to Tivoli, ", $event->getStatus);
}
                                              
1:
2:
3:
4:
5:

Select allOpen in new window

 

by: voodoobambooPosted on 2009-10-08 at 10:10:58ID: 25527612

No that gave me the same results which were....


[Thu Oct  8 13:10:05 2009] [ERROR] Problems sending message to Tivoli,
ottocat:/lcl/apps/esm/bin>

Also I know the change needs to be in Event.pm someplace just not sure where.

 

by: voodoobambooPosted on 2009-10-08 at 10:12:49ID: 25527633

Also changing that msg part would not matter... Because the message did work so that line of code should not even execute.

 

by: FishMongerPosted on 2009-10-08 at 10:23:02ID: 25527745

Normally, a program will return 0 as the exit code if it executed successfully.

The $event->isSuccess() method returns the exit code of the program that was run in the system() call.

The problem/bug is that the name of that method is misleading because in boolean context, 0 is false which is opposite of the implied meaning of the method's name.

The easiest "fix/workaround" would be to test the value returned, like this:

if ( $event->isSuccess() == 0 ) {
        info("Message sent to Tivoli, $flags{'m'}");
} else {
        error("Problems sending message to Tivoli, ", $event->getStatus);
}

                                              
1:
2:
3:
4:
5:

Select allOpen in new window

 

by: voodoobambooPosted on 2009-10-08 at 10:30:11ID: 25527811

I just gave that a try but same results....
0[Thu Oct  8 13:27:24 2009] [ERROR] Problems sending message to Tivoli,
ottocat:/lcl/apps/esm/bin>

However I added a print ("$this->{'STATUS'}");

Just before the....

return $this->{'STATUS'};

In Event.pm to see the value its attempting to return and as you can see from the output above it is in fact 0.
I REALLY need to find a way to do this through from making the change in Event.pm.

postEvent.pl is deployed on a ton of servers and they do not want us to change that... So I really need to figure out how to pass the success state from Event.pm to the current code of PostEVent.pm

Thanks for the help

 

by: voodoobambooPosted on 2009-10-08 at 10:31:32ID: 25527831

Wait so should 1 or 0 mean success?  The reason I ask is because that returns a 0 yet it did in fact send the message....

 

by: FishMongerPosted on 2009-10-08 at 10:36:39ID: 25527893

0 means success

Any other number means failure

See the documentation for the system function:

[root@rkb-2 tmp]# perldoc -f system
 
 
 
       system LIST
       system PROGRAM LIST
               Does exactly the same thing as "exec LIST", except that a fork is done first, and the
               parent process waits for the child process to complete.  Note that argument processing
               varies depending on the number of arguments.  If there is more than one argument in
               LIST, or if LIST is an array with more than one value, starts the program given by the
               first element of the list with arguments given by the rest of the list.  If there is
               only one scalar argument, the argument is checked for shell metacharacters, and if there
               are any, the entire argument is passed to the systemâs command shell for parsing (this
               is "/bin/sh -c" on Unix platforms, but varies on other platforms).  If there are no
               shell metacharacters in the argument, it is split into words and passed directly to
               "execvp", which is more efficient.
 
               Beginning with v5.6.0, Perl will attempt to flush all files opened for output before any
               operation that may do a fork, but this may not be supported on some platforms (see perl-
               port).  To be safe, you may need to set $â ($AUTOFLUSH in English) or call the "aut-
               oflush()" method of "IO::Handle" on any open handles.
 
               The return value is the exit status of the program as returned by the "wait" call.  To
               get the actual exit value shift right by eight (see below).  See also "exec".  This is
               not what you want to use to capture the output from a command, for that you should use
               merely backticks or "qx//", as described in "âSTRINGâ" in perlop.  Return value of -1
               indicates a failure to start the program (inspect $! for the reason).
 
               Like "exec", "system" allows you to lie to a program about its name if you use the "sys-
               tem PROGRAM LIST" syntax.  Again, see "exec".
 
               Since "SIGINT" and "SIGQUIT" are ignored during the execution of "system", if you expect
               your program to terminate on receipt of these signals you will need to arrange to do so
               yourself based on the return value.
 
                   @args = ("command", "arg1", "arg2");
                   system(@args) == 0
                        or die "system @args failed: $?"
 
               You can check all the failure possibilities by inspecting $? like this:
 
                   if ($? == -1) {
                       print "failed to execute: $!\n";
                   }
                   elsif ($? & 127) {
                       printf "child died with signal %d, %s coredump\n",
                           ($? & 127),  ($? & 128) ? âwithâ : âwithoutâ;
                   }
                   else {
                       printf "child exited with value %d\n", $? >> 8;
                   }
 
               or more portably by using the W*() calls of the POSIX extension; see perlport for more
               information.
 
               When the arguments get executed via the system shell, results and return codes will be
               subject to its quirks and capabilities.  See "âSTRINGâ" in perlop and "exec" for
               details.
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:

Select allOpen in new window

 

by: voodoobambooPosted on 2009-10-08 at 10:39:59ID: 25527941

Ok but using the code you stated above and using the print command I can see that it is returning 0 yet the code....

if ( $event->isSuccess() == 0 ) {
        info("Message sent to Tivoli, $flags{'m'}");
} else {
        error("Problems sending message to Tivoli, ", $event->getStatus);
}


Still reported....
0[Thu Oct  8 13:27:24 2009] [ERROR] Problems sending message to Tivoli,

Is it because the 0 is right next to the time stamp?  Just taking a guess here.

 

by: voodoobambooPosted on 2009-10-08 at 10:44:56ID: 25528000

Nope same thing....

0
[Thu Oct  8 13:44:00 2009] [ERROR] Problems sending message to Tivoli,
ottocat:/lcl/apps/esm/bin>

It does in fact return 0 yet says....
[Thu Oct  8 13:44:00 2009] [ERROR] Problems sending message to Tivoli,

 

by: voodoobambooPosted on 2009-10-08 at 10:58:24ID: 25528160

I guess I am not understanding something here.....
It is in fact returning 0.  So why would...

f ($event->isSuccess()) {
        info("Message sent to Tivoli, $flags{'m'}");
} else {
        error("Problems sending message to Tivoli, ", $event->getStatus);
}


result in....
Problems sending message to Tivoli

 

by: FishMongerPosted on 2009-10-08 at 11:06:52ID: 25528274

Because in boolean context, 0 is false so your if/else test will fall through to the else block an execute your error() sub.

Are you sure you tried:
if ( $event->isSuccess() == 0 ) {

If so, did it execute the info() or error() sub?

 

by: voodoobambooPosted on 2009-10-08 at 11:11:43ID: 25528331

Yes, replaced what I had with....
if ( $event->isSuccess() == 0 ) {
        info("Message sent to Tivoli, $flags{'m'}");
} else {
        error("Problems sending message to Tivoli, ", $event->getStatus);
}

Output....

0

[Thu Oct  8 14:10:41 2009] [ERROR] Problems sending message to Tivoli,
ottocat:/lcl/apps/esm/bin>

Well the output say [ERROR] so I would guess the error sub.

 

by: FishMongerPosted on 2009-10-08 at 11:27:52ID: 25528501

The only explanation for those results would be that the script you're executing is not the same script that you edited.

$event->getStatus will return the exit code that was stored in $this->{'STATUS'}

The output you received shows the the value in $this->{'STATUS_MSG'} which can be retrieved via $event->getStatusMsg which is exactly what you were doing in the code in your original post.

Lines 59 - 63

if ($event->isSuccess()) {
        &info("Message sent to Tivoli, $flags{'m'}");
} else {
        &error("Problems sending message to Tivoli, ", $event->getStatusMsg);
}
                                              
1:
2:
3:
4:
5:

Select allOpen in new window

 

by: voodoobambooPosted on 2009-10-08 at 11:30:03ID: 25528523

lol I know what you are saying... Its driving me nuts too but I have changed it and it is the script I am executing.  I can even add the files if you like.

 

by: FishMongerPosted on 2009-10-08 at 12:25:26ID: 25529129

Have the files changed from your original post, besides the changes that I suggested?

If not, then I can use those to run a test latter today (this evening).

 

by: voodoobambooPosted on 2009-10-08 at 12:45:08ID: 25529312

All I did was comment out this code....

# if ($event->isSuccess()) {
#        &info("Message sent to Tivoli, $flags{'m'}");
# } else {
#        &error("Problems sending message to Tivoli, ", $event->getStatusMsg);
# }
 

And past this code.....

if ( $event->isSuccess() == 0 ) {
        info("Message sent to Tivoli, $flags{'m'}");
} else {
        error("Problems sending message to Tivoli, ", $event->getStatus);
}


That was it.  Seems to me like it should work if I follow correctly what you are saying.

 

by: FishMongerPosted on 2009-10-08 at 16:00:22ID: 25531111

I corrected the conditional statement i.e. I set it to: if ( $event->isSuccess() == 0 ) {

I then ran several tests and all returned the results I expected.  I was unable to duplicate the problem you describe.

[root@fc4dev EE]# ./postevent.pl
####################################################################################################  ####################################

Output being sent to postzmsg....
/lcl/apps/esm/bin/postzmsg -f /lcl/apps/esm/bin/eif.conf -r  -m '' OnCallGroup= ISOC_Instructions='Please call as appropriate for severity ().' Node=fc4dev SubSource= System= Program=  ./postevent.pl
####################################################################################################  ####################################

sh: /lcl/apps/esm/bin/postzmsg: No such file or directory
[Thu Oct  8 15:13:59 2009] [ERROR] Problems sending message to Tivoli,


In the next example out, I changed the system call to: $this->{'STATUS'} = system('ls > /dev/nul');

[root@fc4dev EE]# ./postevent.pl
####################################################################################################  ####################################

Output being sent to postzmsg....
/lcl/apps/esm/bin/postzmsg -f /lcl/apps/esm/bin/eif.conf -r  -m '' OnCallGroup= ISOC_Instructions='Please call as appropriate for severity ().' Node=fc4dev SubSource= System= Program=  ./postevent.pl
####################################################################################################  ####################################

[Thu Oct  8 15:23:35 2009] [INFO] Message sent to Tivoli,

 

by: michaelshavelPosted on 2009-10-09 at 07:23:19ID: 25535257

Voodoo:
I understand where you are coming from, it's hard to work on someone else's code.
When did these problems start, has this script worked before?
Or are these problems based on new additions you or someone else added to the script and/or package?
if it has worked before and just stopped working recently, what has changed?
If Fishmonger can't duplicate the problem then it's making me think something else is going on here.
What version of perl are you both using? The same one?
What version of OS are you both using? The same one?

 

by: voodoobambooPosted on 2009-10-09 at 10:07:57ID: 25536776

Well figured out why the code changes were not working....
Its because if you execute it like this....
./postEvent.pl it runs the local...
But if you say postEvent.pl the pathe is defined so it was never running the one I was trying to fix!!! :-/

But anyway all the changes need to take place from the event.pm package as we can not change the postEvent.pl script.  This all worked before but they made some changes to the event.pm file.

Thank you for trying.

 

by: FishMongerPosted on 2009-10-09 at 11:52:26ID: 25537735

Try changing the isSuccess() sub to this:

sub isSuccess { my $this = shift; return $this->{'STATUS'} == 0 ? 1 : 0; }
                                              
1:

Select allOpen in new window

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...