| { |
| select: { |
| is_driver_unresponsive: "INSPECT:core/wlancfg:root/client_stats:is_driver_unresponsive", |
| |
| // Counters for up to last 24 hours |
| connect_attempts_count_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:connect_attempts_count", |
| connect_successful_count_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:connect_successful_count", |
| connected_duration_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:connected_duration", |
| disconnect_count_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:disconnect_count", |
| downtime_duration_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:downtime_duration", |
| downtime_no_saved_neighbor_duration_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:downtime_no_saved_neighbor_duration", |
| no_rx_duration_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:no_rx_duration", |
| rx_high_packet_drop_duration_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:rx_high_packet_drop_duration", |
| rx_very_high_packet_drop_duration_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:rx_very_high_packet_drop_duration", |
| total_duration_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:total_duration", |
| tx_high_packet_drop_duration_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:tx_high_packet_drop_duration", |
| tx_very_high_packet_drop_duration_1d: "INSPECT:core/wlancfg:root/client_stats/1d_counters:tx_very_high_packet_drop_duration", |
| |
| // Counters for up to last 7 days |
| connect_attempts_count_7d: "INSPECT:core/wlancfg:root/client_stats/7d_counters:connect_attempts_count", |
| connect_successful_count_7d: "INSPECT:core/wlancfg:root/client_stats/7d_counters:connect_successful_count", |
| connected_duration_7d: "INSPECT:core/wlancfg:root/client_stats/7d_counters:connected_duration", |
| disconnect_count_7d: "INSPECT:core/wlancfg:root/client_stats/7d_counters:disconnect_count", |
| downtime_duration_7d: "INSPECT:core/wlancfg:root/client_stats/7d_counters:downtime_duration", |
| downtime_no_saved_neighbor_duration_7d: "INSPECT:core/wlancfg:root/client_stats/7d_counters:downtime_no_saved_neighbor_duration", |
| }, |
| eval: { |
| // Gauges for up to last 24 hours |
| // Don't trigger from last-1d counters unless there has been at least 6 hours worth of data. |
| enough_1d_counters_data: "total_duration_1d > Hours(6)", |
| uptime_denominator_duration_1d: "connected_duration_1d + Max(0, downtime_duration_1d - downtime_no_saved_neighbor_duration_1d)", |
| uptime_ratio_1d: "connected_duration_1d /? uptime_denominator_duration_1d", |
| connect_successful_ratio_1d: "connect_successful_count_1d /? connect_attempts_count_1d", |
| disconnect_per_day_connected_ratio_1d: "disconnect_count_1d /? (connected_duration_1d / Days(1))", |
| rx_high_packet_drop_duration_ratio_1d: "rx_high_packet_drop_duration_1d /? connected_duration_1d", |
| rx_very_high_packet_drop_duration_ratio_1d: "rx_very_high_packet_drop_duration_1d /? connected_duration_1d", |
| tx_high_packet_drop_duration_ratio_1d: "tx_high_packet_drop_duration_1d /? connected_duration_1d", |
| tx_very_high_packet_drop_duration_ratio_1d: "tx_very_high_packet_drop_duration_1d /? connected_duration_1d", |
| no_rx_duration_ratio_1d: "no_rx_duration_1d /? connected_duration_1d", |
| |
| // Gauges for up to last 7 days |
| // Don't trigger from last-7d counters unless there has been at least 3 days worth of data. |
| enough_7d_counters_data: "total_duration_7d > Days(3)", |
| uptime_denominator_duration_7d: "connected_duration_7d + Max(0, downtime_duration_7d - downtime_no_saved_neighbor_duration_7d)", |
| uptime_ratio_7d: "connected_duration_7d /? uptime_denominator_duration_7d", |
| connect_successful_ratio_7d: "connect_successful_count_7d /? connect_attempts_count_7d", |
| disconnect_per_day_connected_ratio_7d: "disconnect_count_7d /? (connected_duration_7d / Days(1))", |
| }, |
| act: { |
| wlan_driver_unresponsive: { |
| type: "Snapshot", |
| trigger: "And(Not(Missing(is_driver_unresponsive)), is_driver_unresponsive)", |
| repeat: "Hours(24)", |
| signature: "wlan-driver-unresponsive", |
| }, |
| low_uptime_ratio_1d: { |
| type: "Snapshot", |
| trigger: "And(uptime_ratio_1d < 0.95, enough_1d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "low-uptime-ratio-daily", |
| }, |
| very_low_uptime_ratio_1d: { |
| type: "Snapshot", |
| trigger: "And(uptime_ratio_1d < 0.75, enough_1d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "very-low-uptime-ratio-daily", |
| }, |
| low_connect_successful_ratio_1d: { |
| type: "Snapshot", |
| trigger: "And(connect_successful_ratio_1d < 0.1, enough_1d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "low-connect-successful-ratio-daily", |
| }, |
| high_disconnect_per_day_connected_ratio_1d: { |
| type: "Snapshot", |
| trigger: "And(disconnect_per_day_connected_ratio_1d > 12.0, enough_1d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "high-disconnect-per-day-connected-ratio-daily", |
| }, |
| frequent_rx_high_packet_drop_1d: { |
| type: "Snapshot", |
| trigger: "And(rx_high_packet_drop_duration_ratio_1d > 0.10, enough_1d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "frequent-rx-high-packet-drop-daily", |
| }, |
| frequent_rx_very_high_packet_drop_1d: { |
| type: "Snapshot", |
| trigger: "And(rx_very_high_packet_drop_duration_ratio_1d > 0.10, enough_1d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "frequent-rx-very-high-packet-drop-daily", |
| }, |
| frequent_tx_high_packet_drop_1d: { |
| type: "Snapshot", |
| trigger: "And(tx_high_packet_drop_duration_ratio_1d > 0.10, enough_1d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "frequent-tx-high-packet-drop-daily", |
| }, |
| frequent_tx_very_high_packet_drop_1d: { |
| type: "Snapshot", |
| trigger: "And(tx_very_high_packet_drop_duration_ratio_1d > 0.10, enough_1d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "frequent-tx-very-high-packet-drop-daily", |
| }, |
| frequent_no_rx_1d: { |
| type: "Snapshot", |
| trigger: "And(no_rx_duration_ratio_1d > 0.01, enough_1d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "frequent-no-rx-daily", |
| }, |
| |
| // For 7-day data, we trigger based on sustained performance, hence the threshold is |
| // more stringent. Additionally, the snapshots are potentially more useful due to having |
| // longer period of logs available. |
| low_uptime_ratio_7d: { |
| type: "Snapshot", |
| trigger: "And(uptime_ratio_7d < 0.98, enough_7d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "low-uptime-ratio-weekly", |
| }, |
| low_connect_successful_ratio_7d: { |
| type: "Snapshot", |
| trigger: "And(connect_successful_ratio_7d < 0.20, enough_7d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "low-connect-successful-ratio-weekly", |
| }, |
| high_disconnect_per_day_connected_ratio_7d: { |
| type: "Snapshot", |
| trigger: "And(disconnect_per_day_connected_ratio_7d > 3.0, enough_7d_counters_data)", |
| repeat: "Hours(24)", |
| signature: "high-disconnect-per-day-connected-ratio-weekly", |
| }, |
| }, |
| test: { |
| wlan_driver_unresponsive_triggers: { |
| yes: [ |
| "wlan_driver_unresponsive", |
| ], |
| values: { |
| is_driver_unresponsive: true, |
| }, |
| }, |
| wlan_driver_unresponsive_not_triggers_due_to_field_being_false: { |
| no: [ |
| "wlan_driver_unresponsive", |
| ], |
| values: { |
| is_driver_unresponsive: false, |
| }, |
| }, |
| wlan_driver_unresponsive_not_triggers_due_to_missing_field: { |
| no: [ |
| "wlan_driver_unresponsive", |
| ], |
| }, |
| low_uptime_ratio_1d_triggers: { |
| yes: [ |
| "low_uptime_ratio_1d", |
| ], |
| no: [ |
| "very_low_uptime_ratio_1d", |
| ], |
| values: { |
| connected_duration_1d: 45e12, |
| downtime_duration_1d: 5e12, |
| downtime_no_saved_neighbor_duration_1d: 0, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| low_uptime_ratio_1d_not_triggers_due_to_threshold: { |
| no: [ |
| "low_uptime_ratio_1d", |
| ], |
| values: { |
| connected_duration_1d: 49e12, |
| downtime_duration_1d: 1e12, |
| downtime_no_saved_neighbor_duration_1d: 0, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| low_uptime_ratio_1d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "low_uptime_ratio_1d", |
| ], |
| values: { |
| connected_duration_1d: 2e12, |
| downtime_duration_1d: 9e12, |
| downtime_no_saved_neighbor_duration_1d: 0, |
| total_duration_1d: 1e13, |
| }, |
| }, |
| very_low_uptime_ratio_1d_triggers: { |
| yes: [ |
| "low_uptime_ratio_1d", |
| "very_low_uptime_ratio_1d", |
| ], |
| values: { |
| connected_duration_1d: 35e12, |
| downtime_duration_1d: 15e12, |
| downtime_no_saved_neighbor_duration_1d: 0, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| very_low_uptime_ratio_1d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "low_uptime_ratio_1d", |
| "very_low_uptime_ratio_1d", |
| ], |
| values: { |
| connected_duration_1d: 35e12, |
| downtime_duration_1d: 15e12, |
| downtime_no_saved_neighbor_duration_1d: 0, |
| total_duration_1d: 1e13, |
| }, |
| }, |
| low_connect_successful_ratio_1d_triggers: { |
| yes: [ |
| "low_connect_successful_ratio_1d", |
| ], |
| values: { |
| connect_successful_count_1d: 1, |
| connect_attempts_count_1d: 11, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| low_connect_successful_ratio_1d_not_triggers_due_to_threshold: { |
| no: [ |
| "low_connect_successful_ratio_1d", |
| ], |
| values: { |
| connect_successful_count_1d: 2, |
| connect_attempts_count_1d: 11, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| low_connect_successful_ratio_1d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "low_connect_successful_ratio_1d", |
| ], |
| values: { |
| connect_successful_count_1d: 1, |
| connect_attempts_count_1d: 11, |
| total_duration_1d: 1e13, |
| }, |
| }, |
| high_disconnect_per_day_connected_ratio_1d_triggers: { |
| yes: [ |
| "high_disconnect_per_day_connected_ratio_1d", |
| ], |
| values: { |
| disconnect_count_1d: 2, |
| |
| // 3 hours in nanoseconds |
| connected_duration_1d: 108e11, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| high_disconnect_per_day_connected_ratio_1d_not_triggers_due_to_threshold: { |
| no: [ |
| "high_disconnect_per_day_connected_ratio_1d", |
| ], |
| values: { |
| disconnect_count_1d: 1, |
| |
| // 8 hours in nanoseconds |
| connected_duration_1d: 288e11, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| high_disconnect_per_day_connected_ratio_1d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "high_disconnect_per_day_connected_ratio_1d", |
| ], |
| values: { |
| disconnect_count_1d: 1, |
| |
| // 3 hours in nanoseconds |
| connected_duration_1d: 108e11, |
| total_duration_1d: 1e13, |
| }, |
| }, |
| frequent_rx_high_packet_drop_1d_triggers: { |
| yes: [ |
| "frequent_rx_high_packet_drop_1d", |
| ], |
| values: { |
| rx_high_packet_drop_duration_1d: 2e12, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| frequent_rx_high_packet_drop_1d_not_triggers_due_to_threshold: { |
| no: [ |
| "frequent_rx_high_packet_drop_1d", |
| ], |
| values: { |
| rx_high_packet_drop_duration_1d: 5e11, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| frequent_rx_high_packet_drop_1d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "frequent_rx_high_packet_drop_1d", |
| ], |
| values: { |
| rx_high_packet_drop_duration_1d: 2e12, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 1e13, |
| }, |
| }, |
| frequent_rx_very_high_packet_drop_1d_triggers: { |
| yes: [ |
| "frequent_rx_very_high_packet_drop_1d", |
| ], |
| values: { |
| rx_very_high_packet_drop_duration_1d: 2e12, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| frequent_rx_very_high_packet_drop_1d_not_triggers_due_to_threshold: { |
| no: [ |
| "frequent_rx_very_high_packet_drop_1d", |
| ], |
| values: { |
| rx_very_high_packet_drop_duration_1d: 5e11, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| frequent_rx_very_high_packet_drop_1d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "frequent_rx_very_high_packet_drop_1d", |
| ], |
| values: { |
| rx_very_high_packet_drop_duration_1d: 2e12, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 1e13, |
| }, |
| }, |
| frequent_tx_high_packet_drop_1d_triggers: { |
| yes: [ |
| "frequent_tx_high_packet_drop_1d", |
| ], |
| values: { |
| tx_high_packet_drop_duration_1d: 2e12, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| frequent_tx_high_packet_drop_1d_not_triggers_due_to_threshold: { |
| no: [ |
| "frequent_tx_high_packet_drop_1d", |
| ], |
| values: { |
| tx_high_packet_drop_duration_1d: 5e11, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| frequent_tx_high_packet_drop_1d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "frequent_tx_high_packet_drop_1d", |
| ], |
| values: { |
| tx_high_packet_drop_duration_1d: 2e12, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 1e13, |
| }, |
| }, |
| frequent_tx_very_high_packet_drop_1d_triggers: { |
| yes: [ |
| "frequent_tx_very_high_packet_drop_1d", |
| ], |
| values: { |
| tx_very_high_packet_drop_duration_1d: 2e12, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| frequent_tx_very_high_packet_drop_1d_not_triggers_due_to_threshold: { |
| no: [ |
| "frequent_tx_very_high_packet_drop_1d", |
| ], |
| values: { |
| tx_very_high_packet_drop_duration_1d: 5e11, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| frequent_tx_very_high_packet_drop_1d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "frequent_tx_very_high_packet_drop_1d", |
| ], |
| values: { |
| tx_very_high_packet_drop_duration_1d: 2e12, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 1e13, |
| }, |
| }, |
| frequent_no_rx_1d_triggers: { |
| yes: [ |
| "frequent_no_rx_1d", |
| ], |
| values: { |
| no_rx_duration_1d: 2e11, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| frequent_no_rx_1d_not_triggers_due_to_threshold: { |
| no: [ |
| "frequent_no_rx_1d", |
| ], |
| values: { |
| no_rx_duration_1d: 5e10, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 8e13, |
| }, |
| }, |
| frequent_no_rx_1d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "frequent_no_rx_1d", |
| ], |
| values: { |
| no_rx_duration_1d: 2e11, |
| connected_duration_1d: 1e13, |
| total_duration_1d: 1e13, |
| }, |
| }, |
| low_uptime_ratio_7d_triggers: { |
| yes: [ |
| "low_uptime_ratio_7d", |
| ], |
| values: { |
| connected_duration_7d: 432e12, |
| downtime_duration_7d: 18e12, |
| downtime_no_saved_neighbor_duration_7d: 0, |
| |
| // 6 days in nanoseconds |
| total_duration_7d: 5184e11, |
| }, |
| }, |
| low_uptime_ratio_7d_not_triggers_due_to_threshold: { |
| no: [ |
| "low_uptime_ratio_7d", |
| ], |
| values: { |
| connected_duration_7d: 432e12, |
| downtime_duration_7d: 0, |
| downtime_no_saved_neighbor_duration_7d: 0, |
| |
| // 6 days in nanoseconds |
| total_duration_7d: 5184e11, |
| }, |
| }, |
| low_uptime_ratio_7d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "low_uptime_ratio_7d", |
| ], |
| values: { |
| connected_duration_7d: 432e12, |
| downtime_duration_7d: 18e11, |
| downtime_no_saved_neighbor_duration_7d: 0, |
| |
| // 2 days in nanoseconds |
| total_duration_7d: 1728e11, |
| }, |
| }, |
| low_connect_successful_ratio_7d_triggers: { |
| yes: [ |
| "low_connect_successful_ratio_7d", |
| ], |
| values: { |
| connect_successful_count_7d: 1, |
| connect_attempts_count_7d: 6, |
| |
| // 6 days in nanoseconds |
| total_duration_7d: 5184e11, |
| }, |
| }, |
| low_connect_successful_ratio_7d_not_triggers_due_to_threshold: { |
| no: [ |
| "low_connect_successful_ratio_7d", |
| ], |
| values: { |
| connect_successful_count_7d: 2, |
| connect_attempts_count_7d: 6, |
| |
| // 6 days in nanoseconds |
| total_duration_7d: 5184e11, |
| }, |
| }, |
| low_connect_successful_ratio_7d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "low_connect_successful_ratio_7d", |
| ], |
| values: { |
| connect_successful_count_7d: 1, |
| connect_attempts_count_7d: 6, |
| |
| // 2 days in nanoseconds |
| total_duration_7d: 1728e11, |
| }, |
| }, |
| high_disconnect_per_day_connected_ratio_7d_triggers: { |
| yes: [ |
| "high_disconnect_per_day_connected_ratio_7d", |
| ], |
| values: { |
| disconnect_count_7d: 19, |
| |
| // 6 days in nanoseconds |
| connected_duration_7d: 5184e11, |
| total_duration_7d: 5184e11, |
| }, |
| }, |
| high_disconnect_per_day_connected_ratio_7d_not_triggers_due_to_threshold: { |
| no: [ |
| "high_disconnect_per_day_connected_ratio_7d", |
| ], |
| values: { |
| disconnect_count_7d: 17, |
| |
| // 6 days in nanoseconds |
| connected_duration_7d: 5184e11, |
| total_duration_7d: 5184e11, |
| }, |
| }, |
| high_disconnect_per_day_connected_ratio_7d_not_triggers_due_to_not_enough_data: { |
| no: [ |
| "high_disconnect_per_day_connected_ratio_7d", |
| ], |
| values: { |
| disconnect_count_7d: 19, |
| |
| // 2 days in nanoseconds |
| connected_duration_7d: 1728e11, |
| |
| // 2 days in nanoseconds |
| total_duration_7d: 1728e11, |
| }, |
| }, |
| }, |
| } |