feat(inputs/teamspeak): allow to configure nickname (#10934)

This commit is contained in:
Pascal Sthamer 2022-04-13 18:06:01 +02:00 committed by GitHub
parent efffe89572
commit 70334b9691
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 9 deletions

View File

@ -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]
```

View File

@ -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
}