Beispiel #1
0
 class Usage(jsl.Document):
     class Options:
         description = "Stack usage"
         definition_id = "stack_usage"
     average_usage = jsl.StringField(required=True)
     low_public_usage_components = jsl.NumberField(required=True)
     redhat_distributed_components = jsl.NumberField(required=True)
Beispiel #2
0
class ComponentInfo(jsl.Document):
    class Options:
        description = "Information about a single component"
        definition_id = "component_info"

    blackduck_details = jsl.DocumentField(BlackduckDetails, as_ref=True, required=True)
    cve_details = jsl.ArrayField(jsl.DocumentField(CVEDetail, as_ref=True), required=True)
    ecosystem = jsl.StringField(required=True)
    github_details = jsl.DocumentField(GithubDetails, as_ref=True, required=True)
    id = jsl.StringField(required=True)
    latest_version = jsl.OneOfField([jsl.StringField(), jsl.NullField()], required=True)
    licenses = jsl.ArrayField(jsl.StringField(), required=True)
    name = jsl.StringField(required=True)
    package_dependents_count = jsl.NumberField(required=True)
    version = jsl.StringField(required=True)

    with jsl.Scope(lambda v: v >= ROLE_v1_1_0) as added_in_v1_1_0:
        added_in_v1_1_0.dependents_count = jsl.NumberField(required=True)

    with jsl.Scope(lambda v: v >= ROLE_v1_2_0) as added_in_v1_2_0:
        added_in_v1_2_0.relative_usage = jsl.StringField(required=True)

    with jsl.Scope(lambda v: v >= ROLE_v2_0_0) as added_in_v2_0_0:
        added_in_v2_0_0.redhat_usage = jsl.DocumentField(RedHatUsage, as_ref=True, required=True)

    with jsl.Scope(lambda v: v >= ROLE_v2_0_3) as added_in_v2_0_3:
        added_in_v2_0_3.metadata = jsl.DocumentField(ComponentMetadata, as_ref=True, required=True)
Beispiel #3
0
 class Metadata(jsl.Document):
     class Options:
         description = "Data from metadata file"
         definition_id = "metadata"
     components_with_dependency_lock_file = jsl.NumberField(required=True)
     components_with_tests = jsl.NumberField(required=True)
     required_engines = jsl.DocumentField(ComponentMetadataEngines, as_ref=True, required=True)
class ComponentAnalysis(JSLSchemaBaseWithRelease):
    class Options(object):
        definition_id = "component_analysis"
        description = "Software component analysis"

    ecosystem = jsl.StringField(
        description="Language ecosystem providing the component",
        required=True)
    package = jsl.StringField(description="Component name", required=True)
    version = jsl.StringField(description="Component version", required=True)
    latest_version = jsl.OneOfField(
        [jsl.StringField(), jsl.NullField()],
        description=
        "Latest version available of this component (null if unknown)",
        required=True)
    started_at = jsl.DateTimeField(
        description="Date/time component analysis was started", required=True)
    finished_at = jsl.DateTimeField(
        description="Date/time component analysis was finished", required=True)
    access_count = jsl.NumberField(
        description="Number of times this component has been queried",
        required=True)
    dependents_count = jsl.Var({
        lambda v: v >= ROLE_v1_1_0:
        jsl.NumberField(description="Number of dependent GitHub projects",
                        required=True)
    })

    analyses = jsl.DocumentField(AnalysisSet, as_ref=True, required=True)
    package_info = jsl.DictField(
        description="Additional information related to the package",
        additional_properties=True,
        required=False)
    class Year(jsl.Document):
        class Options:
            description = "GitHub Last Year Metrics"
            definition_id = "github_last_year_metrics"

        opened = jsl.NumberField(required=True)
        closed = jsl.NumberField(required=True)
Beispiel #6
0
class StackAnalysisReport(jsl.Document):
    """Class with the schema definition based on JSL domain specific language."""
    class Options:
        """A container for options."""

        description = "Stack analysis report with aggregated data"
        definition_id = "stack_analysis_report"

    with jsl.Scope(lambda v: v >= ROLE_v2_0_0) as v2_0_0:
        v2_0_0.manifest_name = jsl.StringField(required=True)
        v2_0_0.ecosystem = jsl.StringField(required=True)
        v2_0_0.cvss = jsl.NumberField(required=True)
        v2_0_0.popularity = jsl.DocumentField(Popularity,
                                              as_ref=True,
                                              Required=True)
        v2_0_0.usage = jsl.DocumentField(Usage, as_ref=True, Required=True)
    with jsl.Scope(lambda v: v >= ROLE_v2_0_2) as v2_0_2:
        v2_0_2.recommendation = jsl.DocumentField(Recommendation, as_ref=True)
    with jsl.Scope(lambda v: v >= ROLE_v2_0_3) as added_in_v2_0_3:
        added_in_v2_0_3.metadata = jsl.DocumentField(Metadata,
                                                     as_ref=True,
                                                     required=True)

    analyzed_components = jsl.NumberField(required=True)
    total_security_issues = jsl.NumberField(required=True)
    total_licenses = jsl.NumberField(required=True)
    components_with_security_issues = jsl.ArrayField(jsl.StringField(),
                                                     required=True)
    distinct_licenses = jsl.ArrayField(jsl.StringField(), required=True)
    components = jsl.ArrayField(jsl.DocumentField(ComponentInfo, as_ref=True),
                                required=True)
    class Month(jsl.Document):
        class Options:
            description = "GitHub Last Month Metrics"
            definition_id = "github_last_month_metrics"

        opened = jsl.NumberField(required=True)
        closed = jsl.NumberField(required=True)
Beispiel #8
0
    class Year(jsl.Document):
        """Class with the schema definition based on JSL domain specific language."""
        class Options:
            """A container for options."""

            description = "GitHub Last Year Metrics"
            definition_id = "github_last_year_metrics"

        opened = jsl.NumberField(required=True)
        closed = jsl.NumberField(required=True)
Beispiel #9
0
class GithubDetails(jsl.Document):
    class Options:
        description = "Github information for a single component"
        definition_id = "component_github_info"

    forks_count = jsl.NumberField(required=True)
    stargazers_count = jsl.NumberField(required=True)
    with jsl.Scope(lambda v: v >= ROLE_v2_0_0) as v2_0_0:
        v2_0_0.issues = jsl.DocumentField(GithubMetrics, as_ref=True, required=True)
        v2_0_0.pull_requests = jsl.DocumentField(GithubMetrics, as_ref=True, required=True)
class CodeMetricsSummary(jsl.Document):
    class Options(object):
        definition_id = "code_metrics_summary"
        description = "Summary computed by CodeMetrics worker"

    blank_lines = jsl.NumberField(required=True)
    code_lines = jsl.NumberField(required=True)
    comment_lines = jsl.NumberField(required=True)
    total_files = jsl.NumberField(required=True)
    total_lines = jsl.NumberField(required=True)
Beispiel #11
0
def dataclass_field_to_jsl_field(prop: dataclasses.Field,
                                 nullable=False) -> jsl.BaseField:
    t = dataclass_check_type(prop, date)
    if t:
        return jsl.DateTimeField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, datetime)
    if t:
        return jsl.DateTimeField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, str)
    if t:
        return jsl.StringField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, int)
    if t:
        return jsl.IntField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, float)
    if t:
        return jsl.NumberField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, bool)
    if t:
        return jsl.BooleanField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, dict)
    if t:
        return jsl.DictField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, ISchema)
    if t:
        subtype = jsonobject_to_jsl(t['schema'], nullable=nullable)
        return jsl.DocumentField(name=prop.name,
                                 document_cls=subtype,
                                 required=t['required'])

    t = dataclass_check_type(prop, list)
    if t:
        return jsl.ArrayField(name=prop.name, required=t['required'])

    t = dataclass_check_type(prop, typing.List)
    if t:
        if 'schema' not in t.keys():
            return jsl.ArrayField(name=prop.name, required=t['required'])

        if issubclass(t['schema'], ISchema):
            subtype = jsl.DocumentField(
                document_cls=jsonobject_to_jsl(t['schema'], nullable=nullable))
        elif t['schema'] == str:
            subtype = jsl.StringField(name=prop.name)
        elif t['schema'] == int:
            subtype = jsl.IntField(name=prop.name)
        elif t['schema'] == float:
            subtype = jsl.NumberField(name=prop.name)
        elif t['schema'] == dict:
            subtype = jsl.DictField(name=prop.name)
        else:
            raise KeyError(t['schema'])
        return jsl.ArrayField(items=subtype, required=t['required'])

    raise KeyError(prop)
class CryptoAlgoDetail(jsl.Document):
    class Options(object):
        definition_id = "cryptoalgo_detail"

    crypto = jsl.StringField(required=True)
    file = jsl.StringField(required=True)
    matched_lines = jsl.NumberField()
    matchpercent = jsl.NumberField()
    matchtype = jsl.StringField(enum=["content", "filename"], required=True)
    sample_file = jsl.StringField()
    samples_lines = jsl.NumberField()
Beispiel #13
0
    class Usage(jsl.Document):
        """Class with the schema definition based on JSL domain specific language."""
        class Options:
            """A container for options."""

            description = "Stack usage"
            definition_id = "stack_usage"

        average_usage = jsl.StringField(required=True)
        low_public_usage_components = jsl.NumberField(required=True)
        redhat_distributed_components = jsl.NumberField(required=True)
Beispiel #14
0
 class SimilarStacks(jsl.Document):
     class Options:
         description = "Stack Similarity Information"
         definition_id = "stack_similarity_information"
     analysis = jsl.DocumentField(SimilarityAnalysis, as_ref=True, required=True)
     similarity = jsl.NumberField(required=True)
     stack_id = jsl.NumberField(required=True)
     uri = jsl.StringField(required=True)
     with jsl.Scope(lambda v: v >= ROLE_v2_1_4) as v2_1_4:
         v2_1_4.source = jsl.StringField(required=True)
         v2_1_4.usage = jsl.NumberField(required=True)
         v2_1_4.original_score = jsl.NumberField(required=True)
class CodeMetricsLanguage(jsl.Document):
    class Options(object):
        definition_id = "languages"
        description = "Generic language specific statistics"

    blank_lines = jsl.NumberField(required=True)
    code_lines = jsl.NumberField(required=True)
    comment_lines = jsl.NumberField(required=True)
    files_count = jsl.NumberField(required=True)
    language = jsl.StringField(required=True)
    # Might be language-specific once we add support for new languages, leave it generic for now
    metrics = jsl.DictField(required=False, additional_properties=True)
Beispiel #16
0
    class RegisteredSRPM(jsl.Document):
        class Options:
            description = "Red Hat internally registered SRPM details a single component"
            definition_id = "component_redhat_registered_srpms"

        patch_count = jsl.NumberField(required=True)
        epoch = jsl.NumberField(required=True)
        published_in = jsl.ArrayField(jsl.StringField(), required=True)
        modified_line_count = jsl.NumberField(required=True)
        package_name = jsl.StringField(required=True)
        modified_file_count = jsl.NumberField(required=True)
        version = jsl.StringField(required=True)
        release = jsl.StringField(required=True)
Beispiel #17
0
class CDTTableImportParamsSchemaCommon(jsl.Document):
    comment = jsl.StringField()
    subtrials = jsl.ArrayField(items=SubTrial,
                               unique_items=True,
                               required=True,
                               min_items=1)
    margin_before = jsl.NumberField(
        minimum=0, required=True)  # 0.3 by default in previous implementation.
    margin_after = jsl.NumberField(
        minimum=0, required=True)  # 0.3 by default in previous implementation.
    trial_to_condition_func = jsl.StringField(
        required=True
    )  # should be a function of both event codes and trial idx.
Beispiel #18
0
    class Metadata(jsl.Document):
        """Class with the schema definition based on JSL domain specific language."""
        class Options:
            """A container for options."""

            description = "Data from metadata file"
            definition_id = "metadata"

        components_with_dependency_lock_file = jsl.NumberField(required=True)
        components_with_tests = jsl.NumberField(required=True)
        required_engines = jsl.DocumentField(ComponentMetadataEngines,
                                             as_ref=True,
                                             required=True)
Beispiel #19
0
def jsonobject_property_to_jsl_field(prop: jsonobject.JsonProperty,
                                     nullable=False) -> jsl.BaseField:
    if isinstance(prop, jsonobject.DateProperty):
        return jsl.DateTimeField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.DateTimeProperty):
        return jsl.DateTimeField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.StringProperty):
        return jsl.StringField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.IntegerProperty):
        return jsl.IntField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.FloatProperty):
        return jsl.NumberField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.BooleanProperty):
        return jsl.BooleanField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.DictProperty):
        if prop.item_wrapper:
            subtype = jsonobject_to_jsl(prop.item_wrapper.item_type,
                                        nullable=nullable)
            return jsl.DocumentField(name=prop.name,
                                     document_cls=subtype,
                                     required=prop.required)
        return jsl.DictField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.ListProperty):
        if prop.item_wrapper:
            if isinstance(prop.item_wrapper, jsonobject.ObjectProperty):
                if issubclass(prop.item_wrapper.item_type,
                              jsonobject.JsonObject):
                    subtype = jsl.DocumentField(document_cls=jsonobject_to_jsl(
                        prop.item_wrapper.item_type),
                                                nullable=nullable)
                elif isinstance(prop.item_wrapper.item_type,
                                jsonobject.JsonProperty):
                    subtype = jsonobject_property_to_jsl_field(
                        prop.item_wrapper.item_type)
                else:
                    raise KeyError(prop.item_wrapper.item_type)
            elif isinstance(prop.item_wrapper, jsonobject.StringProperty):
                subtype = jsl.StringField(name=prop.name)
            elif isinstance(prop.item_wrapper, jsonobject.IntegerProperty):
                subtype = jsl.IntField(name=prop.name)
            elif isinstance(prop.item_wrapper, jsonobject.FloatProperty):
                subtype = jsl.NumberField(name=prop.name)
            elif isinstance(prop.item_wrapper, jsonobject.DictProperty):
                subtype = jsl.DictField(name=prop.name)
            else:
                raise KeyError(prop.item_wrapper)
            return jsl.ArrayField(items=subtype, required=prop.required)
        return jsl.ArrayField(name=prop.name, required=prop.required)

    raise KeyError(prop)
Beispiel #20
0
class BlackduckSecurityDetails(jsl.Document):
    class Options:
        description = "Blackduck information about one vulnerability for a single component"
        definition_id = "component_blackduck_security_info"

    with removed_in(ROLE_v2_2_0) as removed_in_v2_2_0:
        removed_in_v2_2_0.baseScore = jsl.NumberField(required=True)
        removed_in_v2_2_0.exploitabilitySubscore = jsl.NumberField(required=True)
    with added_in(ROLE_v2_2_0) as added_in_v2_2_0:
        added_in_v2_2_0.base_score = jsl.NumberField(required=True)
        added_in_v2_2_0.exploitability_subscore = jsl.NumberField(required=True)
    id = jsl.StringField(required=True)
    severity = jsl.StringField(required=True)
    source = jsl.StringField(required=True)
class LicenseScanSummary(jsl.Document):
    class Options(object):
        definition_id = "license_scan_summary"

    all_files = jsl.NumberField(description="Total number of files analysed")
    license_files = jsl.NumberField()
    source_files = jsl.NumberField()
    distinct_licenses = jsl.ArrayField(jsl.DocumentField(LicenseCount,
                                                         as_ref=True),
                                       required=True)
    sure_licenses = jsl.ArrayField(
        jsl.StringField(),
        description="Licenses detected with high match confidence",
        required=True)
    licensed_files = jsl.NumberField()
Beispiel #22
0
class CVEDetail(jsl.Document):
    class Options(object):
        definition_id = "cvecheck_details"
        description = "Detail of one CVE"

    with removed_in(ROLE_v3_0_0) as removed_in_v3_0_0:
        # access/impact are now part of vector string in cvss dict
        removed_in_v3_0_0.access = jsl.DocumentField(CVEAccess,
                                                     as_ref=True,
                                                     required=True)
        removed_in_v3_0_0.impact = jsl.DocumentField(CVEImpact,
                                                     as_ref=True,
                                                     required=True)
        removed_in_v3_0_0.cvss = jsl.NumberField(
            required=True)  # cvss is now dict
        removed_in_v3_0_0.summary = jsl.StringField(
            required=True)  # renamed to description

    with added_in(ROLE_v3_0_0) as added_in_v3_0_0:
        added_in_v3_0_0.cvss = jsl.DocumentField(CVSS,
                                                 as_ref=True,
                                                 required=True)
        added_in_v3_0_0.description = jsl.StringField(required=True)
        added_in_v3_0_0.severity = jsl.StringField(required=True)

    with added_in(ROLE_v3_0_1) as added_in_v3_0_1:
        added_in_v3_0_1.attribution = jsl.StringField(required=False)

    id = jsl.StringField(required=True)
    references = jsl.ArrayField(jsl.UriField(), required=True)
    # Present if defined for the particular CVE
    cwe = jsl.StringField(required=False)
Beispiel #23
0
class CVEDetail(jsl.Document):
    class Options:
        description = "Information about one CVE for a single component"
        definition_id = "component_cve_info"

    cvss = jsl.NumberField(required=True)
    id = jsl.StringField(required=True)
Beispiel #24
0
    class RegisteredSRPM(jsl.Document):
        """Class with the schema definition based on JSL domain specific language."""
        class Options:
            """A container for options."""

            description = "Red Hat internally registered SRPM details a single component"
            definition_id = "component_redhat_registered_srpms"

        patch_count = jsl.NumberField(required=True)
        epoch = jsl.NumberField(required=True)
        published_in = jsl.ArrayField(jsl.StringField(), required=True)
        modified_line_count = jsl.NumberField(required=True)
        package_name = jsl.StringField(required=True)
        modified_file_count = jsl.NumberField(required=True)
        version = jsl.StringField(required=True)
        release = jsl.StringField(required=True)
Beispiel #25
0
 class Popularity(jsl.Document):
     class Options:
         description = "Stack popularity"
         definition_id = "stack_popularity"
     average_forks = jsl.StringField(required=True)
     average_stars = jsl.StringField(required=True)
     low_popularity_components = jsl.NumberField(required=True)
Beispiel #26
0
class ModularAlertMetaFields(jsl.Document):
    class Options(object):
        additional_properties = True

    session_key = jsl.StringField(required=True)
    server_uri = jsl.StringField(required=True)
    server_host = jsl.StringField(required=True)
    server_port = jsl.NumberField(required=True)
class Status(JSLSchemaBase):
    class Options(object):
        definition_id = "status"
        description = "Component analyses response status"

    attributes = jsl.DictField(additional_properties=True)
    code = jsl.NumberField(required=True)
    message = jsl.StringField(required=True)
Beispiel #28
0
class GithubDetails(jsl.Document):
    """Class with the schema definition based on JSL domain specific language."""
    class Options:
        """A container for options."""

        description = "Github information for a single component"
        definition_id = "component_github_info"

    forks_count = jsl.NumberField(required=True)
    stargazers_count = jsl.NumberField(required=True)
    with jsl.Scope(lambda v: v >= ROLE_v2_0_0) as v2_0_0:
        v2_0_0.issues = jsl.DocumentField(GithubMetrics,
                                          as_ref=True,
                                          required=True)
        v2_0_0.pull_requests = jsl.DocumentField(GithubMetrics,
                                                 as_ref=True,
                                                 required=True)
Beispiel #29
0
class LicenseCount(jsl.Document):
    class Options(object):
        description = "Detected license with occurrence count"
        definition_id = "license_count"

    count = jsl.NumberField(description="Combined count of detected variants",
                            required=True)
    license_name = jsl.StringField(
        description="Common name of the detected license", required=True)
Beispiel #30
0
    class SimilarStacks(jsl.Document):
        """Class with the schema definition based on JSL domain specific language."""
        class Options:
            """A container for options."""

            description = "Stack Similarity Information"
            definition_id = "stack_similarity_information"

        analysis = jsl.DocumentField(SimilarityAnalysis,
                                     as_ref=True,
                                     required=True)
        similarity = jsl.NumberField(required=True)
        stack_id = jsl.NumberField(required=True)
        uri = jsl.StringField(required=True)
        with jsl.Scope(lambda v: v >= ROLE_v2_1_4) as v2_1_4:
            v2_1_4.source = jsl.StringField(required=True)
            v2_1_4.usage = jsl.NumberField(required=True)
            v2_1_4.original_score = jsl.NumberField(required=True)