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  }