github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/fn_cache.go (about) 1 package funcs 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/GuanceCloud/platypus/pkg/ast" 8 "github.com/GuanceCloud/platypus/pkg/engine/runtime" 9 "github.com/GuanceCloud/platypus/pkg/errchain" 10 ) 11 12 func CacheGetChecking(ctx *runtime.Task, funcExpr *ast.CallExpr) *errchain.PlError { 13 if len(funcExpr.Param) != 1 { 14 return runtime.NewRunError(ctx, fmt.Sprintf( 15 "func %s expects 1 arg", funcExpr.Name), funcExpr.NamePos) 16 } 17 return nil 18 } 19 20 func CacheGet(ctx *runtime.Task, funcExpr *ast.CallExpr) *errchain.PlError { 21 val, dtype, err := runtime.RunStmt(ctx, funcExpr.Param[0]) 22 if err != nil { 23 return err 24 } 25 26 if dtype != ast.String { 27 return runtime.NewRunError(ctx, "param data type expect string", 28 funcExpr.Param[0].StartPos()) 29 } 30 31 pt, errP := getPoint(ctx.InData()) 32 if errP != nil { 33 ctx.Regs.ReturnAppend(nil, ast.Nil) 34 return nil 35 } 36 37 c := pt.GetCache() 38 if c == nil { 39 ctx.Regs.ReturnAppend(nil, ast.Nil) 40 return nil 41 } 42 43 v, exist, errG := c.Get(val.(string)) 44 if !exist || errG != nil { 45 ctx.Regs.ReturnAppend(nil, ast.Nil) 46 return nil 47 } 48 49 ctx.Regs.ReturnAppend(v, ast.String) 50 51 return nil 52 } 53 54 func CacheSetChecking(ctx *runtime.Task, funcExpr *ast.CallExpr) *errchain.PlError { 55 if err := normalizeFuncArgsDeprecated(funcExpr, []string{ 56 "key", "value", "exp", 57 }, 2); err != nil { 58 return runtime.NewRunError(ctx, err.Error(), funcExpr.NamePos) 59 } 60 61 return nil 62 } 63 64 func CacheSet(ctx *runtime.Task, funcExpr *ast.CallExpr) *errchain.PlError { 65 key, keyType, err := runtime.RunStmt(ctx, funcExpr.Param[0]) 66 if err != nil { 67 return err 68 } 69 if keyType != ast.String { 70 return runtime.NewRunError(ctx, "param data type expect string", 71 funcExpr.Param[0].StartPos()) 72 } 73 74 value, _, err := runtime.RunStmt(ctx, funcExpr.Param[1]) 75 if err != nil { 76 return err 77 } 78 79 var expiration int64 = 100 80 if funcExpr.Param[2] != nil { 81 exp, expType, err := runtime.RunStmt(ctx, funcExpr.Param[2]) 82 if err != nil { 83 return err 84 } 85 if expType != ast.Int { 86 return runtime.NewRunError(ctx, "param data type expect int or nil", 87 funcExpr.Param[2].StartPos()) 88 } 89 expiration = exp.(int64) 90 } 91 92 pt, errP := getPoint(ctx.InData()) 93 if errP != nil { 94 return nil 95 } 96 97 c := pt.GetCache() 98 if c == nil { 99 return nil 100 } 101 _ = c.Set(key.(string), value, time.Second*time.Duration(expiration)) 102 103 return nil 104 }