Files
sarif-cli/sarif_cli/status_writer.py
2022-12-12 17:15:49 -05:00

114 lines
3.1 KiB
Python

# csv status reporting
import csv
STATUS_NUM = 6
fieldnames = ['sarif_file', 'level', 'levelcode', 'message', "extra_info"]
warning_set = {
"success" : 0,
"zero_results" : 0,
"input_sarif_missing" : 0,
"input_sarif_extra" : 0
}
#
# Setup csv status writer
#
def setup_csv_writer(filename):
with open(filename+'.csv', 'w', newline='') as file:
# global in module as singleton alt
global global_filename
global_filename = filename
csv_writer = csv.DictWriter(file, fieldnames)
csv_writer.writeheader()
#
# csv status write - one line for errors
#
def csv_write(data):
with open(global_filename+'.csv', 'a', newline='') as file:
csv_writer = csv.DictWriter(file, fieldnames)
csv_writer.writerow(data)
#
# csv status write - all at once for type of warnings that can
# happen multiple times
# and want success message last
#
def csv_write_warnings():
with open(global_filename+'.csv', 'a', newline='') as file:
csv_writer = csv.DictWriter(file, fieldnames)
if warning_set["input_sarif_missing"] != 0:
csv_writer.writerow(input_sarif_missing)
#reset in case later different types of warnings can be accumulated
input_sarif_missing["extra_info"] = "Missing: "
warning_set["input_sarif_missing"] = 0
if warning_set["input_sarif_extra"] != 0:
csv_writer.writerow(input_sarif_extra)
#reset in case later different types of warnings can be accumulated
input_sarif_extra["extra_info"] = "Extra properties: "
warning_set["input_sarif_extra"] = 0
if warning_set["success"] != 0:
csv_writer.writerow(success)
def setup_status_filenames(sarif_file_name):
success["sarif_file"] = sarif_file_name
zero_results["sarif_file"] = sarif_file_name
input_sarif_extra["sarif_file"] = sarif_file_name
input_sarif_missing["sarif_file"] = sarif_file_name
unknown_sarif_parsing_shape["sarif_file"] = sarif_file_name
unknown["sarif_file"] = sarif_file_name
success = {
"sarif_file": "",
"level": "SUCCESS",
"levelcode": 0,
"message": "File successfully processed."
}
zero_results = {
"sarif_file": "",
"level": "WARNING",
"levelcode": 1,
"message": "Zero results seen in sarif file."
}
input_sarif_missing = {
"sarif_file": "",
"level": "WARNING",
"levelcode": 2,
"message": "Input sarif is missing neccesary properties.",
"extra_info" : "Missing: "
}
# file load error can happen on either sarif file or scan-spec.json
file_load_error = {
"sarif_file": "",
"level": "ERROR",
"levelcode": 3,
"message": "Could not load file."
}
input_sarif_extra = {
"sarif_file": "",
"level": "WARNING",
"levelcode": 4,
"message": "Input sarif contains extra unneccesary properties.",
"extra_info" : "Extra properties: "
}
unknown_sarif_parsing_shape = {
"sarif_file": "",
"level": "ERROR",
"levelcode": 5,
"message": "Error matching expected sarif format to actual input sarif shape.",
"extra_info" : ""
}
unknown = {
"sarif_file": "",
"level": "ERROR",
"levelcode": 6,
"message": "Error details currently undiagnosed. Assess log file for more information."
}