mirror of
https://github.com/syncthing/syncthing.git
synced 2024-11-16 18:41:59 -07:00
76 lines
1.3 KiB
Go
76 lines
1.3 KiB
Go
|
// Copyright (C) 2014-2015 Jakob Borg and Contributors (see the CONTRIBUTORS file).
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"database/sql"
|
||
|
"log"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type cleansrv struct {
|
||
|
intv time.Duration
|
||
|
db *sql.DB
|
||
|
prep map[string]*sql.Stmt
|
||
|
}
|
||
|
|
||
|
func (s *cleansrv) Serve() {
|
||
|
for {
|
||
|
time.Sleep(next(s.intv))
|
||
|
|
||
|
err := s.cleanOldAddresses()
|
||
|
if err != nil {
|
||
|
log.Println("Clean:", err)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *cleansrv) Stop() {
|
||
|
panic("stop unimplemented")
|
||
|
}
|
||
|
|
||
|
func (s *cleansrv) cleanOldAddresses() (err error) {
|
||
|
var tx *sql.Tx
|
||
|
tx, err = s.db.Begin()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
defer func() {
|
||
|
if err == nil {
|
||
|
err = tx.Commit()
|
||
|
} else {
|
||
|
tx.Rollback()
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
res, err := tx.Stmt(s.prep["cleanAddress"]).Exec()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if rows, _ := res.RowsAffected(); rows > 0 {
|
||
|
log.Printf("Clean: %d old addresses", rows)
|
||
|
}
|
||
|
|
||
|
res, err = tx.Stmt(s.prep["cleanDevice"]).Exec()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if rows, _ := res.RowsAffected(); rows > 0 {
|
||
|
log.Printf("Clean: %d old devices", rows)
|
||
|
}
|
||
|
|
||
|
var devs, addrs int
|
||
|
row := tx.Stmt(s.prep["countDevice"]).QueryRow()
|
||
|
if err = row.Scan(&devs); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
row = tx.Stmt(s.prep["countAddress"]).QueryRow()
|
||
|
if err = row.Scan(&addrs); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
log.Printf("Database: %d devices, %d addresses", devs, addrs)
|
||
|
return nil
|
||
|
}
|