mirror of
https://github.com/octoleo/syncthing.git
synced 2024-09-19 21:29:01 +00:00
Less duplication around database fields
This commit is contained in:
parent
30d0e5d298
commit
e55ff6cccc
@ -110,17 +110,70 @@ func (r *report) Validate() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *report) FieldsInDBOrder() []interface{} {
|
func (r *report) FieldPointers() []interface{} {
|
||||||
return []interface{}{r.UniqueID, r.Version, r.LongVersion, r.Platform, r.NumFolders,
|
// All the fields of the report, in the same order as the database fields.
|
||||||
r.NumDevices, r.TotFiles, r.FolderMaxFiles, r.TotMiB, r.FolderMaxMiB,
|
return []interface{}{
|
||||||
r.MemoryUsageMiB, r.SHA256Perf, r.MemorySize, r.Date,
|
&r.Received, &r.UniqueID, &r.Version, &r.LongVersion, &r.Platform,
|
||||||
r.URVersion, r.NumCPU,
|
&r.NumFolders, &r.NumDevices, &r.TotFiles, &r.FolderMaxFiles,
|
||||||
r.FolderUses.ReadOnly, r.FolderUses.IgnorePerms, r.FolderUses.IgnoreDelete, r.FolderUses.AutoNormalize,
|
&r.TotMiB, &r.FolderMaxMiB, &r.MemoryUsageMiB, &r.SHA256Perf,
|
||||||
r.DeviceUses.Introducer, r.DeviceUses.CustomCertName, r.DeviceUses.CompressAlways, r.DeviceUses.CompressMetadata, r.DeviceUses.CompressNever,
|
&r.MemorySize, &r.Date, &r.URVersion, &r.NumCPU,
|
||||||
r.DeviceUses.DynamicAddr, r.DeviceUses.StaticAddr,
|
&r.FolderUses.ReadOnly, &r.FolderUses.IgnorePerms, &r.FolderUses.IgnoreDelete,
|
||||||
r.Announce.GlobalEnabled, r.Announce.LocalEnabled, r.Announce.DefaultServersDNS, r.Announce.DefaultServersIP, r.Announce.OtherServers,
|
&r.FolderUses.AutoNormalize, &r.DeviceUses.Introducer,
|
||||||
r.Relays.Enabled, r.Relays.DefaultServers, r.Relays.OtherServers,
|
&r.DeviceUses.CustomCertName, &r.DeviceUses.CompressAlways,
|
||||||
r.UsesRateLimit, r.UpgradeAllowedManual, r.UpgradeAllowedAuto}
|
&r.DeviceUses.CompressMetadata, &r.DeviceUses.CompressNever,
|
||||||
|
&r.DeviceUses.DynamicAddr, &r.DeviceUses.StaticAddr,
|
||||||
|
&r.Announce.GlobalEnabled, &r.Announce.LocalEnabled,
|
||||||
|
&r.Announce.DefaultServersDNS, &r.Announce.DefaultServersIP,
|
||||||
|
&r.Announce.OtherServers, &r.Relays.Enabled, &r.Relays.DefaultServers,
|
||||||
|
&r.Relays.OtherServers, &r.UsesRateLimit, &r.UpgradeAllowedManual,
|
||||||
|
&r.UpgradeAllowedAuto}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *report) FieldNames() []string {
|
||||||
|
// The database fields that back this struct in PostgreSQL
|
||||||
|
return []string{
|
||||||
|
// V1
|
||||||
|
"Received",
|
||||||
|
"UniqueID",
|
||||||
|
"Version",
|
||||||
|
"LongVersion",
|
||||||
|
"Platform",
|
||||||
|
"NumFolders",
|
||||||
|
"NumDevices",
|
||||||
|
"TotFiles",
|
||||||
|
"FolderMaxFiles",
|
||||||
|
"TotMiB",
|
||||||
|
"FolderMaxMiB",
|
||||||
|
"MemoryUsageMiB",
|
||||||
|
"SHA256Perf",
|
||||||
|
"MemorySize",
|
||||||
|
"Date",
|
||||||
|
// V2
|
||||||
|
"ReportVersion",
|
||||||
|
"NumCPU",
|
||||||
|
"FolderRO",
|
||||||
|
"FolderIgnorePerms",
|
||||||
|
"FolderIgnoreDelete",
|
||||||
|
"FolderAutoNormalize",
|
||||||
|
"DeviceIntroducer",
|
||||||
|
"DeviceCustomCertName",
|
||||||
|
"DeviceCompressAlways",
|
||||||
|
"DeviceCompressMetadata",
|
||||||
|
"DeviceCompressNever",
|
||||||
|
"DeviceDynamicAddr",
|
||||||
|
"DeviceStaticAddr",
|
||||||
|
"AnnounceGlobalEnabled",
|
||||||
|
"AnnounceLocalEnabled",
|
||||||
|
"AnnounceDefaultServersDNS",
|
||||||
|
"AnnounceDefaultServersIP",
|
||||||
|
"AnnounceOtherServers",
|
||||||
|
"RelayEnabled",
|
||||||
|
"RelayDefaultServers",
|
||||||
|
"RelayOtherServers",
|
||||||
|
"RateLimitEnabled",
|
||||||
|
"UpgradeAllowedManual",
|
||||||
|
"UpgradeAllowedAuto",
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupDB(db *sql.DB) error {
|
func setupDB(db *sql.DB) error {
|
||||||
@ -206,12 +259,13 @@ func setupDB(db *sql.DB) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func insertReport(db *sql.DB, r report) error {
|
func insertReport(db *sql.DB, r report) error {
|
||||||
fields := r.FieldsInDBOrder()
|
r.Received = time.Now().UTC()
|
||||||
|
fields := r.FieldPointers()
|
||||||
params := make([]string, len(fields))
|
params := make([]string, len(fields))
|
||||||
for i := range params {
|
for i := range params {
|
||||||
params[i] = fmt.Sprintf("$%d", i+1)
|
params[i] = fmt.Sprintf("$%d", i+1)
|
||||||
}
|
}
|
||||||
query := "INSERT INTO Reports VALUES (TIMEZONE('UTC', NOW()), " + strings.Join(params, ", ") + ")"
|
query := "INSERT INTO Reports (" + strings.Join(r.FieldNames(), ", ") + ") VALUES (" + strings.Join(params, ", ") + ")"
|
||||||
_, err := db.Exec(query, fields...)
|
_, err := db.Exec(query, fields...)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
@ -414,25 +468,9 @@ func getReport(db *sql.DB) map[string]interface{} {
|
|||||||
var compilers []string
|
var compilers []string
|
||||||
var builders []string
|
var builders []string
|
||||||
|
|
||||||
fields := []string{
|
var rep report
|
||||||
"Received",
|
|
||||||
"UniqueID",
|
|
||||||
"Version",
|
|
||||||
"LongVersion",
|
|
||||||
"Platform",
|
|
||||||
"NumFolders",
|
|
||||||
"NumDevices",
|
|
||||||
"TotFiles",
|
|
||||||
"FolderMaxFiles",
|
|
||||||
"TotMiB",
|
|
||||||
"FolderMaxMiB",
|
|
||||||
"MemoryUsageMiB",
|
|
||||||
"SHA256Perf",
|
|
||||||
"MemorySize",
|
|
||||||
"Date",
|
|
||||||
}
|
|
||||||
|
|
||||||
rows, err := db.Query(`SELECT ` + strings.Join(fields, ",") + ` FROM Reports WHERE Received > now() - '1 day'::INTERVAL`)
|
rows, err := db.Query(`SELECT ` + strings.Join(rep.FieldNames(), ",") + ` FROM Reports WHERE Received > now() - '1 day'::INTERVAL`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("sql:", err)
|
log.Println("sql:", err)
|
||||||
return nil
|
return nil
|
||||||
@ -440,12 +478,7 @@ func getReport(db *sql.DB) map[string]interface{} {
|
|||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
|
err := rows.Scan(rep.FieldPointers()...)
|
||||||
var rep report
|
|
||||||
err := rows.Scan(&rep.Received, &rep.UniqueID, &rep.Version,
|
|
||||||
&rep.LongVersion, &rep.Platform, &rep.NumFolders, &rep.NumDevices,
|
|
||||||
&rep.TotFiles, &rep.FolderMaxFiles, &rep.TotMiB, &rep.FolderMaxMiB,
|
|
||||||
&rep.MemoryUsageMiB, &rep.SHA256Perf, &rep.MemorySize, &rep.Date)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("sql:", err)
|
log.Println("sql:", err)
|
||||||
|
Loading…
Reference in New Issue
Block a user