예제 #1
0
func apples(name string, addr string, master bool) {
	var role string
	if master {
		role = "master"
	} else {
		role = "slave"
	}

	client := redis.NewClient(&redis.Options{
		Addr: addr,
	})

	if err := client.Ping().Err(); err != nil {
		l2n.Printf("Error connecting to %s '%s' of pod %s\n", role, addr, name)
		pd("Error connecting to "+role, map[string]interface{}{
			"Pod":     name,
			"Address": addr,
		})
		return
	}

	setRedisClientName(client)

	l2n.Printf("Connected to Redis '%s' @ %s", name, addr)

	ticker := time.NewTicker(time.Second * 30)
	for range ticker.C {
		blob := getInfoAsBlob(client)
		for _, section := range infoSections {
			dispatcher.Publish("redis-"+role, addr, section, blob[section])
		}
	}

	l2n.Printf("Shouldn't be here - Stopped checking %s", name)
}
예제 #2
0
func bananas(addr string) {
	var err error
	var psub *redis.PubSub

	client := redis.NewClient(&redis.Options{
		Addr: addr,
	})

	if err = client.Ping().Err(); err != nil {
		l2n.Printf("Error talking with sentinel @ %s", addr)
		pd("Error connecting to sentinel", map[string]interface{}{
			"Addr": addr,
		})
		return
	}

	setRedisClientName(client)

	if psub, err = client.PSubscribe("*"); err != nil {
		l2n.Printf("Error subscribing to * from sentinel @ %s", addr)
		pd("Error subscribing to sentinel", map[string]interface{}{
			"Addr":  addr,
			"Topic": "*",
		})
		return
	}

	l2n.Printf("Subscribed to * from %s", addr)

	defer psub.Close()

	for {
		if msg, err := psub.ReceiveMessage(); err == nil {
			dispatcher.Publish("sentinel", addr, msg.Channel, msg.Payload)
		} else {
			time.Sleep(100 * time.Millisecond)
		}
	}
}