From 633fc78116c1440911ef36df0ea692134608e2a3 Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Wed, 30 Oct 2019 20:38:25 +0000 Subject: [PATCH] Add support for external values in scripts No external values are currently defined or filled in, it's just defining an "ext" variable placeholder. --- script/script.go | 10 ++++++++-- script/script_test.go | 2 +- server/server.go | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/script/script.go b/script/script.go index 5513c9e..72e8076 100644 --- a/script/script.go +++ b/script/script.go @@ -7,6 +7,7 @@ import ( "sync" "github.com/d5/tengo/script" + "github.com/d5/tengo/stdlib" ippb "git.autistici.org/ai3/tools/iprep/proto" ) @@ -24,7 +25,7 @@ func LoadScript(path string) (*Script, error) { } var globalVars = []string{ - "ip", "score", "counts", "interval", + "ip", "score", "counts", "interval", "ext", } func NewScript(src []byte) (*Script, error) { @@ -36,6 +37,10 @@ func NewScript(src []byte) (*Script, error) { return nil, err } } + + // Add available imports. + s.SetImports(stdlib.GetModuleMap("math", "times")) + c, err := s.Compile() if err != nil { return nil, err @@ -53,11 +58,12 @@ func buildIPMap(ip string, m ippb.Map) map[string]interface{} { return out } -func (script *Script) RunIP(ctx context.Context, ip string, m ippb.Map, intervalSecs float64) (float64, error) { +func (script *Script) RunIP(ctx context.Context, ip string, m ippb.Map, intervalSecs float64, ext map[string]interface{}) (float64, error) { c := script.compiled.Clone() c.Set("ip", ip) c.Set("score", 0.0) c.Set("interval", intervalSecs) + c.Set("ext", ext) if err := c.Set("counts", buildIPMap(ip, m)); err != nil { return 0, err } diff --git a/script/script_test.go b/script/script_test.go index a60fea1..0ddc89e 100644 --- a/script/script_test.go +++ b/script/script_test.go @@ -22,7 +22,7 @@ score = counts["test"] / 2 + counts["test2"] m.Incr("test2", "1.2.3.4", 2) m.Incr("test2", "2.3.4.5", 3) - score, err := s.RunIP(context.Background(), "1.2.3.4", m, 3600) + score, err := s.RunIP(context.Background(), "1.2.3.4", m, 3600, nil) if err != nil { t.Fatalf("runScript: %v", err) } diff --git a/server/server.go b/server/server.go index 86f0ef9..cf2a919 100644 --- a/server/server.go +++ b/server/server.go @@ -88,7 +88,7 @@ func (s *Server) GetScore(ctx context.Context, req *ippb.GetScoreRequest) (*ippb return nil, status.Errorf(codes.Unavailable, "%v", err) } - score, err := s.Script().RunIP(ctx, req.Ip, m, s.horizon.Seconds()) + score, err := s.Script().RunIP(ctx, req.Ip, m, s.horizon.Seconds(), nil) if err != nil { return nil, status.Errorf(codes.Internal, "%v", err) } -- GitLab