Commit 4fe40a57 authored by Ondřej Borýsek's avatar Ondřej Borýsek
Browse files

Upload small findings first

parent 70c92389
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ from flask import Blueprint, render_template, request, redirect, url_for, curren
from werkzeug.utils import secure_filename

import config
from helpers.object_size import get_size
from helpers.flask_response import basic_msg
from helpers.template_grouping import TemplateGrouping
from helpers.time_helper import current_timestamp
@@ -530,7 +531,8 @@ def upload_scan_findings_to_pwndoc(folder_name: str) -> bool:
    existing_raw_findings = get_findings_from_audit(ps.audit_id)
    new_or_changed_count = 0

    findings.sort(key=lambda x: sys.getsizeof(x))  # This sorts (roughly) by ascending size, so that one big finding doesn't block upload of many small findings.
    findings.sort(key=lambda x: get_size(x))  # This sorts (roughly) by ascending size, so that one big finding doesn't block upload of many small findings.
    test_size = [get_size(x) for x in findings]  # sys.getsizeof(x) doesn't work on nested and custom objects

    not_changed_findings = set()
    for single_finding in tqdm(findings, desc="Converting findings to PwnDoc format and upserting"):

helpers/object_size.py

0 → 100644
+23 −0
Original line number Diff line number Diff line
import sys


# https://gist.github.com/bosswissam/a369b7a31d9dcab46b4a034be7d263b2
def get_size(obj, seen=None):
    """Recursively finds size of objects"""
    size = sys.getsizeof(obj)
    if seen is None:
        seen = set()
    obj_id = id(obj)
    if obj_id in seen:
        return 0
    # Important mark as seen *before* entering recursion to gracefully handle
    # self-referential objects
    seen.add(obj_id)
    if isinstance(obj, dict):
        size += sum([get_size(v, seen) for v in obj.values()])
        size += sum([get_size(k, seen) for k in obj.keys()])
    elif hasattr(obj, '__dict__'):
        size += get_size(obj.__dict__, seen)
    elif hasattr(obj, '__iter__') and not isinstance(obj, (str, bytes, bytearray)):
        size += sum([get_size(i, seen) for i in obj])
    return size