github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/examples/redis/function.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "io/ioutil" 7 "log" 8 "os" 9 10 "github.com/garyburd/redigo/redis" 11 ) 12 13 type payload struct { 14 Key string `json:"key"` 15 Value string `json:"value"` 16 } 17 18 func main() { 19 // Getting stdin 20 plStdin, _ := ioutil.ReadAll(os.Stdin) 21 22 // Transforming JSON to a *payload 23 var pl payload 24 err := json.Unmarshal(plStdin, &pl) 25 if err != nil { 26 log.Println("Invalid payload") 27 log.Fatal(err) 28 return 29 } 30 31 // Dialing redis server 32 c, err := redis.Dial("tcp", os.Getenv("SERVER")) 33 if err != nil { 34 log.Println("Failed to dial redis server") 35 log.Fatal(err) 36 return 37 } 38 39 // Authenticate to redis server if exists the password 40 if os.Getenv("REDIS_AUTH") != "" { 41 if _, err := c.Do("AUTH", os.Getenv("REDIS_AUTH")); err != nil { 42 log.Println("Failed to authenticate to redis server") 43 log.Fatal(err) 44 return 45 } 46 } 47 48 // Check if payload command is valid 49 if os.Getenv("COMMAND") != "GET" && os.Getenv("COMMAND") != "SET" { 50 log.Println("Invalid command") 51 return 52 } 53 54 // Execute command on redis server 55 var r interface{} 56 if os.Getenv("COMMAND") == "GET" { 57 r, err = c.Do("GET", pl.Key) 58 } else if os.Getenv("COMMAND") == "SET" { 59 r, err = c.Do("SET", pl.Key, pl.Value) 60 } 61 62 if err != nil { 63 log.Println("Failed to execute command on redis server") 64 log.Fatal(err) 65 return 66 } 67 68 // Convert reply to string 69 res, err := redis.String(r, err) 70 if err != nil { 71 return 72 } 73 74 // Print reply 75 fmt.Println(res) 76 }