cmd/ursrv: Remove old, unused user movement code
This commit is contained in:
parent
6aecc2622c
commit
a3886f778d
|
@ -83,16 +83,6 @@ func setupDB(db *sql.DB) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS UserMovement (
|
|
||||||
Day TIMESTAMP NOT NULL,
|
|
||||||
Added INTEGER NOT NULL,
|
|
||||||
Bounced INTEGER NOT NULL,
|
|
||||||
Removed INTEGER NOT NULL
|
|
||||||
)`)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS Performance (
|
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS Performance (
|
||||||
Day TIMESTAMP NOT NULL,
|
Day TIMESTAMP NOT NULL,
|
||||||
TotFiles INTEGER NOT NULL,
|
TotFiles INTEGER NOT NULL,
|
||||||
|
@ -132,11 +122,6 @@ func setupDB(db *sql.DB) error {
|
||||||
_, _ = db.Exec(`CREATE INDEX VersionDayIndex ON VersionSummary (Day)`)
|
_, _ = db.Exec(`CREATE INDEX VersionDayIndex ON VersionSummary (Day)`)
|
||||||
}
|
}
|
||||||
|
|
||||||
row = db.QueryRow(`SELECT 'MovementDayIndex'::regclass`)
|
|
||||||
if err := row.Scan(&t); err != nil {
|
|
||||||
_, _ = db.Exec(`CREATE INDEX MovementDayIndex ON UserMovement (Day)`)
|
|
||||||
}
|
|
||||||
|
|
||||||
row = db.QueryRow(`SELECT 'PerformanceDayIndex'::regclass`)
|
row = db.QueryRow(`SELECT 'PerformanceDayIndex'::regclass`)
|
||||||
if err := row.Scan(&t); err != nil {
|
if err := row.Scan(&t); err != nil {
|
||||||
_, _ = db.Exec(`CREATE INDEX PerformanceDayIndex ON Performance (Day)`)
|
_, _ = db.Exec(`CREATE INDEX PerformanceDayIndex ON Performance (Day)`)
|
||||||
|
@ -181,87 +166,6 @@ func aggregateVersionSummary(db *sql.DB, since time.Time) (int64, error) {
|
||||||
return res.RowsAffected()
|
return res.RowsAffected()
|
||||||
}
|
}
|
||||||
|
|
||||||
func aggregateUserMovement(db *sql.DB) (int64, error) {
|
|
||||||
rows, err := db.Query(`SELECT
|
|
||||||
DATE_TRUNC('day', Received) AS Day,
|
|
||||||
Report->>'uniqueID'
|
|
||||||
FROM ReportsJson
|
|
||||||
WHERE
|
|
||||||
Report->>'uniqueID' IS NOT NULL
|
|
||||||
AND Received < DATE_TRUNC('day', NOW())
|
|
||||||
AND Report->>'version' like 'v_.%'
|
|
||||||
ORDER BY Day
|
|
||||||
`)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
defer rows.Close()
|
|
||||||
|
|
||||||
firstSeen := make(map[string]time.Time)
|
|
||||||
lastSeen := make(map[string]time.Time)
|
|
||||||
var minTs time.Time
|
|
||||||
minTs = minTs.In(time.UTC)
|
|
||||||
|
|
||||||
for rows.Next() {
|
|
||||||
var ts time.Time
|
|
||||||
var id string
|
|
||||||
if err := rows.Scan(&ts, &id); err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if minTs.IsZero() {
|
|
||||||
minTs = ts
|
|
||||||
}
|
|
||||||
if _, ok := firstSeen[id]; !ok {
|
|
||||||
firstSeen[id] = ts
|
|
||||||
}
|
|
||||||
lastSeen[id] = ts
|
|
||||||
}
|
|
||||||
|
|
||||||
type sumRow struct {
|
|
||||||
day time.Time
|
|
||||||
added int
|
|
||||||
removed int
|
|
||||||
bounced int
|
|
||||||
}
|
|
||||||
var sumRows []sumRow
|
|
||||||
for t := minTs; t.Before(time.Now().Truncate(24 * time.Hour)); t = t.AddDate(0, 0, 1) {
|
|
||||||
var added, removed, bounced int
|
|
||||||
old := t.Before(time.Now().AddDate(0, 0, -30))
|
|
||||||
for id, first := range firstSeen {
|
|
||||||
last := lastSeen[id]
|
|
||||||
if first.Equal(t) && last.Equal(t) && old {
|
|
||||||
bounced++
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if first.Equal(t) {
|
|
||||||
added++
|
|
||||||
}
|
|
||||||
if last == t && old {
|
|
||||||
removed++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sumRows = append(sumRows, sumRow{t, added, removed, bounced})
|
|
||||||
}
|
|
||||||
|
|
||||||
tx, err := db.Begin()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
if _, err := tx.Exec("DELETE FROM UserMovement"); err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
for _, r := range sumRows {
|
|
||||||
if _, err := tx.Exec("INSERT INTO UserMovement (Day, Added, Removed, Bounced) VALUES ($1, $2, $3, $4)", r.day, r.added, r.removed, r.bounced); err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return int64(len(sumRows)), tx.Commit()
|
|
||||||
}
|
|
||||||
|
|
||||||
func aggregatePerformance(db *sql.DB, since time.Time) (int64, error) {
|
func aggregatePerformance(db *sql.DB, since time.Time) (int64, error) {
|
||||||
res, err := db.Exec(`INSERT INTO Performance (
|
res, err := db.Exec(`INSERT INTO Performance (
|
||||||
SELECT
|
SELECT
|
||||||
|
|
|
@ -190,7 +190,6 @@ func (cli *CLI) Run() error {
|
||||||
http.HandleFunc("/", srv.rootHandler)
|
http.HandleFunc("/", srv.rootHandler)
|
||||||
http.HandleFunc("/newdata", srv.newDataHandler)
|
http.HandleFunc("/newdata", srv.newDataHandler)
|
||||||
http.HandleFunc("/summary.json", srv.summaryHandler)
|
http.HandleFunc("/summary.json", srv.summaryHandler)
|
||||||
http.HandleFunc("/movement.json", srv.movementHandler)
|
|
||||||
http.HandleFunc("/performance.json", srv.performanceHandler)
|
http.HandleFunc("/performance.json", srv.performanceHandler)
|
||||||
http.HandleFunc("/blockstats.json", srv.blockStatsHandler)
|
http.HandleFunc("/blockstats.json", srv.blockStatsHandler)
|
||||||
http.HandleFunc("/locations.json", srv.locationsHandler)
|
http.HandleFunc("/locations.json", srv.locationsHandler)
|
||||||
|
@ -363,25 +362,6 @@ func (s *server) summaryHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Write(bs)
|
w.Write(bs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *server) movementHandler(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
mov, err := getMovement(s.db)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("movementHandler:", err)
|
|
||||||
http.Error(w, "Database Error", http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
bs, err := json.Marshal(mov)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("movementHandler:", err)
|
|
||||||
http.Error(w, "JSON Encode Error", http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
w.Write(bs)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *server) performanceHandler(w http.ResponseWriter, _ *http.Request) {
|
func (s *server) performanceHandler(w http.ResponseWriter, _ *http.Request) {
|
||||||
perf, err := getPerformance(s.db)
|
perf, err := getPerformance(s.db)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1038,39 +1018,6 @@ func getSummary(db *sql.DB, min int) (summary, error) {
|
||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMovement(db *sql.DB) ([][]interface{}, error) {
|
|
||||||
rows, err := db.Query(`SELECT Day, Added, Removed, Bounced FROM UserMovement WHERE Day > now() - '3 year'::INTERVAL ORDER BY Day`)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
defer rows.Close()
|
|
||||||
|
|
||||||
res := [][]interface{}{
|
|
||||||
{"Day", "Joined", "Left", "Bounced"},
|
|
||||||
}
|
|
||||||
|
|
||||||
for rows.Next() {
|
|
||||||
var day time.Time
|
|
||||||
var added, removed, bounced int
|
|
||||||
err := rows.Scan(&day, &added, &removed, &bounced)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
row := []interface{}{day.Format("2006-01-02"), added, -removed, bounced}
|
|
||||||
if removed == 0 {
|
|
||||||
row[2] = nil
|
|
||||||
}
|
|
||||||
if bounced == 0 {
|
|
||||||
row[3] = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
res = append(res, row)
|
|
||||||
}
|
|
||||||
|
|
||||||
return res, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getPerformance(db *sql.DB) ([][]interface{}, error) {
|
func getPerformance(db *sql.DB) ([][]interface{}, error) {
|
||||||
rows, err := db.Query(`SELECT Day, TotFiles, TotMiB, SHA256Perf, MemorySize, MemoryUsageMiB FROM Performance WHERE Day > now() - '5 year'::INTERVAL ORDER BY Day`)
|
rows, err := db.Query(`SELECT Day, TotFiles, TotMiB, SHA256Perf, MemorySize, MemoryUsageMiB FROM Performance WHERE Day > now() - '5 year'::INTERVAL ORDER BY Day`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue