Skip to content

Commit ad95e11

Browse files
committed
update: metrics command
1 parent ef0b621 commit ad95e11

File tree

1 file changed

+46
-47
lines changed

1 file changed

+46
-47
lines changed

cmd/metrics/parser.go

+46-47
Original file line numberDiff line numberDiff line change
@@ -16,70 +16,69 @@ import (
1616
"github.com/spf13/cobra"
1717
)
1818

19-
var MetricOpt struct {
20-
From string
21-
}
22-
2319
func init() {
2420
cmdx.RootCmd.AddCommand(MetricsCmd)
25-
MetricsCmd.PersistentFlags().StringVarP(&MetricOpt.From, "metric", "m", "", "metrics from (file / remote url)")
26-
2721
}
2822

2923
var MetricsCmd = &cobra.Command{
3024
Use: "metrics",
31-
Short: "parse kube stat metrics to readable resource",
25+
Short: "parse kube stat metrics to readable resource, use: k8spider metrics <file/url> <file/url> ...",
3226
Run: func(cmd *cobra.Command, args []string) {
33-
if MetricOpt.From == "" {
27+
if len(args) != 1 {
28+
cmd.Help()
3429
return
3530
}
36-
log.Debugf("parse metrics from %v", MetricOpt.From)
37-
rule := append(kube_state_metrics.DefaultMatchRules(), coredns.CoreDNSMatchRules()...)
38-
if err := rule.Compile(); err != nil {
39-
log.Fatalf("compile rule failed: %v", err)
40-
}
41-
log.Debugf("compiled rules completed, start to get resource \n")
4231

43-
ot := output()
44-
45-
var r io.Reader
46-
if strings.HasPrefix("http://", MetricOpt.From) || strings.HasPrefix("https://", MetricOpt.From) {
47-
resp, err := http.Get(MetricOpt.From)
48-
if err != nil {
49-
log.Fatalf("get metrics from %v failed: %v", MetricOpt.From, err)
50-
}
51-
defer resp.Body.Close()
52-
r = resp.Body
53-
} else {
54-
f, err := os.OpenFile(MetricOpt.From, os.O_RDONLY, 0666)
55-
if err != nil {
56-
log.Fatalf("open file %v failed: %v", MetricOpt.From, err)
32+
for _, From := range args {
33+
log.Debugf("parse metrics from %v", From)
34+
rule := append(kube_state_metrics.DefaultMatchRules(), coredns.CoreDNSMatchRules()...)
35+
if err := rule.Compile(); err != nil {
36+
log.Fatalf("compile rule failed: %v", err)
5737
}
58-
defer f.Close()
59-
r = f
60-
}
61-
log.Debugf("start to parse metrics line by line\n")
38+
log.Debugf("compiled rules completed, start to get resource \n")
6239

63-
var rx []*metrics.MetricMatcher
40+
ot := output()
6441

65-
scanner := bufio.NewScanner(r)
66-
for scanner.Scan() {
67-
line := scanner.Text()
68-
res, err := rule.Match(line)
69-
if err != nil {
70-
continue
42+
var r io.Reader
43+
if strings.HasPrefix("http://", From) || strings.HasPrefix("https://", From) {
44+
resp, err := http.Get(From)
45+
if err != nil {
46+
log.Fatalf("get metrics from %v failed: %v", From, err)
47+
}
48+
defer resp.Body.Close()
49+
r = resp.Body
7150
} else {
72-
log.Debugf("matched: %s", res.DumpString())
73-
rx = append(rx, res)
51+
f, err := os.OpenFile(From, os.O_RDONLY, 0666)
52+
if err != nil {
53+
log.Fatalf("open file %v failed: %v", From, err)
54+
}
55+
defer f.Close()
56+
r = f
7457
}
58+
log.Debugf("start to parse metrics line by line\n")
59+
60+
var rx []*metrics.MetricMatcher
61+
62+
scanner := bufio.NewScanner(r)
63+
for scanner.Scan() {
64+
line := scanner.Text()
65+
res, err := rule.Match(line)
66+
if err != nil {
67+
continue
68+
} else {
69+
log.Debugf("matched: %s", res.DumpString())
70+
rx = append(rx, res)
71+
}
72+
}
73+
if err := scanner.Err(); err != nil {
74+
log.Warnf("scan metrics failed and break out, reason: %v", err)
75+
}
76+
var res define.ResourceList = metrics.ConvertToResource(rx)
77+
log.Debugf("parse metrics completed, start to print result\n")
78+
79+
res.Print(ot)
7580
}
76-
if err := scanner.Err(); err != nil {
77-
log.Warnf("scan metrics failed and break out, reason: %v", err)
78-
}
79-
var res define.ResourceList = metrics.ConvertToResource(rx)
80-
log.Debugf("parse metrics completed, start to print result\n")
8181

82-
res.Print(ot)
8382
},
8483
}
8584

0 commit comments

Comments
 (0)