Transform keys of incoming legacy logs
parent
93ff7ee770
commit
ca0cde6f84
|
@ -21,6 +21,7 @@ class Device < ApplicationRecord
|
|||
has_many :sensor_readings, dependent: :destroy
|
||||
has_many :device_configs, dependent: :destroy
|
||||
has_many :pin_bindings, dependent: :destroy
|
||||
has_many :token_issuances, dependent: :destroy
|
||||
validates_presence_of :name
|
||||
validates :timezone,
|
||||
inclusion: { in: TIMEZONES, message: BAD_TZ, allow_nil: true }
|
||||
|
|
|
@ -18,6 +18,7 @@ class Log < ApplicationRecord
|
|||
belongs_to :device
|
||||
|
||||
validates :device, presence: true
|
||||
validates :type, presence: true
|
||||
serialize :meta
|
||||
validates :meta, presence: true
|
||||
# http://stackoverflow.com/a/5127684/1064917
|
||||
|
|
|
@ -28,7 +28,7 @@ module Logs
|
|||
#
|
||||
# TODO: Make the fields below mandadtory (allowing nil in some cases, but
|
||||
# always requiring the key) and delete the `meta` field.
|
||||
string :type, in: Log::TYPES
|
||||
string :type, in: Log::TYPES
|
||||
integer :x
|
||||
integer :y
|
||||
integer :z
|
||||
|
@ -51,7 +51,17 @@ module Logs
|
|||
end
|
||||
|
||||
def validate
|
||||
@log = Log.new(inputs.except(:meta).merge(temporary_stub))
|
||||
@log = Log.new
|
||||
@log.device = device
|
||||
@log.message = message
|
||||
@log.channels = channels || []
|
||||
@log.x = transitional_field(:x)
|
||||
@log.y = transitional_field(:y)
|
||||
@log.z = transitional_field(:z)
|
||||
@log.verbosity = transitional_field(:verbosity)
|
||||
@log.major_version = transitional_field(:major_version)
|
||||
@log.minor_version = transitional_field(:minor_version)
|
||||
@log.type = transitional_field(:type)
|
||||
@log.validate!
|
||||
add_error :log, :private, BAD_WORDS if has_bad_words
|
||||
end
|
||||
|
@ -66,17 +76,9 @@ module Logs
|
|||
!!inputs[:message].upcase.match(BLACKLIST)
|
||||
end
|
||||
|
||||
# We won't need this after `meta` field removal.
|
||||
def temporary_stub
|
||||
{
|
||||
x: meta[:x],
|
||||
y: meta[:y],
|
||||
z: meta[:z],
|
||||
verbosity: meta[:verbosity],
|
||||
major_version: meta[:major_version],
|
||||
minor_version: meta[:minor_version],
|
||||
type: meta[:type]
|
||||
}
|
||||
# Helper for dealing with the gradual removal of the meta field.
|
||||
def transitional_field(name, default = nil)
|
||||
return inputs[name] || meta[name] || meta[name.to_s] || default
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20180331183559) do
|
||||
ActiveRecord::Schema.define(version: 20180401141611) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
unless Rails.env == "production"
|
||||
TokenIssuance.destroy_all
|
||||
PinBinding.destroy_all
|
||||
User.destroy_all
|
||||
Device.destroy_all
|
||||
|
|
|
@ -24,6 +24,8 @@ import { talk } from "browser-speech";
|
|||
import { getWebAppConfigValue } from "../config_storage/actions";
|
||||
import { BooleanSetting } from "../session_keys";
|
||||
import { versionOK } from "../util";
|
||||
import * as _ from "lodash";
|
||||
|
||||
export const TITLE = "New message from bot";
|
||||
const THROTTLE_MS = 600;
|
||||
/** TODO: This ought to be stored in Redux. It is here because of historical
|
||||
|
@ -124,9 +126,24 @@ type Client = { connected?: boolean };
|
|||
export const onSent = (client: Client) => () => !!client.connected ?
|
||||
dispatchNetworkUp("user.mqtt") : dispatchNetworkDown("user.mqtt");
|
||||
|
||||
const LEGACY_META_KEY_NAMES: (keyof Log)[] = [
|
||||
"type",
|
||||
"x",
|
||||
"y",
|
||||
"z",
|
||||
"verbosity",
|
||||
"major_version",
|
||||
"minor_version"
|
||||
];
|
||||
|
||||
function legacyKeyTransformation(log: Log, key: keyof Log) {
|
||||
log[key] = log[key] || _.get(log, ["meta", key], undefined);
|
||||
}
|
||||
|
||||
export const onLogs = (dispatch: Function, getState: GetState) => throttle((msg: Log) => {
|
||||
bothUp();
|
||||
if (isLog(msg)) {
|
||||
LEGACY_META_KEY_NAMES.map(key => legacyKeyTransformation(msg, key));
|
||||
actOnChannelName(msg, "toast", showLogOnScreen);
|
||||
actOnChannelName(msg, "espeak", speakLogAloud(getState));
|
||||
dispatch(initLog(msg));
|
||||
|
|
|
@ -45,6 +45,8 @@ export interface Log {
|
|||
y?: number;
|
||||
z?: number;
|
||||
verbosity?: number;
|
||||
major_version?: number;
|
||||
minor_version?: number;
|
||||
channels: string[];
|
||||
created_at: number;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue