Skip to content

Commit

Permalink
feat: write json output to local file on every policy check (datreeio…
Browse files Browse the repository at this point in the history
…#760)

* shtuyot yafot

* fix: remove unnecessary interactive check

* feat: write json output to local file on every policy check

* feat: write json output to local file on every policy check

* feat: write json output to local file on every policy check

* add isCI check before saving local json

* move formatted results to new function

Co-authored-by: myishay <myishay@gmail.com>
  • Loading branch information
hadar-co and myishay committed Aug 23, 2022
1 parent ed19375 commit 72c6d6e
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 20 deletions.
1 change: 1 addition & 0 deletions cmd/test/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,7 @@ func test(ctx *TestCommandContext, paths []string, testCommandData *TestCommandD
Verbose: testCommandData.Verbose,
PolicyName: testCommandData.Policy.Name,
K8sValidationWarnings: validationManager.k8sValidationWarningPerValidFile,
IsCI: ctx.CiContext.IsCI,
})

if evaluationResultData.PromptMessage != "" {
Expand Down
4 changes: 1 addition & 3 deletions pkg/evaluation/evaluator.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,9 +147,7 @@ func (e *Evaluator) Evaluate(policyCheckData PolicyCheckData) (PolicyCheckResult
formattedResults := FormattedResults{}
formattedResults.EvaluationResults = e.formatEvaluationResults(failedRulesByFiles, len(policyCheckData.FilesConfigurations), rulesCount)

if !policyCheckData.IsInteractiveMode {
formattedResults.NonInteractiveEvaluationResults = e.formatNonInteractiveEvaluationResults(formattedResults.EvaluationResults, failedRulesByFiles, policyCheckData.PolicyName, rulesCount)
}
formattedResults.NonInteractiveEvaluationResults = e.formatNonInteractiveEvaluationResults(formattedResults.EvaluationResults, failedRulesByFiles, policyCheckData.PolicyName, rulesCount)

return PolicyCheckResultData{formattedResults, rulesData, filesData, failedRulesByFiles, rulesCount}, nil
}
Expand Down
77 changes: 60 additions & 17 deletions pkg/evaluation/printer.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ type PrintResultsData struct {
Verbose bool
PolicyName string
K8sValidationWarnings validation.K8sValidationWarningPerValidFile
IsCI bool
}

type textOutputData struct {
Expand All @@ -54,7 +55,37 @@ type textOutputData struct {
k8sValidationWarnings validation.K8sValidationWarningPerValidFile
}

func SaveLastResultToJson(resultsData *PrintResultsData) {
homeDir, err := os.UserHomeDir()
if err != nil {
return
}

jsonOutput, err := GetjsonResult(resultsData)
if err != nil {
return
}

lastPolicyCheckPath := homeDir + "/.datree/lastPolicyCheck.json"
file, err := os.Create(lastPolicyCheckPath)
if err != nil {
return
}

defer file.Close()

byteOutput := []byte(jsonOutput)
err = os.WriteFile(lastPolicyCheckPath, byteOutput, 0644)
if err != nil {
return
}
}

func PrintResults(resultsData *PrintResultsData) error {
if resultsData.IsCI {
SaveLastResultToJson(resultsData)
}

resultsText, err := GetResultsText(resultsData)
if err != nil {
return err
Expand All @@ -67,25 +98,31 @@ func PrintResults(resultsData *PrintResultsData) error {
return nil
}

func getFormattedOutput(resultsData *PrintResultsData) FormattedOutput {
nonInteractiveEvaluationResults := resultsData.Results.NonInteractiveEvaluationResults
if nonInteractiveEvaluationResults == nil {
nonInteractiveEvaluationResults = &NonInteractiveEvaluationResults{}
}
formattedOutput := FormattedOutput{
PolicyValidationResults: nonInteractiveEvaluationResults.FormattedEvaluationResults,
PolicySummary: nonInteractiveEvaluationResults.PolicySummary,
EvaluationSummary: NonInteractiveEvaluationSummary{
ConfigsCount: resultsData.EvaluationSummary.ConfigsCount,
FilesCount: resultsData.EvaluationSummary.FilesCount,
PassedYamlValidationCount: resultsData.EvaluationSummary.PassedYamlValidationCount,
K8sValidation: resultsData.EvaluationSummary.K8sValidation,
PassedPolicyValidationCount: resultsData.EvaluationSummary.PassedPolicyCheckCount,
},
YamlValidationResults: resultsData.InvalidYamlFiles,
K8sValidationResults: resultsData.InvalidK8sFiles,
}

return formattedOutput
}

func GetResultsText(resultsData *PrintResultsData) (string, error) {
if IsFormattedOutputOption(resultsData.OutputFormat) {
nonInteractiveEvaluationResults := resultsData.Results.NonInteractiveEvaluationResults
if nonInteractiveEvaluationResults == nil {
nonInteractiveEvaluationResults = &NonInteractiveEvaluationResults{}
}
formattedOutput := FormattedOutput{
PolicyValidationResults: nonInteractiveEvaluationResults.FormattedEvaluationResults,
PolicySummary: nonInteractiveEvaluationResults.PolicySummary,
EvaluationSummary: NonInteractiveEvaluationSummary{
ConfigsCount: resultsData.EvaluationSummary.ConfigsCount,
FilesCount: resultsData.EvaluationSummary.FilesCount,
PassedYamlValidationCount: resultsData.EvaluationSummary.PassedYamlValidationCount,
K8sValidation: resultsData.EvaluationSummary.K8sValidation,
PassedPolicyValidationCount: resultsData.EvaluationSummary.PassedPolicyCheckCount,
},
YamlValidationResults: resultsData.InvalidYamlFiles,
K8sValidationResults: resultsData.InvalidK8sFiles,
}
formattedOutput := getFormattedOutput(resultsData)

switch resultsData.OutputFormat {
case "json":
Expand Down Expand Up @@ -114,6 +151,12 @@ func GetResultsText(resultsData *PrintResultsData) (string, error) {
})
}
}
func GetjsonResult(resultsData *PrintResultsData) (string, error) {

formattedOutput := getFormattedOutput(resultsData)

return getJsonOutput(&formattedOutput)
}

func getJsonOutput(formattedOutput *FormattedOutput) (string, error) {
jsonOutput, err := json.Marshal(formattedOutput)
Expand Down

0 comments on commit 72c6d6e

Please sign in to comment.