Skip to content

Commit

Permalink
Collect uptime data in daily heartbeat from connect-ng
Browse files Browse the repository at this point in the history
  • Loading branch information
cjainsuse committed Jan 18, 2024
1 parent 9145722 commit fa6bd6a
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 1 deletion.
11 changes: 11 additions & 0 deletions app/controllers/api/connect/v3/systems/systems_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,17 @@ class Api::Connect::V3::Systems::SystemsController < Api::Connect::BaseControlle
before_action :authenticate_system

def update
if params[:online_at].present?
params[:online_at].each do |online_at|
dthours = online_at.split(':')
@system_uptime = SystemUptime.create!(system_id: @system.id, online_at_day: dthours[0], online_at_hours: dthours[1])
logger.info(N_("Added uptime information for system '%s'") % @system.id)
rescue ActiveRecord::RecordNotUnique
logger.info(N_("Uptime information existing for system '%s'") % @system.id)
end
SystemUptime.where("online_at_day < '#{90.days.ago.to_date}'").delete_all
end

@system.hostname = params[:hostname]

# Since the payload is handled by rails all values are converted to string
Expand Down
7 changes: 7 additions & 0 deletions app/models/system_uptime.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class SystemUptime < ApplicationRecord
belongs_to :system

validates :system_id, presence: true
validates :online_at_day, presence: true
validates :online_at_hours, presence: true
end
18 changes: 18 additions & 0 deletions db/migrate/20240111200053_create_system_uptimes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
class CreateSystemUptimes < ActiveRecord::Migration[6.1]
def change
safety_assured do
create_table :system_uptimes, id: false do |t|
t.bigint :system_id, null: false
t.date :online_at_day, null: false
t.column :online_at_hours, 'binary(24)', null: false
t.timestamps
end

commit_db_transaction

add_index :system_uptimes, %i[system_id online_at_day online_at_hours], unique: true, name: 'id_online_day_hours'

add_foreign_key :system_uptimes, :systems, column: :system_id, validate: false
end
end
end
7 changes: 7 additions & 0 deletions spec/models/system_uptime_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
require 'rails_helper'

RSpec.describe SystemUptime, type: :model do
it { is_expected.to validate_presence_of(:system_id) }
it { is_expected.to validate_presence_of(:online_at_day) }
it { is_expected.to validate_presence_of(:online_at_hours) }
end
15 changes: 14 additions & 1 deletion spec/requests/api/connect/v3/systems/systems_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
let(:system) { FactoryBot.create(:system, hostname: 'initial') }
let(:url) { '/connect/systems' }
let(:headers) { auth_header.merge(version_header) }
let(:systemuptime) { system.system_uptimes.first }
let(:hwinfo) do
{
cpus: 16,
Expand All @@ -18,9 +19,12 @@
}
end
let(:payload) { { hostname: 'test', hwinfo: hwinfo } }
let(:payload1) { { hostname: 'test', hwinfo: hwinfo, online_at: ['2023-12-21:111111111111111111111111'] } }

describe '#update' do
subject(:update_action) { put url, params: payload, headers: headers }
let(:update_action) { put url, params: payload, headers: headers }

subject(:update_uptime_action) { put url, params: payload1, headers: headers }

context 'when hostname is provided' do
it do
Expand All @@ -45,6 +49,15 @@
expect(information[:cpus]).to eq('16')
end
end

context 'when uptime data provided' do
it do
update_uptime_action
expect(systemuptime.system_id).to eq(system.reload.id)
expect(systemuptime.online_at_day.to_date).to eq(Date.parse('2023-12-21'))
expect(systemuptime.online_at_hours.to_s).to eq('111111111111111111111111')
end
end
end

context 'when hostname is not provided' do
Expand Down

0 comments on commit fa6bd6a

Please sign in to comment.