Skip to content

Commit

Permalink
*: Move FamilyStringer to metric pkg due to
Browse files Browse the repository at this point in the history
cyclic dependency.
  • Loading branch information
lilic committed Jan 21, 2019
1 parent ef80c78 commit d1319c4
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 19 deletions.
4 changes: 2 additions & 2 deletions internal/collector/testutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ import (
"sort"
"strings"

"k8s.io/kube-state-metrics/pkg/metrics_store"
"k8s.io/kube-state-metrics/pkg/metric"
)

type generateMetricsTestCase struct {
Obj interface{}
MetricNames []string
Want string
Func func(interface{}) []metricsstore.FamilyStringer
Func func(interface{}) []metric.FamilyStringer
}

func (testCase *generateMetricsTestCase) run() error {
Expand Down
6 changes: 6 additions & 0 deletions pkg/metric/family.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,9 @@ func (f Family) String() string {

return b.String()
}

// FamilyStringer represents a metric family that can be converted to its string
// representation.
type FamilyStringer interface {
String() string
}
8 changes: 3 additions & 5 deletions pkg/metric/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ package metric

import (
"strings"

metricsstore "k8s.io/kube-state-metrics/pkg/metrics_store"
)

// FamilyGenerator provides everything needed to generate a metric family with a
Expand Down Expand Up @@ -60,15 +58,15 @@ func ExtractMetricFamilyHeaders(families []FamilyGenerator) []string {

// ComposeMetricGenFuncs takes a slice of metric families and returns a function
// that composes their metric generation functions into a single one.
func ComposeMetricGenFuncs(families []FamilyGenerator) func(obj interface{}) []metricsstore.FamilyStringer {
func ComposeMetricGenFuncs(families []FamilyGenerator) func(obj interface{}) []FamilyStringer {
funcs := []func(obj interface{}) Family{}

for _, f := range families {
funcs = append(funcs, f.GenerateFunc)
}

return func(obj interface{}) []metricsstore.FamilyStringer {
families := make([]metricsstore.FamilyStringer, len(funcs))
return func(obj interface{}) []FamilyStringer {
families := make([]FamilyStringer, len(funcs))

for i, f := range funcs {
families[i] = f(obj)
Expand Down
11 changes: 3 additions & 8 deletions pkg/metrics_store/metrics_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,9 @@ import (

"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/types"
"k8s.io/kube-state-metrics/pkg/metric"
)

// FamilyStringer represents a metric family that can be converted to its string
// representation.
type FamilyStringer interface {
String() string
}

// MetricsStore implements the k8s.io/kubernetes/client-go/tools/cache.Store
// interface. Instead of storing entire Kubernetes objects, it stores metrics
// generated based on those objects.
Expand All @@ -32,11 +27,11 @@ type MetricsStore struct {

// generateMetricsFunc generates metrics based on a given Kubernetes object
// and returns them grouped by metric family.
generateMetricsFunc func(interface{}) []FamilyStringer
generateMetricsFunc func(interface{}) []metric.FamilyStringer
}

// NewMetricsStore returns a new MetricsStore
func NewMetricsStore(headers []string, generateFunc func(interface{}) []FamilyStringer) *MetricsStore {
func NewMetricsStore(headers []string, generateFunc func(interface{}) []metric.FamilyStringer) *MetricsStore {
return &MetricsStore{
generateMetricsFunc: generateFunc,
headers: headers,
Expand Down
8 changes: 4 additions & 4 deletions pkg/metrics_store/metrics_store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,21 @@ import (
func TestObjectsSameNameDifferentNamespaces(t *testing.T) {
serviceIDS := []string{"a", "b"}

genFunc := func(obj interface{}) []FamilyStringer {
genFunc := func(obj interface{}) []metric.FamilyStringer {
o, err := meta.Accessor(obj)
if err != nil {
t.Fatal(err)
}

metric := metric.Metric{
m := metric.Metric{
Name: "kube_service_info",
LabelKeys: []string{"uid"},
LabelValues: []string{string(o.GetUID())},
Value: 1,
}
metricFamily := metric.Family{&metric}
metricFamily := metric.Family{&m}

return []FamilyStringer{metricFamily}
return []metric.FamilyStringer{metricFamily}
}

ms := NewMetricsStore([]string{"Information about service."}, genFunc)
Expand Down

0 comments on commit d1319c4

Please sign in to comment.