Release v0.1.0: now with starlark script support.

You may send SIGHUP signal to the process to make it reread the script.
It will use older loaded version if parsing of new file failed.
This commit is contained in:
2019-11-17 03:51:15 +08:00
parent 2740b7119e
commit fbc2301287
7 changed files with 232 additions and 35 deletions

View File

@ -2,8 +2,12 @@ package ipgeo
import (
"flag"
"github.com/ipipdotnet/ipdb-go"
"log"
"git.eve.moe/jackyyf/navigator/mapping/elf"
"github.com/ipipdotnet/ipdb-go"
"go.starlark.net/starlark"
"go.starlark.net/starlarkstruct"
)
var (
@ -19,7 +23,7 @@ var (
db *ipdb.City
)
func Init() {
func Initialize() {
var err error
db, err = ipdb.NewCity(*ipipdb)
if err != nil {
@ -39,7 +43,8 @@ func Init() {
}
}
if !ok {
log.Fatalln("This IPIP.net database has no required field", requiredField)
log.Fatalln("This IPIP.net database has no required field",
requiredField)
}
}
}
@ -48,3 +53,29 @@ func Init() {
func Get() *ipdb.City {
return db
}
func init() {
elf.RegisterFunc("geoLookup",
func(t *starlark.Thread, b *starlark.Builtin, args starlark.Tuple,
kwargs []starlark.Tuple) (starlark.Value, error) {
var ip string
if err := starlark.UnpackArgs(b.Name(), args, kwargs,
"ip", &ip); err != nil {
return nil, err
}
result, err := db.FindInfo(ip, "EN")
if err != nil {
return nil, err
}
return starlarkstruct.FromStringDict(
starlark.String("IPDBCityInfo"),
starlark.StringDict{
"CountryName": starlark.String(result.CountryName),
"RegionName": starlark.String(result.RegionName),
"CityName": starlark.String(result.CityName),
"IspDomain": starlark.String(result.IspDomain),
"CountryCode": starlark.String(result.CountryCode),
"ContinentCode": starlark.String(result.ContinentCode),
}), nil
})
}