Ejemplo n.º 1
0
func findKeys(t *telnet.Conn, slabs map[string]int64, prefix string) []string {
	var keys []string

	r, err := regexp.Compile(`ITEM (.+?) \[(\d+) b; (\d+) s\]`)
	checkErr(err)

	for k, v := range slabs {
		sendln(t, "stats cachedump "+k+" "+strconv.FormatInt(v, 10))
		line, e := t.ReadString('\n')
		checkErr(e)
		for !strings.HasPrefix(line, "END") {
			//			log.Printf("Got item line: %s", line)
			if r.MatchString(line) == true {
				m := r.FindStringSubmatch(line)
				key := m[1]
				if len(prefix) == 0 || (len(prefix) > 0 && strings.HasPrefix(key, prefix)) {
					keys = append(keys, key)
				}
			}

			line, e = t.ReadString('\n')
			checkErr(e)
		}
	}
	return keys
}
Ejemplo n.º 2
0
func sendln(t *telnet.Conn, s string) {
	checkErr(t.SetWriteDeadline(time.Now().Add(timeout)))
	buf := make([]byte, len(s)+1)
	copy(buf, s)
	buf[len(s)] = '\n'
	_, err := t.Write(buf)
	checkErr(err)
}
Ejemplo n.º 3
0
func getSlabs(t *telnet.Conn) map[string]int64 {
	var line string
	slabs := make(map[string]int64)

	r, err := regexp.Compile(`STAT items:(\d+):number (\d+)`) // slab id & slab items
	checkErr(err)

	sendln(t, "stats items")
	line, e := t.ReadString('\n')
	checkErr(e)
	for !strings.HasPrefix(line, "END") {
		//		log.Printf("Got slab line: %s", line)
		if r.MatchString(line) == true {
			m := r.FindStringSubmatch(line)
			i, e1 := strconv.ParseInt(m[2], 10, 64)
			checkErr(e1)
			slabs[m[1]] = i
		}

		line, e = t.ReadString('\n')
		checkErr(e)
	}
	return slabs
}
Ejemplo n.º 4
0
func expect(t *telnet.Conn, d ...string) {
	checkErr(t.SetReadDeadline(time.Now().Add(timeout)))
	checkErr(t.SkipUntil(d...))
}