make controllerinformer interface private;
use named regexp groups
This commit is contained in:
parent
228639b839
commit
38e0ffecf7
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/zalando-incubator/postgres-operator/pkg/spec"
|
"github.com/zalando-incubator/postgres-operator/pkg/spec"
|
||||||
|
"github.com/zalando-incubator/postgres-operator/pkg/util"
|
||||||
"github.com/zalando-incubator/postgres-operator/pkg/util/config"
|
"github.com/zalando-incubator/postgres-operator/pkg/util/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -24,7 +25,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// ControllerInformer describes stats methods of a controller
|
// ControllerInformer describes stats methods of a controller
|
||||||
type ControllerInformer interface {
|
type controllerInformer interface {
|
||||||
GetConfig() *spec.ControllerConfig
|
GetConfig() *spec.ControllerConfig
|
||||||
GetOperatorConfig() *config.Config
|
GetOperatorConfig() *config.Config
|
||||||
GetStatus() *spec.ControllerStatus
|
GetStatus() *spec.ControllerStatus
|
||||||
|
|
@ -40,7 +41,7 @@ type ControllerInformer interface {
|
||||||
type Server struct {
|
type Server struct {
|
||||||
logger *logrus.Entry
|
logger *logrus.Entry
|
||||||
http http.Server
|
http http.Server
|
||||||
controller ControllerInformer
|
controller controllerInformer
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -54,7 +55,7 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
// New creates new HTTP API server
|
// New creates new HTTP API server
|
||||||
func New(controller ControllerInformer, port int, logger *logrus.Logger) *Server {
|
func New(controller controllerInformer, port int, logger *logrus.Logger) *Server {
|
||||||
s := &Server{
|
s := &Server{
|
||||||
logger: logger.WithField("pkg", "apiserver"),
|
logger: logger.WithField("pkg", "apiserver"),
|
||||||
controller: controller,
|
controller: controller,
|
||||||
|
|
@ -140,24 +141,24 @@ func (s *Server) clusters(w http.ResponseWriter, req *http.Request) {
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
if matches := clusterStatusURL.FindAllStringSubmatch(req.URL.Path, -1); matches != nil {
|
if matches := util.FindNamedStringSubmatch(clusterStatusURL, req.URL.Path); matches != nil {
|
||||||
resp, err = s.controller.ClusterStatus(matches[0][1], matches[0][2])
|
resp, err = s.controller.ClusterStatus(matches["team"], matches["cluster"])
|
||||||
} else if matches := teamURL.FindAllStringSubmatch(req.URL.Path, -1); matches != nil {
|
} else if matches := util.FindNamedStringSubmatch(teamURL, req.URL.Path); matches != nil {
|
||||||
teamClusters := s.controller.TeamClusterList()
|
teamClusters := s.controller.TeamClusterList()
|
||||||
clusters, found := teamClusters[matches[0][1]]
|
clusters, found := teamClusters[matches["team"]]
|
||||||
if !found {
|
if !found {
|
||||||
s.respond(nil, fmt.Errorf("could not find clusters for the team"), w)
|
s.respond(nil, fmt.Errorf("could not find clusters for the team"), w)
|
||||||
}
|
}
|
||||||
|
|
||||||
clusterNames := make([]string, 0)
|
clusterNames := make([]string, 0)
|
||||||
for _, cluster := range clusters {
|
for _, cluster := range clusters {
|
||||||
clusterNames = append(clusterNames, cluster.Name[len(matches[0][1])+1:])
|
clusterNames = append(clusterNames, cluster.Name[len(matches["team"])+1:])
|
||||||
}
|
}
|
||||||
|
|
||||||
s.respond(clusterNames, nil, w)
|
s.respond(clusterNames, nil, w)
|
||||||
return
|
return
|
||||||
} else if matches := clusterLogsURL.FindAllStringSubmatch(req.URL.Path, -1); matches != nil {
|
} else if matches := util.FindNamedStringSubmatch(clusterLogsURL, req.URL.Path); matches != nil {
|
||||||
resp, err = s.controller.ClusterLogs(matches[0][1], matches[0][2])
|
resp, err = s.controller.ClusterLogs(matches["team"], matches["cluster"])
|
||||||
} else if req.URL.Path == clustersURL {
|
} else if req.URL.Path == clustersURL {
|
||||||
res := make(map[string][]string)
|
res := make(map[string][]string)
|
||||||
for team, clusters := range s.controller.TeamClusterList() {
|
for team, clusters := range s.controller.TeamClusterList() {
|
||||||
|
|
@ -181,15 +182,16 @@ func (s *Server) workers(w http.ResponseWriter, req *http.Request) {
|
||||||
resp interface{}
|
resp interface{}
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
if workerAllQueue.MatchString(req.URL.Path) {
|
if workerAllQueue.MatchString(req.URL.Path) {
|
||||||
s.allQueues(w, req)
|
s.allQueues(w, req)
|
||||||
return
|
return
|
||||||
} else if matches := workerLogsURL.FindAllStringSubmatch(req.URL.Path, -1); matches != nil {
|
} else if matches := util.FindNamedStringSubmatch(workerLogsURL, req.URL.Path); matches != nil {
|
||||||
workerID, _ := strconv.Atoi(matches[0][1])
|
workerID, _ := strconv.Atoi(matches["id"])
|
||||||
|
|
||||||
resp, err = s.controller.WorkerLogs(uint32(workerID))
|
resp, err = s.controller.WorkerLogs(uint32(workerID))
|
||||||
} else if matches := workerEventsQueueURL.FindAllStringSubmatch(req.URL.Path, -1); matches != nil {
|
} else if matches := util.FindNamedStringSubmatch(workerEventsQueueURL, req.URL.Path); matches != nil {
|
||||||
workerID, _ := strconv.Atoi(matches[0][1])
|
workerID, _ := strconv.Atoi(matches["id"])
|
||||||
|
|
||||||
resp, err = s.controller.ListQueue(uint32(workerID))
|
resp, err = s.controller.ListQueue(uint32(workerID))
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@ import (
|
||||||
"github.com/motomux/pretty"
|
"github.com/motomux/pretty"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/zalando-incubator/postgres-operator/pkg/spec"
|
"github.com/zalando-incubator/postgres-operator/pkg/spec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -71,3 +73,29 @@ OUTER:
|
||||||
}
|
}
|
||||||
return result, len(result) == 0
|
return result, len(result) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func FindNamedStringSubmatch(r *regexp.Regexp, s string) map[string]string {
|
||||||
|
matches := r.FindStringSubmatch(s)
|
||||||
|
grNames := r.SubexpNames()
|
||||||
|
|
||||||
|
if matches == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
groupMatches := 0
|
||||||
|
res := make(map[string]string, len(grNames))
|
||||||
|
for i, n := range grNames {
|
||||||
|
if n == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
res[n] = matches[i]
|
||||||
|
groupMatches++
|
||||||
|
}
|
||||||
|
|
||||||
|
if groupMatches == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,8 @@ import (
|
||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/zalando-incubator/postgres-operator/pkg/spec"
|
"github.com/zalando-incubator/postgres-operator/pkg/spec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -44,6 +46,17 @@ var substractTest = []struct {
|
||||||
{[]string{"a", "b", "c", "d"}, []string{"a", "bb", "c", "d"}, []string{"b"}, false},
|
{[]string{"a", "b", "c", "d"}, []string{"a", "bb", "c", "d"}, []string{"b"}, false},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var substringMatch = []struct {
|
||||||
|
inRegex *regexp.Regexp
|
||||||
|
inStr string
|
||||||
|
out map[string]string
|
||||||
|
}{
|
||||||
|
{regexp.MustCompile(`aaaa (?P<num>\d+) bbbb`), "aaaa 123 bbbb", map[string]string{"num": "123"}},
|
||||||
|
{regexp.MustCompile(`aaaa (?P<num>\d+) bbbb`), "a aa 123 bbbb", nil},
|
||||||
|
{regexp.MustCompile(`aaaa \d+ bbbb`), "aaaa 123 bbbb", nil},
|
||||||
|
{regexp.MustCompile(`aaaa (\d+) bbbb`), "aaaa 123 bbbb", nil},
|
||||||
|
}
|
||||||
|
|
||||||
func TestRandomPassword(t *testing.T) {
|
func TestRandomPassword(t *testing.T) {
|
||||||
const pwdLength = 10
|
const pwdLength = 10
|
||||||
pwd := RandomPassword(pwdLength)
|
pwd := RandomPassword(pwdLength)
|
||||||
|
|
@ -100,3 +113,12 @@ func TestSubstractSlices(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFindNamedStringSubmatch(t *testing.T) {
|
||||||
|
for _, tt := range substringMatch {
|
||||||
|
actualRes := FindNamedStringSubmatch(tt.inRegex, tt.inStr)
|
||||||
|
if !reflect.DeepEqual(actualRes, tt.out) {
|
||||||
|
t.Errorf("FindNamedStringSubmatch expected: %#v, got: %#v", tt.out, actualRes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue