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  }