Merge pull request #1694 from FarmBot/sensor_reading_limits
Cap sensor readings to 5,000 countpull/1695/head
commit
8f8056a3e3
|
@ -1,7 +1,10 @@
|
||||||
module Api
|
module Api
|
||||||
class SensorReadingsController < Api::AbstractController
|
class SensorReadingsController < Api::AbstractController
|
||||||
|
LIMIT = 5000
|
||||||
|
before_action :clean_old
|
||||||
|
|
||||||
def create
|
def create
|
||||||
mutate SensorReadings::Create.run(raw_json, device: current_device)
|
mutate SensorReadings::Create.run(raw_json, device: current_device)
|
||||||
end
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
@ -17,10 +20,23 @@ module Api
|
||||||
render json: ""
|
render json: ""
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def clean_old
|
||||||
|
if current_device.sensor_readings.count > LIMIT
|
||||||
|
current_device
|
||||||
|
.sensor_readings
|
||||||
|
.where
|
||||||
|
.not(id: readings.pluck(:id))
|
||||||
|
.delete_all
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def readings
|
def readings
|
||||||
SensorReading.where(device: current_device)
|
@readings ||= SensorReading
|
||||||
|
.where(device: current_device)
|
||||||
|
.order(created_at: :desc)
|
||||||
|
.limit(LIMIT)
|
||||||
end
|
end
|
||||||
|
|
||||||
def reading
|
def reading
|
||||||
|
|
|
@ -18,7 +18,7 @@ describe Api::SensorReadingsController do
|
||||||
x: nil,
|
x: nil,
|
||||||
y: 1,
|
y: 1,
|
||||||
z: 2,
|
z: 2,
|
||||||
mode: 1
|
mode: 1,
|
||||||
}.to_json,
|
}.to_json,
|
||||||
params: { format: :json }
|
params: { format: :json }
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ describe Api::SensorReadingsController do
|
||||||
y: 1,
|
y: 1,
|
||||||
z: 2,
|
z: 2,
|
||||||
mode: 1,
|
mode: 1,
|
||||||
read_at: read_at
|
read_at: read_at,
|
||||||
}.to_json,
|
}.to_json,
|
||||||
params: { format: :json }
|
params: { format: :json }
|
||||||
|
|
||||||
|
@ -105,5 +105,23 @@ describe Api::SensorReadingsController do
|
||||||
post :create, body: {}.to_json
|
post :create, body: {}.to_json
|
||||||
expect(response.status).to eq(401)
|
expect(response.status).to eq(401)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "cleans up excess logs" do
|
||||||
|
const_reassign(Api::SensorReadingsController, :LIMIT, 5)
|
||||||
|
sign_in user
|
||||||
|
10.times do |n|
|
||||||
|
FactoryBot.create(:sensor_reading,
|
||||||
|
device: user.device,
|
||||||
|
created_at: n.minutes.ago)
|
||||||
|
end
|
||||||
|
expect(user.device.sensor_readings.count).to eq(10)
|
||||||
|
get :index, params: { format: :json }
|
||||||
|
expect(json.count).to eq(5)
|
||||||
|
expect(user.device.sensor_readings.count).to eq(5)
|
||||||
|
const_reassign(Api::SensorReadingsController, :LIMIT, 5000)
|
||||||
|
first = (json.first[:created_at])
|
||||||
|
last = (json.last[:created_at])
|
||||||
|
expect(first).to be > last
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue