diff --git a/plugins/inputs/teamspeak/README.md b/plugins/inputs/teamspeak/README.md index 1697f884f..f2c99fd6b 100644 --- a/plugins/inputs/teamspeak/README.md +++ b/plugins/inputs/teamspeak/README.md @@ -2,7 +2,7 @@ This plugin uses the Teamspeak 3 ServerQuery interface of the Teamspeak server to collect statistics of one or more virtual servers. If you are querying an external Teamspeak server, make sure to add the host which is running Telegraf -to query_ip_whitelist.txt in the Teamspeak Server directory. For information about how to configure the server take a look +to query_ip_allowlist.txt in the Teamspeak Server directory. For information about how to configure the server take a look the [Teamspeak 3 ServerQuery Manual](http://media.teamspeak.com/ts3_literature/TeamSpeak%203%20Server%20Query%20Manual.pdf) ## Configuration @@ -16,6 +16,8 @@ the [Teamspeak 3 ServerQuery Manual](http://media.teamspeak.com/ts3_literature/T username = "serverqueryuser" ## Password for ServerQuery password = "secret" + ## Nickname of the ServerQuery client + nickname = "telegraf" ## Array of virtual servers # virtual_servers = [1] ``` diff --git a/plugins/inputs/teamspeak/teamspeak.go b/plugins/inputs/teamspeak/teamspeak.go index deda4b04d..9e006b385 100644 --- a/plugins/inputs/teamspeak/teamspeak.go +++ b/plugins/inputs/teamspeak/teamspeak.go @@ -13,27 +13,50 @@ type Teamspeak struct { Server string Username string Password string + Nickname string VirtualServers []int `toml:"virtual_servers"` client *ts3.Client connected bool } +func (ts *Teamspeak) connect() error { + var err error + + ts.client, err = ts3.NewClient(ts.Server) + if err != nil { + return err + } + + err = ts.client.Login(ts.Username, ts.Password) + if err != nil { + return err + } + + if len(ts.Nickname) > 0 { + for _, vserver := range ts.VirtualServers { + if err = ts.client.Use(vserver); err != nil { + return err + } + if err = ts.client.SetNick(ts.Nickname); err != nil { + return err + } + } + } + + ts.connected = true + + return nil +} + func (ts *Teamspeak) Gather(acc telegraf.Accumulator) error { var err error if !ts.connected { - ts.client, err = ts3.NewClient(ts.Server) + err = ts.connect() if err != nil { return err } - - err = ts.client.Login(ts.Username, ts.Password) - if err != nil { - return err - } - - ts.connected = true } for _, vserver := range ts.VirtualServers { @@ -73,6 +96,7 @@ func (ts *Teamspeak) Gather(acc telegraf.Accumulator) error { acc.AddFields("teamspeak", fields, tags) } + return nil }