diff --git a/app/controllers/clients_controller.rb b/app/controllers/clients_controller.rb
index b958e7b..b23777c 100644
--- a/app/controllers/clients_controller.rb
+++ b/app/controllers/clients_controller.rb
@@ -1,31 +1,35 @@
class ClientsController < ApplicationController
before_action :set_client, only: :show
before_action :fetch_logs
# GET /clients
def index
@client_ids = Client.for_user(current_user.id).pluck(:ClientId)
@clients = Client.where(ClientId: @client_ids).includes(:jobs)
- @active_jobs = Job.running.where(ClientId: @client_ids).group(:ClientId).count
@hosts = current_user.hosts.not_baculized
+ fetch_jobs_info
get_charts
end
# GET /clients/1
def show
@client_ids = [@client.id]
get_charts
end
private
def set_client
@client = Client.for_user(current_user.id).find(params[:id])
end
+ def fetch_jobs_info
+ @stats = JobStats.new(@client_ids)
+ end
+
def get_charts
days_ago = params.fetch(:days_back, 7).to_i rescue 7
@job_status = ChartGenerator.job_statuses(@client_ids, days_ago)
@job_stats = ChartGenerator.job_stats(@client_ids, days_ago - 1)
end
end
diff --git a/app/views/clients/_client.html.erb b/app/views/clients/_client.html.erb
index 3e5337b..012e4b3 100644
--- a/app/views/clients/_client.html.erb
+++ b/app/views/clients/_client.html.erb
@@ -1,11 +1,11 @@
<%= link_to client.name, client %> |
<%= client.uname %> |
- <%= @active_jobs[client.id] || 0 %> |
- <%= client.last_job_date_formatted %> |
+ <%= @stats.active_jobs[client.id] || 0 %> |
+ <%= @stats.last_jobs[client.id] %> |
<%= client.file_retention_days %> |
<%= client.job_retention_days %> |
- <%= number_to_human_size(client.backup_jobs_size) %> |
- <%= number_by_magnitude(client.files_count) %> |
+ <%= number_to_human_size(@stats.jobs_sizes[client.id]) %> |
+ <%= number_by_magnitude(@stats.jobs_files[client.id]) %> |
<%= client.auto_prune_human %> |
diff --git a/lib/job_stats.rb b/lib/job_stats.rb
new file mode 100644
index 0000000..0ea608c
--- /dev/null
+++ b/lib/job_stats.rb
@@ -0,0 +1,36 @@
+# Helper class that fetches job stats for the desired clients
+class JobStats
+ attr_reader :client_ids, :active_jobs, :last_jobs, :jobs_sizes, :jobs_files
+
+ # Initializes the object.
+ def initialize(client_ids=nil)
+ @client_ids = client_ids
+ fetch_stats
+ end
+
+ private
+
+ # Assigns values to:
+ #
+ # * active_jobs
+ # * last_jobs
+ # * jobs_sizes
+ # * jobs_files
+ def fetch_stats
+ @active_jobs = Job.running
+ @active_jobs = @active_jobs.where(ClientId: client_ids) if client_ids
+ @active_jobs = @active_jobs.group(:ClientId).count
+
+ @last_jobs = {}
+ @jobs_sizes = Hash.new { |h,k| h[k] = 0 }
+ @jobs_files = Hash.new { |h,k| h[k] = 0 }
+
+ jobs = Job.backup_type.order(EndTime: :asc)
+ jobs = jobs.where(ClientId: client_ids) if client_ids
+ jobs.each do |job|
+ @last_jobs[job.client_id] = I18n.l(job.end_time, format: :long) if job.end_time
+ @jobs_sizes[job.client_id] += job.job_bytes
+ @jobs_files[job.client_id] += job.job_files
+ end
+ end
+end