misc.print_schedule

This MC outputs a JSON representation of the experiment graph’s VM Resource Schedule at the time the MC is executed. If a filename is passed into the Plugin, then the JSON is written to a file; otherwise, it will print the schedule to stdout. This JSON is useful for analyzing the expected experiment schedule and reviewing inputs for the various involved VM resources. This output does NOT include associated VM resource scripts nor binary files to reduce file size.

Warning

In cases where a complete schedule is the desired output, this MC must be the last parameter to experiment. For example, firewheel experiment tests.vm_gen minimega.launch misc.print_schedule

This MC can be placed in multiple locations of the experiment pipeline so that users can see different views of how the experiment schedule is evolving. However, the placement of this MC within the experiment may provide a different view than expected as FIREWHEEL resolves various model component dependencies. Therefore, the output schedule will include all MCs run by FIREWHEEL including explicitly specified and implicitly depended on components up to the point where the schedule is output. This can even include components that are depended upon by components run after misc.print_schedule due to FIREWHEEL’s Dependency Management.

For example, firewheel experiment tests.vm_gen:10 control_network misc.print_schedule minimega.launch results in the following output:

                        Model Components Executed
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃      Model Component Name       ┃   Result   ┃     Timing     ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ base_objects                    │         OK │  0.013 seconds │
│ linux.base_objects              │         OK │  0.014 seconds │
│ linux.ubuntu                    │         OK │  0.012 seconds │
│ linux.ubuntu2204                │         OK │  0.019 seconds │
│ misc.blank_graph                │         OK │  0.001 seconds │
│ tests.vm_gen                    │         OK │  0.003 seconds │
│ minimega.emulated_entities      │         OK │  0.003 seconds │
│ minimega.testbed_available      │         OK │  0.021 seconds │
│ linux.ubuntu1604                │         OK │  0.010 seconds │
│ generic_vm_objects              │         OK │  0.001 seconds │
│ vyos                            │         OK │  0.009 seconds │
│ vyos.helium118                  │         OK │  0.008 seconds │
│ control_network                 │         OK │  0.002 seconds │
│ minimega.create_mac_addresses   │         OK │  0.001 seconds │
│ misc.print_schedule             │         OK │  0.038 seconds │
│ minimega.resolve_vm_images      │         OK │  0.010 seconds │
│ minimega.configure_ips          │         OK │  0.001 seconds │
│ minimega.send_miniweb_arp       │         OK │  0.000 seconds │
│ minimega.schedules_ready        │         OK │  0.000 seconds │
│ vm_resource.schedule            │         OK │  0.031 seconds │
│ vm_resource.validate            │         OK │  0.009 seconds │
│ minimega.parse_experiment_graph │         OK │  2.984 seconds │
│ minimega.launch                 │         OK │  0.000 seconds │
├─────────────────────────────────┼────────────┼────────────────┤
│                                 │ Total Time │ 18.396 seconds │
└─────────────────────────────────┴────────────┴────────────────┘
            Dependency resolution took 1.377 seconds

Notice that there is an additional model component (minimega.create_mac_addresses) run between control_network and misc.print_schedule. Therefore, when inspecting the schedule output it is important to be aware of the dependency graph ordering.

Attribute Depends:
  • graph

Plugin

class misc.print_schedule_plugin.PrintSchedule(graph, log)[source]

Bases: AbstractPlugin

Print out all VM Resource Schedules in JSON format. This Plugin optionally takes in a filename which will be used to write output. If no filename is provided, the schedule will be printed to stdout.

__annotate_func__ = None
__annotations_cache__ = {}
__firstlineno__ = 9
__static_attributes__ = ()
_generate_schedule()[source]

Get the vm_resource_schedule for all vertices in the graph and effectively acquire the schedule attributes.

Returns:

The sorted dictionary of schedule entries.

Return type:

dict

run(output_file='')[source]

Identifies whether the output should be printed or added to a file. If a output file is identified, the schedule output is produced in JSON format.

Parameters:

output_file (str, optional) – The name/path to a file for the JSON output. Defaults to "".