Module olivia.networkmetrics

Olivia network vulnerability metrics.

Expand source code
"""Olivia network vulnerability metrics."""

from olivia.packagemetrics import Reach


def failure_vulnerability(olivia_model, metric=Reach, normalize=False):
    """
    Compute network vulnerability to failure metric.

    Vulnerability to failure is the mean of some cost metric for the packages in the network, measuring
    the expected cost caused by the failure of an uniformly chosen random package.
    For example, it corresponds to the expected number of packages (using the Reach metric)
    or dependencies (using the Impact metric) potentially compromised by the introduction of a defect into a random
    package.

    If normalized, the result is given in terms of proportion to the total network cost (i.e. number of packages or
    dependencies for the Reach/Impact metrics)

    Parameters
    ----------
    olivia_model: OliviaNetwork
        Input network.
    metric: Cost metric, optional
        Usually Reach or Impact, but a custom metric class may be provided, assuming it implements
        a compute() method that returns a MetricStats() object.
    normalize: bool, optional
        Normalize the output value.

    Returns
    -------
    vulnerability: float
        Vulnerability to failure value.

    """
    ms = olivia_model.get_metric(metric)
    if normalize:
        return ms.values.mean() / ms.normalize_factor
    else:
        return ms.values.mean()


def attack_vulnerability(olivia_model, metric=Reach, normalize=False):
    """
    Compute network vulnerability to attack metric.

    Vulnerability to attack is the maximum of some cost metric for the packages in the network, measuring
    the potential cost caused by a directed attack to the network.
    For example, it corresponds to the maximum number of packages (using the Reach metric)
    or dependencies (using the Impact metric) potentially compromised by the introduction of a defect into a package
    selected by a possible attacker.

    If normalized, the result is given in terms of proportion to the total network cost (i.e. number of packages or
    dependencies for the Reach/Impact metrics).

    Parameters
    ----------
    olivia_model: OliviaNetwork
        Input network.
    metric: Cost metric, optional
        Usually Reach or Impact, but a custom metric class may be provided, assuming it implements
        a compute() method that returns a MetricStats() object.
    normalize: bool, optional
        Normalize the output value.

    Returns
    -------
    vulnerability: float
        Vulnerability to attack value.

    """
    ms = olivia_model.get_metric(metric)
    if normalize:
        return ms.top()[0][1] / ms.normalize_factor
    else:
        return ms.top()[0][1]

Functions

def attack_vulnerability(olivia_model, metric=olivia.packagemetrics.Reach, normalize=False)

Compute network vulnerability to attack metric.

Vulnerability to attack is the maximum of some cost metric for the packages in the network, measuring the potential cost caused by a directed attack to the network. For example, it corresponds to the maximum number of packages (using the Reach metric) or dependencies (using the Impact metric) potentially compromised by the introduction of a defect into a package selected by a possible attacker.

If normalized, the result is given in terms of proportion to the total network cost (i.e. number of packages or dependencies for the Reach/Impact metrics).

Parameters

olivia_model : OliviaNetwork
Input network.
metric : Cost metric, optional
Usually Reach or Impact, but a custom metric class may be provided, assuming it implements a compute() method that returns a MetricStats() object.
normalize : bool, optional
Normalize the output value.

Returns

vulnerability : float
Vulnerability to attack value.
Expand source code
def attack_vulnerability(olivia_model, metric=Reach, normalize=False):
    """
    Compute network vulnerability to attack metric.

    Vulnerability to attack is the maximum of some cost metric for the packages in the network, measuring
    the potential cost caused by a directed attack to the network.
    For example, it corresponds to the maximum number of packages (using the Reach metric)
    or dependencies (using the Impact metric) potentially compromised by the introduction of a defect into a package
    selected by a possible attacker.

    If normalized, the result is given in terms of proportion to the total network cost (i.e. number of packages or
    dependencies for the Reach/Impact metrics).

    Parameters
    ----------
    olivia_model: OliviaNetwork
        Input network.
    metric: Cost metric, optional
        Usually Reach or Impact, but a custom metric class may be provided, assuming it implements
        a compute() method that returns a MetricStats() object.
    normalize: bool, optional
        Normalize the output value.

    Returns
    -------
    vulnerability: float
        Vulnerability to attack value.

    """
    ms = olivia_model.get_metric(metric)
    if normalize:
        return ms.top()[0][1] / ms.normalize_factor
    else:
        return ms.top()[0][1]
def failure_vulnerability(olivia_model, metric=olivia.packagemetrics.Reach, normalize=False)

Compute network vulnerability to failure metric.

Vulnerability to failure is the mean of some cost metric for the packages in the network, measuring the expected cost caused by the failure of an uniformly chosen random package. For example, it corresponds to the expected number of packages (using the Reach metric) or dependencies (using the Impact metric) potentially compromised by the introduction of a defect into a random package.

If normalized, the result is given in terms of proportion to the total network cost (i.e. number of packages or dependencies for the Reach/Impact metrics)

Parameters

olivia_model : OliviaNetwork
Input network.
metric : Cost metric, optional
Usually Reach or Impact, but a custom metric class may be provided, assuming it implements a compute() method that returns a MetricStats() object.
normalize : bool, optional
Normalize the output value.

Returns

vulnerability : float
Vulnerability to failure value.
Expand source code
def failure_vulnerability(olivia_model, metric=Reach, normalize=False):
    """
    Compute network vulnerability to failure metric.

    Vulnerability to failure is the mean of some cost metric for the packages in the network, measuring
    the expected cost caused by the failure of an uniformly chosen random package.
    For example, it corresponds to the expected number of packages (using the Reach metric)
    or dependencies (using the Impact metric) potentially compromised by the introduction of a defect into a random
    package.

    If normalized, the result is given in terms of proportion to the total network cost (i.e. number of packages or
    dependencies for the Reach/Impact metrics)

    Parameters
    ----------
    olivia_model: OliviaNetwork
        Input network.
    metric: Cost metric, optional
        Usually Reach or Impact, but a custom metric class may be provided, assuming it implements
        a compute() method that returns a MetricStats() object.
    normalize: bool, optional
        Normalize the output value.

    Returns
    -------
    vulnerability: float
        Vulnerability to failure value.

    """
    ms = olivia_model.get_metric(metric)
    if normalize:
        return ms.values.mean() / ms.normalize_factor
    else:
        return ms.values.mean()