devlopment branch (#1736)

This commit is contained in:
zryfish
2020-01-02 20:52:00 +08:00
committed by GitHub
parent ff0ffe8650
commit eceadec69c
440 changed files with 61524 additions and 3699 deletions

60
pkg/simple/client/cache/cache.go vendored Normal file
View File

@@ -0,0 +1,60 @@
package cache
import "time"
type Interface interface {
// Keys retrieves all keys match the given pattern
Keys(pattern string) ([]string, error)
// Get retrieves the value of the given key, return error if key doesn't exist
Get(key string) (string, error)
// Set sets the value and living duration of the given key, zero duration means never expire
Set(key string, value string, duration time.Duration) error
// Del deletes the given key, no error returned if the key doesn't exists
Del(key string) error
// Exists checks the existence of a give key
Exists(key string) (bool, error)
// Expires updates object's expiration time, return err if key doesn't exist
Expire(key string, duration time.Duration) error
}
type simpleObject struct {
value string
expire time.Time
}
type SimpleCache struct {
store map[string]simpleObject
}
func NewSimpleCache() Interface {
return &SimpleCache{store: make(map[string]simpleObject)}
}
func (s *SimpleCache) Keys(pattern string) ([]string, error) {
panic("implement me")
}
func (s *SimpleCache) Set(key string, value string, duration time.Duration) error {
panic("implement me")
}
func (s *SimpleCache) Del(key string) error {
panic("implement me")
}
func (s *SimpleCache) Get(key string) (string, error) {
return "", nil
}
func (s *SimpleCache) Exists(key string) (bool, error) {
panic("implement me")
}
func (s *SimpleCache) Expire(key string, duration time.Duration) error {
panic("implement me")
}

46
pkg/simple/client/cache/options.go vendored Normal file
View File

@@ -0,0 +1,46 @@
package cache
import (
"github.com/go-redis/redis"
"github.com/spf13/pflag"
"kubesphere.io/kubesphere/pkg/utils/reflectutils"
)
type Options struct {
RedisURL string
}
// NewRedisOptions returns options points to nowhere,
// because redis is not required for some components
func NewRedisOptions() *Options {
return &Options{
RedisURL: "",
}
}
// Validate check options
func (r *Options) Validate() []error {
errors := make([]error, 0)
_, err := redis.ParseURL(r.RedisURL)
if err != nil {
errors = append(errors, err)
}
return errors
}
// ApplyTo apply to another options if it's a enabled option(non empty host)
func (r *Options) ApplyTo(options *Options) {
if r.RedisURL != "" {
reflectutils.Override(options, r)
}
}
// AddFlags add option flags to command line flags,
// if redis-host left empty, the following options will be ignored.
func (r *Options) AddFlags(fs *pflag.FlagSet, s *Options) {
fs.StringVar(&r.RedisURL, "redis-url", s.RedisURL, "Redis connection URL. If left blank, means redis is unnecessary, "+
"redis will be disabled. e.g. redis://:password@host:port/db")
}

87
pkg/simple/client/cache/redis.go vendored Normal file
View File

@@ -0,0 +1,87 @@
/*
Copyright 2019 The KubeSphere Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cache
import (
"github.com/go-redis/redis"
"k8s.io/klog"
"time"
)
type Client struct {
client *redis.Client
}
func NewRedisClient(option *Options, stopCh <-chan struct{}) (Interface, error) {
var r Client
options, err := redis.ParseURL(option.RedisURL)
if err != nil {
klog.Error(err)
return nil, err
}
if stopCh == nil {
klog.Warningf("no stop signal passed, may cause redis connections leaked")
}
r.client = redis.NewClient(options)
if err := r.client.Ping().Err(); err != nil {
klog.Error("unable to reach redis host", err)
r.client.Close()
return nil, err
}
// close redis in case of connection leak
if stopCh != nil {
go func() {
<-stopCh
if err := r.client.Close(); err != nil {
klog.Error(err)
}
}()
}
return &r, nil
}
func (r *Client) Get(key string) (string, error) {
return "", nil
}
func (r *Client) Keys(pattern string) ([]string, error) {
panic("implement me")
}
func (r *Client) Set(key string, value string, duration time.Duration) error {
panic("implement me")
}
func (r *Client) Del(key string) error {
panic("implement me")
}
func (r *Client) Exists(key string) (bool, error) {
panic("implement me")
}
func (r *Client) Expire(key string, duration time.Duration) error {
panic("implement me")
}