NewRelicのトランザクションの”by percent of wall clock time”

NewRelicのTop 5 web transactionsのグラフの見方がよくわからないという話。by percent of wall clock ってなんだよと。

ドキュメントには以下のように書いてある。

ウォールクロックタイム

ウォールクロックタイムとは、時計によって記録された時間です。New Relicはすべてのトランザクションにウォールクロックタイムを使用し、すべてのトランザクションにわたってその値を合計します。

ホストは並行してリクエストを実行できるため、100%を超える割合が表示されることがあります。例えば、100%の値は、選択したすべてのトランザクションの実行時間が、ウォールクロックタイムの記録に費やされた時間と等しいことを示します。

https://docs.newrelic.com/jp/docs/apm/apm-ui-pages/monitoring/transactions-page-find-specific-performance-problems/#wall_clock_time

「時計によって記録された時間」という表現がわかりにくいですが、要は「物理の時計」で計測された時間、現実で経過した時間(Real time)のことです。グラフの縦軸が100%だった場合、それは例えば10分間に実行されたトランザクション時間の合計が10分だったという意味です。サーバーは複数のリクエストを並行して実行するため、トラヒックが多い時にトランザクション時間(別のトランザクションの処理待ちで動いてない時間も含まれる)をすべて合計すると100%を超えることがあるという話。

RailsのI18nでyes/noが使えない

Railsで以下のようなlocaleファイルを書いたところ、translation missing となってしまった。

ja:
  yes: はい
  no: いいえ
I18n.t("yes")
# => "translation missing: ja.yes"

調べてみたところこれは YAML の仕様で、yes/no は真偽値と判定され、”yes”/”no” ではなく true/false と扱われるためらしい。

In YAML, untagged nodes are given an type depending on the application. The examples in this specification generally use the seqmap and str types from the YAML tag repository. A few examples also use the int and float types. The repository includes additional types such as nullboolset and others.

https://yaml.org/spec/1.1/#id858600

なので、”yes”ではなく”true”でアクセスできた。

I18n.t("true")
=> "はい"

YAML で yes/no を使いたい場合はクォートすれば良い。

ja:
  "yes": はい

ちなみに yes/no だけでなく、on/off も真偽値と判定されるよう。

https://yaml.org/type/bool.html

YAMLは型をもっていて文字列以外も扱えるのだけど、キーにも文字列以外が使えることが抜けがちだなと思いました。

irb(main):001:0> YAML.load("0xff: yes")
=> {255=>true}