@@ -4,12 +4,9 @@ import (
44 "flag"
55 "fmt"
66 "os"
7- "path/filepath"
87 "strings"
98
10- "github.com/stackrox/sensor-metrics-analyzer/internal/evaluator"
11- "github.com/stackrox/sensor-metrics-analyzer/internal/loadlevel"
12- "github.com/stackrox/sensor-metrics-analyzer/internal/parser"
9+ "github.com/stackrox/sensor-metrics-analyzer/internal/analyzer"
1310 "github.com/stackrox/sensor-metrics-analyzer/internal/reporter"
1411 "github.com/stackrox/sensor-metrics-analyzer/internal/rules"
1512 "github.com/stackrox/sensor-metrics-analyzer/internal/tui"
@@ -87,61 +84,18 @@ func analyzeCommand() {
8784 }
8885 }
8986
90- // Extract cluster name from filename if not provided
91- if * clusterName == "" {
92- * clusterName = extractClusterName (metricsFile )
93- }
94-
95- // Load load detection rules
96- fmt .Fprintf (os .Stderr , "Loading load detection rules from %s...\n " , * loadLevelDir )
97- loadRules , err := rules .LoadLoadDetectionRules (* loadLevelDir )
98- if err != nil {
99- fmt .Fprintf (os .Stderr , "Warning: Failed to load load detection rules: %v\n " , err )
100- loadRules = []rules.LoadDetectionRule {}
101- }
102-
103- // Load evaluation rules
104- fmt .Fprintf (os .Stderr , "Loading rules from %s...\n " , * rulesDir )
105- rulesList , err := rules .LoadRules (* rulesDir )
106- if err != nil {
107- fmt .Fprintf (os .Stderr , "Failed to load rules: %v\n " , err )
108- os .Exit (1 )
109- }
110- fmt .Fprintf (os .Stderr , "Loaded %d rules\n " , len (rulesList ))
111-
112- // Parse metrics
113- fmt .Fprintf (os .Stderr , "Parsing metrics from %s...\n " , metricsFile )
114- metrics , err := parser .ParseFile (metricsFile )
87+ report , err := analyzer .AnalyzeFile (metricsFile , analyzer.Options {
88+ RulesDir : * rulesDir ,
89+ LoadLevelDir : * loadLevelDir ,
90+ ClusterName : * clusterName ,
91+ LoadLevelOverride : * loadLevelOverride ,
92+ ACSVersionOverride : * acsVersionOverride ,
93+ Logger : os .Stderr ,
94+ })
11595 if err != nil {
116- fmt .Fprintf (os .Stderr , "Failed to parse metrics: %v\n " , err )
96+ fmt .Fprintf (os .Stderr , "Failed to analyze metrics: %v\n " , err )
11797 os .Exit (1 )
11898 }
119- fmt .Fprintf (os .Stderr , "Parsed %d metrics\n " , len (metrics ))
120-
121- // Detect ACS version
122- acsVersion := * acsVersionOverride
123- if acsVersion == "" {
124- if detected , ok := metrics .DetectACSVersion (); ok {
125- acsVersion = detected
126- fmt .Fprintf (os .Stderr , "Detected ACS version: %s\n " , acsVersion )
127- } else {
128- fmt .Fprintf (os .Stderr , "Warning: Could not detect ACS version\n " )
129- }
130- }
131-
132- // Detect load level
133- loadDetector := loadlevel .NewDetector (loadRules )
134- detectedLoadLevel , err := loadlevel .DetectWithOverride (metrics , loadDetector , rules .LoadLevel (* loadLevelOverride ))
135- if err != nil {
136- fmt .Fprintf (os .Stderr , "Warning: Load level detection failed: %v\n " , err )
137- detectedLoadLevel = rules .LoadLevelMedium
138- }
139- fmt .Fprintf (os .Stderr , "Detected load level: %s\n " , detectedLoadLevel )
140-
141- // Evaluate all rules
142- fmt .Fprintf (os .Stderr , "Evaluating rules...\n " )
143- report := evaluator .EvaluateAllRules (rulesList , metrics , detectedLoadLevel , acsVersion )
144- report .ClusterName = * clusterName
14599
146100 // Generate report
147101 var outputContent string
@@ -165,10 +119,12 @@ func analyzeCommand() {
165119 return
166120 }
167121 case "markdown" :
168- outputContent = reporter .GenerateMarkdown (report , * templatePath )
169- if outputContent == "" {
170- fmt .Fprintf (os .Stderr , "Warning: Markdown generation returned empty content\n " )
122+ markdown , mdErr := reporter .GenerateMarkdown (report , * templatePath )
123+ if mdErr != nil {
124+ fmt .Fprintf (os .Stderr , "Markdown generation failed: %v\n " , mdErr )
125+ os .Exit (1 )
171126 }
127+ outputContent = markdown
172128 default :
173129 fmt .Fprintf (os .Stderr , "Unknown format: %s\n " , * format )
174130 os .Exit (1 )
@@ -255,13 +211,7 @@ func listRulesCommand() {
255211}
256212
257213func extractClusterName (filename string ) string {
258- base := filepath .Base (filename )
259- // Remove extension
260- name := strings .TrimSuffix (base , filepath .Ext (base ))
261- // Remove common prefixes/suffixes
262- name = strings .TrimSuffix (name , "-sensor-metrics" )
263- name = strings .TrimSuffix (name , "-metrics" )
264- return name
214+ return analyzer .ExtractClusterName (filename )
265215}
266216
267217func printUsage () {
0 commit comments