Add code to remove old data and switch the port to 8085

This commit is contained in:
Kelvin Ly 2023-05-16 20:42:42 -04:00
parent 6287708d8c
commit ce2cac6602
2 changed files with 47 additions and 2 deletions

View File

@ -66,8 +66,32 @@ func LatestTime(db *sql.DB) (int64, error) {
return t, nil
}
func OldestTime(db *sql.DB) (int64, error) {
query := "SELECT MIN(time) FROM shrooms"
rows, err := db.Query(query)
if err != nil {
return -1, fmt.Errorf("sql error: %w", err)
}
defer rows.Close()
if !rows.Next() {
// i guess the database is empty
return 0, nil
}
t := int64(0)
err = rows.Scan(&t)
if err != nil {
return -1, fmt.Errorf("sql scan error: %w", err)
}
return t, nil
}
func InsertRow(db *sql.DB, s *DataJson) error {
_, err := db.Exec("INSERT INTO shrooms (time, temperature, humidity, humidifier_volts) VALUES (?, ?, ?, ?)",
*s.Time, *s.Temperature, *s.Humidity, *s.HumidifierVolts)
return err
}
func ClearOldRows(db *sql.DB, min_time int64) error {
_, err := db.Exec("DELETE FROM shrooms WHERE t < ?", min_time)
return err
}

View File

@ -38,6 +38,8 @@ type adminMsg struct {
Msg map[string]interface{} `json:"data"`
}
// returns a function that multiplies the number at the very last segment of the url
// and returns the data that was collected in the last n*multiplier milliseconds
func dumpData(db *sql.DB, multiplier int64) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, req *http.Request) {
now := time.Now().Unix()
@ -200,9 +202,28 @@ func main() {
http.HandleFunc("/api/update", updateHandler)
http.HandleFunc("/api/status_update", statusUpdateHandler)
// TODO periodically clear old entries from the database
// periodically clear old entries from the database
go func() {
// TODO maybe make this exit gracefully
for {
t, err := s.OldestTime(db)
if err != nil {
log.Println("unable to get oldest time: ", err)
}
now := time.Now().Unix()
diff := now*1000 - t
log.Println("oldest time", t, " current time", now, "diff", diff)
if diff > 2*7*24*60*60*1000 {
err = s.ClearOldRows(db, now-8*24*60*60*1000)
if err != nil {
log.Println("unable to delete rows: ", err)
}
}
time.Sleep(24 * time.Hour)
}
}()
err = http.ListenAndServe("localhost:8080", nil)
err = http.ListenAndServe("localhost:8085", nil)
if err != nil {
log.Fatal("unable to start server: ", err)
}