exit コールの管理

exit コールは、カスタム exit コールまたは自動検出された exit コールのいずれかになります。トランザクションは、関連する必要があるダウンストリームトランザクションに提供する相関情報を作成するため、その exit コールオブジェクトを必要とします。

カスタム exit コール

終了コールをコントローラに報告する場合で、エージェントが自動検出しない場合は、startExitCall() でカスタム終了コールを作成し、endExitCall() で終了します。

Node.js エージェントによって自動検出されるバックエンドのリストについては、「Node.js 対応環境」を参照してください。exit コールがこのページに記載されていないバックエンドを呼び出すには、カスタム exit コールを作成する必要が出てくるでしょう。

beforeExitCall() コールバック関数を使用して、自動検出された終了コールの存在を確認することもできます。

カスタム exit コールの処理は難しくありません。最初に終了コールを作成し、返された ExitCall オブジェクトを createCorrelationInfo() に渡し、ダウンストリーム トランザクションが後で取り出せる文字列エンコード相関情報オブジェクトを作成します。

カスタム exit call のワークフロー
// start a custom transaction
var trx = appd.startTransaction(. . . )
. . .
// start a custom exit call
exit = trx.startExitCall(. . .);
// create correlation information
cinfo = trx.createCorrelationInfo(exit)
//store cinfo where it can be made available to a downstream transaction
// make the exit call
. . .
trx.endExitCall(. . .)

自動検出された exit コール

カスタムトランザクションで実行されるコードは、Node.js エージェントが自動検出する exit コールを行う場合があります。

この場合、beforeExitCall() コールバック関数を使用して、その終了コールを処理できます。コードで自動検出された exit コールが行われると、エージェントは exit コールの要求を傍受し、コールバックを提供している場合はコールバックを呼び出します。その後アプリケーションは exit コール要求を処理することができます。

beforeExitCall() コールバック関数のインストールは以下の目的で行います。

  • 自動検出された exit コールの存在についてテストします。

    exit コールが自動検出されるかわからない場合、コールバック関数をインストールして exit コールをテストできます。コールバックが呼び出されない場合、 exit コールは自動検出されません。

    // start a custom transaction
    var trx = appd.startTransaction(. . . )
    . . .
    var detected = false;
    trx.beforeExitCall = function(call) { detected = true; return call; };
    // make the exit call
    . . .
    // test whether the exit call was automatically detected
    if (detected == false)
    . . .

    exit コールの後も detectedfalse の場合は、カスタム exit コールを作成して exit コールをコントローラに報告する必要があります。detectedtrue の場合は、終了コールを取得し、コールバックを使用して相関情報を作成できます。

  • ExitCallオブジェクトを取得して相関情報を作成

    // start a custom transaction
    var trx = appd.startTransaction(. . . )
    . . .
    trx.beforeExitCall = function getExitInfo(exitCall) {
    // create the correlation header from the captured exit call
    var c = trx.createCorrelationInfo(exitCall);
    // store c somewhere
    // … (c)
    return exitCall;
    }
    // make the exit call
  • コントローラに報告する exit コールを変更するには

    // start a custom transaction
    var trx = appd.startTransaction(. . . )
    . . .
    trx.beforeExitCall = function customExitCallHandler(exitCall) {
        // don't report database access for this transaction
        if (exitCall.isSql) return;
        // customize label for all other exit calls in this transaction
        exitCall.label += " (my custom transaction)";
        return exitCall;
    }
    // make the exit call