1module MCollective
2  module Data
3    class Resource_data<Base
4      activate_when do
5        require 'mcollective/util/puppet_agent_mgr'
6        true
7      end
8
9      def sanitize_val(result_value, default_value)
10        if result_value.nil?
11          return default_value
12        end
13        result_value
14      end
15
16
17      query do |resource|
18        configfile = Config.instance.pluginconf.fetch("puppet.config", nil)
19
20        puppet_agent = Util::PuppetAgentMgr.manager(configfile)
21        summary = puppet_agent.load_summary
22
23        result[:managed] = puppet_agent.managing_resource?(resource) if resource
24
25        result[:out_of_sync_resources] = sanitize_val(summary["resources"].fetch("out_of_sync", 0), 0)
26        result[:failed_resources]      = sanitize_val(summary["resources"].fetch("failed", 0), 0)
27        result[:corrected_resources]   = sanitize_val(summary["resources"].fetch("corrective_change", 0), 0)
28        result[:changed_resources]     = sanitize_val(summary["resources"].fetch("changed", 0), 0)
29        result[:total_resources]       = sanitize_val(summary["resources"].fetch("total", 0), 0)
30        result[:total_time]            = sanitize_val(summary["time"].fetch("total", 0), 0)
31        result[:config_retrieval_time] = sanitize_val(summary["time"].fetch("config_retrieval", 0), 0)
32        result[:lastrun]               = Integer(sanitize_val(summary["time"].fetch("last_run", 0), 0))
33        result[:since_lastrun]         = Integer(Time.now.to_i - result[:lastrun])
34        result[:config_version]        = sanitize_val(summary["version"].fetch("config", "unknown"), "unknown")
35      end
36    end
37  end
38end
39