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.
Test Setup Failed
Push — master ( 169bb3...d84165 )
by Amir
01:27
created

memcached.Serve   B

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
	mockServer := mc.NewServer(host)
14
	mockServer.RegisterFunc("get", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
15
		return getHandler(ctx, req, res, gerdu)
16
	})
17
	mockServer.RegisterFunc("gets", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
18
		return getHandler(ctx, req, res, gerdu)
19
	})
20
	mockServer.RegisterFunc("set", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
21
		return setHandler(ctx, req, res, gerdu)
22
	})
23
	mockServer.RegisterFunc("delete", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
24
		return deleteHandler(ctx, req, res, gerdu)
25
26
	})
27
	mockServer.RegisterFunc("incr", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
28
		return incrHandler(ctx, req, res, gerdu)
29
	})
30
	mockServer.RegisterFunc("flush_all", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
31
		return flushAllHandler(ctx, req, res, gerdu)
32
	})
33
	mockServer.RegisterFunc("version", func(ctx context.Context, req *mc.Request, res *mc.Response) error {
34
		return versionHandler(ctx, req, res, gerdu)
35
	})
36
	mockServer.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
			return err
96
		}
97
	}
98
99
	value := strconv.FormatInt(base+increment, 10)
100
	gerdu.Put(key, value)
101
102
	res.Response = value
103
	return nil
104
}
105
106
func flushAllHandler(ctx context.Context, req *mc.Request, res *mc.Response, gerdu cache.UnImplementedCache) error {
107
108
	log.Fatalln("Memcached not implemented flush all")
109
	res.Response = mc.RespOK
110
	return nil
111
}
112
113
func versionHandler(ctx context.Context, req *mc.Request, res *mc.Response, gerdu cache.UnImplementedCache) error {
114
	res.Response = "Gerdu VERSION 0.1"
115
	return nil
116
}
117