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.
Passed
Push — master ( 8cec0e...e8c327 )
by Amir
13:23
created

main.setCache   B

Complexity

Conditions 6

Size

Total Lines 21
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 18
dl 0
loc 21
rs 8.5666
c 0
b 0
f 0
nop 0
1
package main
2
3
import (
4
	"flag"
5
	cache "github.com/arazmj/gerdu/cache"
6
	"github.com/arazmj/gerdu/grpcserver"
7
	"github.com/arazmj/gerdu/httpserver"
8
	"github.com/arazmj/gerdu/lfucache"
9
	"github.com/arazmj/gerdu/lrucache"
10
	"github.com/arazmj/gerdu/memcached"
11
	"github.com/arazmj/gerdu/raftproxy"
12
	"github.com/arazmj/gerdu/weakcache"
13
	"github.com/inhies/go-bytesize"
14
	log "github.com/sirupsen/logrus"
15
	"os"
16
	"os/signal"
17
	"strconv"
18
	"strings"
19
	"sync"
20
)
21
22
var gerdu raftproxy.RaftCache
23
var wg = sync.WaitGroup{}
24
25
var (
26
	loglevel = flag.String("log", "info",
27
		"log level can be any of values of 'panic', 'fatal', 'error', 'warn', 'info', 'debug', 'trace'")
28
	capacityStr = flag.String("capacity", "64MB",
29
		"The size of cache, once cache reached this capacity old values will evicted.\n"+
30
			"Specify a numerical value followed by one of the following units (not case sensitive)"+
31
			"\nK or KB: Kilobytes"+
32
			"\nM or MB: Megabytes"+
33
			"\nG or GB: Gigabytes"+
34
			"\nT or TB: Terabytes")
35
	httpPort  = flag.Int("httpport", 8080, "the http server port number")
36
	grpcPort  = flag.Int("grpcport", 8081, "the grpc server port number")
37
	mcdPort   = flag.Int("mcdport", 11211, "the memcached server port number")
38
	kind      = flag.String("type", "lru", "type of cache, lru or lfu, weak")
39
	protocols = flag.String("protocols", "",
40
		"protocol 'grpc' or 'mcd' (memcached), multiple comma-separated values, http is not optional")
41
	tlsKey   = flag.String("key", "", "SSL certificate private key")
42
	tlsCert  = flag.String("cert", "", "SSL certificate public key")
43
	host     = flag.String("host", "127.0.0.1", "The host that server listens")
44
	raftAddr = flag.String("raft", "127.0.0.1:12000", "Set Raft bind address")
45
	joinAddr = flag.String("join", "", "Set join address, if any")
46
	nodeID   = flag.String("id", "master", "Node ID")
47
	storage  = flag.String("storage", "", "Path to store log files and snapshot, will store in memory if not set")
48
49
	secure = len(*tlsCert) > 0 && len(*tlsKey) > 0
50
)
51
52
func main() {
53
	flag.Parse()
54
	setLogLevel()
55
	setCache()
56
	serve()
57
}
58
59
func serve() {
60
	*protocols = strings.ToLower(*protocols)
61
62
	wg.Add(1)
63
	go func() {
64
		defer wg.Done()
65
		httpHost := *host + ":" + strconv.Itoa(*httpPort)
66
		if secure {
67
			httpserver.HTTPServeTLS(httpHost, *tlsCert, *tlsKey, gerdu)
68
		} else {
69
			httpserver.HTTPServe(httpHost, gerdu)
70
		}
71
	}()
72
73
	if strings.Contains(*protocols, "grpc") {
74
		wg.Add(1)
75
		go func() {
76
			defer wg.Done()
77
			grpcHost := *host + ":" + strconv.Itoa(*grpcPort)
78
			if secure {
79
				grpcserver.GrpcServeTLS(grpcHost, *tlsCert, *tlsKey, gerdu)
80
			} else {
81
				grpcserver.GrpcServe(grpcHost, gerdu)
82
			}
83
		}()
84
	}
85
	if strings.Contains(*protocols, "mcd") {
86
		wg.Add(1)
87
		go func() {
88
			defer wg.Done()
89
			mcdHost := *host + ":" + strconv.Itoa(*mcdPort)
90
			if secure {
91
				log.Fatalln("Memcached protocol does not support TLS")
92
				os.Exit(1)
93
			}
94
			memcached.Serve(mcdHost, gerdu)
95
		}()
96
	}
97
98
	wg.Wait()
99
100
	terminate := make(chan os.Signal, 1)
101
	signal.Notify(terminate, os.Interrupt)
102
	<-terminate
103
	log.Println("Gerdu exiting")
104
}
105
106
func setCache() {
107
	capacity, err := bytesize.Parse(*capacityStr)
108
	if err != nil {
109
		log.Fatal("Invalid value for capacity", err.Error())
110
	}
111
112
	var c cache.UnImplementedCache
113
	if strings.ToLower(*kind) == "lru" {
114
		c = lrucache.NewCache(capacity)
115
	} else if strings.ToLower(*kind) == "lfu" {
116
		c = lfucache.NewCache(capacity)
117
	} else if strings.ToLower(*kind) == "weak" {
118
		c = weakcache.NewWeakCache()
119
	} else {
120
		log.Fatalf("Invalid value for type")
121
		os.Exit(1)
122
	}
123
	gerdu = raftproxy.NewRaftProxy(c, *raftAddr, *joinAddr, *nodeID)
124
	err = gerdu.OpenRaft(*storage)
125
	if err != nil {
126
		log.Fatalf("Cannot open raft peer connection: %s", err)
127
	}
128
129
}
130
131
func setLogLevel() {
132
	switch *loglevel {
133
	case "panic":
134
		log.SetLevel(log.PanicLevel)
135
	case "fatal":
136
		log.SetLevel(log.FatalLevel)
137
	case "error":
138
		log.SetLevel(log.ErrorLevel)
139
	case "warn":
140
		log.SetLevel(log.WarnLevel)
141
	case "info":
142
		log.SetLevel(log.InfoLevel)
143
	case "debug":
144
		log.SetLevel(log.DebugLevel)
145
	case "trace":
146
		log.SetReportCaller(true)
147
		log.SetLevel(log.DebugLevel)
148
	default:
149
		log.Fatalf("Invalid log level value %s\n", *loglevel)
150
		os.Exit(1)
151
	}
152
}
153