Operating System - OpenVMS
1748266 Members
3243 Online
108760 Solutions
New Discussion юеВ

Re: Modifying DCL script

 
Anup Varghese
Occasional Advisor

Modifying DCL script

Hi,

I am very new to writing DCL scripts, I have a script which i am using for monitoring the server for its availablity, but i need to modify this.

The
When the server is not reachable it writes a log to the error log and the script reads the error log and sends out a error message to the reciptents mail box.
But even if the error is rectified the scripts keeps on sending the error message as the script reads only the date and not the time.
The script runs every 15 min once and i would like to modify the time selection that is it should check for the last 15 min alone to see if any error messages and not for the whole date.

The script used to select the date is :
date1 = f$extract(0,11,f$time())

and the search script is :
sear ssfmoni:erf.log JHF,Failed,'date1/match=and/nooutput/nowarn

Kindly guide me here to modify the script.
20 REPLIES 20
Craig A
Valued Contributor

Re: Modifying DCL script

$ write sys$output f$extract(0,11,f$time())
15-JUN-2011
$ write sys$output f$extract(0,16,f$time())
15-JUN-2011 11:0

Run some tests changing the the 11 to a 16 and run the job every 10 minutes.

Check what happens when the day value is <10, though.

Ian Miller.
Honored Contributor

Re: Modifying DCL script

You may also find F$CVTIME as it can return the date&time in various formats and extract parts of the date&time.
____________________
Purely Personal Opinion
The Brit
Honored Contributor

Re: Modifying DCL script

Also aware that when you include the time in the string, there is a between DATE and TIME. This will certainly break the symbol substitution in the SEARCH command.

Replace 'date1 with "''date1'"

Dave.
Anup Varghese
Occasional Advisor

Re: Modifying DCL script

Hi,

If we are increasing the charater limit that is insted of
date1 = f$extract(0,11,f$time()) if we give date1 = f$extract(0,16,f$time()) and run the script for every 10 min then consider the situation like the error occured at 11:59 and the job ran at 12:00 the this error will not be identified.
Joseph Huber_1
Honored Contributor

Re: Modifying DCL script

I would not insist to use SEARCH , instead:
Read the last entry , and build the time difference to now using f$delta_time().

Eventually use a descending sort of the file to have the last entry in the first line.
(don't use VMS format to store the date/time, but ISO format, also called VMS comparison format).
http://www.mpp.mpg.de/~huber
The Brit
Honored Contributor

Re: Modifying DCL script

Another option for checking just the window since last execution would be to have each execution create a new log and search that log for your errors. After checking, you can then append the current log to the "master" log file.

Dave.
Joseph Huber_1
Honored Contributor

Re: Modifying DCL script

re-reading the original question, You not only want to see the log messages from within the last 15 minutes. The file contains a lot of messages, You are interested only on those containing the strings "JHF" and "Failed", and containing a time within the last 15 minutes.

There is simply no way to select the lines using a single search.
What comes nearest would be to write the
SEARCH logifile JHF,Failed/match=and/window=1
/output=to a temporary file, read the file line-by-line until the first one where f$delta-time() tells it is not older than 15 minutes; then display/handle (send to mailbox) all lines up to the end of the file.
http://www.mpp.mpg.de/~huber
Anup Varghese
Occasional Advisor

Re: Modifying DCL script

Hi,

I dont have much knowledge on the DCL scripts can you please help me in formaing a script.
Hoff
Honored Contributor

Re: Modifying DCL script

Are you seeking to outsource your DCL coding requirements here, or are you looking to learn how to program DCL yourself, or is your central goal to get somebody here to solve a particular problem for you (at no charge)?

In place of this:

date1 = f$extract(0,11,f$time())

I'd tend to use this:

$ date1 = f$cvtime(,"ABSOLUTE","DATE")

And as for learning DCL, see the OpenVMS User's Guide available in the OpenVMS documentation shelf at:

http://www.hp.com/go/openvms/doc

If you're looking to outsource your DCL coding (or acquire training), then there are various providers available in the listings of companies over at the HP AllianceONE site:

http://www.hp.com/go/allianceone

There are various partners (that provide OpenVMS services and training) listed under the "find more partners" link at the bottom of that AllianceONE web page. (Various folks here provide these services, as well.)

And FWIW, I wrote the second edition of the _The Writing Real Programs in DCL_ book, if you can find a copy of that book around somewhere. (It's been out of print for a while.) That book goes into rather more detail, and specifically on DCL programming on OpenVMS.

I'd probably avoid this current design approach, and head toward a more managed and proactive notification approach, rather than basing the design on polling files at periodic intervals.

Have the code that is generating that log generate errors somewhere you can deal with, rather than adding more bags and baggage and complexity into the designs.

Also look to move to a scheduling tool as (when I see these piles of hacks) the folks have tended to build their own schedulers, and that gets to be a whole lot of work as compared with using a scheduler to start with. That might be Kronos or cron or a commercial package.

(And others have described the /BEFORE=time and /SINCE=time syntax, and you can have a look at specifying delta times in the /SINCE=time or /MODIFIED /SINCE=time specification. But polling is pretty gross, regardless, and as it tends involve various edge cases. So does process control. Even if you should know DCL well, these tasks and these areas can get slightly hairy.)