# 発生記録

> 発生記録のすべての変わり目の永続する時系列。実行の判定器が観測したものも、実行外の「常時」の監視が観測したものも入り、それぞれの背後にある凍結された条件が付きます。

[イベント](events)の発生記録のタブ（`/events?view=occurrences`）は、試験対象のものが何をしたかについての永続する時系列です。実行の判定器が観測しても、実行外の**常時**の監視が観測しても、**発生記録の変わり目**ごとに 1 行です。見るには**イベントの表示**が要り、書き出すには**履歴のエクスポートとインポート**が要ります。発生記録はモデルごとに [Process > 段取り > 発生記録](process-occurrences)で定義します。このタブはその履歴を読むだけで、何も変えません。

[イベント](events#how-the-three-timelines-behave)に書いた 3 つの時系列の共通のふるまいに従います。1 ページ 500 行とその下のページ送り、期間、間を置いた検索、実時間の更新、詳細のパネル 1 枚、そして期間の全体の CSV と JSON のエクスポートです。

## 1 行が何であるか {#what-one-row-is}

発生記録は、モデルのチャネルについてのブール値の条件に、オンディレイとオフディレイを付けたものです。1 行は、1 つの**観測セッション**の 4 つの遷移のどれかです。

| 遷移 | 意味 |
| --- | --- |
| 発生 | 条件が立ち上がり、オンディレイの間そのままでした。 |
| 復帰 | 条件が落ち、オフディレイの間そのままでした。 |
| 取得不可 | 条件が参照するチャネルの 1 つ以上が、値を届けなくなりました。判定器は最後に確かめた条件を保ち、復帰を作り出すことは決してありません。 |
| 回復 | 参照するすべてのチャネルがまた届けています。条件は新たに評価され、その遅れも数え直しになります。 |

どの行も、どの**範囲**で観測されたか、そしてそのセッションが始まった理由も言います。

| 項目 | 値 | 意味 |
| --- | --- | --- |
| 範囲 | **実行中**、**実行の外** | 実行中：手順が構えた、その実行自身の判定器です。この変わり目はその実行のファイルにも書かれます。実行の外：実行と実行の間に、ユニットのバインドを読む「常時」の監視です。 |
| 理由 | **実行を開始**、**実行を再開**、**見張りを開始**、**実行の外の観測を再開**、**定義を変更** | 新しい観測セッションが始まった理由です。実行が始まった、アプリの再起動のあとに実行が再開した、この発生記録とユニットについて「常時」の監視が始まった、実行のあとにユニットが実行外の観測へ戻った、または条件、遅れ、参照するチャネル、有効かどうか、構える方式が編集された、です。 |

新しいセッションは何もないところから始まります。条件も、取得できるかどうかも、デバウンスの状態も、観測されていない隙間をまたいで持ち越されないので、すでに真の条件は、実行が始まったときやアプリが戻ったときに、もう一度**発生**を生むことがあります。この時系列に「セッションが始まりました」という作り物の行はありません。セッションの境目は、遷移が続かない場合でも実行自身のファイルに記録されます。履歴とレポートは、それを使って古い未終了の発生を「中断」に分類します。この印はこの時系列には出ず、通知も上げません。表示だけの編集（名前、メッセージ、重大度）はセッションを保ち、あとのスナップショットだけを変えます。

## 検索と絞り込み {#search-and-filter}

| 操作部 | 値 | 何をするか |
| --- | --- | --- |
| 検索 | 入力例は「名前、メッセージ、モデル、ユニット、手順を検索」 | その当時のスナップショットのままの、発生記録の名前、そのメッセージ、モデルの名前、ユニットの名前、手順の名前に対する「含む」の一致です。 |
| 重大度 | **すべての重大度**（既定）、**重大**、**警告**、**情報** | 起きた当時にその重大度を持っていた発生記録の遷移だけを残します。 |
| 再読み込み | | 記録簿を読み直します。ツールチップは「発生記録を再読み込み」です。 |
| エクスポート | **CSV で書き出す…**、**JSON で書き出す…** | 検索と重大度と期間に一致する遷移をすべて、ページを次々にたどって書きます。今並んでいる行だけではありません。**履歴のエクスポートとインポート**があるときだけ描かれ、一覧が空の間は灰色になります。 |

## 行 {#the-rows}

| 行の部分 | 内容 |
| --- | --- |
| 時刻 | 判定器がその変わり目を観測した日付と時刻です（実行のときは、判定したサンプル自身の時刻です）。 |
| 点 | 重大度の色合いです。重大には重大、警告には注意、情報には中立です。 |
| 名前 | その当時の発生記録の名前です。 |
| 要約 | 「遷移 · 観測 N（理由）· モデル / ユニット · 文脈」です。N はそのセッションの中での変わり目の順番、文脈は「実行記録 · 」に続く手順の名前（手順の名前が記録されなかったときはただの「実行」）、または「実行の外」です。例：「発生 · 観測 1（実行を開始）· Furnace / ライン 2 · 実行 · 焼成 180」。 |
| レベル | 重大度の言葉です。 |

行が持つメッセージは、**発生**と**解除**では発生記録自身のメッセージです（定義に何もなければ空で、パネルには「メッセージは記録されていません。」と出ます）。取得できるかどうかの変わり目では、「信号が取得できません：」または「信号が回復しました：」に続けて、影響を受けたチャネルの名前をコンマで区切って並べます。

## 詳細のパネル {#the-detail-panel}

行を選ぶと、重大度のバッジと名前、完全な時刻、要約の行、メッセージ、そして 4 枚のカードを持つパネルが開きます。

| カード | 項目 | 内容 |
| --- | --- | --- |
| イベント | レベル | 重大度です。 |
| イベント | イベント ID | この変わり目についての記録簿の識別情報です。実行中の観測では、実行記録ファイルが持つものと同じ識別子です。 |
| 発生記録のスナップショット | 遷移 | 発生、復帰、取得不可、回復のいずれかです。 |
| 発生記録のスナップショット | モデル | その当時のモデルの名前です。 |
| 発生記録のスナップショット | ユニット | その当時のユニットの名前です。 |
| 発生記録のスナップショット | 範囲 | 実行中または実行外です。 |
| 発生記録のスナップショット | 手順 | 実行中の範囲のときだけです。手順の名前、または記録されていなければ横線です。 |
| 発生記録のスナップショット | 実行記録 ID | 実行中の範囲のときだけです。その実行記録の識別子で、履歴が見せるものと同じです。 |
| 発生記録のスナップショット | モデル ID、ユニット ID、発生記録 ID | 名前の背後にある変わらない識別子で、名前を変えても同じです。 |
| 観測セッション | 記録簿の連番 | 記録簿へのその行の挿入番号で、時刻が並ぶ行の順を決めます。 |
| 観測セッション | 観測 ID | その変わり目を観測したセッションの識別情報です。1 つのセッションのすべての変わり目がこれを共有します。 |
| 観測セッション | 遷移の連番 | そのセッションの中での、1 から数えた変わり目の順です。抜けは、記録簿が残せなかった変わり目があることを意味します。 |
| 観測セッション | 開始 | そのセッションが始まった時刻を、完全な形で示します。 |
| 観測セッション | 理由 | 実行を開始、実行を再開、見張りを開始、実行の外の観測を再開、定義を変更 のいずれかです。 |
| 固定した構成 | 条件 | そのセッションが実際に判定した JavaScript の条件です。 |
| 固定した構成 | オンディレイ / オフディレイ | 「x ms / y ms」で、そのセッションが使ったデバウンスです。 |
| 固定した構成 | 参照するチャネル ID | 条件を成り立たせていたチャネルの識別子を、セミコロンで区切って並べます。 |

**イベントをコピー**は 1 行をコピーします。「時刻 | 発生記録 | 重大度 | 名前 | 要約 | メッセージ | EventId=… | OccurrenceId=… | ObservationId=… | ObservationSequence=… | ObservationStartedAt=… | ObservationReason=… | Condition=… | OnDelayMs=… | OffDelayMs=… | ReferencedChannelIds=…」です。

## エクスポートの列 {#export-columns}

CSV と JSON は同じ項目をこの順に持ちます。`Timestamp`（CSV の見出しは時刻の基準を足して「Timestamp (UTC-03:00)」になります）、`JournalSequence`、`Severity`、`Name`、`Transition`、`Scope`、`Model`、`ModelId`、`Unit`、`UnitId`、`Procedure`、`RunId`、`Message`、`EventId`、`OccurrenceId`、`ObservationId`、`ObservationSequence`、`ObservationStartedAt`、`ObservationReason`、`Condition`、`OnDelayMs`、`OffDelayMs`、そして `ReferencedChannelIds`（CSV ではセミコロン区切り、JSON では配列）です。JSON は `TimeZone` と `Events` を持つ包みです。ファイル名は `occurrence-history-<yyyyMMdd-HHmmss>.csv` と `.json` です。CSV はほかのエクスポートと同じく、ステーションの小数の区切り記号の設定に従います。小数点が点なら並びの区切りは `,`、小数点がコンマなら `;` です。`=`、`+`、`-`、`@` で始まるます目には、表計算がそれを文字として読むよう、アポストロフィーを前に付けます。

## 発生記録がほかにどこへ記録されるか {#where-else-an-occurrence-is-recorded}

実行中の観測は、まずその実行自身のファイルへ書かれ、それから同じイベントの識別子と実行の文脈とともにここへ複写されます。複写が失敗しても、実行記録ファイルはその変わり目を持ったままで、コンソールにはそのことを伝えるエラーの行が出ます。実行外の観測は、ここにしかありません。どの変わり目も Process の領域にコンソールの行を残します。発生はその重大度のレベル（重大はエラー、警告は警告、情報は情報）、信号の喪失も同じレベル、復帰と回復は情報です。発生はさらに、ユニットの名前を続けた「発生記録 · 」という表題のウィンドウ内の通知を上げ、実行中に観測された警告と重大の発生については、ウィンドウが隠れているか最小化されている間、OS の通知も上げます。

## 空の状態と状態の行 {#empty-states-and-the-status-line}

- 「発生記録はまだありません」と、「実行記録と、実行の外の「常時」監視から出る発生記録の遷移が、ここに出ます。」
- 「この絞り込みに合う発生記録はありません」と、「重大度や検索の語を変えると、この履歴が広がります。」
- 状態の行は「表示 N 件 · 1 ページ目」と読め、検索か重大度か期間が効いているときは「 · 絞り込みあり」が続きます。右側には「1 件を選択中」と「更新 hh:mm:ss」が出ます。

## 発生記録のタブがしないこと {#what-the-occurrences-tab-does-not-do}

- 発生記録を定義することも、構えることも、編集することもしません（[Process > 段取り > 発生記録](process-occurrences)）。
- 変わり目を組にして、長さを持つ発生区間にすることもしません。「中断」や「不完全」の分類を持つその導かれた見方は、1 件の実行記録については[履歴](histories)に、ユニット自身の操作パネルにあります。
- ユニット、実行記録、範囲、日付による絞り込みはありません。ユニット、モデル、手順の名前で検索するか、履歴でその実行記録を開いてください。
- 実時間の状態は見せません。今この瞬間に発生記録が発生中かどうかは、ここではなくユニットの操作パネルで読みます。
