mirror of
https://github.com/zammad/zammad
synced 2026-05-24 09:48:36 +00:00
58 lines
1.3 KiB
Ruby
58 lines
1.3 KiB
Ruby
# Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/
|
|
|
|
class SystemReport < ApplicationModel
|
|
store :data
|
|
|
|
before_create :prepare_uuid
|
|
|
|
def self.fetch
|
|
{
|
|
system_report: fetch_system_report,
|
|
}
|
|
end
|
|
|
|
def self.fetch_with_create
|
|
SystemReport.create(data: fetch, created_by_id: UserInfo.current_user_id || 1)
|
|
end
|
|
|
|
def self.plugins
|
|
SystemReport::Plugin.list.map { |plugin| plugin.to_s.split('::').last }
|
|
end
|
|
|
|
def self.descriptions
|
|
SystemReport::Plugin.list.map { |plugin| "#{plugin}::DESCRIPTION".constantize }
|
|
end
|
|
|
|
def self.fetch_system_report
|
|
system_report = {}
|
|
|
|
SystemReport::Plugin.list.each do |plugin|
|
|
plugin_instance = plugin.new
|
|
|
|
path = plugin_instance.class.path
|
|
|
|
last_path = path.pop # Remove and store the last key
|
|
|
|
nested_hash = path.inject(system_report) do |current_hash, key|
|
|
current_hash[key] ||= {}
|
|
current_hash[key]
|
|
end
|
|
|
|
# Set the value to the last key
|
|
nested_hash[last_path] = plugin_instance.fetch
|
|
end
|
|
|
|
system_report
|
|
end
|
|
private_class_method :fetch_system_report
|
|
|
|
def filename
|
|
File.basename("zammad_system_report_#{Setting.get('fqdn')}_#{uuid}.json")
|
|
end
|
|
|
|
private
|
|
|
|
def prepare_uuid
|
|
self.uuid = SecureRandom.uuid
|
|
end
|
|
end
|