@@ -3,6 +3,9 @@ package cli
33import (
44 "encoding/json"
55 "fmt"
6+ "io/ioutil"
7+ "net/http"
8+ "os"
69
710 analyzer "github.com/replicatedhq/troubleshoot/pkg/analyze"
811 "github.com/replicatedhq/troubleshoot/pkg/convert"
@@ -14,11 +17,12 @@ import (
1417
1518func Analyze () * cobra.Command {
1619 cmd := & cobra.Command {
17- Use : "analyze" ,
20+ Use : "analyze [url]" ,
21+ Args : cobra .MinimumNArgs (1 ),
1822 Short : "analyze a support bundle" ,
19- Long : `... ` ,
23+ Long : `Analyze a support bundle using the Analyzer definitions provided ` ,
2024 PreRun : func (cmd * cobra.Command , args []string ) {
21- viper .BindPFlag ("url " , cmd .Flags ().Lookup ("url " ))
25+ viper .BindPFlag ("bundle " , cmd .Flags ().Lookup ("bundle " ))
2226 viper .BindPFlag ("output" , cmd .Flags ().Lookup ("output" ))
2327 viper .BindPFlag ("quiet" , cmd .Flags ().Lookup ("quiet" ))
2428 },
@@ -27,7 +31,13 @@ func Analyze() *cobra.Command {
2731
2832 logger .SetQuiet (v .GetBool ("quiet" ))
2933
30- result , err := analyzer .DownloadAndAnalyze (v .GetString ("url" ), "" )
34+ specPath := args [0 ]
35+ analyzerSpec , err := downloadAnalyzerSpec (specPath )
36+ if err != nil {
37+ return err
38+ }
39+
40+ result , err := analyzer .DownloadAndAnalyze (v .GetString ("bundle" ), analyzerSpec )
3141 if err != nil {
3242 return err
3343 }
@@ -59,8 +69,8 @@ func Analyze() *cobra.Command {
5969 },
6070 }
6171
62- cmd .Flags ().String ("url " , "" , "URL of the support bundle to analyze" )
63- cmd .MarkFlagRequired ("url " )
72+ cmd .Flags ().String ("bundle " , "" , "filename of the support bundle to analyze" )
73+ cmd .MarkFlagRequired ("bundle " )
6474 cmd .Flags ().String ("output" , "" , "output format: json, yaml" )
6575 cmd .Flags ().String ("compatibility" , "" , "output compatibility mode: support-bundle" )
6676 cmd .Flags ().MarkHidden ("compatibility" )
@@ -70,3 +80,38 @@ func Analyze() *cobra.Command {
7080
7181 return cmd
7282}
83+
84+ func downloadAnalyzerSpec (specPath string ) (string , error ) {
85+ specContent := ""
86+ if ! isURL (specPath ) {
87+ if _ , err := os .Stat (specPath ); os .IsNotExist (err ) {
88+ return "" , fmt .Errorf ("%s was not found" , specPath )
89+ }
90+
91+ b , err := ioutil .ReadFile (specPath )
92+ if err != nil {
93+ return "" , err
94+ }
95+
96+ specContent = string (b )
97+ } else {
98+ req , err := http .NewRequest ("GET" , specPath , nil )
99+ if err != nil {
100+ return "" , err
101+ }
102+ req .Header .Set ("User-Agent" , "Replicated_Analyzer/v1beta1" )
103+ resp , err := http .DefaultClient .Do (req )
104+ if err != nil {
105+ return "" , err
106+ }
107+ defer resp .Body .Close ()
108+
109+ body , err := ioutil .ReadAll (resp .Body )
110+ if err != nil {
111+ return "" , err
112+ }
113+
114+ specContent = string (body )
115+ }
116+ return specContent , nil
117+ }
0 commit comments