增加stats items命令支持

This commit is contained in:
Srar 2019-08-14 10:40:49 +08:00
parent 8e2a12bba0
commit 219cab2d93

View File

@ -15,7 +15,7 @@ package memcache
* stats sizes * stats sizes
* version * version
* verbosity * verbosity
* quit * quit
*/ */
import ( import (
@ -192,11 +192,11 @@ var commands = map[string]func([]string) ([]byte, int){
nowTime := time.Now() nowTime := time.Now()
networkRx = networkRx + randNumber(10, 50) networkRx = networkRx + randNumber(10, 50)
networkTx = networkTx + randNumber(100, 500) networkTx = networkTx + randNumber(100, 500)
linkedHashMap.RLock()
defer linkedHashMap.RUnlock()
items := linkedHashMap.Len()
if len(args) == 0 { if len(args) == 0 {
linkedHashMap.RLock()
defer linkedHashMap.RUnlock()
items := linkedHashMap.Len()
statsArray := []string{ statsArray := []string{
"STAT pid 1\r\n", "STAT pid 1\r\n",
fmt.Sprintf("STAT uptime %d\r\n", int(nowTime.Sub(UPTIME)/time.Second)), fmt.Sprintf("STAT uptime %d\r\n", int(nowTime.Sub(UPTIME)/time.Second)),
@ -285,7 +285,7 @@ var commands = map[string]func([]string) ([]byte, int){
return responseBuffer, 0 return responseBuffer, 0
} }
switch args[1] { switch args[0] {
case "slabs": case "slabs":
statsArray := []string{ statsArray := []string{
"STAT 1:chunk_size 96\r\n", "STAT 1:chunk_size 96\r\n",
@ -346,7 +346,41 @@ var commands = map[string]func([]string) ([]byte, int){
} }
return responseBuffer, 0 return responseBuffer, 0
case "items": case "items":
return RESPONSE_SERVER_ERROR, 0 statsArray := []string{
fmt.Sprintf("STAT items:1:number %d\r\n", items),
"STAT items:1:number_hot 0\r\n",
"STAT items:1:number_warm 0\r\n",
fmt.Sprintf("STAT items:1:number_cold %d\r\n", items),
"STAT items:1:age_hot 0\r\n",
"STAT items:1:age_warm 0\r\n",
"STAT items:1:age 31\r\n",
"STAT items:1:evicted 0\r\n",
"STAT items:1:evicted_nonzero 0\r\n",
"STAT items:1:evicted_time 0\r\n",
"STAT items:1:outofmemory 0\r\n",
"STAT items:1:tailrepairs 0\r\n",
"STAT items:1:reclaimed 1\r\n",
"STAT items:1:expired_unfetched 1",
"STAT items:1:evicted_unfetched 0\r\n",
"STAT items:1:evicted_active 0\r\n",
"STAT items:1:crawler_reclaimed 0\r\n",
"STAT items:1:crawler_items_checked 0\r\n",
"STAT items:1:lrutail_reflocked 0\r\n",
"STAT items:1:moves_to_cold 3\r\n",
"STAT items:1:moves_to_warm 0\r\n",
"STAT items:1:moves_within_lru 0\r\n",
"STAT items:1:direct_reclaims 0\r\n",
"STAT items:1:hits_to_hot 0\r\n",
"STAT items:1:hits_to_warm 0\r\n",
"STAT items:1:hits_to_cold 0\r\n",
"STAT items:1:hits_to_temp 0\r\n",
"END\r\n",
}
responseBuffer := []byte{}
for _, response := range statsArray {
responseBuffer = append(responseBuffer, []byte(response)...)
}
return responseBuffer, 0
case "detail": case "detail":
return RESPONSE_OK, 0 return RESPONSE_OK, 0
case "sizes": case "sizes":
@ -400,7 +434,7 @@ func tcpServer(address string, exitChan chan int) {
} }
str = strings.TrimSpace(str) str = strings.TrimSpace(str)
log.Printf("[Memcache %d] Got request: %s.", trackID, str) log.Printf("[Memcache %d] Client request: %s.", trackID, str)
args := strings.Split(str, " ") args := strings.Split(str, " ")
function, exist := commands[args[0]] function, exist := commands[args[0]]
if !exist { if !exist {