revert migration
This commit is contained in:
@@ -26,10 +26,6 @@ func main() {
|
|||||||
initGeoASN()
|
initGeoASN()
|
||||||
defer closeGeoASN()
|
defer closeGeoASN()
|
||||||
|
|
||||||
// TEMPORÄR: einmalig die Bestands-Impressions ohne asn nachträglich auflösen.
|
|
||||||
// Nach einem erfolgreichen Lauf wieder entfernen/reverten (samt backfillASN).
|
|
||||||
backfillASN()
|
|
||||||
|
|
||||||
srv := &http.Server{
|
srv := &http.Server{
|
||||||
Addr: envOr("KVER_ADDR", ":8080"),
|
Addr: envOr("KVER_ADDR", ":8080"),
|
||||||
Handler: routes(),
|
Handler: routes(),
|
||||||
|
|||||||
@@ -147,51 +147,6 @@ func lookupASN(ip net.IP) string {
|
|||||||
return label
|
return label
|
||||||
}
|
}
|
||||||
|
|
||||||
// backfillASN setzt das asn-Feld für bereits erfasste Impressions nach, die noch
|
|
||||||
// keins haben (asn = ''). Nötig, weil recordImpression das asn nur beim ersten
|
|
||||||
// Insert pro (Tag, Netz, Pfad) schreibt -> Zeilen, die vor aktiver ASN-DB
|
|
||||||
// entstanden, blieben "(unbekannt)".
|
|
||||||
//
|
|
||||||
// TEMPORÄR: einmalig beim Start ausführen, danach den Aufruf (und diese Funktion)
|
|
||||||
// wieder entfernen/reverten. Arbeitet nur auf dem bereits anonymisierten Netz
|
|
||||||
// (anon_ip), nie auf einer vollen IP.
|
|
||||||
func backfillASN() {
|
|
||||||
if geoASN == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
rows, err := db.Query(`SELECT DISTINCT anon_ip FROM impression WHERE asn = ''`)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("ASN-Backfill: Abfrage fehlgeschlagen: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var nets []string
|
|
||||||
for rows.Next() {
|
|
||||||
var anon string
|
|
||||||
if rows.Scan(&anon) == nil && anon != "" {
|
|
||||||
nets = append(nets, anon)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rows.Close()
|
|
||||||
|
|
||||||
var updated, resolved int
|
|
||||||
for _, anon := range nets {
|
|
||||||
asn := lookupASN(net.ParseIP(anon))
|
|
||||||
if asn == "" {
|
|
||||||
continue // kein Treffer -> bleibt "(unbekannt)"
|
|
||||||
}
|
|
||||||
res, err := db.Exec(`UPDATE impression SET asn = ? WHERE anon_ip = ? AND asn = ''`, asn, anon)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("ASN-Backfill: Update für %s fehlgeschlagen: %v", anon, err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
resolved++
|
|
||||||
if n, _ := res.RowsAffected(); n > 0 {
|
|
||||||
updated += int(n)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Printf("ASN-Backfill: %d Netze aufgelöst, %d Zeilen aktualisiert (von %d offenen Netzen)", resolved, updated, len(nets))
|
|
||||||
}
|
|
||||||
|
|
||||||
// trackImpression zählt einen Seitenaufruf pro (Tag, anonymisiertes Netz, Pfad)
|
// trackImpression zählt einen Seitenaufruf pro (Tag, anonymisiertes Netz, Pfad)
|
||||||
// und vermerkt das autonome System. Die IP wird zuerst maskiert; sowohl die
|
// und vermerkt das autonome System. Die IP wird zuerst maskiert; sowohl die
|
||||||
// Speicherung als auch die ASN-Auflösung arbeiten nur auf dem anonymisierten
|
// Speicherung als auch die ASN-Auflösung arbeiten nur auf dem anonymisierten
|
||||||
|
|||||||
Reference in New Issue
Block a user