// // Created by stephane bourque on 2022-01-10. // #include "RESTAPI_AnalyticsObjects.h" #include "RESTAPI_ProvObjects.h" #include "framework/RESTAPI_utils.h" using OpenWifi::RESTAPI_utils::field_from_json; using OpenWifi::RESTAPI_utils::field_to_json; namespace OpenWifi::AnalyticsObjects { void Report::reset() {} void Report::to_json([[maybe_unused]] Poco::JSON::Object &Obj) const {} void VenueInfo::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "id", id); field_to_json(Obj, "name", name); field_to_json(Obj, "description", description); field_to_json(Obj, "retention", retention); field_to_json(Obj, "interval", interval); field_to_json(Obj, "monitorSubVenues", monitorSubVenues); } bool VenueInfo::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "id", id); field_from_json(Obj, "name", name); field_from_json(Obj, "description", description); field_from_json(Obj, "retention", retention); field_from_json(Obj, "interval", interval); field_from_json(Obj, "monitorSubVenues", monitorSubVenues); return true; } catch (...) { } return false; } void BoardInfo::to_json(Poco::JSON::Object &Obj) const { info.to_json(Obj); field_to_json(Obj, "venueList", venueList); } bool BoardInfo::from_json(const Poco::JSON::Object::Ptr &Obj) { try { info.from_json(Obj); field_from_json(Obj, "venueList", venueList); return true; } catch (...) { } return false; } void DeviceInfo::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "boardId", boardId); field_to_json(Obj, "type", type); field_to_json(Obj, "serialNumber", serialNumber); field_to_json(Obj, "deviceType", deviceType); field_to_json(Obj, "lastContact", lastContact); field_to_json(Obj, "lastPing", lastPing); field_to_json(Obj, "lastState", lastState); field_to_json(Obj, "lastFirmware", lastFirmware); field_to_json(Obj, "lastFirmwareUpdate", lastFirmwareUpdate); field_to_json(Obj, "lastConnection", lastConnection); field_to_json(Obj, "lastDisconnection", lastDisconnection); field_to_json(Obj, "pings", pings); field_to_json(Obj, "states", states); field_to_json(Obj, "connected", connected); field_to_json(Obj, "connectionIp", connectionIp); field_to_json(Obj, "associations_2g", associations_2g); field_to_json(Obj, "associations_5g", associations_5g); field_to_json(Obj, "associations_6g", associations_6g); field_to_json(Obj, "health", health); field_to_json(Obj, "lastHealth", lastHealth); field_to_json(Obj, "locale", locale); field_to_json(Obj, "uptime", uptime); field_to_json(Obj, "memory", memory); } bool DeviceInfo::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "boardId", boardId); field_from_json(Obj, "type", type); field_from_json(Obj, "serialNumber", serialNumber); field_from_json(Obj, "deviceType", deviceType); field_from_json(Obj, "lastContact", lastContact); field_from_json(Obj, "lastPing", lastPing); field_from_json(Obj, "lastState", lastState); field_from_json(Obj, "lastFirmware", lastFirmware); field_from_json(Obj, "lastFirmwareUpdate", lastFirmwareUpdate); field_from_json(Obj, "lastConnection", lastConnection); field_from_json(Obj, "lastDisconnection", lastDisconnection); field_from_json(Obj, "pings", pings); field_from_json(Obj, "states", states); field_from_json(Obj, "connected", connected); field_from_json(Obj, "connectionIp", connectionIp); field_from_json(Obj, "associations_2g", associations_2g); field_from_json(Obj, "associations_5g", associations_5g); field_from_json(Obj, "associations_6g", associations_6g); field_from_json(Obj, "health", health); field_from_json(Obj, "lastHealth", lastHealth); field_from_json(Obj, "locale", locale); field_from_json(Obj, "uptime", uptime); field_from_json(Obj, "memory", memory); return true; } catch (...) { } return false; } void DeviceInfoList::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "devices", devices); } bool DeviceInfoList::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "devices", devices); return true; } catch (...) { } return false; } void UE_rate::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "bitrate", bitrate); field_to_json(Obj, "mcs", mcs); field_to_json(Obj, "nss", nss); field_to_json(Obj, "ht", ht); field_to_json(Obj, "sgi", sgi); field_to_json(Obj, "chwidth", chwidth); } bool UE_rate::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "bitrate", bitrate); field_from_json(Obj, "mcs", mcs); field_from_json(Obj, "nss", nss); field_from_json(Obj, "ht", ht); field_from_json(Obj, "sgi", sgi); field_from_json(Obj, "chwidth", chwidth); return true; } catch (...) { } return false; } void UETimePoint::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "station", station); field_to_json(Obj, "rssi", rssi); field_to_json(Obj, "tx_bytes", tx_bytes); field_to_json(Obj, "rx_bytes", rx_bytes); field_to_json(Obj, "tx_duration", tx_duration); field_to_json(Obj, "rx_packets", rx_packets); field_to_json(Obj, "tx_packets", tx_packets); field_to_json(Obj, "tx_retries", tx_retries); field_to_json(Obj, "tx_failed", tx_failed); field_to_json(Obj, "connected", connected); field_to_json(Obj, "inactive", inactive); field_to_json(Obj, "tx_rate", tx_rate); field_to_json(Obj, "rx_rate", rx_rate); // field_to_json(Obj, "tidstats", tidstats); field_to_json(Obj, "tx_bytes_bw", tx_bytes_bw); field_to_json(Obj, "rx_bytes_bw", rx_bytes_bw); field_to_json(Obj, "tx_packets_bw", tx_packets_bw); field_to_json(Obj, "rx_packets_bw", rx_packets_bw); field_to_json(Obj, "tx_failed_pct", tx_failed_pct); field_to_json(Obj, "tx_retries_pct", tx_retries_pct); field_to_json(Obj, "tx_duration_pct", tx_duration_pct); field_to_json(Obj, "tx_bytes_delta", tx_bytes_delta); field_to_json(Obj, "rx_bytes_delta", rx_bytes_delta); field_to_json(Obj, "tx_packets_delta", tx_packets_delta); field_to_json(Obj, "rx_packets_delta", rx_packets_delta); field_to_json(Obj, "tx_failed_delta", tx_failed_delta); field_to_json(Obj, "tx_retries_delta", tx_retries_delta); field_to_json(Obj, "tx_duration_delta", tx_duration_delta); } bool UETimePoint::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "station", station); field_from_json(Obj, "rssi", rssi); field_from_json(Obj, "tx_bytes", tx_bytes); field_from_json(Obj, "rx_bytes", rx_bytes); field_from_json(Obj, "tx_duration", tx_duration); field_from_json(Obj, "rx_packets", rx_packets); field_from_json(Obj, "tx_packets", tx_packets); field_from_json(Obj, "tx_retries", tx_retries); field_from_json(Obj, "tx_failed", tx_failed); field_from_json(Obj, "connected", connected); field_from_json(Obj, "inactive", inactive); field_from_json(Obj, "tx_rate", tx_rate); field_from_json(Obj, "rx_rate", rx_rate); // field_from_json(Obj,"tidstats",tidstats); field_from_json(Obj, "tx_bytes_bw", tx_bytes_bw); field_from_json(Obj, "rx_bytes_bw", rx_bytes_bw); field_from_json(Obj, "tx_packets_bw", tx_packets_bw); field_from_json(Obj, "rx_packets_bw", rx_packets_bw); field_from_json(Obj, "tx_failed_pct", tx_failed_pct); field_from_json(Obj, "tx_retries_pct", tx_retries_pct); field_from_json(Obj, "tx_duration_pct", tx_duration_pct); field_from_json(Obj, "tx_bytes_delta", tx_bytes_delta); field_from_json(Obj, "rx_bytes_delta", rx_bytes_delta); field_from_json(Obj, "tx_packets_delta", tx_packets_delta); field_from_json(Obj, "rx_packets_delta", rx_packets_delta); field_from_json(Obj, "tx_failed_delta", tx_failed_delta); field_from_json(Obj, "tx_retries_delta", tx_retries_delta); field_from_json(Obj, "tx_duration_delta", tx_duration_delta); return true; } catch (...) { } return false; } void APTimePoint::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "collisions", collisions); field_to_json(Obj, "multicast", multicast); field_to_json(Obj, "rx_bytes", rx_bytes); field_to_json(Obj, "rx_dropped", rx_dropped); field_to_json(Obj, "rx_errors", rx_errors); field_to_json(Obj, "rx_packets", rx_packets); field_to_json(Obj, "tx_bytes", tx_bytes); field_to_json(Obj, "tx_packets", tx_packets); field_to_json(Obj, "tx_dropped", tx_dropped); field_to_json(Obj, "tx_errors", tx_errors); field_to_json(Obj, "tx_packets", tx_packets); field_to_json(Obj, "tx_bytes_bw", tx_bytes_bw); field_to_json(Obj, "rx_bytes_bw", rx_bytes_bw); field_to_json(Obj, "rx_dropped_pct", rx_dropped_pct); field_to_json(Obj, "tx_dropped_pct", tx_dropped_pct); field_to_json(Obj, "rx_packets_bw", rx_packets_bw); field_to_json(Obj, "tx_packets_bw", tx_packets_bw); field_to_json(Obj, "rx_errors_pct", rx_errors_pct); field_to_json(Obj, "tx_errors_pct", tx_errors_pct); field_to_json(Obj, "tx_bytes_delta", tx_bytes_delta); field_to_json(Obj, "rx_bytes_delta", rx_bytes_delta); field_to_json(Obj, "rx_dropped_delta", rx_dropped_delta); field_to_json(Obj, "tx_dropped_delta", tx_dropped_delta); field_to_json(Obj, "rx_packets_delta", rx_packets_delta); field_to_json(Obj, "tx_packets_delta", tx_packets_delta); field_to_json(Obj, "rx_errors_delta", rx_errors_delta); field_to_json(Obj, "tx_errors_delta", tx_errors_delta); } bool APTimePoint::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "collisions", collisions); field_from_json(Obj, "multicast", multicast); field_from_json(Obj, "rx_bytes", rx_bytes); field_from_json(Obj, "rx_dropped", rx_dropped); field_from_json(Obj, "rx_errors", rx_errors); field_from_json(Obj, "rx_packets", rx_packets); field_from_json(Obj, "tx_bytes", tx_bytes); field_from_json(Obj, "tx_packets", tx_packets); field_from_json(Obj, "tx_dropped", tx_dropped); field_from_json(Obj, "tx_errors", tx_errors); field_from_json(Obj, "tx_packets", tx_packets); field_from_json(Obj, "tx_bytes_bw", tx_bytes_bw); field_from_json(Obj, "rx_bytes_bw", rx_bytes_bw); field_from_json(Obj, "rx_dropped_pct", rx_dropped_pct); field_from_json(Obj, "tx_dropped_pct", tx_dropped_pct); field_from_json(Obj, "rx_packets_bw", rx_packets_bw); field_from_json(Obj, "tx_packets_bw", tx_packets_bw); field_from_json(Obj, "rx_errors_pct", rx_errors_pct); field_from_json(Obj, "tx_errors_pct", tx_errors_pct); field_from_json(Obj, "tx_bytes_delta", tx_bytes_delta); field_from_json(Obj, "rx_bytes_delta", rx_bytes_delta); field_from_json(Obj, "rx_dropped_delta", rx_dropped_delta); field_from_json(Obj, "tx_dropped_delta", tx_dropped_delta); field_from_json(Obj, "rx_packets_delta", rx_packets_delta); field_from_json(Obj, "tx_packets_delta", tx_packets_delta); field_from_json(Obj, "rx_errors_delta", rx_errors_delta); field_from_json(Obj, "tx_errors_delta", tx_errors_delta); return true; } catch (...) { } return false; } void TIDstat_entry::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "rx_msdu", rx_msdu); field_to_json(Obj, "tx_msdu", tx_msdu); field_to_json(Obj, "tx_msdu_failed", tx_msdu_failed); field_to_json(Obj, "tx_msdu_retries", tx_msdu_retries); } bool TIDstat_entry::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "rx_msdu", rx_msdu); field_from_json(Obj, "tx_msdu", tx_msdu); field_from_json(Obj, "tx_msdu_failed", tx_msdu_failed); field_from_json(Obj, "tx_msdu_retries", tx_msdu_retries); return true; } catch (...) { } return false; } void RadioTimePoint::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "band", band); field_to_json(Obj, "channel_width", channel_width); field_to_json(Obj, "active_ms", active_ms); field_to_json(Obj, "busy_ms", busy_ms); field_to_json(Obj, "receive_ms", receive_ms); field_to_json(Obj, "transmit_ms", transmit_ms); field_to_json(Obj, "tx_power", tx_power); field_to_json(Obj, "channel", channel); field_to_json(Obj, "temperature", temperature); field_to_json(Obj, "noise", noise); field_to_json(Obj, "active_pct", active_pct); field_to_json(Obj, "busy_pct", busy_pct); field_to_json(Obj, "receive_pct", receive_pct); field_to_json(Obj, "transmit_pct", transmit_pct); } bool RadioTimePoint::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "band", band); field_from_json(Obj, "channel_width", channel_width); field_from_json(Obj, "active_ms", active_ms); field_from_json(Obj, "busy_ms", busy_ms); field_from_json(Obj, "receive_ms", receive_ms); field_from_json(Obj, "transmit_ms", transmit_ms); field_from_json(Obj, "tx_power", tx_power); field_from_json(Obj, "channel", channel); field_from_json(Obj, "temperature", temperature); field_from_json(Obj, "noise", noise); field_from_json(Obj, "active_pct", active_pct); field_from_json(Obj, "busy_pct", busy_pct); field_from_json(Obj, "receive_pct", receive_pct); field_from_json(Obj, "transmit_pct", transmit_pct); return true; } catch (...) { } return false; } void AveragePoint::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "min", min); field_to_json(Obj, "max", max); field_to_json(Obj, "avg", avg); } bool AveragePoint::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "min", min); field_from_json(Obj, "max", max); field_from_json(Obj, "avg", avg); return true; } catch (...) { } return false; } void SSIDTimePoint::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "bssid", bssid); field_to_json(Obj, "mode", mode); field_to_json(Obj, "ssid", ssid); field_to_json(Obj, "band", band); field_to_json(Obj, "channel", channel); field_to_json(Obj, "associations", associations); field_to_json(Obj, "tx_bytes_bw", tx_bytes_bw); field_to_json(Obj, "rx_bytes_bw", rx_bytes_bw); field_to_json(Obj, "tx_packets_bw", tx_packets_bw); field_to_json(Obj, "rx_packets_bw", rx_packets_bw); field_to_json(Obj, "tx_failed_pct", tx_failed_pct); field_to_json(Obj, "tx_retries_pct", tx_retries_pct); field_to_json(Obj, "tx_duration_pct", tx_duration_pct); } bool SSIDTimePoint::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "bssid", bssid); field_from_json(Obj, "mode", mode); field_from_json(Obj, "ssid", ssid); field_from_json(Obj, "band", band); field_from_json(Obj, "channel", channel); field_from_json(Obj, "associations", associations); field_from_json(Obj, "tx_bytes_bw", tx_bytes_bw); field_from_json(Obj, "rx_bytes_bw", rx_bytes_bw); field_from_json(Obj, "tx_packets_bw", tx_packets_bw); field_from_json(Obj, "rx_packets_bw", rx_packets_bw); field_from_json(Obj, "tx_failed_pct", tx_failed_pct); field_from_json(Obj, "tx_retries_pct", tx_retries_pct); field_from_json(Obj, "tx_duration_pct", tx_duration_pct); return true; } catch (...) { } return false; } void DeviceTimePoint::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "id", id); field_to_json(Obj, "boardId", boardId); field_to_json(Obj, "timestamp", timestamp); field_to_json(Obj, "ap_data", ap_data); field_to_json(Obj, "ssid_data", ssid_data); field_to_json(Obj, "radio_data", radio_data); field_to_json(Obj, "device_info", device_info); field_to_json(Obj, "serialNumber", serialNumber); } bool DeviceTimePoint::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "id", id); field_from_json(Obj, "boardId", boardId); field_from_json(Obj, "timestamp", timestamp); field_from_json(Obj, "ap_data", ap_data); field_from_json(Obj, "ssid_data", ssid_data); field_from_json(Obj, "radio_data", radio_data); field_from_json(Obj, "device_info", device_info); field_from_json(Obj, "serialNumber", serialNumber); return true; } catch (...) { } return false; } void DeviceTimePointAnalysis::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "noise", noise); field_to_json(Obj, "temperature", temperature); field_to_json(Obj, "active_pct", active_pct); field_to_json(Obj, "busy_pct", busy_pct); field_to_json(Obj, "receive_pct", receive_pct); field_to_json(Obj, "transmit_pct", transmit_pct); field_to_json(Obj, "tx_power", tx_power); field_to_json(Obj, "tx_bytes_bw", tx_bytes_bw); field_to_json(Obj, "rx_bytes_bw", rx_bytes_bw); field_to_json(Obj, "rx_dropped_pct", rx_dropped_pct); field_to_json(Obj, "tx_dropped_pct", tx_dropped_pct); field_to_json(Obj, "rx_packets_bw", rx_packets_bw); field_to_json(Obj, "tx_packets_bw", tx_packets_bw); field_to_json(Obj, "rx_errors_pct", rx_errors_pct); field_to_json(Obj, "tx_errors_pct", tx_errors_pct); } bool DeviceTimePointAnalysis::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "noise", noise); field_from_json(Obj, "temperature", temperature); field_from_json(Obj, "active_pct", active_pct); field_from_json(Obj, "busy_pct", busy_pct); field_from_json(Obj, "receive_pct", receive_pct); field_from_json(Obj, "transmit_pct", transmit_pct); field_from_json(Obj, "tx_power", tx_power); field_from_json(Obj, "tx_bytes_bw", tx_bytes_bw); field_from_json(Obj, "rx_bytes_bw", rx_bytes_bw); field_from_json(Obj, "rx_dropped_pct", rx_dropped_pct); field_from_json(Obj, "tx_dropped_pct", tx_dropped_pct); field_from_json(Obj, "rx_packets_bw", rx_packets_bw); field_from_json(Obj, "tx_packets_bw", tx_packets_bw); field_from_json(Obj, "rx_errors_pct", rx_errors_pct); field_from_json(Obj, "tx_errors_pct", tx_errors_pct); return true; } catch (...) { } return false; } void DeviceTimePointList::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "points", points); field_to_json(Obj, "stats", stats); } bool DeviceTimePointList::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "points", points); field_from_json(Obj, "stats", stats); return true; } catch (...) { } return false; } void DeviceTimePointStats::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "firstPoint", firstPoint); field_to_json(Obj, "lastPoint", lastPoint); field_to_json(Obj, "count", count); } bool DeviceTimePointStats::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "firstPoint", firstPoint); field_from_json(Obj, "lastPoint", lastPoint); field_from_json(Obj, "count", count); return true; } catch (...) { } return false; } void WifiClientRate::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "bitrate", bitrate); field_to_json(Obj, "chwidth", chwidth); field_to_json(Obj, "mcs", mcs); field_to_json(Obj, "nss", nss); field_to_json(Obj, "vht", vht); } bool WifiClientRate::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "bitrate", bitrate); field_from_json(Obj, "chwidth", chwidth); field_from_json(Obj, "mcs", mcs); field_from_json(Obj, "nss", nss); field_from_json(Obj, "vht", vht); return true; } catch (...) { } return false; } void WifiClientHistory::to_json(Poco::JSON::Object &Obj) const { field_to_json(Obj, "timestamp", timestamp); field_to_json(Obj, "station_id", station_id); field_to_json(Obj, "bssid", bssid); field_to_json(Obj, "ssid", ssid); field_to_json(Obj, "rssi", rssi); field_to_json(Obj, "rx_bitrate", rx_bitrate); field_to_json(Obj, "rx_chwidth", rx_chwidth); field_to_json(Obj, "rx_mcs", rx_mcs); field_to_json(Obj, "rx_nss", rx_nss); field_to_json(Obj, "rx_vht", rx_vht); field_to_json(Obj, "tx_bitrate", tx_bitrate); field_to_json(Obj, "tx_chwidth", tx_chwidth); field_to_json(Obj, "tx_mcs", tx_mcs); field_to_json(Obj, "tx_nss", tx_nss); field_to_json(Obj, "tx_vht", tx_vht); field_to_json(Obj, "rx_bytes", rx_bytes); field_to_json(Obj, "tx_bytes", tx_bytes); field_to_json(Obj, "rx_duration", rx_duration); field_to_json(Obj, "tx_duration", tx_duration); field_to_json(Obj, "rx_packets", rx_packets); field_to_json(Obj, "tx_packets", tx_packets); field_to_json(Obj, "ipv4", ipv4); field_to_json(Obj, "ipv6", ipv6); field_to_json(Obj, "channel_width", channel_width); field_to_json(Obj, "noise", noise); field_to_json(Obj, "tx_power", tx_power); field_to_json(Obj, "channel", channel); field_to_json(Obj, "active_ms", active_ms); field_to_json(Obj, "busy_ms", busy_ms); field_to_json(Obj, "receive_ms", receive_ms); field_to_json(Obj, "mode", mode); field_to_json(Obj, "ack_signal", ack_signal); field_to_json(Obj, "ack_signal_avg", ack_signal_avg); field_to_json(Obj, "connected", connected); field_to_json(Obj, "inactive", inactive); field_to_json(Obj, "tx_retries", tx_retries); field_to_json(Obj, "venue_id", venue_id); } bool WifiClientHistory::from_json(const Poco::JSON::Object::Ptr &Obj) { try { field_from_json(Obj, "timestamp", timestamp); field_from_json(Obj, "station_id", station_id); field_from_json(Obj, "bssid", bssid); field_from_json(Obj, "ssid", ssid); field_from_json(Obj, "rssi", rssi); field_from_json(Obj, "rx_bitrate", rx_bitrate); field_from_json(Obj, "rx_chwidth", rx_chwidth); field_from_json(Obj, "rx_mcs", rx_mcs); field_from_json(Obj, "rx_nss", rx_nss); field_from_json(Obj, "rx_vht", rx_vht); field_from_json(Obj, "tx_bitrate", tx_bitrate); field_from_json(Obj, "tx_chwidth", tx_chwidth); field_from_json(Obj, "tx_mcs", tx_mcs); field_from_json(Obj, "tx_nss", tx_nss); field_from_json(Obj, "tx_vht", tx_vht); field_from_json(Obj, "rx_bytes", rx_bytes); field_from_json(Obj, "tx_bytes", tx_bytes); field_from_json(Obj, "rx_duration", rx_duration); field_from_json(Obj, "tx_duration", tx_duration); field_from_json(Obj, "rx_packets", rx_packets); field_from_json(Obj, "tx_packets", tx_packets); field_from_json(Obj, "ipv4", ipv4); field_from_json(Obj, "ipv6", ipv6); field_from_json(Obj, "channel_width", channel_width); field_from_json(Obj, "noise", noise); field_from_json(Obj, "tx_power", tx_power); field_from_json(Obj, "channel", channel); field_from_json(Obj, "active_ms", active_ms); field_from_json(Obj, "busy_ms", busy_ms); field_from_json(Obj, "receive_ms", receive_ms); field_from_json(Obj, "mode", mode); field_from_json(Obj, "ack_signal", ack_signal); field_from_json(Obj, "ack_signal_avg", ack_signal_avg); field_from_json(Obj, "connected", connected); field_from_json(Obj, "inactive", inactive); field_from_json(Obj, "tx_retries", tx_retries); field_from_json(Obj, "venue_id", venue_id); return true; } catch (...) { } return false; } } // namespace OpenWifi::AnalyticsObjects