summaryrefslogtreecommitdiffstats
path: root/lib/puppet/server/logger.rb
blob: 2170a57720f2e2fe8df7e5fbd51792a570295dfb (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
require 'yaml'

module Puppet
class Server
    class LoggerError < RuntimeError; end

    # Receive logs from remote hosts.
    class Logger < Handler
        @interface = XMLRPC::Service::Interface.new("puppetlogger") { |iface|
            iface.add_method("void addlog(string)")
        }

        # accept a log message from a client, and route it accordingly
        def addlog(message, client = nil, clientip = nil)
            unless message
                raise Puppet::DevError, "Did not receive message"
            end

            Puppet.info message.inspect
            # if the client is set, then we're not local
            if client
                begin
                    message = YAML.load(CGI.unescape(message))
                    #message = message
                rescue => detail
                    raise XMLRPC::FaultException.new(
                        1, "Could not unYAML log message from %s" % client
                    )
                end
            end

            unless message
                raise Puppet::DevError, "Could not resurrect message"
            end

            # Mark it as remote, so it's not sent to syslog
            message.remote = true

            if client
                if ! message.source or message.source == "Puppet"
                    message.source = client
                end
            end

            Puppet::Log.newmessage(message)

            # This is necessary or XMLRPC gets all pukey
            return ""
        end
    end
end
end

# $Id$