GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

memcached.Serve   B
last analyzed

Complexity

Conditions 8

Size

Total Lines 25
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 17
nop 2
dl 0
loc 25
rs 7.3333
c 0
b 0
f 0
1
package memcached
2
3
import (
4
	"context"
5
	"github.com/arazmj/gerdu/cache"
6
	mc "github.com/arazmj/gomemcached"
7
	log "github.com/sirupsen/logrus"
8
	"strconv"
9
)
10
11
//Serve start memcached server
12
func Serve(host string, gerdu cache.UnImplementedCache) {
13
	server := mc.NewServer(host)
14
	server.RegisterFunc("get", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
15
		return getHandler(ctx, req, res, gerdu)
16
	})
17
	server.RegisterFunc("gets", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
18
		return getHandler(ctx, req, res, gerdu)
19
	})
20
	server.RegisterFunc("set", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
21
		return setHandler(ctx, req, res, gerdu)
22
	})
23
	server.RegisterFunc("delete", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
24
		return deleteHandler(ctx, req, res, gerdu)
25
26
	})
27
	server.RegisterFunc("incr", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
28
		return incrHandler(ctx, req, res, gerdu)
29
	})
30
	server.RegisterFunc("flush_all", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
31
		return flushAllHandler(ctx, req, res, gerdu)
32
	})
33
	server.RegisterFunc("version", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
34
		return versionHandler(ctx, req, res, gerdu)
35
	})
36
	server.Start()
37
}
38
39
func getHandler(ctx context.Context, req *mc.Request, res *mc.Response, gerdu cache.UnImplementedCache) error {
40
	for _, key := range req.Keys {
41
		value, ok := gerdu.Get(key)
42
		if ok {
43
44
			log.Printf("Memcached RETRIEVED Key: %s Value: %s\n", key, value)
45
		}
46
		res.Values = append(res.Values, mc.Value{Key: key, Flags: "0", Data: []byte(value)})
47
	}
48
49
	res.Response = mc.RespEnd
50
	return nil
51
}
52
53
func setHandler(ctx context.Context, req *mc.Request, res *mc.Response, gerdu cache.UnImplementedCache) error {
54
	key := req.Key
55
	value := req.Data
56
	created := gerdu.Put(key, string(value))
57
	if !created {
58
		log.Printf("Memcached UPDATE Key: %s Value: %s\n", key, value)
59
	} else {
60
		log.Printf("Memcached INSERT Key: %s Value: %s\n", key, value)
61
	}
62
	res.Response = mc.RespStored
63
	return nil
64
}
65
66
func deleteHandler(ctx context.Context, req *mc.Request, res *mc.Response, gerdu cache.UnImplementedCache) error {
67
	count := 0
68
	for _, key := range req.Keys {
69
		if _, exists := gerdu.Get(key); exists {
70
			ok := gerdu.Delete(key)
71
			if ok {
72
				log.Printf("Memcached DELETE Key: %s\n", key)
73
			}
74
			count++
75
		} else {
76
			log.Printf("Memcached DELETE Key not found: %s\n", key)
77
		}
78
	}
79
	if count > 0 {
80
		res.Response = mc.RespDeleted
81
	} else {
82
		res.Response = mc.RespNotFound
83
	}
84
	return nil
85
}
86
87
func incrHandler(ctx context.Context, req *mc.Request, res *mc.Response, gerdu cache.UnImplementedCache) error {
88
	key := req.Key
89
	increment := req.Value
90
	var base int64
91
	if value, exists := gerdu.Get(key); exists {
92
		var err error
93
		base, err = strconv.ParseInt(value, 10, 64)
94
		if err != nil {
95
			log.Printf("Memcached INCREMENT Key %v is not valid \n", key)
96
			return err
97
		}
98
	}
99
100
	value := strconv.FormatInt(base+increment, 10)
101
	log.Printf("Memcached INCREMENTED Key %s value %d to value %s\n", key, req.Value, value)
102
103
	gerdu.Put(key, value)
104
105
	res.Response = value
106
	return nil
107
}
108
109
func flushAllHandler(ctx context.Context, req *mc.Request, res *mc.Response, gerdu cache.UnImplementedCache) error {
110
111
	log.Fatalln("Memcached not implemented flush all")
112
	res.Response = mc.RespOK
113
	return nil
114
}
115
116
func versionHandler(ctx context.Context, req *mc.Request, res *mc.Response, gerdu cache.UnImplementedCache) error {
117
	res.Response = "Gerdu VERSION 0.1"
118
	return nil
119
}
120