Script Change Macro

The script_change_alarms_macros.cfg is a script macro to report script changes.

script_change(F, D, E, L)
 
        init
                status =piktstatus
                level =piktlevel
                task "Report changes in (F) scripts"
                input proc "=file (D)/* 2>/dev/null |
                            =egrep -iv 'elf.+executable|directory|nohup\.out' |
                            =awk -F: '{print $1}'"
                dat $fil 1
        rule
                if $fil =~~ "(E)"
                        next
                fi

        rule
                set #doheader = #true()

        rule
                set $hstfil = $substitute($fil, "/usr/local/acme", "=hstdir/acme")

        rule
                set #fmt[$fil] = #filemtime($fil)

        rule    // make a history copy of all new scripts
                if ! #defined(%fmt[$fil])
                        if =offhours(#hour())
                                doexec wait "=cp -p $fil $hstfil"
                                output log "(L)" "new script:  $fil"
                        fi
                        next
                fi

        rule    // bypass unchanged scripts
                if #fmt[$fil] <= %fmt[$fil]
                        next
                fi

        rule    // for changed scripts, diff and log/mail any changes
                if #popen(DIFF, "=diff $hstfil $fil", "r") != #err()
                        while #read(DIFF) > 0
                                if #doheader
                                        output mail "changes to $fil:"
                                        output log "(L)" "changes to $fil:"
                                        set #doheader = #false()
                                fi
                                output mail $rdlin
                                output log "(L)" $rdlin
                        endwhile
                        do #pclose(DIFF)
                else
                        output mail "can't open process for reading!"
                        quit
                fi
                if #doheader == #false()        // so we entered the diff
                                                // loop above, have diff
                                                // output, hence require a
                                                // separator line
                        output mail =newline
                fi

        rule    // make a history copy of the newly changed script
                if =offhours(#hour())
                        doexec wait "=cp -p $fil $hstfil"
                fi

        end
                quit

You might invoke the =script_change() macro in your alarms.cfg file thusly:

///////////////////////////////////////////////////////////////////////////////
//
// acme_alarms.cfg
//
///////////////////////////////////////////////////////////////////////////////
 
ACMEScriptChange
 
        =script_change(acme, =acmebindir, =nonesuch, =acmescriptchange_log)
 
///////////////////////////////////////////////////////////////////////////////
 
CorbaScriptChange
 
        =script_change(corba, =acmebindir/corba.prod, cal\\\\.out|core, =corbascriptchange_log)
 
///////////////////////////////////////////////////////////////////////////////

Output from the ACMEScriptChange script might look like, for example:

NOTICE:
    ACMEScriptChange
        Report changes in acme scripts
        changes to /usr/local/acme/bin/run-acme:
        37,38c37,38
        < ## export DSQUERY=ORDB1
        < export DSQUERY=DATABASE2
        ---
        > export DSQUERY=ORDB1
        > ## export DSQUERY=DATABASE2

For more examples, see Samples.

 
Home | FAQ | News | Intro | Samples | Tutorial | Reference | Software
Developer's Notes | Licensing | Authors | Pikt-Users | Pikt-Workers | Related Projects | Site Index | Privacy Policy | Contact Us
Page best viewed at 1024x768 or greater.   Page last updated 2019-01-12.   This site is PIKT® powered.
Copyright © 1998-2019 Robert Osterlund. All rights reserved.
Home FAQ News Intro Samples Tutorial Reference Software
PIKT Logo
PIKT Page Title
View sample
system file
size changes
Pikt script