Skip to Content

Mail Latencyアクション

mail-latencyアクションはMaildir形式のディレクトリからメールを読み、Receivedヘッダーから配送にかかった時間を求めてCSVファイルに書き出します。

外部アクションとしてmozership/probe-mail-latency で公開しています。Probe v1.21.0までは組み込みアクションでした。ワークフローが初めて使うときにProbeがダウンロードし、固定したコミットのaction.ymlが示すSHA-256と一致する実行ファイルだけを実行します。Probe v1.21.0以降が必要です。各リリース のノートの先頭に、コピーして使うusesの行があります。

このアクションはどのホストにも接続しないため、action.ymlでguard: [allow-host]を申告しています。そのため、--allow-hostの下でも--allow-actionなしで実行します。output_dirにCSVを書くためread-onlyは申告しておらず、--read-onlyの下では、--allow-actionで指定しない限りこのアクションを使うステップを拒否します。ガードを参照してください。

基本的な構文

このアクションはディレクトリ内のメールを読み、計測結果をCSVとして書き出します。

steps: - name: Measure delivery latency uses: github.com/mozership/probe-mail-latency@2340503ddb7081e1a7e4cc7e4391ac6e5937574d # v0.1.0 with: mail_dir: "/var/mail/probe/new" output_dir: "./reports" test: res.status == 0

パラメータ

読み込み元と書き出し先の2つのディレクトリが必要です。

パラメータ型必須説明
mail_dirString必須計測対象のメールが置かれたディレクトリ
output_dirString必須CSVを書き出すディレクトリ

mail_dirはサブディレクトリも含めて再帰的に読みます。計測するのは、配送されたメールの多くがそうであるように、Return-Path:かDelivered-To:のヘッダーで始まるファイルです。それ以外のファイルは無視します。読むのは最初の空行までのヘッダーだけで、ヘッダーは複数行に折り返されていてもいなくても構いません。計測するメールにDateヘッダーかReceivedヘッダーがないと、アクションは失敗し、CSVを書き出しません。

CSVにはメール1通につき1行を書き出します。列は以下のとおりです。

  • Sent Time Offset (sec)とReceived Time Offset (sec): ディレクトリ内で最も早いDateを起点とした、送信と受信の時刻
  • Sent Time: Dateヘッダーの時刻
  • Last Received TimeとFirst Received Time: 一番上と一番下のReceivedヘッダーの時刻
  • End-to-End Latency (sec): Dateから一番上のReceivedまでの時間
  • Relay Latency (sec): 一番下のReceivedから一番上のReceivedまでの時間
  • Return PathとFile Path: エンベロープの送信者とファイル名

時刻は、probeを実行しているマシンのローカルタイムゾーンで2006-01-02 15:04:05の形式で書き出します。

レスポンスオブジェクト

結果には、書き出したファイルの場所が入ります。

プロパティ型説明
res.output_fileString書き出したCSVのパス。ファイル名はmail-latency.<timestamp>.csv。前の実行と同じ秒に実行した場合は、上書きせずにmail-latency.<timestamp>-2.csvのように番号を付ける
res.statusInteger成功時は0
rt.durationString計測に要した時間(例: "1.2ms")
rt.secFloat計測に要した時間(秒)
statusInteger成功時は0

使用例

SMTPで送ったメールが届くのを待ってから計測する例です。

jobs: - name: Mail delivery latency steps: - name: Send a probe mail uses: smtp with: addr: "{{vars.smtp_addr}}" from: "probe@example.com" to: "probe@example.com" subject: "probe {{vars.run_id}}" session: 1 message: 1 length: 500 test: res.code == 0 && res.sent > 0 - name: Measure id: latency uses: github.com/mozership/probe-mail-latency@2340503ddb7081e1a7e4cc7e4391ac6e5937574d # v0.1.0 wait: 30s with: mail_dir: "{{vars.maildir}}/new" output_dir: "./reports" test: res.status == 0 outputs: report: res.output_file - name: Report uses: hello echo: "CSV: {{outputs.latency.report}}"

関連項目

  • SMTP - メールの送信
  • IMAP - メールボックスの操作
  • YAML設定 - ステップのプロパティ
更新日時