|
19 | 19 | # under the License.
|
20 | 20 |
|
21 | 21 | '''module for single-thread Heron Instance in python'''
|
22 |
| -import argparse |
23 | 22 | import collections
|
24 | 23 | import logging
|
25 | 24 | import os
|
|
38 | 37 | from heron.instance.src.python.network import create_socket_options
|
39 | 38 | from heron.instance.src.python.network import GatewayLooper
|
40 | 39 | from heron.instance.src.python.basics import SpoutInstance, BoltInstance
|
41 |
| -import heron.instance.src.python.utils.system_constants as constants |
| 40 | +from heron.instance.src.python.utils import system_constants as constants |
42 | 41 | from heron.instance.src.python.utils import system_config
|
43 | 42 |
|
44 |
| -import heronpy.api.api_constants as api_constants |
| 43 | +from heronpy.api import api_constants |
45 | 44 | from heronpy.api.state.state import HashMapState
|
46 | 45 |
|
| 46 | +import click |
| 47 | + |
| 48 | + |
47 | 49 | Log = log.Log
|
48 | 50 | AssignedInstance = collections.namedtuple('AssignedInstance', 'is_spout, protobuf, py_class')
|
49 | 51 |
|
@@ -324,70 +326,83 @@ def yaml_config_reader(config_path):
|
324 | 326 |
|
325 | 327 | return config
|
326 | 328 |
|
327 |
| -# pylint: disable=missing-docstring |
328 |
| -def main(): |
329 |
| - parser = argparse.ArgumentParser(description='Heron Python Instance') |
330 |
| - parser.add_argument('--topology_name', required=True, help='Topology Name') |
331 |
| - parser.add_argument('--topology_id', required=True, help='Topology Id') |
332 |
| - parser.add_argument('--instance_id', required=True, help='Instance Id') |
333 |
| - parser.add_argument('--component_name', required=True, help='Component Name') |
334 |
| - parser.add_argument('--task_id', required=True, help='Task Id', type=int) |
335 |
| - parser.add_argument('--component_index', required=True, help='Component Index', type=int) |
336 |
| - parser.add_argument('--stmgr_id', required=True, help='StMgr Id') |
337 |
| - parser.add_argument('--stmgr_port', required=True, help='StMgr Port', type=int) |
338 |
| - parser.add_argument('--metricsmgr_port', required=True, help='MetricsMgr Port', type=int) |
339 |
| - parser.add_argument('--sys_config', required=True, help='System Config File') |
340 |
| - parser.add_argument('--override_config', required=True, help='Override Config File') |
341 |
| - parser.add_argument('--topology_pex', required=True, help='Topology Pex File') |
342 |
| - parser.add_argument('--max_ram', required=True, help='Maximum RAM to limit', type=int) |
343 |
| - |
344 |
| - args = parser.parse_args() |
345 |
| - |
346 |
| - sys_config = yaml_config_reader(args.sys_config) |
347 |
| - override_config = yaml_config_reader(args.override_config) |
| 329 | + |
| 330 | +# pylint: disable=too-many-arguments,too-many-locals |
| 331 | +@click.command() |
| 332 | +@click.option('--topology_name', required=True, help='Topology Name') |
| 333 | +@click.option('--topology_id', required=True, help='Topology Id') |
| 334 | +@click.option('--instance_id', required=True, help='Instance Id') |
| 335 | +@click.option('--component_name', required=True, help='Component Name') |
| 336 | +@click.option('--task_id', required=True, help='Task Id', type=int) |
| 337 | +@click.option('--component_index', required=True, help='Component Index', type=int) |
| 338 | +@click.option('--stmgr_id', required=True, help='StMgr Id') |
| 339 | +@click.option('--stmgr_port', required=True, help='StMgr Port', type=int) |
| 340 | +@click.option('--metricsmgr_port', required=True, help='MetricsMgr Port', type=int) |
| 341 | +@click.option('--config_file', required=True, help='System Config File') |
| 342 | +@click.option('--override_config_file', required=True, help='Override Config File') |
| 343 | +@click.option('--topology_pex', required=True, help='Topology Pex File') |
| 344 | +@click.option('--max_ram', required=True, help='Maximum RAM to limit', type=int) |
| 345 | +def cli( |
| 346 | + topology_name: str, |
| 347 | + topology_id: str, |
| 348 | + instance_id: str, |
| 349 | + component_name: str, |
| 350 | + task_id: int, |
| 351 | + component_index: int, |
| 352 | + stmgr_id: str, |
| 353 | + stmgr_port: int, |
| 354 | + metricsmgr_port: int, |
| 355 | + config_file: str, |
| 356 | + override_config_file: str, |
| 357 | + topology_pex: str, |
| 358 | + max_ram: int, |
| 359 | +) -> None: |
| 360 | + """Heron Python Instance.""" |
| 361 | + |
| 362 | + sys_config = yaml_config_reader(config_file) |
| 363 | + override_config = yaml_config_reader(override_config_file) |
348 | 364 | system_config.set_sys_config(sys_config, override_config)
|
349 | 365 |
|
350 | 366 | # get combined configuration
|
351 | 367 | sys_config = system_config.get_sys_config()
|
352 | 368 |
|
353 | 369 | # set resource limits
|
354 |
| - set_resource_limit(args.max_ram) |
| 370 | + set_resource_limit(max_ram) |
355 | 371 |
|
356 | 372 | # create the protobuf instance
|
357 | 373 | instance_info = physical_plan_pb2.InstanceInfo()
|
358 |
| - instance_info.task_id = args.task_id |
359 |
| - instance_info.component_index = args.component_index |
360 |
| - instance_info.component_name = args.component_name |
| 374 | + instance_info.task_id = task_id |
| 375 | + instance_info.component_index = component_index |
| 376 | + instance_info.component_name = component_name |
361 | 377 |
|
362 | 378 | instance = physical_plan_pb2.Instance()
|
363 |
| - instance.instance_id = args.instance_id |
364 |
| - instance.stmgr_id = args.stmgr_id |
| 379 | + instance.instance_id = instance_id |
| 380 | + instance.stmgr_id = stmgr_id |
365 | 381 | instance.info.MergeFrom(instance_info)
|
366 | 382 |
|
367 | 383 | # Logging init
|
368 | 384 | log_dir = os.path.abspath(sys_config[constants.HERON_LOGGING_DIRECTORY])
|
369 | 385 | max_log_files = sys_config[constants.HERON_LOGGING_MAXIMUM_FILES]
|
370 | 386 | max_log_bytes = sys_config[constants.HERON_LOGGING_MAXIMUM_SIZE_MB] * constants.MB
|
371 | 387 |
|
372 |
| - log_file = os.path.join(log_dir, args.instance_id + ".log.0") |
| 388 | + log_file = os.path.join(log_dir, instance_id + ".log.0") |
373 | 389 | log.init_rotating_logger(level=logging.INFO, logfile=log_file,
|
374 | 390 | max_files=max_log_files, max_bytes=max_log_bytes)
|
375 | 391 |
|
376 |
| - Log.info("\nStarting instance: " + args.instance_id + " for topology: " + args.topology_name + |
377 |
| - " and topologyId: " + args.topology_id + " for component: " + args.component_name + |
378 |
| - " with taskId: " + str(args.task_id) + " and componentIndex: " + |
379 |
| - str(args.component_index) + |
380 |
| - " and stmgrId: " + args.stmgr_id + " and stmgrPort: " + str(args.stmgr_port) + |
381 |
| - " and metricsManagerPort: " + str(args.metricsmgr_port) + |
382 |
| - "\n **Topology Pex file located at: " + args.topology_pex) |
383 |
| - Log.debug("System config: " + str(sys_config)) |
384 |
| - Log.debug("Override config: " + str(override_config)) |
385 |
| - Log.debug("Maximum RAM: " + str(args.max_ram)) |
386 |
| - |
387 |
| - heron_instance = SingleThreadHeronInstance(args.topology_name, args.topology_id, instance, |
388 |
| - args.stmgr_port, args.metricsmgr_port, |
389 |
| - args.topology_pex) |
| 392 | + Log.info(f"\nStarting instance: {instance_id} for topology: {topology_name}" |
| 393 | + f" and topologyId: {topology_id} for component: {component_name}" |
| 394 | + f" with taskId: {task_id} and componentIndex: {component_index}" |
| 395 | + f" and stmgrId: {stmgr_id} and stmgrPort: {stmgr_port}" |
| 396 | + f" and metricsManagerPort: {metricsmgr_port}" |
| 397 | + f"\n **Topology Pex file located at: {topology_pex}") |
| 398 | + Log.debug(f"System config: {sys_config}") |
| 399 | + Log.debug(f"Override config: {override_config}") |
| 400 | + Log.debug(f"Maximum RAM: {max_ram}") |
| 401 | + |
| 402 | + heron_instance = SingleThreadHeronInstance(topology_name, topology_id, instance, |
| 403 | + stmgr_port, metricsmgr_port, |
| 404 | + topology_pex) |
390 | 405 | heron_instance.start()
|
391 | 406 |
|
392 | 407 | if __name__ == '__main__':
|
393 |
| - main() |
| 408 | + cli() # pylint: disable=no-value-for-parameter |
0 commit comments