| |
@@ -10,12 +10,18 @@
|
| |
import json
|
| |
|
| |
import kiskadee.database
|
| |
+ from kiskadee.report import CppcheckReport, FlawfinderReport
|
| |
from kiskadee.runner import Runner
|
| |
import kiskadee.queue
|
| |
- from kiskadee.model import Package, Fetcher, Version
|
| |
+ from kiskadee.model import Package, Fetcher, Version, Report
|
| |
|
| |
RUNNING = True
|
| |
|
| |
+ REPORTERS = {
|
| |
+ 'cppcheck': CppcheckReport,
|
| |
+ 'flawfinder': FlawfinderReport
|
| |
+ }
|
| |
+
|
| |
|
| |
class Monitor:
|
| |
"""Provide kiskadee monitoring objects."""
|
| |
@@ -143,6 +149,36 @@
|
| |
self.session.commit()
|
| |
return _package
|
| |
|
| |
+ def _save_reports(self, analysis, pkg, analyzer_name):
|
| |
+ try:
|
| |
+ results = analysis['results']
|
| |
+ analyzer_report = REPORTERS[analyzer_name](results)
|
| |
+ _reports = Report()
|
| |
+ _reports.results = json.dumps(
|
| |
+ analyzer_report
|
| |
+ ._compute_reports(analyzer_name)
|
| |
+ )
|
| |
+ _reports.analysis_id = analysis['id']
|
| |
+ self.session.add(_reports)
|
| |
+ self.session.commit()
|
| |
+ kiskadee.logger.debug(
|
| |
+ "MONITOR: Saved analysis reports for {} package"
|
| |
+ .format(pkg["name"])
|
| |
+ )
|
| |
+ except KeyError as key:
|
| |
+ kiskadee.logger.debug(
|
| |
+ "ERROR: There's no reporter " +
|
| |
+ "to get reports from {} analyzer. ".format(key) +
|
| |
+ "Make shure to import or implement them."
|
| |
+ )
|
| |
+ except Exception as err:
|
| |
+ kiskadee.logger.debug(
|
| |
+ "MONITOR: Failed to get analysis reports to {} package"
|
| |
+ .format(pkg["name"])
|
| |
+ )
|
| |
+ kiskadee.logger.debug(err)
|
| |
+ return
|
| |
+
|
| |
def _save_analysis(self, pkg, analyzer, result, version):
|
| |
_analysis = kiskadee.model.Analysis()
|
| |
try:
|
| |
@@ -153,13 +189,19 @@
|
| |
_analysis.raw = json.loads(result)
|
| |
self.session.add(_analysis)
|
| |
self.session.commit()
|
| |
+ dict_analysis = {
|
| |
+ 'results': _analysis.raw['results'],
|
| |
+ 'id': _analysis.id
|
| |
+ }
|
| |
+ self._save_reports(dict_analysis, pkg, _analyzer.name)
|
| |
kiskadee.logger.debug(
|
| |
"MONITOR: Saved analysis done by {} for package: {}_{}"
|
| |
.format(analyzer, pkg["name"], pkg["version"])
|
| |
)
|
| |
+ return
|
| |
except Exception as err:
|
| |
kiskadee.logger.debug(
|
| |
- "MONITOR: The required analyzer was" +
|
| |
+ "MONITOR: The required analyzer was " +
|
| |
"not registered in kiskadee"
|
| |
)
|
| |
kiskadee.logger.debug(err)
|
| |
Merge Description
Changed
/analysis/<package>/<version>
endpoint to return an array of analysis.- In a single request, the result will be an json array that contains analysis of each analyzer that was previous configured to analyze the current package;
- On each analysis, the current json will return the number of each report type, like
style
,error
andwarning
.Observations