0
0
mirror of https://github.com/PostHog/posthog.git synced 2024-11-21 21:49:51 +01:00
posthog/livestream/geoip.go
James Greenhill 37f7c8ec9a
chore: add sentry to liveevents (#23057)
* chore: add sentry to liveevents

* Use `isProd` for `Debug`

* Add a bunch of `CaptureException` calls

* Properly bubble `getPGConn()` error

* Fix `ParseIP` error handling

* Remove unused `personFromDistinctId()`

---------

Co-authored-by: Michael Matloka <dev@twixes.com>
Co-authored-by: Michael Matloka <michal@matloka.com>
2024-06-19 21:23:55 +00:00

44 lines
777 B
Go

package main
import (
"errors"
"net"
"github.com/oschwald/maxminddb-golang"
)
type GeoLocator struct {
db *maxminddb.Reader
}
func NewGeoLocator(dbPath string) (*GeoLocator, error) {
db, err := maxminddb.Open(dbPath)
if err != nil {
return nil, err
}
return &GeoLocator{
db: db,
}, nil
}
func (g *GeoLocator) Lookup(ipString string) (float64, float64, error) {
ip := net.ParseIP(ipString)
if ip == nil {
return 0, 0, errors.New("invalid IP address")
}
var record struct {
Location struct {
Latitude float64 `maxminddb:"latitude"`
Longitude float64 `maxminddb:"longitude"`
} `maxminddb:"location"`
}
err := g.db.Lookup(ip, &record)
if err != nil {
return 0, 0, err
}
return record.Location.Latitude, record.Location.Longitude, nil
}