Browse Source

cmd/ursrv: Filter out ancient versions from chart

Jakob Borg 5 years ago
parent
commit
5373e38ac8
2 changed files with 25 additions and 5 deletions
  1. 19 2
      cmd/ursrv/main.go
  2. 6 3
      cmd/ursrv/static/index.html

+ 19 - 2
cmd/ursrv/main.go

@@ -23,6 +23,7 @@ import (
 	"os"
 	"regexp"
 	"sort"
+	"strconv"
 	"strings"
 	"sync"
 	"time"
@@ -900,7 +901,8 @@ func newDataHandler(db *sql.DB, w http.ResponseWriter, r *http.Request) {
 }
 
 func summaryHandler(db *sql.DB, w http.ResponseWriter, r *http.Request) {
-	s, err := getSummary(db)
+	min, _ := strconv.Atoi(r.URL.Query().Get("min"))
+	s, err := getSummary(db, min)
 	if err != nil {
 		log.Println("summaryHandler:", err)
 		http.Error(w, "Database Error", http.StatusInternalServerError)
@@ -1558,7 +1560,21 @@ func (s *summary) MarshalJSON() ([]byte, error) {
 	return json.Marshal(table)
 }
 
-func getSummary(db *sql.DB) (summary, error) {
+// filter removes versions that never reach the specified min count.
+func (s *summary) filter(min int) {
+	// We cheat and just remove the versions from the "index" and leave the
+	// data points alone. The version index is used to build the table when
+	// we do the serialization, so at that point the data points are
+	// filtered out as well.
+	for ver := range s.versions {
+		if s.max[ver] < min {
+			delete(s.versions, ver)
+			delete(s.max, ver)
+		}
+	}
+}
+
+func getSummary(db *sql.DB, min int) (summary, error) {
 	s := newSummary()
 
 	rows, err := db.Query(`SELECT Day, Version, Count FROM VersionSummary WHERE Day > now() - '2 year'::INTERVAL;`)
@@ -1589,6 +1605,7 @@ func getSummary(db *sql.DB) (summary, error) {
 		s.setCount(day.Format("2006-01-02"), ver, num)
 	}
 
+	s.filter(min)
 	return s, nil
 }
 

+ 6 - 3
cmd/ursrv/static/index.html

@@ -21,7 +21,7 @@ found in the LICENSE file.
   <script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/leaflet.js"></script>
   <script src="https://cdn.jsdelivr.net/npm/[email protected]/heatmap.min.js"></script>
   <script src="https://cdn.jsdelivr.net/npm/[email protected]/leaflet-heatmap.js"></script>
-    
+
   <style type="text/css">
     body {
       margin: 40px;
@@ -55,7 +55,10 @@ found in the LICENSE file.
     google.setOnLoadCallback(drawPerformanceCharts);
 
     function drawVersionChart() {
-      var jsonData = $.ajax({url: "summary.json", dataType:"json", async: false}).responseText;
+      // Summary version chart for versions that at some point in the chart
+      // reaches 250 devices. This filters out versions that are old and
+      // uninteresting yet linger forever with like four users.
+      var jsonData = $.ajax({url: "summary.json?min=250", dataType:"json", async: false}).responseText;
       var rows = JSON.parse(jsonData);
 
       var data = new google.visualization.DataTable();
@@ -224,7 +227,7 @@ found in the LICENSE file.
       var testData = {
         data: locations
       };
-      
+
       var baseLayer = L.tileLayer(
         'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
           attribution: '...',