github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/utils/syslog/testing/syslogconf.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package testing
     5  
     6  import (
     7  	"bytes"
     8  	"text/template"
     9  
    10  	gc "launchpad.net/gocheck"
    11  )
    12  
    13  var expectedAccumulateSyslogConfTemplate = `
    14  $ModLoad imuxsock
    15  $ModLoad imfile
    16  
    17  # Messages received from remote rsyslog machines have messages prefixed with a space,
    18  # so add one in for local messages too if needed.
    19  $template JujuLogFormat{{.Namespace}},"%syslogtag:{{.Offset}}:$%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
    20  
    21  $template LongTagForwardFormat,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%"
    22  
    23  $RuleSet local
    24  
    25  # start: Forwarding rule for foo
    26  $ActionQueueType LinkedList
    27  $ActionQueueFileName {{.MachineTag}}{{.Namespace}}_0
    28  $ActionResumeRetryCount -1
    29  $ActionQueueSaveOnShutdown on
    30  $DefaultNetstreamDriver gtls
    31  $DefaultNetstreamDriverCAFile /var/log/juju{{.Namespace}}/ca-cert.pem
    32  $ActionSendStreamDriverAuthMode anon
    33  $ActionSendStreamDriverMode 1 # run driver in TLS-only mode
    34  
    35  :syslogtag, startswith, "juju{{.Namespace}}-" @@foo:{{.Port}};LongTagForwardFormat
    36  # end: Forwarding rule for foo
    37  
    38  & ~
    39  $FileCreateMode 0640
    40  
    41  $RuleSet remote
    42  $FileCreateMode 0644
    43  :syslogtag, startswith, "juju{{.Namespace}}-" /var/log/juju{{.Namespace}}/all-machines.log;JujuLogFormat{{.Namespace}}
    44  & ~
    45  $FileCreateMode 0640
    46  
    47  $InputFilePersistStateInterval 50
    48  $InputFilePollInterval 5
    49  $InputFileName /var/log/juju{{.Namespace}}/{{.MachineTag}}.log
    50  $InputFileTag juju{{.Namespace}}-{{.MachineTag}}:
    51  $InputFileStateFile {{.MachineTag}}{{.Namespace}}
    52  $InputRunFileMonitor
    53  $DefaultRuleset local
    54  
    55  $ModLoad imtcp
    56  $DefaultNetstreamDriver gtls
    57  $DefaultNetstreamDriverCAFile /var/log/juju{{.Namespace}}/ca-cert.pem
    58  $DefaultNetstreamDriverCertFile /var/log/juju{{.Namespace}}/rsyslog-cert.pem
    59  $DefaultNetstreamDriverKeyFile /var/log/juju{{.Namespace}}/rsyslog-key.pem
    60  $InputTCPServerStreamDriverAuthMode anon
    61  $InputTCPServerStreamDriverMode 1 # run driver in TLS-only mode
    62  
    63  $InputTCPServerBindRuleset remote
    64  $InputTCPServerRun {{.Port}}
    65  `
    66  
    67  type templateArgs struct {
    68  	MachineTag  string
    69  	LogDir      string
    70  	Namespace   string
    71  	BootstrapIP string
    72  	Port        int
    73  	Offset      int
    74  }
    75  
    76  // ExpectedAccumulateSyslogConf returns the expected content for a rsyslog file on a state server.
    77  func ExpectedAccumulateSyslogConf(c *gc.C, machineTag, namespace string, port int) string {
    78  	if namespace != "" {
    79  		namespace = "-" + namespace
    80  	}
    81  	t := template.Must(template.New("").Parse(expectedAccumulateSyslogConfTemplate))
    82  	var conf bytes.Buffer
    83  	err := t.Execute(&conf, templateArgs{
    84  		MachineTag: machineTag,
    85  		Namespace:  namespace,
    86  		Offset:     len("juju-") + len(namespace) + 1,
    87  		Port:       port,
    88  	})
    89  	c.Assert(err, gc.IsNil)
    90  	return conf.String()
    91  }
    92  
    93  var expectedForwardSyslogConfTemplate = `
    94  $ModLoad imuxsock
    95  $ModLoad imfile
    96  
    97  $InputFilePersistStateInterval 50
    98  $InputFilePollInterval 5
    99  $InputFileName {{.LogDir}}/{{.MachineTag}}.log
   100  $InputFileTag juju{{.Namespace}}-{{.MachineTag}}:
   101  $InputFileStateFile {{.MachineTag}}{{.Namespace}}
   102  $InputRunFileMonitor
   103  
   104  # start: Forwarding rule for server
   105  $ActionQueueType LinkedList
   106  $ActionQueueFileName {{.MachineTag}}{{.Namespace}}_0
   107  $ActionResumeRetryCount -1
   108  $ActionQueueSaveOnShutdown on
   109  $DefaultNetstreamDriver gtls
   110  $DefaultNetstreamDriverCAFile {{.LogDir}}/ca-cert.pem
   111  $ActionSendStreamDriverAuthMode anon
   112  $ActionSendStreamDriverMode 1 # run driver in TLS-only mode
   113  
   114  $template LongTagForwardFormat,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%"
   115  :syslogtag, startswith, "juju{{.Namespace}}-" @@{{.BootstrapIP}}:{{.Port}};LongTagForwardFormat
   116  # end: Forwarding rule for server
   117  
   118  & ~
   119  `
   120  
   121  // ExpectedForwardSyslogConf returns the expected content for a rsyslog file on a host machine.
   122  func ExpectedForwardSyslogConf(c *gc.C, machineTag, logDir, namespace, bootstrapIP string, port int) string {
   123  	if namespace != "" {
   124  		namespace = "-" + namespace
   125  	}
   126  	t := template.Must(template.New("").Parse(expectedForwardSyslogConfTemplate))
   127  	var conf bytes.Buffer
   128  	err := t.Execute(&conf, templateArgs{
   129  		MachineTag:  machineTag,
   130  		LogDir:      logDir,
   131  		Namespace:   namespace,
   132  		BootstrapIP: bootstrapIP,
   133  		Port:        port,
   134  	})
   135  	c.Assert(err, gc.IsNil)
   136  	return conf.String()
   137  }