summaryrefslogtreecommitdiffstats
path: root/lib/puppet/reports/store.rb
blob: 547b45a33ce8f81d36a1475175b48523af38ac65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
require 'puppet'

Puppet::Reports.register_report(:store) do
    desc "Store the yaml report on disk.  Each host sends its report as a YAML dump
        and this just stores the file on disk, in the ``reportdir`` directory.

        These files collect quickly -- one every half hour -- so it is a good idea
        to perform some maintenance on them if you use this report (it's the only
        default report)."

    def mkclientdir(client, dir)
        config = Puppet::Util::Settings.new

                    config.setdefaults(
                "reportclient-#{client}".to_sym,
            "client-#{client}-dir" => { :default => dir,
                :mode => 0750,
                :desc => "Client dir for #{client}",
                :owner => 'service',
                :group => 'service'
            },
        
            :noop => [false, "Used by settings internally."]
        )

        config.use("reportclient-#{client}".to_sym)
    end

    def process
        # We don't want any tracking back in the fs.  Unlikely, but there
        # you go.
        client = self.host.gsub("..",".")

        dir = File.join(Puppet[:reportdir], client)

        unless FileTest.exists?(dir)
            mkclientdir(client, dir)
        end

        # Now store the report.
        now = Time.now.gmtime
        name = %w{year month day hour min}.collect do |method|
            # Make sure we're at least two digits everywhere
            "%02d" % now.send(method).to_s
        end.join("") + ".yaml"

        file = File.join(dir, name)

        begin
            File.open(file, "w", 0640) do |f|
                f.print to_yaml
            end
        rescue => detail
            if Puppet[:trace]
                puts detail.backtrace
            end
            Puppet.warning "Could not write report for #{client} at #{file}: #{detail}"
        end

        # Only testing cares about the return value
        return file
    end
end