refactor(config): move syslogconf to config/syslog package (#1865)
This commit is contained in:
		
							
								
								
									
										120
									
								
								config/syslog/syslogconf.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								config/syslog/syslogconf.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
			
		||||
//go:build !windows
 | 
			
		||||
 | 
			
		||||
package syslog
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"log/syslog"
 | 
			
		||||
 | 
			
		||||
	"github.com/asaskevich/govalidator"
 | 
			
		||||
	"golang.org/x/xerrors"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Validate validates configuration
 | 
			
		||||
func (c *Conf) Validate() (errs []error) {
 | 
			
		||||
	if !c.Enabled {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	//  If protocol is empty, it will connect to the local syslog server.
 | 
			
		||||
	if len(c.Protocol) > 0 && c.Protocol != "tcp" && c.Protocol != "udp" {
 | 
			
		||||
		errs = append(errs, errors.New(`syslog.protocol must be "tcp" or "udp"`))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Default port: 514
 | 
			
		||||
	if c.Port == "" {
 | 
			
		||||
		c.Port = "514"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if _, err := c.GetSeverity(); err != nil {
 | 
			
		||||
		errs = append(errs, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if _, err := c.GetFacility(); err != nil {
 | 
			
		||||
		errs = append(errs, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if _, err := govalidator.ValidateStruct(c); err != nil {
 | 
			
		||||
		errs = append(errs, err)
 | 
			
		||||
	}
 | 
			
		||||
	return errs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetSeverity gets severity
 | 
			
		||||
func (c *Conf) GetSeverity() (syslog.Priority, error) {
 | 
			
		||||
	if c.Severity == "" {
 | 
			
		||||
		return syslog.LOG_INFO, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch c.Severity {
 | 
			
		||||
	case "emerg":
 | 
			
		||||
		return syslog.LOG_EMERG, nil
 | 
			
		||||
	case "alert":
 | 
			
		||||
		return syslog.LOG_ALERT, nil
 | 
			
		||||
	case "crit":
 | 
			
		||||
		return syslog.LOG_CRIT, nil
 | 
			
		||||
	case "err":
 | 
			
		||||
		return syslog.LOG_ERR, nil
 | 
			
		||||
	case "warning":
 | 
			
		||||
		return syslog.LOG_WARNING, nil
 | 
			
		||||
	case "notice":
 | 
			
		||||
		return syslog.LOG_NOTICE, nil
 | 
			
		||||
	case "info":
 | 
			
		||||
		return syslog.LOG_INFO, nil
 | 
			
		||||
	case "debug":
 | 
			
		||||
		return syslog.LOG_DEBUG, nil
 | 
			
		||||
	default:
 | 
			
		||||
		return -1, xerrors.Errorf("Invalid severity: %s", c.Severity)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetFacility gets facility
 | 
			
		||||
func (c *Conf) GetFacility() (syslog.Priority, error) {
 | 
			
		||||
	if c.Facility == "" {
 | 
			
		||||
		return syslog.LOG_AUTH, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch c.Facility {
 | 
			
		||||
	case "kern":
 | 
			
		||||
		return syslog.LOG_KERN, nil
 | 
			
		||||
	case "user":
 | 
			
		||||
		return syslog.LOG_USER, nil
 | 
			
		||||
	case "mail":
 | 
			
		||||
		return syslog.LOG_MAIL, nil
 | 
			
		||||
	case "daemon":
 | 
			
		||||
		return syslog.LOG_DAEMON, nil
 | 
			
		||||
	case "auth":
 | 
			
		||||
		return syslog.LOG_AUTH, nil
 | 
			
		||||
	case "syslog":
 | 
			
		||||
		return syslog.LOG_SYSLOG, nil
 | 
			
		||||
	case "lpr":
 | 
			
		||||
		return syslog.LOG_LPR, nil
 | 
			
		||||
	case "news":
 | 
			
		||||
		return syslog.LOG_NEWS, nil
 | 
			
		||||
	case "uucp":
 | 
			
		||||
		return syslog.LOG_UUCP, nil
 | 
			
		||||
	case "cron":
 | 
			
		||||
		return syslog.LOG_CRON, nil
 | 
			
		||||
	case "authpriv":
 | 
			
		||||
		return syslog.LOG_AUTHPRIV, nil
 | 
			
		||||
	case "ftp":
 | 
			
		||||
		return syslog.LOG_FTP, nil
 | 
			
		||||
	case "local0":
 | 
			
		||||
		return syslog.LOG_LOCAL0, nil
 | 
			
		||||
	case "local1":
 | 
			
		||||
		return syslog.LOG_LOCAL1, nil
 | 
			
		||||
	case "local2":
 | 
			
		||||
		return syslog.LOG_LOCAL2, nil
 | 
			
		||||
	case "local3":
 | 
			
		||||
		return syslog.LOG_LOCAL3, nil
 | 
			
		||||
	case "local4":
 | 
			
		||||
		return syslog.LOG_LOCAL4, nil
 | 
			
		||||
	case "local5":
 | 
			
		||||
		return syslog.LOG_LOCAL5, nil
 | 
			
		||||
	case "local6":
 | 
			
		||||
		return syslog.LOG_LOCAL6, nil
 | 
			
		||||
	case "local7":
 | 
			
		||||
		return syslog.LOG_LOCAL7, nil
 | 
			
		||||
	default:
 | 
			
		||||
		return -1, xerrors.Errorf("Invalid facility: %s", c.Facility)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								config/syslog/syslogconf_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								config/syslog/syslogconf_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
//go:build !windows
 | 
			
		||||
 | 
			
		||||
package syslog
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestSyslogConfValidate(t *testing.T) {
 | 
			
		||||
	var tests = []struct {
 | 
			
		||||
		conf              Conf
 | 
			
		||||
		expectedErrLength int
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			conf:              Conf{},
 | 
			
		||||
			expectedErrLength: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			conf: Conf{
 | 
			
		||||
				Protocol: "tcp",
 | 
			
		||||
				Port:     "5140",
 | 
			
		||||
			},
 | 
			
		||||
			expectedErrLength: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			conf: Conf{
 | 
			
		||||
				Protocol: "udp",
 | 
			
		||||
				Port:     "12345",
 | 
			
		||||
				Severity: "emerg",
 | 
			
		||||
				Facility: "user",
 | 
			
		||||
			},
 | 
			
		||||
			expectedErrLength: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			conf: Conf{
 | 
			
		||||
				Protocol: "foo",
 | 
			
		||||
				Port:     "514",
 | 
			
		||||
			},
 | 
			
		||||
			expectedErrLength: 1,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			conf: Conf{
 | 
			
		||||
				Protocol: "invalid",
 | 
			
		||||
				Port:     "-1",
 | 
			
		||||
			},
 | 
			
		||||
			expectedErrLength: 2,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			conf: Conf{
 | 
			
		||||
				Protocol: "invalid",
 | 
			
		||||
				Port:     "invalid",
 | 
			
		||||
				Severity: "invalid",
 | 
			
		||||
				Facility: "invalid",
 | 
			
		||||
			},
 | 
			
		||||
			expectedErrLength: 4,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i, tt := range tests {
 | 
			
		||||
		tt.conf.Enabled = true
 | 
			
		||||
		errs := tt.conf.Validate()
 | 
			
		||||
		if len(errs) != tt.expectedErrLength {
 | 
			
		||||
			t.Errorf("test: %d, expected %d, actual %d", i, tt.expectedErrLength, len(errs))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								config/syslog/syslogconf_windows.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								config/syslog/syslogconf_windows.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
//go:build windows
 | 
			
		||||
 | 
			
		||||
package syslog
 | 
			
		||||
 | 
			
		||||
import "golang.org/x/xerrors"
 | 
			
		||||
 | 
			
		||||
// Validate validates configuration
 | 
			
		||||
func (c *Conf) Validate() (errs []error) {
 | 
			
		||||
	if !c.Enabled {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return []error{xerrors.New("windows not support syslog")}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								config/syslog/types.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								config/syslog/types.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
package syslog
 | 
			
		||||
 | 
			
		||||
// Conf is syslog config
 | 
			
		||||
type Conf struct {
 | 
			
		||||
	Protocol string `json:"-"`
 | 
			
		||||
	Host     string `valid:"host" json:"-"`
 | 
			
		||||
	Port     string `valid:"port" json:"-"`
 | 
			
		||||
	Severity string `json:"-"`
 | 
			
		||||
	Facility string `json:"-"`
 | 
			
		||||
	Tag      string `json:"-"`
 | 
			
		||||
	Verbose  bool   `json:"-"`
 | 
			
		||||
	Enabled  bool   `toml:"-" json:"-"`
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user