@@ -16,70 +16,69 @@ import (
16
16
"github.com/spf13/cobra"
17
17
)
18
18
19
- var MetricOpt struct {
20
- From string
21
- }
22
-
23
19
func init () {
24
20
cmdx .RootCmd .AddCommand (MetricsCmd )
25
- MetricsCmd .PersistentFlags ().StringVarP (& MetricOpt .From , "metric" , "m" , "" , "metrics from (file / remote url)" )
26
-
27
21
}
28
22
29
23
var MetricsCmd = & cobra.Command {
30
24
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> ... " ,
32
26
Run : func (cmd * cobra.Command , args []string ) {
33
- if MetricOpt .From == "" {
27
+ if len (args ) != 1 {
28
+ cmd .Help ()
34
29
return
35
30
}
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 " )
42
31
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 )
57
37
}
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 " )
62
39
63
- var rx [] * metrics. MetricMatcher
40
+ ot := output ()
64
41
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
71
50
} 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
74
57
}
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 )
75
80
}
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 " )
81
81
82
- res .Print (ot )
83
82
},
84
83
}
85
84
0 commit comments