generate_plot.py 10.6 KB
Newer Older
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
import enum, sys
import numpy as np
import matplotlib.pyplot as plt

class PlotName(enum.Enum):
    EXP1_DEVICE_DRIVER_EMU_L2NM       = 'exp1-dev-drv-emu-l2nm'
    EXP1_DEVICE_DRIVER_EMU_L3NM       = 'exp1-dev-drv-emu-l3nm'
    EXP1_DEVICE_DRIVER_TAPI           = 'exp1-dev-drv-tapi'
    EXP1_SERVICE_HANDLER_EMU_L2NM     = 'exp1-svc-hdl-l2nm-emu'
    EXP1_SERVICE_HANDLER_EMU_L3NM     = 'exp1-svc-hdl-l3nm-emu'
    EXP1_SERVICE_HANDLER_TAPI         = 'exp1-svc-hdl-tapi'
    EXP1_COMP_PATHCOMP_RPC_COMPUTE    = 'exp1-pathcomp-rpc-compute'

    EXP2_DEVICE_DRIVER_EMU            = 'exp2-device-driver-emu'
    EXP2_SERVICE_HANDLER_EMU_L2NM     = 'exp2-svc-hdl-l2nm-emu'
    EXP2_SERVICE_HANDLER_EMU_L3NM     = 'exp2-svc-hdl-l3nm-emu'

    EXP2_COMP_CONTEXT_DEVICE_RPCS     = 'exp2-context-device-rpcs'
    EXP2_COMP_CONTEXT_LINK_RPCS       = 'exp2-context-link-rpcs'
    EXP2_COMP_CONTEXT_SERVICE_RPCS    = 'exp2-context-service-rpcs'
    EXP2_COMP_CONTEXT_SLICE_RPCS      = 'exp2-context-slice-rpcs'
    EXP2_COMP_CONTEXT_TOPOLOGY_RPCS   = 'exp2-context-topology-rpcs'
    EXP2_COMP_CONTEXT_CONNECTION_RPCS = 'exp2-context-connection-rpcs'
    EXP2_COMP_DEVICE_RPCS             = 'exp2-device-rpcs'
    EXP2_COMP_SERVICE_RPCS            = 'exp2-service-rpcs'
    EXP2_COMP_SLICE_RPCS              = 'exp2-slice-rpcs'
    EXP2_COMP_PATHCOMP_RPCS           = 'exp2-pathcomp-rpcs'
    EXP2_COMP_DLT_RPCS                = 'exp2-dlt-rpcs'

plot_name = PlotName.__members__.get(sys.argv[1])
if plot_name is None: raise Exception('Unsupported plot: {:s}'.format(str(plot_name)))

PLOTS = {
    PlotName.EXP1_DEVICE_DRIVER_EMU_L2NM: (
        'Device Driver - Emulated (using L2NM services)', '0.0001-1', [
            ('GetConfig',    [0,27,252,212,160,261,26,2,3,9,19,11,2,1,0,0,0]),
            ('SetConfig',    [575,56,112,78,61,82,8,0,2,5,5,0,1,    0,0,0,0]),
            ('DeleteConfig', [606,96,150,66,29,31,5,0,0,1,1,0,    0,0,0,0,0]),
        ]),

    PlotName.EXP1_DEVICE_DRIVER_EMU_L3NM: (
        'Device Driver - Emulated (using L3NM services)', '0.0001-1', [
            ('GetConfig',    [0,1,40,83,127,460,132,24,13,39,36,31,9,5,1,0,0]),
            ('SetConfig',    [487,29,110,52,55,171,48,6,6,15,12,8,0,1, 0,0,0]),
            ('DeleteConfig', [510,86,79,43,26,120,70,20,6,9,15,8,5,3,  0,0,0]),
        ]),

    PlotName.EXP1_DEVICE_DRIVER_TAPI: (
        #'Device Driver - TAPI', '0.0001-1', [
        #    ('GetConfig',    [0,0,0,0,0,0,0,0,0,1,1,3,10,159,14, 0,0]),
        #    ('SetConfig',    [92,3,1,0,0,0,0,6,11,47,13,13,0,0,0,0,0]),
        #    ('DeleteConfig', [90,0,0,0,0,0,3,14,25,35,6,11,2,0,0,0,0]),
        #]),
        'Device Driver - TAPI', '0.0001-1', [
            ('GetConfig',    [0,0,0,0,0,0,0,0,0,1,1,3,10,159,14, 0,0]),
            ('SetConfig',    [0,0,0,0,0,0,0,6,11,47,13,13,0,0,0,0,0]),
            ('DeleteConfig', [0,0,0,0,0,0,3,14,25,35,6,11,2,0,0,0,0]),
        ]),

    PlotName.EXP1_SERVICE_HANDLER_EMU_L2NM: (
        'Service Handler - L2NM Emulated', '0.001-100', [
            ('SetEndpoint',    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,41,35,12,1,0]),
            ('DeleteEndpoint', [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,3,29,45,7,0,0]),
        ]),

    PlotName.EXP1_SERVICE_HANDLER_EMU_L3NM: (
        'Service Handler - L3NM Emulated', '0.001-100', [
            ('SetEndpoint',    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,8,27,29,15,11]),
            ('DeleteEndpoint', [0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,6,22,29,18,11]),
        ]),

    PlotName.EXP1_SERVICE_HANDLER_TAPI: (
        'Service Handler - TAPI', '0.001-100', [
            ('SetEndpoint',    [0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,4,79,2,0,0,0,0]),
            ('DeleteEndpoint', [0,0,0,0,0,0,0,0,0,0,0,0,5,0,3,1,73,12,0,0,0,0]),
        ]),

    PlotName.EXP1_COMP_PATHCOMP_RPC_COMPUTE: (
        'PathComp - Compute RPC', '0.01-5', [
            ('Compute (using L2NM services)', [0,0,20,32,14,22,0]),
            ('Compute (using L3NM services)', [0,1,1,10,17,59,2]),
            ('Compute (using TAPI services)', [3,70,10,3,2,6,0]),
        ]),

    PlotName.EXP2_DEVICE_DRIVER_EMU: (
        'Device Driver - Emulated', '0.0001-0.25', [
            ('GetConfig',    [0,21,198,247,190,332,28,5,3,7,14,8,0,0]),
            ('SetConfig',    [558,61,139,85,57,117,22,1,2,4,1,5,1,0]),
            ('DeleteConfig', [573,123,142,63,30,78,24,2,2,8,5,2,0,0]),
        ]),

    PlotName.EXP2_SERVICE_HANDLER_EMU_L2NM: (
        'Service Handler - L2NM Emulated', '0.001-100', [
            ('SetEndpoint',    [0,0,0,0,0,0,0,0,0,0,0,0,2,18,15,4,1,2,2,0,0,0]),
            ('DeleteEndpoint', [0,0,0,0,0,0,0,0,0,0,0,1,0,20,20,5,1,0,0,0,0,0]),
        ]),

    PlotName.EXP2_SERVICE_HANDLER_EMU_L3NM: (
        'Service Handler - L3NM Emulated', '0.001-100', [
            ('SetEndpoint',    [0,0,0,0,0,0,0,0,0,0,0,0,0,13,24,2,5,4,1,0,0,0]),
            ('DeleteEndpoint', [0,0,0,0,0,0,0,0,0,0,0,0,0,11,27,7,3,1,0,0,0,0]),
        ]),

    PlotName.EXP2_COMP_CONTEXT_DEVICE_RPCS: (
        'Context RPCs', '0.001-7.5', [
            ('GetDevice',        [0,0,0,0,6,130,348,305,382,578,76,7,6,0,0,0,0]),
            ('ListDevices',      [0,0,0,0,0,0,0,0,0,4,37,43,8,2,0,0,0]),
            ('SetDevice',        [0,0,0,0,0,42,236,158,179,380,46,9,0,0,0,0,0]),
        ]),

    PlotName.EXP2_COMP_CONTEXT_LINK_RPCS: (
        'Context RPCs', '0.001-7.5', [
            ('GetLink',          [0,1,9,5,1,1,0,0,0,0,0,0,0,0,0,0,0]),
            ('ListLinks',        [0,0,0,0,0,5,20,23,27,17,2,0,0,0,0,0,0]),
        ]),

    PlotName.EXP2_COMP_CONTEXT_SERVICE_RPCS: (
        'Context RPCs', '0.001-7.5', [
            ('GetService',       [124,120,42,55,80,167,62,34,14,33,9,2,1,0,0,0,0]),
            ('ListServices',     [0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0]),
            ('RemoveService',    [0,0,3,18,15,29,13,5,1,4,1,0,0,0,0,0,0]),
            ('SetService',       [6,90,59,51,63,165,70,32,5,12,8,2,0,0,0,0,0]),
        ]),

    PlotName.EXP2_COMP_CONTEXT_SLICE_RPCS: (
        'Context RPCs', '0.001-7.5', [
            ('GetSlice',         [30,75,48,24,32,118,56,34,12,19,8,2,0,0,0,0,0]),
            ('ListSlices',       [0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0]),
            ('RemoveSlice',      [0,0,2,10,8,14,8,2,1,2,0,0,0,0,0,0,0]),
            ('SetSlice',         [6,29,22,18,21,70,25,12,11,13,1,0,0,0,0,0,0]),
            ('UnsetSlice',       [0,12,12,8,1,3,6,3,1,2,0,0,0,0,0,0,0]),
        ]),

    PlotName.EXP2_COMP_CONTEXT_TOPOLOGY_RPCS: (
        'Context RPCs', '0.001-7.5', [
            ('GetTopology',      [72,11,0,0,0,2,6,1,0,1,1,0,0,0,0,0,0]),
            ('ListTopologies',   [0,0,0,0,5,38,25,10,6,10,0,0,0,0,0,0,0]),
            ('ListTopologyIds',  [1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),
        ]),

    PlotName.EXP2_COMP_CONTEXT_CONNECTION_RPCS: (
        'Context RPCs', '0.001-7.5', [
            ('ListConnections',  [13,21,5,19,23,145,46,27,10,15,4,2,0,1,0,0,0]),
            ('ListContextIds',   [1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),
            ('RemoveConnection', [0,0,17,17,12,23,11,2,2,6,0,0,0,0,0,0,0]),
            ('SetConnection',    [0,0,17,26,9,18,4,7,2,5,4,2,0,0,0,0,0]),
        ]),

    PlotName.EXP2_COMP_DEVICE_RPCS: (
        'Device RPCs', '0.001-7.5', [
            ('AddDevice',       [0,0,0,0,0,0,0,1,2,4,0,0,0,0,0,0,0]),
            ('ConfigureDevice', [0,0,0,0,0,0,0,0,2,140,367,243,127,143,19,9,5]),
        ]),

    PlotName.EXP2_COMP_SERVICE_RPCS: (
        'Service RPCs', '0.001-7.5', [
            ('CreateService',   [0,0,0,9,11,32,13,10,4,7,3,2,1,0,0,0,0]),
            ('UpdateService',   [0,0,0,0,0,0,0,0,0,0,0,0,0,19,41,15,18]),
            ('DeleteService',   [0,0,0,0,0,0,0,0,0,0,0,0,1,23,45,21,6]),
        ]),

    PlotName.EXP2_COMP_SLICE_RPCS: (
        'Slice RPCs', '0.001-7.5', [
            ('CreateSlice',     [0,0,0,0,0,4,5,4,10,11,6,2,1,0,0,0,0]),
            ('UpdateSlice',     [0,0,0,0,0,0,0,0,0,0,0,0,0,6,20,10,10]),
            ('DeleteSice',      [0,0,0,0,0,0,0,0,0,0,0,0,0,9,21,15,2]),
        ]),

    PlotName.EXP2_COMP_PATHCOMP_RPCS: (
        'PathComp RPCs', '0.001-7.5', [
            ('Compute',         [0,0,0,0,0,0,0,0,0,0,13,43,22,14,0,0,0]),
        ]),

    PlotName.EXP2_COMP_DLT_RPCS: (
        'DLT RPCs', '0.001-7.5', [
            ('RecordDevice',    [0,0,0,0,0,0,0,1,4,5,6,6,0,26,71,94,306]),
            ('RecordLink',      [0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0]),
            ('RecordService',   [0,0,0,0,0,0,0,0,0,0,0,0,0,5,15,30,184]),
            ('RecordSlice',     [0,0,0,0,0,0,0,0,2,3,1,2,1,6,19,23,82]),
        ]),
}

BINS_RANGES = {
    '0.0001-100'    : [0, 0.0001, 0.00025, 0.0005, 0.00075, 0.001, 0.0025, 0.005, 0.0075,
                        0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10,
                        25, 50, 75, 100, 200],
    '0.0001-1'      : [0, 0.0001, 0.00025, 0.0005, 0.00075, 0.001, 0.0025, 0.005, 0.0075,
                        0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1],
    '0.0001-0.25'   : [0, 0.0001, 0.00025, 0.0005, 0.00075, 0.001, 0.0025, 0.005, 0.0075,
                        0.01, 0.025, 0.05, 0.075, 0.1, 0.25],
    '0.001-100'     : [0, 0.001, 0.0025, 0.005, 0.0075, 0.01, 0.025, 0.05, 0.075,
                        0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10, 25, 50, 75, 100, 200],
    '0.001-7.5'     : [0, 0.001, 0.0025, 0.005, 0.0075, 0.01, 0.025, 0.05, 0.075,
                        0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10],
    '0.01-5'        : [0, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5],
}

# plot the cumulative histogram
fig, ax = plt.subplots(figsize=(8, 8))

bins = PLOTS[plot_name][1]
if isinstance(bins, str): bins = BINS_RANGES[PLOTS[plot_name][1]]
bins = np.array(bins).astype(float)

for label, counts in PLOTS[plot_name][2]:
    counts = np.array(counts).astype(float)
    assert len(bins) == len(counts) + 1
    centroids = (bins[1:] + bins[:-1]) / 2
    ax.hist(centroids, bins=bins, weights=counts, range=(min(bins), max(bins)), density=True,
            histtype='step', cumulative=True, label=label)

ax.grid(True)
ax.legend(loc='best')
ax.set_title(PLOTS[plot_name][0])
ax.set_xlabel('seconds')
ax.set_ylabel('Likelihood of occurrence')
plt.xscale('log')
plt.savefig('{:s}.png'.format(plot_name.value), dpi = (600)) 
plt.show()