From 8c1aa6b39bb53ba46e41618c5dba28694b0e0da8 Mon Sep 17 00:00:00 2001 From: Maddie Zhan Date: Sat, 18 Sep 2021 01:48:10 +0800 Subject: [PATCH] Support none database type to disable stats/telemetry Fixes #21 --- README.md | 3 ++- database/bolt/bolt.go | 4 +--- database/database.go | 7 +++++++ database/none/none.go | 23 +++++++++++++++++++++++ results/stats.go | 7 +++++++ results/telemetry.go | 13 +++++++++++++ settings.toml | 3 ++- 7 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 database/none/none.go diff --git a/README.md b/README.md index d9622e5..8261592 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,8 @@ manually, you can install newer version of Go into your `GOPATH`: # redact IP addresses redact_ip_addresses=false - # database type for statistics data, currently supports: bolt, mysql, postgresql + # database type for statistics data, currently supports: none, bolt, mysql, postgresql + # if none is specified, no telemetry/stats will be recorded, and no result PNG will be generated database_type="postgresql" database_hostname="localhost" database_name="speedtest" diff --git a/database/bolt/bolt.go b/database/bolt/bolt.go index f61e43c..2849fcf 100644 --- a/database/bolt/bolt.go +++ b/database/bolt/bolt.go @@ -5,12 +5,10 @@ import ( "errors" "time" - "go.etcd.io/bbolt" - "github.com/librespeed/speedtest/database/schema" - _ "github.com/go-sql-driver/mysql" log "github.com/sirupsen/logrus" + "go.etcd.io/bbolt" ) const ( diff --git a/database/database.go b/database/database.go index 8581127..e2d16ef 100644 --- a/database/database.go +++ b/database/database.go @@ -4,8 +4,11 @@ import ( "github.com/librespeed/speedtest/config" "github.com/librespeed/speedtest/database/bolt" "github.com/librespeed/speedtest/database/mysql" + "github.com/librespeed/speedtest/database/none" "github.com/librespeed/speedtest/database/postgresql" "github.com/librespeed/speedtest/database/schema" + + log "github.com/sirupsen/logrus" ) var ( @@ -26,5 +29,9 @@ func SetDBInfo(conf *config.Config) { DB = mysql.Open(conf.DatabaseHostname, conf.DatabaseUsername, conf.DatabasePassword, conf.DatabaseName) case "bolt": DB = bolt.Open(conf.DatabaseFile) + case "none": + DB = none.Open("") + default: + log.Fatalf("Unsupported database type: %s", conf.DatabaseType) } } diff --git a/database/none/none.go b/database/none/none.go new file mode 100644 index 0000000..669e8f3 --- /dev/null +++ b/database/none/none.go @@ -0,0 +1,23 @@ +package none + +import ( + "github.com/librespeed/speedtest/database/schema" +) + +type None struct{} + +func Open(_ string) *None { + return &None{} +} + +func (n *None) Insert(_ *schema.TelemetryData) error { + return nil +} + +func (n *None) FetchByUUID(_ string) (*schema.TelemetryData, error) { + return &schema.TelemetryData{}, nil +} + +func (n *None) FetchLast100() ([]schema.TelemetryData, error) { + return []schema.TelemetryData{}, nil +} diff --git a/results/stats.go b/results/stats.go index c8c172a..3684754 100644 --- a/results/stats.go +++ b/results/stats.go @@ -4,6 +4,7 @@ import ( "html/template" "net/http" + "github.com/go-chi/render" log "github.com/sirupsen/logrus" "github.com/librespeed/speedtest/config" @@ -27,6 +28,12 @@ func Stats(w http.ResponseWriter, r *http.Request) { } conf := config.LoadedConfig() + + if conf.DatabaseType == "none" { + render.PlainText(w, r, "Statistics are disabled") + return + } + var data StatsData if conf.StatsPassword == "PASSWORD" { diff --git a/results/telemetry.go b/results/telemetry.go index ae91901..f43f0fe 100644 --- a/results/telemetry.go +++ b/results/telemetry.go @@ -14,6 +14,7 @@ import ( "strings" "time" + "github.com/go-chi/render" "github.com/librespeed/speedtest/config" "github.com/librespeed/speedtest/database" "github.com/librespeed/speedtest/database/schema" @@ -144,6 +145,12 @@ func Initialize(c *config.Config) { } func Record(w http.ResponseWriter, r *http.Request) { + conf := config.LoadedConfig() + if conf.DatabaseType == "none" { + render.PlainText(w, r, "Telemetry is disabled") + return + } + ipAddr, _, _ := net.SplitHostPort(r.RemoteAddr) userAgent := r.UserAgent() language := r.Header.Get("Accept-Language") @@ -201,6 +208,12 @@ func Record(w http.ResponseWriter, r *http.Request) { } func DrawPNG(w http.ResponseWriter, r *http.Request) { + conf := config.LoadedConfig() + + if conf.DatabaseType == "none" { + return + } + uuid := r.FormValue("id") record, err := database.DB.FetchByUUID(uuid) if err != nil { diff --git a/settings.toml b/settings.toml index aea076a..fb081ac 100644 --- a/settings.toml +++ b/settings.toml @@ -18,7 +18,8 @@ statistics_password="PASSWORD" # redact IP addresses redact_ip_addresses=false -# database type for statistics data, currently supports: bolt, mysql, postgresql +# database type for statistics data, currently supports: none, bolt, mysql, postgresql +# if none is specified, no telemetry/stats will be recorded, and no result PNG will be generated database_type="bolt" database_hostname="" database_name=""