2015-09-06 22:42:11 +00:00
|
|
|
# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
|
|
|
|
|
|
|
|
require 'stats_store'
|
|
|
|
|
|
|
|
class Stats
|
|
|
|
|
|
|
|
=begin
|
|
|
|
|
|
|
|
generate stats for user
|
|
|
|
|
|
|
|
Stats.generate
|
|
|
|
|
|
|
|
returns
|
|
|
|
|
|
|
|
result = true # if generation was successfully
|
|
|
|
|
|
|
|
=end
|
|
|
|
|
|
|
|
def self.generate
|
|
|
|
|
|
|
|
backends = [
|
|
|
|
Stats::TicketChannelDistribution,
|
|
|
|
Stats::TicketInProcess,
|
|
|
|
Stats::TicketLoadMeasure,
|
|
|
|
Stats::TicketEscalation,
|
|
|
|
Stats::TicketReopen,
|
|
|
|
]
|
|
|
|
|
2015-09-08 06:55:09 +00:00
|
|
|
# generate stats per agent
|
2015-09-06 22:42:11 +00:00
|
|
|
users = User.of_role('Agent')
|
2015-09-08 06:55:09 +00:00
|
|
|
agent_count = 0
|
|
|
|
user_result = {}
|
2015-09-06 22:42:11 +00:00
|
|
|
users.each {|user|
|
2015-09-06 23:52:54 +00:00
|
|
|
next if user.id == 1
|
2015-09-08 06:55:09 +00:00
|
|
|
next if !user.active
|
|
|
|
agent_count += 1
|
2015-09-06 22:42:11 +00:00
|
|
|
data = {}
|
|
|
|
backends.each {|backend|
|
|
|
|
data[backend.to_app_model] = backend.generate(user)
|
|
|
|
}
|
2015-09-08 06:55:09 +00:00
|
|
|
user_result[user.id] = data
|
|
|
|
}
|
|
|
|
|
|
|
|
# calculate average
|
|
|
|
backend_average_sum = {}
|
2015-09-08 07:57:14 +00:00
|
|
|
user_result.each {|_user_id, data|
|
2015-09-08 06:55:09 +00:00
|
|
|
data.each {|backend_model, backend_result|
|
2015-09-08 07:57:14 +00:00
|
|
|
next if !backend_result.key?(:used_for_average)
|
2015-09-08 06:55:09 +00:00
|
|
|
if !backend_average_sum[backend_model]
|
|
|
|
backend_average_sum[backend_model] = 0
|
|
|
|
end
|
|
|
|
backend_average_sum[backend_model] += backend_result[:used_for_average]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# generate average stats
|
|
|
|
backend_average_sum.each {|backend_model_average, result|
|
|
|
|
average = ( result.to_f / agent_count.to_f ).round(1)
|
2015-09-08 07:57:14 +00:00
|
|
|
user_result.each {|_user_id, data|
|
2015-09-08 06:55:09 +00:00
|
|
|
data.each {|backend_model_data, backend_result|
|
|
|
|
next if backend_model_data != backend_model_average
|
2015-09-08 07:57:14 +00:00
|
|
|
next if !backend_result.key?(:used_for_average)
|
2015-09-08 06:55:09 +00:00
|
|
|
backend_result[:average_per_agent] = average
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
user_result.each {|user_id, data|
|
2015-09-06 22:42:11 +00:00
|
|
|
StatsStore.sync(
|
|
|
|
object: 'User',
|
2015-09-08 06:55:09 +00:00
|
|
|
o_id: user_id,
|
2015-09-06 22:42:11 +00:00
|
|
|
key: 'dashboard',
|
|
|
|
data: data,
|
|
|
|
)
|
|
|
|
}
|
2015-09-08 06:55:09 +00:00
|
|
|
|
2015-09-06 22:42:11 +00:00
|
|
|
true
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|