mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-01-31 02:01:16 +00:00
commands: added create ageanda command
Added the crate command with a subcommand to generate an agenda based on a list of plugins.
This commit is contained in:
parent
f1eeff726f
commit
8a9ca6fdfe
82
wa/commands/create.py
Normal file
82
wa/commands/create.py
Normal file
@ -0,0 +1,82 @@
|
||||
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,
|
||||
]
|
Loading…
x
Reference in New Issue
Block a user