通知ユーザー出口

通知ユーザー出口について、以下で説明します。

目的

この出口を使用して、ヒストリー・ファイルへの障害の記録について、または、以前に発生した障害の重複発生について、インストール・システム固有の通知を行うことができます。例えば、出口を使用して、障害が発生したアプリケーションの担当者に E メールを送信できます。また、ADFzCC イベント処理ユーザー出口を介して障害を記録できます。

出口が呼び出された理由は、NFY データ域フィールド の NFYTYPE フィールドに、以下のいずれかのように示されます。
C
障害が作成されました。

障害が記録されたヒストリー・ファイルの名前は ENV.IDIHIST データ域フィールドに提供され、記録された障害に割り当てられた障害 ID は、ENV.FAULT_ID データ域フィールドに示されます。

Fault Analyzer は、割り当てられた障害 ID およびヒストリー・ファイルを示すメッセージ IDI0003I を発行します。

リアルタイム・レポートの概要セクションのコピーは、NFY.SYNOPSIS データ域フィールドから使用可能です。SYNOPSIS の各行は、改行文字 (X'15') で区切られます。このフィールドに関する詳細については、NFY データ域を参照してください。

R
Recovery fault recording

この値は、Fault Analyzer のリカバリー障害記録機能の結果として作成された障害を示します。(この機能の詳細については、リカバリー障害記録を参照してください。)

障害が記録されたヒストリー・ファイルの名前は ENV.IDIHIST データ域フィールドに提供され、記録された障害に割り当てられた障害 ID は、ENV.FAULT_ID データ域フィールドに示されます。

Fault Analyzer は、割り当てられた障害 ID およびヒストリー・ファイルを示すメッセージ IDI0126I を発行します。

N
通常重複。

この値は、NoDup(NORMAL) オプションの基準が現行障害に一致したため、ヒストリー・ファイル障害項目が書き込まれないことを示します。(NoDup(NORMAL) の詳細については、NoDupを参照してください。)

オリジナルのヒストリー・ファイル名と障害 ID は、ENV.IDIHIST および ENV.FAULT_ID データ域フィールドに示されます。

DUPCOUNT フィールドには 1 が設定されます。

F
高速重複 (CICS®)。

この値は、NoDup(CICSFAST) オプションの基準が現行障害に一致したため、分析が実行されなかったことを示します。(NoDup(CICSFAST) の詳細については、NoDupを参照してください。)

オリジナルのヒストリー・ファイル名と障害 ID が使用可能な場合は、それらは ENV.IDIHIST および ENV.FAULT_ID データ域フィールドに提供されます。

DUPCOUNT フィールドには、30 秒の記録期間内に発生した重複の数が設定されます。

通知ユーザー出口で IDIWRITE コマンドを使用すると、Fault Analyzer は出口の完了後に ADFzCC イベント処理機能を呼び出し、IDIWRITE コマンドで書き込まれたデータを使用して ADFzCC イベント処理ユーザー出口に渡します。ADFzCC イベント処理機能の詳細は、IBM Application Delivery Foundation for z/OS Common Components: Customization Guide and User Guide を参照してください。

複数の通知ユーザー出口によって IDIWRITE コマンドを使用して書き込まれたデータは、 1 回の呼び出しで ADFzCC イベント処理ユーザー出口に送信されます。ただし、独自の通知ユーザー出口では IDIWRITE を使用しないことをお勧めします。代わりに、次のように、EXITS オプションでサンプル通知ユーザー出口 IDISXEPN を指定します。
EXITS(NOTIFY(<existing exit names,>REXX(IDISXEPN)))
また、IDIEXEC ddname によって位置指定できるようにします。

IDISXEPN サンプル出口は、IDIWRITE コマンドを使用して、使用可能なすべての ENV データと NFY データを ADFzCC イベント処理ユーザー出口に送信します。

通知ユーザー出口から IDIWRITE コマンドを発行すると、データは ADFzCC イベント処理ユーザー出口に渡されます。IDIWRITE コマンドを発行する前に、書き込まれるデータは「NFY.DATA_BUFFER」フィールドに入れられ、データ長は「NFY.DATA_LENGTH」フィールドで指定されます。

通知ユーザー出口の完了後に、バッファー内容が ADFzCC イベント処理ユーザー出口に送信されます。バッファーの形式については、IBM Application Delivery Foundation for z/OS Common Components: Customization Guide and User Guide のロード・モジュール IPVEPSND についてのセクションを参照してください。バッファーの各セグメントには、IDIWRITE コマンドの個々の呼び出しごとの内容が含まれます。提供されているサンプル出口 IDISXEPN を使用すると、各セグメントには次の形式のデータが含まれます。
data_area.field_name=value
例:
ENV.JOB_NAME=BATCH1
NFY.EPX_DEBUG_OPT* または他の非ブランク文字に設定すると、通知ユーザー出口は、ADFzCC イベント処理ユーザー出口からの診断をすべて IDITRACE に書き込むように要求します。
注: NFY.EPX_DEBUG_OPT が非ブランク文字に設定された場合、通知ユーザー出口は ADFzCC イベント処理ユーザー出口でデバッグ情報の受信が完了するまで待たなければならないため、ADFzCC イベント処理ユーザー出口は同期的に実行されます。これはパフォーマンスに影響を与える可能性があります。

NFY.EPX_DEBUG_OPT をブランク (デフォルト設定) のままにすると、Fault Analyzer はイベント処理ユーザー出口の完了を待たずに処理を続けますが、診断は IDITRACE に書き込まれません。

ADFzCC EVENTPROCESSINGEXIT オプションを使用してイベント処理ユーザー出口が 1 つも指定されない場合、データは無視されます。EVENTPROCESSINGEXIT オプションによるイベント処理ユーザー出口の指定についての詳細は、IBM Application Delivery Foundation for z/OS Common Components: Customization Guide and User Guide を参照してください。

通知ユーザー出口で IDIWRITE コマンドを使用すると、Fault Analyzer は出口の完了後に ADFzCC イベント処理機能を呼び出し、IDIWRITE コマンドで書き込まれたデータを使用して ADFzCC イベント処理ユーザー出口に渡します。ADFzCC イベント処理機能の詳細は、IBM Application Delivery Foundation for z/OS Common Components: Customization Guide and User Guide を参照してください。

複数の通知ユーザー出口によって IDIWRITE コマンドを使用して書き込まれたデータは、 1 回の呼び出しで ADFzCC イベント処理ユーザー出口に送信されます。ただし、独自の通知ユーザー出口では IDIWRITE を使用しないことをお勧めします。代わりに、次のように、EXITS オプションでサンプル通知ユーザー出口 IDISXEPN を指定します。
EXITS(NOTIFY(<existing exit names,>REXX(IDISXEPN)))
また、IDIEXEC ddname によって位置指定できるようにします。

IDISXEPN サンプル出口は、IDIWRITE コマンドを使用して、使用可能なすべての ENV データと NFY データを ADFzCC イベント処理ユーザー出口に送信します。

通知ユーザー出口から IDIWRITE コマンドを発行すると、データは ADFzCC イベント処理ユーザー出口に渡されます。IDIWRITE コマンドを発行する前に、書き込まれるデータは「NFY.DATA_BUFFER」フィールドに入れられ、データ長は「NFY.DATA_LENGTH」フィールドで指定されます。

通知ユーザー出口の完了後に、バッファー内容が ADFzCC イベント処理ユーザー出口に送信されます。バッファーの形式については、IBM Application Delivery Foundation for z/OS Common Components: Customization Guide and User Guide のロード・モジュール IPVEPSND についてのセクションを参照してください。バッファーの各セグメントには、IDIWRITE コマンドの個々の呼び出しごとの内容が含まれます。提供されているサンプル出口 IDISXEPN を使用すると、各セグメントには次の形式のデータが含まれます。
data_area.field_name=value
例:
ENV.JOB_NAME=BATCH1
NFY.EPX_DEBUG_OPT* または他の非ブランク文字に設定すると、通知ユーザー出口は、ADFzCC イベント処理ユーザー出口からの診断をすべて IDITRACE に書き込むように要求します。
注: NFY.EPX_DEBUG_OPT が非ブランク文字に設定された場合、通知ユーザー出口は ADFzCC イベント処理ユーザー出口でデバッグ情報の受信が完了するまで待たなければならないため、ADFzCC イベント処理ユーザー出口は同期的に実行されます。これはパフォーマンスに影響を与える可能性があります。

NFY.EPX_DEBUG_OPT をブランク (デフォルト設定) のままにすると、Fault Analyzer はイベント処理ユーザー出口の完了を待たずに処理を続けますが、診断は IDITRACE に書き込まれません。

ADFzCC EVENTPROCESSINGEXIT オプションを使用してイベント処理ユーザー出口が 1 つも指定されない場合、データは無視されます。EVENTPROCESSINGEXIT オプションによるイベント処理ユーザー出口の指定についての詳細は、IBM Application Delivery Foundation for z/OS Common Components: Customization Guide and User Guide を参照してください。

呼び出されるタイミング

この出口は、Fault Analyzer がヒストリー・ファイルへの障害の記録を完了した後に呼び出されます。

パラメーター

パラメーターがどのように出口に渡されるかは、出口タイプ (REXX またはロード・モジュール) によって異なります。

Fault Analyzer は、通知ユーザー出口を呼び出す前に、特定の障害および有効な処理オプションの現行値を使用してパラメーター・リストを初期化します。

REXX

出口は、以下の 2 つのステムを使用できます。

定義された変数名は、フィールド名と同じです。例えば、ENV データ域のフィールド VERSION にアクセスするには、REXX 変数 ENV.VERSION を使用します。

ロード・モジュール

この出口へのエントリーで、R1 には以下の 2 つのフルワードを構成するパラメーター・リストの 31 ビット・アドレスが含まれます。
  • word 1 の 31 ビット ENV アドレス。

    ENV データ域のアドレス (ENV - 共通出口環境情報を参照してください)。

  • word 2 の 31 ビット NFY アドレス。

    NFY データ域のアドレス (NFY - 通知ユーザー出口パラメーター・リストを参照してください)。

    注: このパラメーターが渡される最後のパラメーターあることを示すため、高位ビットがオンになります。

REXX からの非 REXX ロギング・ルーチンの呼び出し

例えば、REXX で書かれていない外部ロギング・ルーチンの呼び出しなどを行う、REXX で書かれた通知ユーザー出口のために、2 つのステム変数が新たに追加されました。ステム変数は、すべての使用可能なデータ域値を外部ルーチンに渡すために使用できます。これらのステム変数は以下のとおりです
  • ENV.RECORD
  • NFY.RECORD
これらのそれぞれが、単一 REXX 変数内に ENV または NFY データ域全体を含んでいます。それぞれが表すものはデータ域全体であり、それは既に提供されているため、これらの変数は、非 REXX 出口の対応するデータ域の中に、フィールドとして存在しません。

これらの変数を外部の非 REXX ルーチンに対する引数リストの中に使用することで、REXX 出口では、 将来発生する可能性のあるこれらのデータ域の変更について配慮する必要がなくなります。

外部ルーチンは、データ値へのアクセスに、提供される言語依存データ域マッピングを使用する必要があります (ロード・モジュール出口を参照してください)。ENV.RECORD および NFY.RECORD 変数内の値はすべて読み取り専用と見なされるので、 外部ルーチンで更新することはできません。更新が必要な場合は、REXX 出口そのものを使って、適切なデータ・フィールド・ステム変数を 更新しなければなりません。

例 1

以下は、REXX で書かれた通知ユーザー出口の例です。TSO SEND メッセージを発行します。
1. サンプル REXX 通知ユーザー出口 1
/* REXX */
if ENV.VERSION <> 5 then
  say 'Note: ENV data area version change - field usage review required!'
if NFY.VERSION <> 2 then
  say 'Note: NFY data area version change - field usage review required!'
/* Issue SEND command via TSO batch job */
queue "//NOTIFY   JOB  MSGCLASS=Z"
queue "//TSOBATCH EXEC PGM=IKJEFT01"
queue "//SYSTSPRT DD   SYSOUT=*"
queue "//SYSTSIN  DD   *"
/* Split the TSO SEND command over three data records that must
   each be padded with blanks to 80 bytes */
rec = "SEND 'Fault ID" ENV.FAULT_ID "assigned in history file -"
queue left(rec,80)
rec = strip(ENV.IDIHIST)||"' -"
queue left(rec,80)
rec = "USER("||strip(ENV.USER_ID)||") LOGON"
queue left(rec,80)
queue '/*'
/* 'Submit' the stacked TSO batch job */
n = queued()
"IDIALLOC DD(DD1) SYSOUT PGM(INTRDR)"
if rc = 0 then do
   address mvs "EXECIO" n "DISKW DD1 (FINIS"
   "IDIFREE DD(DD1)"
end
exit 0
上記のサンプル出口がデータ・セット X.Y.Z のメンバー ABC として存在する場合、IDICNFxx 構成メンバーまたは IDIOPTS ユーザー・オプション・ファイルのいずれかに次のオプションを指定すると、このサンプル出口が呼び出されます。
DataSets(IDIEXEC(X.Y.Z))
Exits(NOTIFY(REXX(ABC)))

例 2

以下は、REXX で書かれた通知ユーザー出口の例です。この出口は、SMTP 経由で E メール・メッセージを送信します。
2. サンプル SMTP REXX 通知ユーザー出口 2
/* REXX */
if ENV.VERSION <> 5 then
  say 'Note: ENV data area version change - field usage review required!'
if NFY.VERSION <> 2 then
  say 'Note: NFY data area version change - field usage review required!'
/* Issue SMTP message via SMTP batch interface */
user = strip(ENV.USER_ID)
queue "helo pthmvs8.au.ibm.com"
queue "mail from:<"user"@pthmvs8.au.ibm.com>"
queue "rcpt to:<"user"@au1.ibm.com>"
queue "data"
queue "Date: " date('N') time('C')
queue "From:<"user"@pthmvs8.au.ibm.com>"
queue "To:<"user"@au1.ibm.com>"
queue "Subject: Batch job "strip(ENV.JOB_NAME)" abend "ENV.ABEND_CODE
queue " "
queue "Fault ID "ENV.FAULT_ID" assigned in history file"
queue strip(ENV.IDIHIST)" for job "ENV.JOB_NAME
queue "program "ENV.EXEC_PGM_NAME" module "ENV.ABEND_MODULE_NAME"."
queue ""
n = queued()
"IDIALLOC DD(DD1) SYSOUT(A) DEST(PTHMVS8.SMTP)"
address mvs "EXECIO" n "DISKW DD1 (FINIS"
"IDIFREE DD(DD1)"
exit

この出口を機能させるには、システムが MVS TCP/IP SMTP 環境を使用できなければなりません。

上に示されているサンプル出口は、IBM® Communications Server 製品に提供されている IBM® SMTP サーバーのバッチ・インターフェースを使用して検査されています。

サンプル・メッセージが正常に送達されるかどうかは、IBM® CS TCP/IP サービスと SMTP サーバーの構成、および出口が実行されているシステムで使用できる適切な TCP/IP ネットワーク・インフラストラクチャーによって決まります。

中間ネットワーク・ノードにファイアウォール、セキュリティー・ソフトウェア、およびメッセージ・フィルター・ソフトウェアが存在するなどの要因が、メッセージの正常な送達に影響を及ぼす可能性があります。

上記のサンプル出口がデータ・セット TEST.EXEC.PDS のメンバー NOTIFY1 として存在する場合、IDICNFxx 構成メンバーまたは IDIOPTS ユーザー・オプション・ファイルのいずれかに次のオプションを指定すると、このサンプル出口が呼び出されます。
DataSets(IDIEXEC(TEST.EXEC.PDS))
Exits(NOTIFY(REXX(NOTIFY1)))

例 3

以下は、REXX で書かれた通知ユーザー出口の例です。この出口は、収集されたリアルタイム概要のすべての行を抽出し、表示します。
3. サンプル SMTP REXX 通知ユーザー出口 3
/* REXX */
if ENV.VERSION <> 5 then
  say 'Note: ENV data area version change - field usage review required!'
if NFY.VERSION <> 2 then
  say 'Note: NFY data area version change - field usage review required!'
/* Show synopsis */
rest = NFY.SYNOPSIS
do while rest<>''
  parse var rest nextline '15'x rest
  say nextline
end
exit 0

例えばこの例は、上記の例 2 と結合でき、E メール・メッセージに概要を取り入れることができます。

上記のサンプル出口がデータ・セット TEST.EXEC.PDS のメンバー FRED として存在する場合、IDICNFxx 構成メンバーまたは IDIOPTS ユーザー・オプション・ファイルのいずれかに次のオプションを指定すると、このサンプル出口が呼び出されます。
DataSets(IDIEXEC(TEST.EXEC.PDS))
Exits(NOTIFY(REXX(FRED)))

例 4

次の例は、REXX で作成された通知ユーザー出口です。これを使用して、バッチ再分析ジョブを実行依頼し、DeferredReport 障害項目の保管レポートを生成し、オプションで、LangxCapture オプションによって使用されるサイド・ファイルを保管します。
4. REXX 通知ユーザー出口 4 の例
/* REXX */
if ENV.VERSION <> 5 then
  say 'Note: ENV data area version change - field usage review required!'
if NFY.VERSION <> 2 then
  say 'Note: NFY data area version change - field usage review required!'
queue "//GENREP   JOB  MSGCLASS=X"
queue "//FA       EXEC PGM=IDIDA,"
queue "// PARM=('/FAULTID("ENV.FAULT_ID")',"
queue "//       'GenerateSavedReport',"
queue "//      )"
queue "//IDIHIST  DD   DISP=SHR,DSN="ENV.IDIHIST
queue "//SYSPRINT DD   SYSOUT=*"
/* 'Submit' the stacked batch reanalysis job */
n = queued()
"IDIALLOC DD(DD1) SYSOUT PGM(INTRDR)"
if rc = 0 then do
   address mvs "EXECIO" n "DISKW DD1 (FINIS"
   "IDIFREE DD(DD1)"
end
exit 0                                                                  
上記のサンプル出口がデータ・セット X.Y.Z のメンバー ABC として存在する場合、IDICNFxx 構成メンバーまたは IDIOPTS ユーザー・オプション・ファイルのいずれかに次のオプションを指定すると、このサンプル出口が呼び出されます。
DataSets(IDIEXEC(X.Y.Z))
Exits(NOTIFY(REXX(ABC)))