1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2024-10-06 02:41:11 +01:00
workload-automation/wa/commands/create.py

83 lines
3.0 KiB
Python
Raw Normal View History

import sys
from collections import OrderedDict
from wa import ComplexCommand, SubCommand, pluginloader
from wa.framework.target.descriptor import get_target_descriptions
from wa.utils.serializer import yaml
class CreateAgendaSubcommand(SubCommand):
name = 'agenda'
description = """
Create an agenda with the specified extensions enabled. And parameters set
to their default values.
"""
def initialize(self, context):
self.parser.add_argument('plugins', nargs='+',
help='Plugins to be added to the agendas')
self.parser.add_argument('-i', '--iterations', type=int, default=1,
help='Sets the number of iterations for all workloads')
self.parser.add_argument('-o', '--output', metavar='FILE',
help='Output file. If not specfied, STDOUT will be used instead.')
def execute(self, state, args):
agenda = OrderedDict()
agenda['config'] = OrderedDict(instrumentation=[], result_processors=[])
agenda['global'] = OrderedDict(iterations=args.iterations)
agenda['workloads'] = []
target_desc = None
targets = {td.name: td for td in get_target_descriptions()}
for name in args.plugins:
if name in targets:
if target_desc is not None:
raise ConfigError('Specifying multiple devices: {} and {}'.format(target_desc.name, name))
target_desc = targets[name]
agenda['config']['device'] = name
agenda['config']['device_config'] = target_desc.get_default_config()
continue
extcls = pluginloader.get_plugin_class(name)
config = pluginloader.get_default_config(name)
if extcls.kind == 'workload':
entry = OrderedDict()
entry['name'] = extcls.name
if name != extcls.name:
entry['label'] = name
entry['params'] = config
agenda['workloads'].append(entry)
else:
if extcls.kind == 'instrument':
agenda['config']['instrumentation'].append(name)
if extcls.kind == 'result_processor':
agenda['config']['result_processors'].append(name)
agenda['config'][name] = config
if args.output:
wfh = open(args.output, 'w')
else:
wfh = sys.stdout
yaml.dump(agenda, wfh, indent=4, default_flow_style=False)
if args.output:
wfh.close()
class CreateCommand(ComplexCommand):
name = 'create'
description = '''
Used to create various WA-related objects (see positional arguments list
for what objects may be created).\n\nUse "wa create <object> -h" for
object-specific arguments.
'''
subcmd_classes = [
#CreateWorkloadSubcommand,
#CreatePackageSubcommand,
CreateAgendaSubcommand,
]