feat: Add caching to internet_speed (#10530)

Co-authored-by: Sven Rebhan <36194019+srebhan@users.noreply.github.com>
This commit is contained in:
Jim Eagle 2022-02-01 22:12:24 +00:00 committed by GitHub
parent 6dc8e9d8b9
commit 85ee82584d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 16 deletions

View File

@ -8,8 +8,10 @@ The `Internet Speed Monitor` collects data about the internet speed on the syste
# Monitors internet speed in the network
[[inputs.internet_speed]]
## Sets if runs file download test
## Default: false
enable_file_download = false
# enable_file_download = false
## Caches the closest server location
# cache = false
```
## Metrics

View File

@ -12,13 +12,17 @@ import (
// InternetSpeed is used to store configuration values.
type InternetSpeed struct {
EnableFileDownload bool `toml:"enable_file_download"`
Cache bool `toml:"cache"`
Log telegraf.Logger `toml:"-"`
serverCache *speedtest.Server
}
const sampleConfig = `
## Sets if runs file download test
## Default: false
enable_file_download = false
# enable_file_download = false
## Caches the closest server location
# cache = false
`
// Description returns information about the plugin.
@ -34,22 +38,31 @@ func (is *InternetSpeed) SampleConfig() string {
const measurement = "internet_speed"
func (is *InternetSpeed) Gather(acc telegraf.Accumulator) error {
user, err := speedtest.FetchUserInfo()
if err != nil {
return fmt.Errorf("fetching user info failed: %v", err)
}
serverList, err := speedtest.FetchServerList(user)
if err != nil {
return fmt.Errorf("fetching server list failed: %v", err)
// Get closest server
s := is.serverCache
if s == nil {
user, err := speedtest.FetchUserInfo()
if err != nil {
return fmt.Errorf("fetching user info failed: %v", err)
}
serverList, err := speedtest.FetchServerList(user)
if err != nil {
return fmt.Errorf("fetching server list failed: %v", err)
}
if len(serverList.Servers) < 1 {
return fmt.Errorf("no servers found")
}
s = serverList.Servers[0]
is.Log.Debugf("Found server: %v", s)
if is.Cache {
is.serverCache = s
}
}
if len(serverList.Servers) < 1 {
return fmt.Errorf("no servers found")
}
s := serverList.Servers[0]
is.Log.Debug("Starting Speed Test")
is.Log.Debug("Running Ping...")
err = s.PingTest()
err := s.PingTest()
if err != nil {
return fmt.Errorf("ping test failed: %v", err)
}
@ -76,6 +89,7 @@ func (is *InternetSpeed) Gather(acc telegraf.Accumulator) error {
acc.AddFields(measurement, fields, tags)
return nil
}
func init() {
inputs.Add("internet_speed", func() telegraf.Input {
return &InternetSpeed{}