def execute()

in dusty/processors/quality_gate/processor.py [0:0]


    def execute(self):
        """ Run the processor """
        log.info("Checking quality gate status")
        thresholds = self.config.get("thresholds", dict())
        # Count issues by severity
        results_by_severity = dict()
        for item in self.context.findings:
            if item.get_meta("information_finding", False) or \
                    item.get_meta("false_positive_finding", False) or \
                    item.get_meta("excluded_finding", False):
                continue
            severity = item.get_meta("severity", SEVERITIES[-1])
            if severity not in results_by_severity:
                results_by_severity[severity] = 0
            results_by_severity[severity] += 1
        # Prepare stats data
        stats_data = dict()
        for severity in SEVERITIES:
            stats_data["total"] = "OK"
            stats_data[severity] = {
                "findings": results_by_severity.get(severity, "-"),
                "threshold": thresholds.get(severity, "-"),
                "status": "OK"
            }
        # Check quality gate
        for severity in results_by_severity:
            if severity not in thresholds:
                continue
            #
            severity_results = results_by_severity[severity]
            policy_threshold = thresholds[severity]
            #
            if severity_results > policy_threshold:
                log.warning(
                    "Quality gate failed: %s -> %d > %d",
                    severity, severity_results, policy_threshold
                )
                self.context.set_meta("fail_quality_gate", True)
                stats_data[severity]["status"] = "FAIL"
                stats_data["total"] = "FAIL"
        # Prepare stats
        stats = list()
        stats.append("============= Quality gate stats ============")
        stats.append("Severity  : {:<9} {:<5} {:<7} {:<4} {:<4}".format(
            *SEVERITIES
        ))
        stats.append("Findings  : {:<9} {:<5} {:<7} {:<4} {:<4}".format(
            *[stats_data[severity]["findings"] for severity in SEVERITIES]
        ))
        stats.append("Threshold : {:<9} {:<5} {:<7} {:<4} {:<4}".format(
            *[stats_data[severity]["threshold"] for severity in SEVERITIES]
        ))
        stats.append("Status    : {:<9} {:<5} {:<7} {:<4} {:<4}".format(
            *[stats_data[severity]["status"] for severity in SEVERITIES]
        ))
        stats.append("============= Quality gate: {:<4} ============".format(stats_data["total"]))
        self.context.set_meta("quality_gate_stats", stats)