blob: 54e454be0db16f2b62e37ca0cfd4817662ce29a2 [file] [log] [blame] [edit]
"""CLI to query bot dimensions for the device(s) of a given bot.
Example usage:
python devicemap.py home-swarming-bot-host-3--7
(writes bot dimensions & state as python dict to stdout)
"""
import argparse
import json
import logging
import os
import re
import yaml
# This code runs on catatester host and doesn't have whole code tree, hence
# do relative import.
try:
from catatester.devicemap import devicemap_lib
except ImportError:
import devicemap_lib # pylint: disable=relative-import
_BOTNAME_PATTERN = r'(.*)--(\d*)'
def _ParseArgs():
"""Parses command-line input."""
parser = argparse.ArgumentParser()
parser.add_argument(
'botname',
help='Name of the bot, in the format <hostname>--<bot #>',
)
parser.add_argument(
'--output_file',
help='Absolute path to the output file to write dimensions (as json).'
)
# Argument Validations
args = parser.parse_args()
match = re.match(_BOTNAME_PATTERN, args.botname)
if not match:
parser.error('invalid botname')
if not int(match.group(2)) > 0:
parser.error('bot # must be > 0')
logging.info('Running with: %s', args)
return args
def main():
flags = _ParseArgs()
match = re.match(_BOTNAME_PATTERN, flags.botname)
hostname = match.group(1)
bot_num = int(match.group(2))
configs = devicemap_lib.Configs()
bot_config = configs.GetBotConfig(hostname, bot_num)
print(bot_config)
if flags.output_file:
with open(flags.output_file, 'w') as f:
f.write(json.dumps(bot_config.as_dict))
if __name__ == '__main__':
main()