Display status in admin console, Change the filters to include relevant fields, scopes for device status

This commit is contained in:
leenasn
2015-11-11 14:37:05 +05:30
parent 8116e4e751
commit da6b70c07b
7 changed files with 77 additions and 1 deletions

View File

@@ -17,10 +17,22 @@ ActiveAdmin.register Device do
index do index do
selectable_column selectable_column
id_column id_column
column "Status" do | device |
status = device.status
status_tag status.titleize, STATUS_CLASSES[status.to_sym]
end
column "Model Name",:model column "Model Name",:model
column :created_at column :created_at
column :updated_at column :updated_at
column :last_heartbeat_recd_time
actions actions
end end
filter :model
filter :created_at
filter :updated_at
filter :last_heartbeat_recd_time
scope :active
scope :missing
scope :dead
end end

View File

@@ -1,10 +1,20 @@
class Device < ActiveRecord::Base class Device < ActiveRecord::Base
enum status: [:active,:missing,:dead]
attr_accessor :status
validates :unique_id, :model, presence: true validates :unique_id, :model, presence: true
validates :unique_id, uniqueness: true validates :unique_id, uniqueness: true
before_create :generate_access_token before_create :generate_access_token
after_create :update_last_heartbeats_time after_create :update_last_heartbeats_time
has_many :heartbeats, dependent: :destroy has_many :heartbeats, dependent: :destroy
scope :active, -> {where("last_heartbeat_recd_time > '#{Time.now.utc - ACTIVE_TIMEFRAME}'")}
scope :missing, -> {where("last_heartbeat_recd_time < '#{Time.now.utc - ACTIVE_TIMEFRAME}'AND last_heartbeat_recd_time > '#{Time.now.utc - MISSING_TIMEFRAME}'")}
scope :dead, -> {where("last_heartbeat_recd_time < '#{Time.now.utc - MISSING_TIMEFRAME}'")}
def generate_access_token def generate_access_token
self.access_token = SecureRandom.uuid self.access_token = SecureRandom.uuid
end end
@@ -17,4 +27,15 @@ class Device < ActiveRecord::Base
def next_heartbeat_time def next_heartbeat_time
(self.last_heartbeat_recd_time + HEARTBEAT_INTERVAL).to_i (self.last_heartbeat_recd_time + HEARTBEAT_INTERVAL).to_i
end end
def status
time_elapsed = Time.now - self.last_heartbeat_recd_time
if time_elapsed < ACTIVE_TIMEFRAME
self.status = Device.statuses.keys[0]
elsif time_elapsed < MISSING_TIMEFRAME
self.status = Device.statuses.keys[1]
else
self.status = Device.statuses.keys[2]
end
end
end end

View File

@@ -35,3 +35,4 @@ module OnemdmServer
config.generators.helper = false config.generators.helper = false
end end
end end
STATUS_CLASSES ={active: :ok,missing: :warning,dead: :error}

View File

@@ -39,4 +39,8 @@ Rails.application.configure do
# Raises error for missing translations # Raises error for missing translations
# config.action_view.raise_on_missing_translations = true # config.action_view.raise_on_missing_translations = true
HEARTBEAT_INTERVAL = 1.minute HEARTBEAT_INTERVAL = 1.minute
ACTIVE_TIMEFRAME = 1.hours
MISSING_TIMEFRAME = 2.hours
end end

View File

@@ -77,4 +77,7 @@ Rails.application.configure do
# Do not dump schema after migrations. # Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false config.active_record.dump_schema_after_migration = false
HEARTBEAT_INTERVAL = 1.hour HEARTBEAT_INTERVAL = 1.hour
ACTIVE_TIMEFRAME = 12.hours
MISSING_TIMEFRAME = 48.hours
end end

View File

@@ -40,4 +40,8 @@ Rails.application.configure do
# Raises error for missing translations # Raises error for missing translations
# config.action_view.raise_on_missing_translations = true # config.action_view.raise_on_missing_translations = true
HEARTBEAT_INTERVAL = 1.hour HEARTBEAT_INTERVAL = 1.hour
ACTIVE_TIMEFRAME = 12.hours
MISSING_TIMEFRAME = 48.hours
end end

View File

@@ -22,4 +22,35 @@ RSpec.describe Device, type: :model do
expect(Device.last.next_heartbeat_time).not_to be_nil expect(Device.last.next_heartbeat_time).not_to be_nil
end end
end end
describe "Device status" do
let!(:device){FactoryGirl.create(:device)}
it "Active" do
expect(device.status).to eql Device.statuses.keys[0]
end
it "Missing" do
device.update_attribute(:last_heartbeat_recd_time,Time.now - ACTIVE_TIMEFRAME)
expect(device.status).to eql Device.statuses.keys[1]
end
it "Dead" do
device.update_attribute(:last_heartbeat_recd_time,Time.now - MISSING_TIMEFRAME)
expect(device.status).to eql Device.statuses.keys[2]
end
describe "Scope" do
it "Active" do
expect(Device.active).to eq([device])
end
it "Missing" do
device.update_attribute(:last_heartbeat_recd_time,
(Time.now - 15.hours))
expect(Device.missing).to eq([device])
end
it "Dead" do
device.update_attribute(:last_heartbeat_recd_time,
Time.now - 1.week)
expect(Device.dead).to eq([device])
end
end
end
end end