blob: a80b375f6a24a4f7f63da68e7fe8403846006925 [file] [log] [blame]
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package dashboard
// This file handles garbage collection of old CLs.
import (
"net/http"
"time"
"appengine"
"appengine/datastore"
)
func init() {
http.HandleFunc("/gc", handleGC)
}
func handleGC(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
// Delete closed CLs that haven't been modified in 168 hours (7 days).
cutoff := time.Now().Add(-168 * time.Hour)
q := datastore.NewQuery("CL").
Filter("Closed =", true).
Filter("Modified <", cutoff).
Limit(100).
KeysOnly()
keys, err := q.GetAll(c, nil)
if err != nil {
c.Errorf("GetAll failed for old CLs: %v", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if len(keys) == 0 {
return
}
if err := datastore.DeleteMulti(c, keys); err != nil {
c.Errorf("DeleteMulti failed for old CLs: %v", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
c.Infof("Deleted %d old CLs", len(keys))
}