예제 #1
0
/* Set the state of the host in the cache
 *
 */
func Set(host string, state int, data, errS string) error {
	if data == "" {
		data = "---"
	}
	if errS == "" {
		errS = "---"
	}

	putr := put.Request{
		TableName: CACHE_TAB,
		Item:      make(ep.Item),
	}

	putr.Item["hostname"] = ep.AttributeValue{S: host}
	putr.Item["Mtime"] = ep.AttributeValue{N: strconv.FormatInt(time.Now().UTC().Unix(), 10)}
	putr.Item["Status"] = ep.AttributeValue{N: strconv.FormatInt(int64(state), 10)}
	putr.Item["Data"] = ep.AttributeValue{S: data}
	putr.Item["Error"] = ep.AttributeValue{S: errS}

	body, code, err := putr.EndpointReq()
	if err != nil {
		log.Printf("[cache] ERROR: put failed %v, %s", err, body)
		return err
	}
	if code != http.StatusOK {
		log.Printf("[cache] ERROR: put failed %v, %s", code, body)
		return fmt.Errorf("put failed: code %d", code)
	}

	// log.Printf("####CACHE_SET: %s\n", string(body))
	return nil
}
예제 #2
0
func main() {
	conf_file.Read()
	if conf.Vals.Initialized == false {
		panic("the conf.Vals global conf struct has not been initialized")
	}

	iam_ready_chan := make(chan bool)
	go conf_iam.GoIAM(iam_ready_chan)
	iam_ready := <-iam_ready_chan
	if iam_ready {
		fmt.Printf("using iam\n")
	} else {
		fmt.Printf("not using iam\n")
	}

	var put1 put.Request
	put1.TableName = "test-godynamo-livetest"
	k := fmt.Sprintf("hk1")
	v := fmt.Sprintf("%v", time.Now().Unix())
	put1.Item = make(ep.Item)
	put1.Item["TheHashKey"] = ep.AttributeValue{S: k}
	put1.Item["TheRangeKey"] = ep.AttributeValue{N: v}
	n := fmt.Sprintf("%v", time.Now().Unix())
	put1.Item["Mtime"] = ep.AttributeValue{N: n}
	put1.Item["SomeJunk"] = ep.AttributeValue{S: "some junk"}
	put1.Item["SomeJunks"] = ep.AttributeValue{SS: []string{"some junk1", "some junk2"}}
	body, code, err := put1.EndpointReq()
	if err != nil || code != http.StatusOK {
		fmt.Printf("put failed %d %v %s\n", code, err, body)
	}
	fmt.Printf("%s\n", string(body))
}
예제 #3
0
파일: ddb.go 프로젝트: mthjn/Heartbleed
/* Set the state of the host in the cache
 *
 */
func Set(host string, state int, data, errS string) error {
	if data == "" {
		data = "---"
	}
	if errS == "" {
		errS = "---"
	}

	putr := put.Request{
		TableName: CACHE_TAB,
		Item:      make(ep.Item),
	}

	// Randomize the exp time by inserting the value up to "expiry" in the past
	// THIS MEANS THAT ITEMS ARE CACHED FOR A TIME FROM 0 TO expiry
	rnd := rand.Int63n(int64(expiry))
	mtime := time.Now().UTC().Add(-time.Duration(rnd)).Unix()

	putr.Item["hostname"] = ep.AttributeValue{S: host}
	putr.Item["Mtime"] = ep.AttributeValue{N: strconv.FormatInt(mtime, 10)}
	putr.Item["Status"] = ep.AttributeValue{N: strconv.FormatInt(int64(state), 10)}
	putr.Item["Data"] = ep.AttributeValue{S: data}
	putr.Item["Error"] = ep.AttributeValue{S: errS}

	body, code, err := putr.EndpointReq()
	if err != nil {
		log.Printf("[cache] ERROR: put failed %v, %s", err, body)
		return err
	}
	if code != http.StatusOK {
		log.Printf("[cache] ERROR: put failed %v, %s", code, body)
		return fmt.Errorf("put failed: code %d", code)
	}

	// log.Printf("####CACHE_SET: %s\n", string(body))
	return nil
}
예제 #4
0
func main() {
	// conf file must be read in before anything else, to initialize permissions etc
	conf_file.Read()
	if conf.Vals.Initialized == false {
		panic("the conf.Vals global conf struct has not been initialized")
	}

	// deal with iam, or not
	iam_ready_chan := make(chan bool)
	go conf_iam.GoIAM(iam_ready_chan)
	iam_ready := <-iam_ready_chan
	if iam_ready {
		fmt.Printf("using iam\n")
	} else {
		fmt.Printf("not using iam\n")
	}

	tn := "test-godynamo-livetest"
	tablename1 := tn
	fmt.Printf("tablename1: %s\n", tablename1)

	var code int
	var err error
	var body string

	// INSERT SINGLE ITEM
	hk := "a-hash-key"
	rk := "1"
	var put1 put_item.Request
	put1.TableName = tablename1
	var av1, av2, av3, av4, av5, av6, av7 ep.AttributeValue
	av1.S = hk
	av2.N = rk
	av3.SS = []string{"pk1_a", "pk1_b", "pk1_c"}
	av4.NS = []string{"1", "2", "3", "-7.234234234234234e+09"}
	av5.N = "1"
	av6.B = base64.StdEncoding.EncodeToString([]byte("hello"))
	av7.BS = []string{base64.StdEncoding.EncodeToString([]byte("hello")),
		base64.StdEncoding.EncodeToString([]byte("there"))}
	put1.Item = make(ep.Item)
	put1.Item["TheHashKey"] = av1
	put1.Item["TheRangeKey"] = av2
	put1.Item["stringlist"] = av3
	put1.Item["numlist"] = av4
	put1.Item["num"] = av5
	put1.Item["byte"] = av6
	put1.Item["bytelist"] = av7
	// recommended to make sure pk does not exist yet in table
	// (i.e. this will be a new item)
	put1.Expected = make(ep.Expected)
	put1.Expected["t1.hk"] = ep.Constraints{Exists: false}
	body, code, err = put1.EndpointReq()
	if err != nil || code != http.StatusOK {
		fmt.Printf("put1 failed %d %v %s\n", code, err, body)
		os.Exit(1)
	}

	// GET THAT ITEM
	var get1 get_item.Request
	get1.TableName = tablename1
	get1.Key = make(ep.Item)
	get1.Key["TheHashKey"] = av1
	get1.Key["TheRangeKey"] = av2

	get_json, get_json_err := json.Marshal(get1)
	if get_json_err != nil {
		fmt.Printf("%v\n", get_json_err)
		os.Exit(1)
	}
	fmt.Printf("%s\n", string(get_json))

	body, code, err = get1.EndpointReq()
	if err != nil || code != http.StatusOK {
		fmt.Printf("get failed %d %v %s\n", code, err, body)
		os.Exit(1)
	}
	var gr get_item.Response
	um_err := json.Unmarshal([]byte(body), &gr)
	if um_err != nil {
		fmt.Printf("get resp unmarshal failed %s\n", um_err.Error())
		os.Exit(1)
	}

	// USE PUT TO REPLACE THAT ITEM CONDITIONALLY
	// **SET IT UP TO FAIL**
	var put2 put_item.Request
	put2.TableName = tablename1
	var av1_2, av2_2, av3_2, av4_2, av5_2, av6_2 ep.AttributeValue
	av1_2.S = hk
	av2_2.N = rk
	av3_2.SS = []string{"pk1_d", "pk1_e", "pk1_f"}
	av4_2.NS = []string{"4", "5", "6"}
	av5_2.N = "2"
	av6_2.S = "hello there"
	put2.Item = make(ep.Item)
	put2.Item["TheHashKey"] = av1_2
	put2.Item["TheRangeKey"] = av2_2
	put2.Item["stringlist"] = av3_2
	put2.Item["numlist"] = av4_2
	put2.Item["num"] = av5_2
	put2.Item["string"] = av6_2
	put2.Item["byte"] = av6
	put2.Item["bytelist"] = av7
	put2.Expected = make(ep.Expected)
	put2.Expected["TheHashKey"] = ep.Constraints{Exists: false}
	body, code, err = put2.EndpointReq()
	if err == nil && code == http.StatusOK {
		fmt.Printf("put2 should have failed %d %v %s\n", code, err, body)
		os.Exit(1)
	}

	// NOW MAKE IT SO THAT PUT WORKS
	put2.Expected = make(ep.Expected)
	put2.ReturnValues = put_item.RETVAL_ALL_OLD
	put2.Expected["num"] = ep.Constraints{Exists: true, Value: av5}
	body, code, err = put2.EndpointReq()
	if err != nil || code != http.StatusOK {
		fmt.Printf("put2 item failed %d %v %s\n", code, err, body)
		os.Exit(1)
	}

	// UPDATE THAT ITEM
	var up1 update_item.Request
	new_attr_val := "new string here"
	up1.TableName = tablename1
	up1.Key = make(ep.Item)
	up1.Key["TheHashKey"] = av1
	up1.Key["TheRangeKey"] = av2

	up1.AttributeUpdates = make(update_item.AttributeUpdates)
	up1.AttributeUpdates["new_string"] =
		update_item.AttributeAction{Value: ep.AttributeValue{S: new_attr_val}, Action: update_item.ACTION_PUT}
	var del_stringlist ep.AttributeValue
	del_stringlist.SS = []string{"pk1_a"}
	up1.AttributeUpdates["stringlist"] =
		update_item.AttributeAction{Value: del_stringlist, Action: update_item.ACTION_DEL}
	up1.AttributeUpdates["byte"] = update_item.AttributeAction{Value: ep.AttributeValue{}, Action: update_item.ACTION_DEL}
	up1.AttributeUpdates["num"] = update_item.AttributeAction{Value: ep.AttributeValue{N: "4"}, Action: update_item.ACTION_ADD}
	up1.ReturnValues = update_item.RETVAL_ALL_NEW

	update_item_json, update_item_json_err := json.Marshal(up1)
	if update_item_json_err != nil {
		fmt.Printf("%v\n", update_item_json_err)
		os.Exit(1)
	}
	fmt.Printf("%s\n", string(update_item_json))

	body, code, err = up1.EndpointReq()
	if err != nil || code != http.StatusOK {
		fmt.Printf("update item failed %d %v %s\n", code, err, body)
		os.Exit(1)
	}

	var ur update_item.Response
	um_err = json.Unmarshal([]byte(body), &ur)
	if um_err != nil {
		fmt.Printf("update resp unmarshal failed %s\n", um_err.Error())
		os.Exit(1)
	}

	// GET IT AGAIN
	body, code, err = get1.EndpointReq()
	if err != nil || code != http.StatusOK {
		fmt.Printf("get failed %d %v %s\n", code, err, body)
		os.Exit(1)
	}

	// DELETE THE ITEM
	var del1 delete_item.Request
	del1.Key = make(ep.Item)
	del1.TableName = tablename1
	del1.Key["TheHashKey"] = av1
	del1.Key["TheRangeKey"] = av2

	del1.Expected = make(ep.Expected)
	del1.Expected["num"] = ep.Constraints{Exists: true, Value: ep.AttributeValue{N: "6"}}
	del1.ReturnValues = delete_item.RETVAL_ALL_OLD
	body, code, err = del1.EndpointReq()
	if err != nil || code != http.StatusOK {
		fmt.Printf("delete item failed %d %v %s\n", code, err, body)
		os.Exit(1)
	}
}