| { |
| select: { |
| capture_overflows_vec: [ |
| "INSPECT:core/audio_core:root/capturers/*/overflows:count", |
| ], |
| capture_overflows_duration_vec: [ |
| "INSPECT:core/audio_core:root/capturers/*/overflows:duration\\ (ns)", |
| ], |
| capture_sessions_duration_vec: [ |
| "INSPECT:core/audio_core:root/capturers/*/overflows:total\\ duration\\ of\\ all\\ parent\\ sessions\\ (ns)", |
| ], |
| output_device_underflows: [ |
| "INSPECT:core/audio_core:root/output\\ devices/000/device\\ underflows:count", |
| ], |
| output_device_underflows_duration: [ |
| "INSPECT:core/audio_core:root/output\\ devices/000/device\\ underflows:duration\\ (ns)", |
| ], |
| output_device_sessions_duration: [ |
| "INSPECT:core/audio_core:root/output\\ devices/000/device\\ underflows:total\\ duration\\ of\\ all\\ parent\\ sessions\\ (ns)", |
| ], |
| output_pipeline_underflows: [ |
| "INSPECT:core/audio_core:root/output\\ devices/000/pipeline\\ underflows:count", |
| ], |
| output_pipeline_underflows_duration: [ |
| "INSPECT:core/audio_core:root/output\\ devices/000/pipeline\\ underflows:duration\\ (ns)", |
| ], |
| output_pipeline_sessions_duration: [ |
| "INSPECT:core/audio_core:root/output\\ devices/000/pipeline\\ underflows:total\\ duration\\ of\\ all\\ parent\\ sessions\\ (ns)", |
| ], |
| render_underflows_vec: [ |
| "INSPECT:core/audio_core:root/renderers/*/underflows:count", |
| ], |
| render_underflows_duration_vec: [ |
| "INSPECT:core/audio_core:root/renderers/*/underflows:duration\\ (ns)", |
| ], |
| render_sessions_duration_vec: [ |
| "INSPECT:core/audio_core:root/renderers/*/underflows:total\\ duration\\ of\\ all\\ parent\\ sessions\\ (ns)", |
| ], |
| }, |
| eval: { |
| capture_overflows: "Fold(Fn([a,b], a+b), Option(capture_overflows_vec, []), 0)", |
| capture_overflows_duration: "Fold(Fn([a,b], a+b), Option(capture_overflows_duration_vec, []), 0)", |
| capture_sessions_duration: "Fold(Fn([a,b], a+b), Option(capture_sessions_duration_vec, []), 0)", |
| render_underflows: "Fold(Fn([a,b], a+b), Option(render_underflows_vec, []), 0)", |
| render_underflows_duration: "Fold(Fn([a,b], a+b), Option(render_underflows_duration_vec, []), 0)", |
| render_sessions_duration: "Fold(Fn([a,b], a+b), Option(render_sessions_duration_vec, []), 0)", |
| capture_overflows_ms_per_hour: "1000 * 3600 * capture_overflows_duration / capture_sessions_duration", |
| audio_core_underflows_ms_per_hour: "1000 * 3600 * (output_device_underflows_duration / output_device_sessions_duration + output_pipeline_underflows_duration / output_pipeline_sessions_duration)", |
| render_underflows_ms_per_hour: "1000 * 3600 * render_underflows_duration / render_sessions_duration", |
| }, |
| act: { |
| audio_capturer_overflows_warning: { |
| type: "Warning", |
| trigger: "capture_overflows > 0", |
| print: "AudioCapturer overflows detected (bug in clients); expect problems with voice capture", |
| }, |
| audio_capturer_overflows: { |
| type: "Gauge", |
| value: "capture_overflows", |
| format: "count", |
| }, |
| audio_capturer_overflows_ms_per_hour: { |
| type: "Gauge", |
| value: "capture_overflows_ms_per_hour", |
| format: "milliseconds", |
| }, |
| audio_core_underflows_warning: { |
| type: "Warning", |
| trigger: "Or(output_device_underflows > 0, output_pipeline_underflows > 0)", |
| print: "AudioCore underflows detected; expect glitchy audio output", |
| }, |
| audio_core_device_underflows: { |
| type: "Gauge", |
| value: "output_device_underflows", |
| format: "count", |
| }, |
| audio_core_pipeline_underflows: { |
| type: "Gauge", |
| value: "output_pipeline_underflows", |
| format: "count", |
| }, |
| audio_core_underflows_ms_per_hour: { |
| type: "Gauge", |
| value: "audio_core_underflows_ms_per_hour", |
| format: "milliseconds", |
| }, |
| audio_renderer_underflows_warning: { |
| type: "Warning", |
| trigger: "render_underflows > 0", |
| print: "AudioRender underflows detected (bug in clients); expect glitchy audio output", |
| }, |
| audio_renderer_underflows: { |
| type: "Gauge", |
| value: "render_underflows", |
| format: "count", |
| }, |
| audio_renderer_underflows_ms_per_hour: { |
| type: "Gauge", |
| value: "render_underflows_ms_per_hour", |
| format: "milliseconds", |
| }, |
| }, |
| } |