From 3252e8cc7ed3128cea5db4f76f18d4aa1f513147 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Mon, 15 Jul 2019 17:08:51 -0500 Subject: [PATCH] Don't send MQTT throttle emails more than once per day. --- app/models/device.rb | 11 ++++++++--- ...14412_add_mqtt_throttle_email_sent_at_to_device.rb | 7 +++++++ db/structure.sql | 6 ++++-- spec/models/device_spec.rb | 7 +++++++ 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20190715214412_add_mqtt_throttle_email_sent_at_to_device.rb diff --git a/app/models/device.rb b/app/models/device.rb index bb56349f6..7b921a5dc 100644 --- a/app/models/device.rb +++ b/app/models/device.rb @@ -201,8 +201,13 @@ class Device < ApplicationRecord "see https://developer.farm.bot/docs/connectivity-issues" def self.connection_warning(username) device_id = username.split("_").last.to_i || 0 - self - .find(device_id) - .tell(TOO_MANY_CONNECTIONS, ["fatal_email"]) if self.exists?(device_id) + device = self.find_by(id: device_id) + return unless device + + last_sent_at = device.mqtt_rate_limit_email_sent_at || 4.years.ago + if last_sent_at < 1.day.ago + device.update_attributes!(mqtt_rate_limit_email_sent_at: Time.now) + device.tell(TOO_MANY_CONNECTIONS, ["fatal_email"]) + end end end diff --git a/db/migrate/20190715214412_add_mqtt_throttle_email_sent_at_to_device.rb b/db/migrate/20190715214412_add_mqtt_throttle_email_sent_at_to_device.rb new file mode 100644 index 000000000..4f32bfe76 --- /dev/null +++ b/db/migrate/20190715214412_add_mqtt_throttle_email_sent_at_to_device.rb @@ -0,0 +1,7 @@ +class AddMqttThrottleEmailSentAtToDevice < ActiveRecord::Migration[5.2] + def change + add_column :devices, + :mqtt_rate_limit_email_sent_at, + :datetime + end +end diff --git a/db/structure.sql b/db/structure.sql index a7cf78f2d..d3bc718d5 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -206,7 +206,8 @@ CREATE TABLE public.devices ( mounted_tool_id bigint, created_at timestamp without time zone, updated_at timestamp without time zone, - serial_number character varying(32) + serial_number character varying(32), + mqtt_rate_limit_email_sent_at timestamp without time zone ); @@ -3019,6 +3020,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20190621160042'), ('20190621202204'), ('20190701155706'), -('20190709194037'); +('20190709194037'), +('20190715214412'); diff --git a/spec/models/device_spec.rb b/spec/models/device_spec.rb index 06cef0b8c..aa0db2172 100644 --- a/spec/models/device_spec.rb +++ b/spec/models/device_spec.rb @@ -102,4 +102,11 @@ describe Device do expect(results).to_not include(🚑) expect(results).to_not include(🍞) end + + it "throttled emails about MQTT rate limiting" do + device.update_attributes!(mqtt_rate_limit_email_sent_at: 2.days.ago) + Device.connection_warning("device_#{device.id.to_s}") + time = device.reload.mqtt_rate_limit_email_sent_at + expect(time).to be > 1.minute.ago + end end