add SSL support, change tag to hostname

This commit is contained in:
JP 2015-07-09 15:06:18 -05:00
parent 86145d5eb5
commit c0512e720c
3 changed files with 36 additions and 2 deletions

View File

@ -1,7 +1,10 @@
package mongodb package mongodb
import ( import (
"crypto/tls"
"crypto/x509"
"fmt" "fmt"
"net"
"net/url" "net/url"
"sync" "sync"
"time" "time"
@ -12,9 +15,15 @@ import (
type MongoDB struct { type MongoDB struct {
Servers []string Servers []string
Ssl Ssl
mongos map[string]*Server mongos map[string]*Server
} }
type Ssl struct {
Enabled bool
CaCerts []string `toml:"cacerts"`
}
var sampleConfig = ` var sampleConfig = `
# An array of URI to gather stats about. Specify an ip or hostname # An array of URI to gather stats about. Specify an ip or hostname
# with optional port add password. ie mongodb://user:auth_key@10.10.3.30:27017, # with optional port add password. ie mongodb://user:auth_key@10.10.3.30:27017,
@ -92,8 +101,33 @@ func (m *MongoDB) gatherServer(server *Server, acc plugins.Accumulator) error {
} }
dialInfo.Direct = true dialInfo.Direct = true
dialInfo.Timeout = time.Duration(10) * time.Second dialInfo.Timeout = time.Duration(10) * time.Second
if m.Ssl.Enabled {
tlsConfig := &tls.Config{}
if len(m.Ssl.CaCerts) > 0 {
roots := x509.NewCertPool()
for _, caCert := range m.Ssl.CaCerts {
ok := roots.AppendCertsFromPEM([]byte(caCert))
if !ok {
return fmt.Errorf("failed to parse root certificate")
}
}
tlsConfig.RootCAs = roots
} else {
tlsConfig.InsecureSkipVerify = true
}
dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
if err != nil {
fmt.Printf("error in Dial, %s\n", err.Error())
}
return conn, err
}
}
sess, err := mgo.DialWithInfo(dialInfo) sess, err := mgo.DialWithInfo(dialInfo)
if err != nil { if err != nil {
fmt.Printf("error dialing over ssl, %s\n", err.Error())
return fmt.Errorf("Unable to connect to MongoDB, %s\n", err.Error()) return fmt.Errorf("Unable to connect to MongoDB, %s\n", err.Error())
} }
server.Session = sess server.Session = sess

View File

@ -17,7 +17,7 @@ type Server struct {
func (s *Server) getDefaultTags() map[string]string { func (s *Server) getDefaultTags() map[string]string {
tags := make(map[string]string) tags := make(map[string]string)
tags["host"] = s.Url.Host tags["hostname"] = s.Url.Host
return tags return tags
} }

View File

@ -16,7 +16,7 @@ func TestGetDefaultTags(t *testing.T) {
in string in string
out string out string
}{ }{
{"host", server.Url.Host}, {"hostname", server.Url.Host},
} }
defaultTags := server.getDefaultTags() defaultTags := server.getDefaultTags()
for _, tt := range tagTests { for _, tt := range tagTests {