Module: Mqttopia::Serializers::TripMetric
- Defined in:
- lib/mqttopia/serializers/trip_metric.rb
Constant Summary collapse
- KEYS =
i[ts locPerms connS batt battPwOp pws notf gps nlog loc].freeze
Class Method Summary collapse
- .charging_status_mapper(charging_status) ⇒ Object
- .current_timestamp ⇒ Object
- .location_permission_mapper(permission) ⇒ Object
- .serialize(body) ⇒ Object
- .serialize_battery(battery, optimization_status, power_saving_mode) ⇒ Object
- .serialize_connection(connt_s) ⇒ Object
- .serialize_location(location) ⇒ Object
- .serialize_metrics(metrics) ⇒ Object
- .valid_metric?(metrics) ⇒ Boolean
Class Method Details
.charging_status_mapper(charging_status) ⇒ Object
76 77 78 79 80 81 82 83 |
# File 'lib/mqttopia/serializers/trip_metric.rb', line 76 def charging_status_mapper(charging_status) { "0" => "UNKNOWN", "1" => "DISCHARGING", "2" => "CHARGING", "3" => "FULL" }.fetch(charging_status&.to_s) { "UNKNOWN" } end |
.current_timestamp ⇒ Object
89 90 91 |
# File 'lib/mqttopia/serializers/trip_metric.rb', line 89 def DateTime.now.strftime("%Q") end |
.location_permission_mapper(permission) ⇒ Object
66 67 68 69 70 71 72 73 74 |
# File 'lib/mqttopia/serializers/trip_metric.rb', line 66 def () { "0" => "BACKGROUND_FINE", "-1" => "BACKGROUND_COARSE", "-2" => "FOREGROUND_FINE", "-3" => "FOREGROUND_COARSE", "-4" => "DISABLED" }.fetch(&.to_s) { "UNKNOWN" } end |
.serialize(body) ⇒ Object
10 11 12 13 14 15 16 17 18 19 |
# File 'lib/mqttopia/serializers/trip_metric.rb', line 10 def serialize(body) return unless valid_metric?(body[:metrics]) { trip_id: body[:trip_id], metrics: serialize_metrics(body[:metrics]), logged_at: body.dig(:metrics, :ts)&.to_s, received_at: } end |
.serialize_battery(battery, optimization_status, power_saving_mode) ⇒ Object
43 44 45 46 47 48 49 50 51 52 |
# File 'lib/mqttopia/serializers/trip_metric.rb', line 43 def serialize_battery(battery, optimization_status, power_saving_mode) return unless battery { battery_level: battery[:l], charging_status: charging_status_mapper(battery[:cs]), optimization_status: optimization_status&.zero?, power_saving_mode: power_saving_mode&.zero? } end |
.serialize_connection(connt_s) ⇒ Object
33 34 35 36 37 38 39 40 41 |
# File 'lib/mqttopia/serializers/trip_metric.rb', line 33 def serialize_connection(connt_s) return unless connt_s { connection_type: connt_s[:type], connection_sub_type: connt_s[:subType], connection_status: connt_s[:connt] } end |
.serialize_location(location) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/mqttopia/serializers/trip_metric.rb', line 54 def serialize_location(location) return unless location { latitude: location[:lat], longitude: location[:lon], accuracy: location[:acc], altitude: location[:alt], logged_at: location[:ts]&.to_s } end |
.serialize_metrics(metrics) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/mqttopia/serializers/trip_metric.rb', line 21 def serialize_metrics(metrics) { location_permission: (metrics[:locPerms]), connection: serialize_connection(metrics[:connS]), battery: serialize_battery(metrics[:batt], metrics[:battPwOp], metrics[:pws]), notification_permission: metrics[:notf]&.zero?, gps: metrics[:gps]&.zero?, number_of_trip_logs: metrics[:nlog], location: serialize_location(metrics[:loc]) } end |
.valid_metric?(metrics) ⇒ Boolean
85 86 87 |
# File 'lib/mqttopia/serializers/trip_metric.rb', line 85 def valid_metric?(metrics) metrics.is_a?(Hash) && KEYS.all? { |key| metrics.key?(key) } end |