roby 0.8.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.deep-cover.rb +3 -0
- data/.gitattributes +1 -0
- data/.gitignore +24 -0
- data/.simplecov +10 -0
- data/.travis.yml +17 -0
- data/.yardopts +4 -0
- data/Gemfile +15 -0
- data/README.md +11 -0
- data/Rakefile +47 -177
- data/benchmark/{alloc_misc.rb → attic/alloc_misc.rb} +2 -2
- data/benchmark/{discovery_latency.rb → attic/discovery_latency.rb} +19 -19
- data/benchmark/{garbage_collection.rb → attic/garbage_collection.rb} +9 -9
- data/benchmark/{genom.rb → attic/genom.rb} +0 -0
- data/benchmark/attic/transactions.rb +62 -0
- data/benchmark/plan_basic_operations.rb +28 -0
- data/benchmark/relations/graph.rb +63 -0
- data/benchmark/ruby/identity.rb +18 -0
- data/benchmark/ruby/set_intersect_vs_hash_merge.rb +39 -0
- data/benchmark/ruby/yield_vs_block.rb +35 -0
- data/benchmark/run +5 -0
- data/benchmark/synthetic_plan_modifications_with_transactions.rb +79 -0
- data/benchmark/transactions.rb +99 -51
- data/bin/roby +38 -197
- data/bin/roby-display +14 -0
- data/bin/roby-log +3 -176
- data/doc/guide/{src → attic}/abstraction/achieve_with.page +1 -1
- data/doc/guide/{src → attic}/abstraction/forwarding.page +1 -1
- data/doc/guide/{src → attic}/abstraction/hierarchy.page +1 -1
- data/doc/guide/{src → attic}/abstraction/index.page +1 -1
- data/doc/guide/{src → attic}/abstraction/task_models.page +1 -1
- data/doc/guide/{overview.rdoc → attic/cycle/api_overview.rdoc} +6 -1
- data/doc/guide/{src → attic}/cycle/cycle-overview.png +0 -0
- data/doc/guide/{src → attic}/cycle/cycle-overview.svg +0 -0
- data/doc/guide/attic/cycle/error_handling.page +98 -0
- data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.png +0 -0
- data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.svg +0 -0
- data/doc/guide/{src/cycle/error_handling.page → attic/cycle/error_sources.page} +46 -89
- data/doc/guide/{src → attic}/cycle/garbage_collection.page +1 -1
- data/doc/guide/{src → attic}/cycle/index.page +1 -1
- data/doc/guide/{src → attic}/cycle/propagation.page +11 -1
- data/doc/guide/{src → attic}/cycle/propagation_diamond.png +0 -0
- data/doc/guide/{src → attic}/cycle/propagation_diamond.svg +0 -0
- data/doc/guide/attic/plans/building_plans.page +89 -0
- data/doc/guide/attic/plans/code.page +192 -0
- data/doc/guide/{src/basics → attic/plans}/events.page +3 -4
- data/doc/guide/attic/plans/index.page +7 -0
- data/doc/guide/{plan_modifications.rdoc → attic/plans/plan_modifications.rdoc} +5 -3
- data/doc/guide/{src/basics → attic/plans}/plan_objects.page +2 -1
- data/doc/guide/attic/plans/querying_plans.page +5 -0
- data/doc/guide/{src/basics → attic/plans}/tasks.page +20 -20
- data/doc/guide/config.yaml +7 -4
- data/doc/guide/ext/extended_menu.rb +29 -0
- data/doc/guide/ext/init.rb +6 -0
- data/doc/guide/ext/rdoc_links.rb +7 -6
- data/doc/guide/src/advanced_concepts/history.page +5 -0
- data/doc/guide/src/advanced_concepts/index.page +11 -0
- data/doc/guide/src/advanced_concepts/recognizing_patterns.page +83 -0
- data/doc/guide/src/advanced_concepts/scheduling.page +87 -0
- data/doc/guide/src/advanced_concepts/transactions.page +5 -0
- data/doc/guide/src/advanced_concepts/unreachability.page +42 -0
- data/doc/guide/src/base.template +96 -0
- data/doc/guide/src/basics_shell_header.txt +5 -7
- data/doc/guide/src/building/action_coordination.page +96 -0
- data/doc/guide/src/building/actions.page +124 -0
- data/doc/guide/src/building/file_layout.page +71 -0
- data/doc/guide/src/building/index.page +50 -0
- data/doc/guide/src/building/patterns.page +86 -0
- data/doc/guide/src/building/patterns_forwarding.png +0 -0
- data/doc/guide/src/building/patterns_forwarding.svg +277 -0
- data/doc/guide/src/building/runtime.page +95 -0
- data/doc/guide/src/building/task_models.page +94 -0
- data/doc/guide/src/building/tasks.page +284 -0
- data/doc/guide/src/concepts/error_handling.page +100 -0
- data/doc/guide/src/concepts/exception_propagation.png +0 -0
- data/doc/guide/src/concepts/exception_propagation.svg +445 -0
- data/doc/guide/src/concepts/execution.page +85 -0
- data/doc/guide/src/concepts/execution.png +0 -0
- data/doc/guide/src/concepts/execution.svg +573 -0
- data/doc/guide/src/concepts/execution_cycle.png +0 -0
- data/doc/guide/src/concepts/garbage_collection.page +57 -0
- data/doc/guide/src/concepts/index.page +27 -0
- data/doc/guide/src/concepts/plans.page +101 -0
- data/doc/guide/src/concepts/policy.page +31 -0
- data/doc/guide/src/concepts/reactor.page +61 -0
- data/doc/guide/src/concepts/simple_plan_example.png +0 -0
- data/doc/guide/src/concepts/simple_plan_example.svg +376 -0
- data/doc/guide/src/default.template +9 -74
- data/doc/guide/src/event_relations/forward.page +71 -0
- data/doc/guide/src/event_relations/index.page +12 -0
- data/doc/guide/src/event_relations/scheduling_constraints.page +43 -0
- data/doc/guide/src/event_relations/signal.page +55 -0
- data/doc/guide/src/event_relations/temporal_constraints.page +77 -0
- data/doc/guide/src/htmldoc.metainfo +21 -8
- data/doc/guide/src/index.page +8 -3
- data/doc/guide/src/{introduction/install.page → installation/index.page} +37 -25
- data/doc/guide/src/installation/publications.page +14 -0
- data/doc/guide/src/{introduction → installation}/videos.page +14 -7
- data/doc/guide/src/interacting/index.page +16 -0
- data/doc/guide/src/interacting/run.page +33 -0
- data/doc/guide/src/interacting/shell.page +95 -0
- data/doc/guide/src/plugins/creating_plugins.page +72 -0
- data/doc/guide/src/plugins/index.page +27 -5
- data/doc/guide/src/plugins/{fault_tolerance.page → standard_plugins/fault_tolerance.page} +2 -2
- data/doc/guide/src/plugins/standard_plugins/index.page +11 -0
- data/doc/guide/src/plugins/{subsystems.page → standard_plugins/subsystems.page} +2 -2
- data/doc/guide/src/style_screen.css +687 -0
- data/doc/guide/src/task_relations/dependency.page +107 -0
- data/doc/guide/src/task_relations/executed_by.page +77 -0
- data/doc/guide/src/task_relations/index.page +12 -0
- data/doc/guide/src/task_relations/new_relations.page +119 -0
- data/doc/guide/src/task_relations/planned_by.page +46 -0
- data/doc/guide/src/tutorial/app.page +117 -0
- data/doc/guide/src/{basics → tutorial}/code_examples.page +6 -5
- data/doc/guide/src/{basics → tutorial}/dry.page +15 -15
- data/doc/guide/src/{basics → tutorial}/errors.page +43 -68
- data/doc/guide/src/tutorial/events.page +195 -0
- data/doc/guide/src/{basics → tutorial}/hierarchy.page +53 -52
- data/doc/guide/src/tutorial/index.page +13 -0
- data/doc/guide/src/tutorial/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/goForward_4.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_1.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_2.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_3.png +0 -0
- data/doc/guide/src/tutorial/log_replay/moveto_code_error.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_1.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_2.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_3.png +0 -0
- data/doc/guide/src/tutorial/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/tutorial/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/roby_log_relation_window.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/roby_replay_event_representation.png +0 -0
- data/doc/guide/src/tutorial/relations_display.page +153 -0
- data/doc/guide/src/{basics → tutorial}/roby_cycle_overview.png +0 -0
- data/doc/guide/src/tutorial/shell.page +121 -0
- data/doc/guide/src/{basics → tutorial}/summary.page +1 -1
- data/doc/guide/src/tutorial/tasks.page +374 -0
- data/lib/roby.rb +102 -47
- data/lib/roby/actions.rb +17 -0
- data/lib/roby/actions/action.rb +80 -0
- data/lib/roby/actions/interface.rb +45 -0
- data/lib/roby/actions/library.rb +23 -0
- data/lib/roby/actions/models/action.rb +224 -0
- data/lib/roby/actions/models/coordination_action.rb +58 -0
- data/lib/roby/actions/models/interface.rb +22 -0
- data/lib/roby/actions/models/interface_base.rb +294 -0
- data/lib/roby/actions/models/library.rb +12 -0
- data/lib/roby/actions/models/method_action.rb +90 -0
- data/lib/roby/actions/task.rb +114 -0
- data/lib/roby/and_generator.rb +125 -0
- data/lib/roby/app.rb +2795 -829
- data/lib/roby/app/autotest_console_reporter.rb +138 -0
- data/lib/roby/app/base.rb +21 -0
- data/lib/roby/app/cucumber.rb +2 -0
- data/lib/roby/app/cucumber/controller.rb +439 -0
- data/lib/roby/app/cucumber/helpers.rb +280 -0
- data/lib/roby/app/cucumber/world.rb +32 -0
- data/lib/roby/app/debug.rb +136 -0
- data/lib/roby/app/gen.rb +2 -0
- data/lib/roby/app/rake.rb +178 -38
- data/lib/roby/app/robot_config.rb +9 -0
- data/lib/roby/app/robot_names.rb +115 -0
- data/lib/roby/app/run.rb +3 -2
- data/lib/roby/app/scripts.rb +72 -0
- data/lib/roby/app/scripts/autotest.rb +173 -0
- data/lib/roby/app/scripts/display.rb +2 -0
- data/lib/roby/app/scripts/restart.rb +52 -0
- data/lib/roby/app/scripts/results.rb +17 -8
- data/lib/roby/app/scripts/run.rb +155 -24
- data/lib/roby/app/scripts/shell.rb +147 -62
- data/lib/roby/app/scripts/test.rb +107 -22
- data/lib/roby/app/test_reporter.rb +74 -0
- data/lib/roby/app/test_server.rb +159 -0
- data/lib/roby/app/vagrant.rb +47 -0
- data/lib/roby/backports.rb +16 -0
- data/lib/roby/cli/display.rb +190 -0
- data/lib/roby/cli/exceptions.rb +17 -0
- data/lib/roby/cli/gen/actions/class.rb +5 -0
- data/lib/roby/cli/gen/actions/test.rb +6 -0
- data/lib/roby/cli/gen/app/.yardopts +6 -0
- data/lib/roby/cli/gen/app/README.md +28 -0
- data/lib/roby/cli/gen/app/Rakefile +15 -0
- data/{app → lib/roby/cli/gen/app}/config/app.yml +29 -39
- data/lib/roby/cli/gen/app/models/.gitattributes +1 -0
- data/{app → lib/roby/cli/gen/app/scripts}/controllers/.gitattributes +0 -0
- data/{app/data/.gitattributes → lib/roby/cli/gen/app/test/.gitignore} +0 -0
- data/lib/roby/cli/gen/class/class.rb +6 -0
- data/lib/roby/cli/gen/class/test.rb +7 -0
- data/lib/roby/cli/gen/helpers.rb +203 -0
- data/lib/roby/cli/gen/module/module.rb +5 -0
- data/lib/roby/cli/gen/module/test.rb +6 -0
- data/lib/roby/cli/gen/roby_app/config/init.rb +17 -0
- data/lib/roby/cli/gen/roby_app/config/robots/robot.rb +40 -0
- data/lib/roby/cli/gen/task/class.rb +44 -0
- data/lib/roby/cli/gen/task/test.rb +6 -0
- data/lib/roby/cli/gen_main.rb +120 -0
- data/lib/roby/cli/log.rb +276 -0
- data/lib/roby/cli/log/flamegraph.html +499 -0
- data/lib/roby/cli/log/flamegraph_renderer.rb +88 -0
- data/lib/roby/cli/main.rb +153 -0
- data/lib/roby/coordination.rb +60 -0
- data/lib/roby/coordination/action_script.rb +25 -0
- data/lib/roby/coordination/action_state_machine.rb +125 -0
- data/lib/roby/coordination/actions.rb +106 -0
- data/lib/roby/coordination/base.rb +145 -0
- data/lib/roby/coordination/calculus.rb +40 -0
- data/lib/roby/coordination/child.rb +28 -0
- data/lib/roby/coordination/event.rb +29 -0
- data/lib/roby/coordination/fault_handler.rb +25 -0
- data/lib/roby/coordination/fault_handling_task.rb +13 -0
- data/lib/roby/coordination/fault_response_table.rb +110 -0
- data/lib/roby/coordination/models/action_script.rb +64 -0
- data/lib/roby/coordination/models/action_state_machine.rb +224 -0
- data/lib/roby/coordination/models/actions.rb +191 -0
- data/lib/roby/coordination/models/arguments.rb +55 -0
- data/lib/roby/coordination/models/base.rb +176 -0
- data/lib/roby/coordination/models/capture.rb +86 -0
- data/lib/roby/coordination/models/child.rb +35 -0
- data/lib/roby/coordination/models/event.rb +41 -0
- data/lib/roby/coordination/models/exceptions.rb +42 -0
- data/lib/roby/coordination/models/fault_handler.rb +219 -0
- data/lib/roby/coordination/models/fault_response_table.rb +77 -0
- data/lib/roby/coordination/models/root.rb +22 -0
- data/lib/roby/coordination/models/script.rb +283 -0
- data/lib/roby/coordination/models/task.rb +184 -0
- data/lib/roby/coordination/models/task_from_action.rb +50 -0
- data/lib/roby/coordination/models/task_from_as_plan.rb +33 -0
- data/lib/roby/coordination/models/task_from_instanciation_object.rb +31 -0
- data/lib/roby/coordination/models/task_from_variable.rb +27 -0
- data/lib/roby/coordination/models/task_with_dependencies.rb +48 -0
- data/lib/roby/coordination/models/variable.rb +32 -0
- data/lib/roby/coordination/script.rb +200 -0
- data/lib/roby/coordination/script_instruction.rb +12 -0
- data/lib/roby/coordination/task.rb +45 -0
- data/lib/roby/coordination/task_base.rb +69 -0
- data/lib/roby/coordination/task_script.rb +293 -0
- data/lib/roby/coordination/task_state_machine.rb +308 -0
- data/lib/roby/decision_control.rb +33 -21
- data/lib/roby/distributed_object.rb +76 -0
- data/lib/roby/droby.rb +17 -0
- data/lib/roby/droby/droby_id.rb +6 -0
- data/lib/roby/droby/enable.rb +153 -0
- data/lib/roby/droby/event_logger.rb +189 -0
- data/lib/roby/droby/event_logging.rb +57 -0
- data/lib/roby/droby/exceptions.rb +14 -0
- data/lib/roby/droby/identifiable.rb +22 -0
- data/lib/roby/droby/logfile.rb +141 -0
- data/lib/roby/droby/logfile/client.rb +176 -0
- data/lib/roby/droby/logfile/file_format.md +97 -0
- data/lib/roby/droby/logfile/index.rb +117 -0
- data/lib/roby/droby/logfile/reader.rb +139 -0
- data/lib/roby/droby/logfile/server.rb +199 -0
- data/lib/roby/droby/logfile/writer.rb +114 -0
- data/lib/roby/droby/marshal.rb +264 -0
- data/lib/roby/droby/marshallable.rb +12 -0
- data/lib/roby/droby/null_event_logger.rb +25 -0
- data/lib/roby/droby/object_manager.rb +205 -0
- data/lib/roby/droby/peer_id.rb +6 -0
- data/lib/roby/droby/plan_rebuilder.rb +373 -0
- data/lib/roby/droby/rebuilt_plan.rb +160 -0
- data/lib/roby/droby/remote_droby_id.rb +6 -0
- data/lib/roby/droby/timepoints.rb +205 -0
- data/lib/roby/droby/timepoints_ctf.metadata.erb +101 -0
- data/lib/roby/droby/timepoints_ctf.rb +125 -0
- data/lib/roby/droby/v5.rb +14 -0
- data/lib/roby/droby/v5/builtin.rb +120 -0
- data/lib/roby/droby/v5/droby_class.rb +45 -0
- data/lib/roby/droby/v5/droby_constant.rb +81 -0
- data/lib/roby/droby/v5/droby_dump.rb +1026 -0
- data/lib/roby/droby/v5/droby_id.rb +44 -0
- data/lib/roby/droby/v5/droby_model.rb +82 -0
- data/lib/roby/droby/v5/peer_id.rb +10 -0
- data/lib/roby/droby/v5/remote_droby_id.rb +42 -0
- data/lib/roby/event.rb +79 -957
- data/lib/roby/event_constraints.rb +835 -0
- data/lib/roby/event_generator.rb +1047 -0
- data/lib/roby/event_structure/causal_link.rb +6 -0
- data/lib/roby/event_structure/forwarding.rb +6 -0
- data/lib/roby/event_structure/precedence.rb +7 -0
- data/lib/roby/event_structure/signal.rb +8 -0
- data/lib/roby/event_structure/temporal_constraints.rb +640 -0
- data/lib/roby/exceptions.rb +446 -152
- data/lib/roby/executable_plan.rb +549 -0
- data/lib/roby/execution_engine.rb +1997 -950
- data/lib/roby/filter_generator.rb +26 -0
- data/lib/roby/gui/chronicle_view.rb +225 -0
- data/lib/roby/gui/chronicle_widget.rb +925 -0
- data/lib/roby/gui/dot_id.rb +11 -0
- data/lib/roby/gui/exception_view.rb +44 -0
- data/lib/roby/gui/log_display.rb +273 -0
- data/lib/roby/gui/model_views.rb +2 -0
- data/lib/roby/gui/model_views/action_interface.rb +53 -0
- data/lib/roby/gui/model_views/task.rb +47 -0
- data/lib/roby/gui/model_views/task.rhtml +41 -0
- data/lib/roby/gui/object_info_view.rb +89 -0
- data/lib/roby/gui/plan_dot_layout.rb +427 -0
- data/lib/roby/gui/plan_rebuilder_widget.rb +357 -0
- data/lib/roby/gui/qt4_toMSecsSinceEpoch.rb +8 -0
- data/lib/roby/gui/relations_view.rb +278 -0
- data/lib/roby/gui/relations_view/relations.ui +139 -0
- data/lib/roby/gui/relations_view/relations_canvas.rb +1088 -0
- data/lib/roby/gui/relations_view/relations_config.rb +292 -0
- data/lib/roby/gui/relations_view/relations_view.ui +53 -0
- data/lib/roby/gui/scheduler_view.css +24 -0
- data/lib/roby/gui/scheduler_view.rb +46 -0
- data/lib/roby/gui/scheduler_view.rhtml +53 -0
- data/lib/roby/gui/stepping.rb +93 -0
- data/lib/roby/gui/stepping.ui +181 -0
- data/lib/roby/gui/styles.rb +81 -0
- data/lib/roby/gui/task_display_configuration.rb +42 -0
- data/lib/roby/gui/task_state_at.rb +38 -0
- data/lib/roby/hooks.rb +26 -0
- data/lib/roby/interface.rb +136 -469
- data/lib/roby/interface/async.rb +20 -0
- data/lib/roby/interface/async/action_monitor.rb +188 -0
- data/lib/roby/interface/async/interface.rb +498 -0
- data/lib/roby/interface/async/job_monitor.rb +213 -0
- data/lib/roby/interface/async/log.rb +238 -0
- data/lib/roby/interface/async/new_job_listener.rb +79 -0
- data/lib/roby/interface/async/ui_connector.rb +183 -0
- data/lib/roby/interface/client.rb +553 -0
- data/lib/roby/interface/command.rb +24 -0
- data/lib/roby/interface/command_argument.rb +16 -0
- data/lib/roby/interface/command_library.rb +92 -0
- data/lib/roby/interface/droby_channel.rb +174 -0
- data/lib/roby/interface/exceptions.rb +22 -0
- data/lib/roby/interface/interface.rb +655 -0
- data/lib/roby/interface/job.rb +47 -0
- data/lib/roby/interface/rest.rb +10 -0
- data/lib/roby/interface/rest/api.rb +29 -0
- data/lib/roby/interface/rest/helpers.rb +24 -0
- data/lib/roby/interface/rest/server.rb +212 -0
- data/lib/roby/interface/server.rb +154 -0
- data/lib/roby/interface/shell_client.rb +468 -0
- data/lib/roby/interface/shell_subcommand.rb +24 -0
- data/lib/roby/interface/subcommand_client.rb +35 -0
- data/lib/roby/interface/tcp.rb +168 -0
- data/lib/roby/models/arguments.rb +112 -0
- data/lib/roby/models/plan_object.rb +83 -0
- data/lib/roby/models/task.rb +835 -0
- data/lib/roby/models/task_event.rb +62 -0
- data/lib/roby/models/task_service.rb +78 -0
- data/lib/roby/or_generator.rb +88 -0
- data/lib/roby/plan.rb +1751 -864
- data/lib/roby/plan_object.rb +611 -0
- data/lib/roby/plan_service.rb +200 -0
- data/lib/roby/promise.rb +332 -0
- data/lib/roby/queries.rb +23 -0
- data/lib/roby/queries/and_matcher.rb +32 -0
- data/lib/roby/queries/any.rb +27 -0
- data/lib/roby/queries/code_error_matcher.rb +58 -0
- data/lib/roby/queries/event_generator_matcher.rb +9 -0
- data/lib/roby/queries/execution_exception_matcher.rb +165 -0
- data/lib/roby/queries/index.rb +165 -0
- data/lib/roby/queries/localized_error_matcher.rb +149 -0
- data/lib/roby/queries/matcher_base.rb +107 -0
- data/lib/roby/queries/none.rb +27 -0
- data/lib/roby/queries/not_matcher.rb +30 -0
- data/lib/roby/queries/op_matcher.rb +8 -0
- data/lib/roby/queries/or_matcher.rb +30 -0
- data/lib/roby/queries/plan_object_matcher.rb +363 -0
- data/lib/roby/queries/query.rb +188 -0
- data/lib/roby/queries/task_event_generator_matcher.rb +86 -0
- data/lib/roby/queries/task_matcher.rb +344 -0
- data/lib/roby/relations.rb +42 -678
- data/lib/roby/relations/bidirectional_directed_adjacency_graph.rb +492 -0
- data/lib/roby/relations/directed_relation_support.rb +268 -0
- data/lib/roby/relations/event_relation_graph.rb +19 -0
- data/lib/roby/relations/fork_merge_visitor.rb +154 -0
- data/lib/roby/relations/graph.rb +533 -0
- data/lib/roby/relations/models/directed_relation_support.rb +11 -0
- data/lib/roby/relations/models/graph.rb +75 -0
- data/lib/roby/relations/models/task_relation_graph.rb +18 -0
- data/lib/roby/relations/space.rb +380 -0
- data/lib/roby/relations/task_relation_graph.rb +20 -0
- data/lib/roby/robot.rb +85 -38
- data/lib/roby/schedulers/basic.rb +155 -25
- data/lib/roby/schedulers/null.rb +20 -0
- data/lib/roby/schedulers/reporting.rb +31 -0
- data/lib/roby/schedulers/state.rb +129 -0
- data/lib/roby/schedulers/temporal.rb +91 -0
- data/lib/roby/singletons.rb +87 -0
- data/lib/roby/standalone.rb +4 -2
- data/lib/roby/standard_errors.rb +405 -82
- data/lib/roby/state.rb +6 -3
- data/lib/roby/state/conf_model.rb +5 -0
- data/lib/roby/state/events.rb +181 -95
- data/lib/roby/state/goal_model.rb +77 -0
- data/lib/roby/state/open_struct.rb +591 -0
- data/lib/roby/state/open_struct_model.rb +68 -0
- data/lib/roby/state/pos.rb +45 -45
- data/lib/roby/state/shapes.rb +11 -11
- data/lib/roby/state/state_model.rb +303 -0
- data/lib/roby/state/task.rb +43 -0
- data/lib/roby/support.rb +88 -148
- data/lib/roby/task.rb +1361 -1750
- data/lib/roby/task_arguments.rb +428 -0
- data/lib/roby/task_event.rb +127 -0
- data/lib/roby/task_event_generator.rb +337 -0
- data/lib/roby/task_service.rb +6 -0
- data/lib/roby/task_structure/conflicts.rb +104 -0
- data/lib/roby/task_structure/dependency.rb +932 -0
- data/lib/roby/task_structure/error_handling.rb +118 -0
- data/lib/roby/task_structure/executed_by.rb +234 -0
- data/lib/roby/task_structure/planned_by.rb +90 -0
- data/lib/roby/tasks/aggregator.rb +37 -0
- data/lib/roby/tasks/external_process.rb +275 -0
- data/lib/roby/tasks/group.rb +27 -0
- data/lib/roby/tasks/null.rb +19 -0
- data/lib/roby/tasks/parallel.rb +43 -0
- data/lib/roby/tasks/sequence.rb +88 -0
- data/lib/roby/tasks/simple.rb +21 -0
- data/lib/roby/{thread_task.rb → tasks/thread.rb} +50 -24
- data/lib/roby/tasks/timeout.rb +17 -0
- data/lib/roby/tasks/virtual.rb +55 -0
- data/lib/roby/template_plan.rb +7 -0
- data/lib/roby/test/aruba_minitest.rb +74 -0
- data/lib/roby/test/assertion.rb +16 -0
- data/lib/roby/test/assertions.rb +490 -0
- data/lib/roby/test/common.rb +368 -591
- data/lib/roby/test/dsl.rb +149 -0
- data/lib/roby/test/error.rb +18 -0
- data/lib/roby/test/event_reporter.rb +83 -0
- data/lib/roby/test/execution_expectations.rb +1134 -0
- data/lib/roby/test/expect_execution.rb +151 -0
- data/lib/roby/test/minitest_helpers.rb +166 -0
- data/lib/roby/test/roby_app_helpers.rb +200 -0
- data/lib/roby/test/run_planners.rb +155 -0
- data/lib/roby/test/self.rb +112 -0
- data/lib/roby/test/spec.rb +198 -0
- data/lib/roby/test/tasks/empty_task.rb +4 -4
- data/lib/roby/test/tasks/goto.rb +28 -27
- data/lib/roby/test/teardown_plans.rb +100 -0
- data/lib/roby/test/testcase.rb +239 -307
- data/lib/roby/test/tools.rb +159 -155
- data/lib/roby/test/validate_state_machine.rb +75 -0
- data/lib/roby/transaction.rb +1125 -0
- data/lib/roby/transaction/event_generator_proxy.rb +63 -0
- data/lib/roby/transaction/plan_object_proxy.rb +99 -0
- data/lib/roby/transaction/plan_service_proxy.rb +43 -0
- data/lib/roby/transaction/proxying.rb +120 -0
- data/lib/roby/transaction/task_event_generator_proxy.rb +19 -0
- data/lib/roby/transaction/task_proxy.rb +135 -0
- data/lib/roby/until_generator.rb +30 -0
- data/lib/roby/version.rb +5 -0
- data/lib/roby/yard.rb +169 -0
- data/lib/yard-roby.rb +1 -0
- data/manifest.xml +32 -6
- data/roby.gemspec +59 -0
- metadata +788 -587
- data/Manifest.txt +0 -321
- data/NOTES +0 -4
- data/README.txt +0 -166
- data/TODO.txt +0 -146
- data/app/README.txt +0 -24
- data/app/Rakefile +0 -8
- data/app/config/ROBOT.rb +0 -5
- data/app/config/init.rb +0 -33
- data/app/config/roby.yml +0 -3
- data/app/controllers/ROBOT.rb +0 -2
- data/app/planners/ROBOT/main.rb +0 -6
- data/app/planners/main.rb +0 -5
- data/app/scripts/distributed +0 -3
- data/app/scripts/generate/bookmarks +0 -3
- data/app/scripts/replay +0 -3
- data/app/scripts/results +0 -3
- data/app/scripts/run +0 -3
- data/app/scripts/server +0 -3
- data/app/scripts/shell +0 -3
- data/app/scripts/test +0 -3
- data/app/tasks/.gitattributes +0 -0
- data/app/tasks/ROBOT/.gitattributes +0 -0
- data/bin/roby-shell +0 -25
- data/doc/guide/src/basics/app.page +0 -139
- data/doc/guide/src/basics/index.page +0 -11
- data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/basics/relations_display.page +0 -203
- data/doc/guide/src/basics/shell.page +0 -102
- data/doc/guide/src/default.css +0 -319
- data/doc/guide/src/introduction/index.page +0 -29
- data/doc/guide/src/introduction/publications.page +0 -14
- data/doc/guide/src/relations/dependency.page +0 -89
- data/doc/guide/src/relations/index.page +0 -12
- data/ext/droby/dump.cc +0 -175
- data/ext/droby/extconf.rb +0 -3
- data/ext/graph/algorithm.cc +0 -746
- data/ext/graph/extconf.rb +0 -7
- data/ext/graph/graph.cc +0 -575
- data/ext/graph/graph.hh +0 -183
- data/ext/graph/iterator_sequence.hh +0 -102
- data/ext/graph/undirected_dfs.hh +0 -226
- data/ext/graph/undirected_graph.hh +0 -421
- data/lib/roby/app/scripts/generate/bookmarks.rb +0 -162
- data/lib/roby/app/scripts/replay.rb +0 -31
- data/lib/roby/app/scripts/server.rb +0 -18
- data/lib/roby/basic_object.rb +0 -151
- data/lib/roby/config.rb +0 -14
- data/lib/roby/distributed.rb +0 -36
- data/lib/roby/distributed/base.rb +0 -448
- data/lib/roby/distributed/communication.rb +0 -875
- data/lib/roby/distributed/connection_space.rb +0 -616
- data/lib/roby/distributed/distributed_object.rb +0 -206
- data/lib/roby/distributed/drb.rb +0 -62
- data/lib/roby/distributed/notifications.rb +0 -531
- data/lib/roby/distributed/peer.rb +0 -555
- data/lib/roby/distributed/protocol.rb +0 -529
- data/lib/roby/distributed/proxy.rb +0 -343
- data/lib/roby/distributed/subscription.rb +0 -311
- data/lib/roby/distributed/transaction.rb +0 -498
- data/lib/roby/external_process_task.rb +0 -225
- data/lib/roby/graph.rb +0 -160
- data/lib/roby/log.rb +0 -3
- data/lib/roby/log/chronicle.rb +0 -303
- data/lib/roby/log/console.rb +0 -74
- data/lib/roby/log/data_stream.rb +0 -275
- data/lib/roby/log/dot.rb +0 -279
- data/lib/roby/log/event_stream.rb +0 -161
- data/lib/roby/log/file.rb +0 -396
- data/lib/roby/log/gui/basic_display.ui +0 -83
- data/lib/roby/log/gui/basic_display_ui.rb +0 -89
- data/lib/roby/log/gui/chronicle.rb +0 -26
- data/lib/roby/log/gui/chronicle_view.rb +0 -40
- data/lib/roby/log/gui/chronicle_view.ui +0 -70
- data/lib/roby/log/gui/chronicle_view_ui.rb +0 -90
- data/lib/roby/log/gui/data_displays.rb +0 -171
- data/lib/roby/log/gui/data_displays.ui +0 -155
- data/lib/roby/log/gui/data_displays_ui.rb +0 -146
- data/lib/roby/log/gui/notifications.rb +0 -26
- data/lib/roby/log/gui/relations.rb +0 -269
- data/lib/roby/log/gui/relations.ui +0 -123
- data/lib/roby/log/gui/relations_ui.rb +0 -120
- data/lib/roby/log/gui/relations_view.rb +0 -185
- data/lib/roby/log/gui/relations_view.ui +0 -149
- data/lib/roby/log/gui/relations_view_ui.rb +0 -144
- data/lib/roby/log/gui/replay.rb +0 -366
- data/lib/roby/log/gui/replay_controls.rb +0 -206
- data/lib/roby/log/gui/replay_controls.ui +0 -282
- data/lib/roby/log/gui/replay_controls_ui.rb +0 -249
- data/lib/roby/log/gui/runtime.rb +0 -130
- data/lib/roby/log/hooks.rb +0 -186
- data/lib/roby/log/logger.rb +0 -203
- data/lib/roby/log/notifications.rb +0 -244
- data/lib/roby/log/plan_rebuilder.rb +0 -468
- data/lib/roby/log/relations.rb +0 -1084
- data/lib/roby/log/server.rb +0 -547
- data/lib/roby/log/sqlite.rb +0 -47
- data/lib/roby/log/timings.rb +0 -233
- data/lib/roby/plan-object.rb +0 -371
- data/lib/roby/planning.rb +0 -13
- data/lib/roby/planning/loops.rb +0 -309
- data/lib/roby/planning/model.rb +0 -1012
- data/lib/roby/planning/task.rb +0 -180
- data/lib/roby/query.rb +0 -655
- data/lib/roby/relations/conflicts.rb +0 -67
- data/lib/roby/relations/dependency.rb +0 -358
- data/lib/roby/relations/ensured.rb +0 -19
- data/lib/roby/relations/error_handling.rb +0 -22
- data/lib/roby/relations/events.rb +0 -7
- data/lib/roby/relations/executed_by.rb +0 -208
- data/lib/roby/relations/influence.rb +0 -10
- data/lib/roby/relations/planned_by.rb +0 -63
- data/lib/roby/state/information.rb +0 -55
- data/lib/roby/state/state.rb +0 -367
- data/lib/roby/task-operations.rb +0 -186
- data/lib/roby/task_index.rb +0 -80
- data/lib/roby/test/distributed.rb +0 -230
- data/lib/roby/test/tasks/simple_task.rb +0 -23
- data/lib/roby/transactions.rb +0 -507
- data/lib/roby/transactions/proxy.rb +0 -325
- data/plugins/fault_injection/History.txt +0 -4
- data/plugins/fault_injection/README.txt +0 -34
- data/plugins/fault_injection/Rakefile +0 -12
- data/plugins/fault_injection/TODO.txt +0 -0
- data/plugins/fault_injection/app.rb +0 -52
- data/plugins/fault_injection/fault_injection.rb +0 -89
- data/plugins/fault_injection/test/test_fault_injection.rb +0 -78
- data/plugins/subsystems/README.txt +0 -37
- data/plugins/subsystems/Rakefile +0 -13
- data/plugins/subsystems/app.rb +0 -182
- data/plugins/subsystems/test/app/README +0 -24
- data/plugins/subsystems/test/app/Rakefile +0 -8
- data/plugins/subsystems/test/app/config/app.yml +0 -71
- data/plugins/subsystems/test/app/config/init.rb +0 -12
- data/plugins/subsystems/test/app/config/roby.yml +0 -3
- data/plugins/subsystems/test/app/planners/main.rb +0 -20
- data/plugins/subsystems/test/app/scripts/distributed +0 -3
- data/plugins/subsystems/test/app/scripts/replay +0 -3
- data/plugins/subsystems/test/app/scripts/results +0 -3
- data/plugins/subsystems/test/app/scripts/run +0 -3
- data/plugins/subsystems/test/app/scripts/server +0 -3
- data/plugins/subsystems/test/app/scripts/shell +0 -3
- data/plugins/subsystems/test/app/scripts/test +0 -3
- data/plugins/subsystems/test/app/tasks/services.rb +0 -15
- data/plugins/subsystems/test/test_subsystems.rb +0 -78
- data/test/distributed/test_communication.rb +0 -195
- data/test/distributed/test_connection.rb +0 -284
- data/test/distributed/test_execution.rb +0 -378
- data/test/distributed/test_mixed_plan.rb +0 -341
- data/test/distributed/test_plan_notifications.rb +0 -238
- data/test/distributed/test_protocol.rb +0 -525
- data/test/distributed/test_query.rb +0 -106
- data/test/distributed/test_remote_plan.rb +0 -491
- data/test/distributed/test_transaction.rb +0 -466
- data/test/mockups/external_process +0 -28
- data/test/mockups/tasks.rb +0 -27
- data/test/planning/test_loops.rb +0 -432
- data/test/planning/test_model.rb +0 -427
- data/test/planning/test_task.rb +0 -126
- data/test/relations/test_conflicts.rb +0 -42
- data/test/relations/test_dependency.rb +0 -324
- data/test/relations/test_ensured.rb +0 -38
- data/test/relations/test_executed_by.rb +0 -224
- data/test/relations/test_planned_by.rb +0 -56
- data/test/suite_core.rb +0 -29
- data/test/suite_distributed.rb +0 -10
- data/test/suite_planning.rb +0 -4
- data/test/suite_relations.rb +0 -8
- data/test/tasks/test_external_process.rb +0 -126
- data/test/tasks/test_thread_task.rb +0 -70
- data/test/test_bgl.rb +0 -528
- data/test/test_event.rb +0 -969
- data/test/test_exceptions.rb +0 -591
- data/test/test_execution_engine.rb +0 -987
- data/test/test_gui.rb +0 -20
- data/test/test_interface.rb +0 -43
- data/test/test_log.rb +0 -125
- data/test/test_log_server.rb +0 -133
- data/test/test_plan.rb +0 -418
- data/test/test_query.rb +0 -424
- data/test/test_relations.rb +0 -260
- data/test/test_state.rb +0 -432
- data/test/test_support.rb +0 -16
- data/test/test_task.rb +0 -1181
- data/test/test_testcase.rb +0 -138
- data/test/test_transactions.rb +0 -610
- data/test/test_transactions_proxy.rb +0 -216
|
@@ -2,14 +2,10 @@ module Roby
|
|
|
2
2
|
class DecisionControl
|
|
3
3
|
# Called when there is a conflict between a set of running tasks and a
|
|
4
4
|
# task that should have been started. The default operation is to
|
|
5
|
-
#
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
starting_task.event(:start).postpone t.event(:stop)
|
|
10
|
-
return
|
|
11
|
-
end
|
|
12
|
-
end
|
|
5
|
+
# add an error about it
|
|
6
|
+
def conflict(starting_task, running_tasks)
|
|
7
|
+
starting_task.failed_to_start! TaskStructure::ConflictError.new(starting_task, running_tasks)
|
|
8
|
+
end
|
|
13
9
|
|
|
14
10
|
# Called when a transaction/execution conflict occured, where a task
|
|
15
11
|
# included in the transaction has been removed from the plan.
|
|
@@ -33,7 +29,7 @@ def finalized_plan_task(transaction, proxy)
|
|
|
33
29
|
#
|
|
34
30
|
# The default action is to do nothing
|
|
35
31
|
def finalized_plan_event(transaction, proxy)
|
|
36
|
-
|
|
32
|
+
end
|
|
37
33
|
|
|
38
34
|
# Called when a transaction/execution conflict occured, where relations
|
|
39
35
|
# have been added in the plan and are not present in the transaction.
|
|
@@ -43,8 +39,8 @@ def finalized_plan_event(transaction, proxy)
|
|
|
43
39
|
# invalidated prior to this call
|
|
44
40
|
#
|
|
45
41
|
# The default action is to do nothing
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
def adding_plan_relation(transaction, parent, child, relations, info)
|
|
43
|
+
end
|
|
48
44
|
|
|
49
45
|
# Called when a transaction/execution conflict occured, where relations
|
|
50
46
|
# have been removed from the plan, which were present in the
|
|
@@ -55,21 +51,37 @@ def adding_plan_relation(transaction, parent, child, relations, info)
|
|
|
55
51
|
# prior to this call
|
|
56
52
|
#
|
|
57
53
|
# The default action is to do nothing
|
|
58
|
-
|
|
54
|
+
def removing_plan_relation(transaction, parent, child, relations)
|
|
59
55
|
end
|
|
60
|
-
end
|
|
61
56
|
|
|
62
|
-
|
|
63
|
-
|
|
57
|
+
# Called when a child failed a dependency relation, but the parent is
|
|
58
|
+
# not running
|
|
59
|
+
#
|
|
60
|
+
# It must return true if the dependency failure is considered an error,
|
|
61
|
+
# and false otherwise.
|
|
62
|
+
#
|
|
63
|
+
# The default policy is to mark the parent as failed to start
|
|
64
|
+
def pending_dependency_failed(parent, child, reason)
|
|
65
|
+
parent.failed_to_start!(reason)
|
|
66
|
+
true
|
|
67
|
+
end
|
|
64
68
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
# Called when an execution agent fails to start.
|
|
70
|
+
#
|
|
71
|
+
# The default policy is to mark all executed tasks as failed to start
|
|
72
|
+
def pending_executed_by_failed(agent, tasks)
|
|
73
|
+
tasks.each do |t|
|
|
74
|
+
t.failed_to_start!(agent.failure_reason || agent.terminal_event)
|
|
70
75
|
end
|
|
76
|
+
end
|
|
71
77
|
|
|
72
|
-
|
|
78
|
+
# Called when an execution agent fails to start.
|
|
79
|
+
#
|
|
80
|
+
# The default policy is to mark all executed tasks as failed to start
|
|
81
|
+
def execution_agent_failed_to_start(agent, tasks, reason = nil)
|
|
82
|
+
tasks.each do |t|
|
|
83
|
+
t.failed_to_start!(reason || agent.failure_reason || agent.terminal_event)
|
|
84
|
+
end
|
|
73
85
|
end
|
|
74
86
|
end
|
|
75
87
|
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module Roby
|
|
2
|
+
class ::Class
|
|
3
|
+
# If true, this model will never get sent to remote peers.
|
|
4
|
+
def private_model?
|
|
5
|
+
if !@private_model.nil?
|
|
6
|
+
@private_model
|
|
7
|
+
else
|
|
8
|
+
klass = superclass
|
|
9
|
+
if superclass.respond_to?(:private_model?)
|
|
10
|
+
superclass.private_model?
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Declares that neither this model nor its subclasses should be sent to
|
|
16
|
+
# remote peers.
|
|
17
|
+
#
|
|
18
|
+
# I.e., from the point of view of our peers, instances of this model are
|
|
19
|
+
# actually instances of its superclass.
|
|
20
|
+
def private_model; @private_model = true end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class ::Module
|
|
24
|
+
# There are currently no way to make a module private
|
|
25
|
+
def private_model?; false end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Base class for most plan-related objects (Plan, PlanObject, ...)
|
|
29
|
+
#
|
|
30
|
+
# This class contains the information and manipulation attributes that are
|
|
31
|
+
# at the core of Roby object management. In particular, it maintains the
|
|
32
|
+
# distributed object information (needed in multi-Roby setups).
|
|
33
|
+
class DistributedObject
|
|
34
|
+
# The ID of the local process
|
|
35
|
+
attr_reader :local_owner_id
|
|
36
|
+
# The set of Peer objects which own this object
|
|
37
|
+
attr_reader :owners
|
|
38
|
+
|
|
39
|
+
attr_predicate :self_owned?
|
|
40
|
+
|
|
41
|
+
def initialize # :nodoc:
|
|
42
|
+
@owners = Array.new
|
|
43
|
+
@self_owned = true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def initialize_copy(old) # :nodoc:
|
|
47
|
+
super
|
|
48
|
+
@owners = Array.new
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def add_owner(owner)
|
|
52
|
+
@owners << owner
|
|
53
|
+
@self_owned = @owners.include?(local_owner_id)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def remove_owner(owner)
|
|
57
|
+
@owners.delete(owner)
|
|
58
|
+
@self_owned = @owners.empty? || @owners.include?(local_owner_id)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# True if the given peer owns this object
|
|
62
|
+
def owned_by?(peer_id)
|
|
63
|
+
if peer_id == local_owner_id
|
|
64
|
+
self_owned?
|
|
65
|
+
else
|
|
66
|
+
owners.include?(peer_id)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def clear_owners
|
|
71
|
+
owners.clear
|
|
72
|
+
@self_owned = true
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
data/lib/roby/droby.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'roby/droby/identifiable'
|
|
2
|
+
require 'roby/droby/v5'
|
|
3
|
+
require 'roby/droby/droby_id'
|
|
4
|
+
require 'roby/droby/peer_id'
|
|
5
|
+
require 'roby/droby/remote_droby_id'
|
|
6
|
+
require 'roby/droby/object_manager'
|
|
7
|
+
require 'roby/droby/marshal'
|
|
8
|
+
require 'roby/droby/event_logging'
|
|
9
|
+
require 'roby/droby/null_event_logger'
|
|
10
|
+
|
|
11
|
+
module Roby
|
|
12
|
+
module DRoby
|
|
13
|
+
extend Logger::Hierarchy
|
|
14
|
+
extend Logger::Forward
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
require 'roby/droby'
|
|
2
|
+
|
|
3
|
+
Exception.extend Roby::DRoby::V5::Builtins::ClassDumper
|
|
4
|
+
Exception.extend Roby::DRoby::Identifiable
|
|
5
|
+
Exception.include Roby::DRoby::V5::Builtins::ExceptionDumper
|
|
6
|
+
Array.include Roby::DRoby::V5::Builtins::ArrayDumper
|
|
7
|
+
Hash.include Roby::DRoby::V5::Builtins::HashDumper
|
|
8
|
+
Set.include Roby::DRoby::V5::Builtins::SetDumper
|
|
9
|
+
Thread.include Roby::DRoby::Identifiable
|
|
10
|
+
|
|
11
|
+
class Module
|
|
12
|
+
def droby_dump(dest)
|
|
13
|
+
raise "can't dump modules (#{self})"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
class Class
|
|
17
|
+
def droby_dump(dest)
|
|
18
|
+
raise "can't dump class #{self}"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class NilClass
|
|
23
|
+
def droby_id
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
module Roby
|
|
28
|
+
class ExceptionBase
|
|
29
|
+
include DRoby::V5::ExceptionBaseDumper
|
|
30
|
+
end
|
|
31
|
+
class LocalizedError
|
|
32
|
+
include DRoby::V5::LocalizedErrorDumper
|
|
33
|
+
end
|
|
34
|
+
class PlanningFailedError
|
|
35
|
+
include DRoby::V5::PlanningFailedErrorDumper
|
|
36
|
+
end
|
|
37
|
+
class ExecutionException
|
|
38
|
+
include DRoby::V5::ExecutionExceptionDumper
|
|
39
|
+
end
|
|
40
|
+
module Relations
|
|
41
|
+
class BidirectionalDirectedAdjacencyGraph
|
|
42
|
+
include DRoby::V5::BidirectionalGraphDumper
|
|
43
|
+
end
|
|
44
|
+
class Graph
|
|
45
|
+
extend DRoby::Identifiable
|
|
46
|
+
extend DRoby::V5::DRobyConstant::Dump
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
module Models
|
|
50
|
+
class TaskServiceModel
|
|
51
|
+
include DRoby::Identifiable
|
|
52
|
+
include DRoby::V5::Models::TaskServiceModelDumper
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
class Event
|
|
56
|
+
include DRoby::V5::EventDumper
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class PlanObject
|
|
60
|
+
include DRoby::Identifiable
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
class EventGenerator
|
|
64
|
+
extend DRoby::Identifiable
|
|
65
|
+
extend DRoby::V5::DRobyConstant::Dump
|
|
66
|
+
include DRoby::V5::EventGeneratorDumper
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
class TaskArguments
|
|
70
|
+
include DRoby::V5::TaskArgumentsDumper
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class Task
|
|
74
|
+
extend DRoby::Identifiable
|
|
75
|
+
extend DRoby::V5::Models::TaskDumper
|
|
76
|
+
include DRoby::V5::TaskDumper
|
|
77
|
+
end
|
|
78
|
+
class TaskEventGenerator
|
|
79
|
+
include DRoby::V5::TaskEventGeneratorDumper
|
|
80
|
+
end
|
|
81
|
+
class DefaultArgument
|
|
82
|
+
include DRoby::V5::DefaultArgumentDumper
|
|
83
|
+
end
|
|
84
|
+
class DelayedArgumentFromObject
|
|
85
|
+
extend DRoby::V5::Builtins::ClassDumper
|
|
86
|
+
include DRoby::V5::DelayedArgumentFromObjectDumper
|
|
87
|
+
end
|
|
88
|
+
class Plan
|
|
89
|
+
include DRoby::Identifiable
|
|
90
|
+
include DRoby::V5::PlanDumper
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
module Actions
|
|
94
|
+
class Action
|
|
95
|
+
include DRoby::V5::Actions::ActionDumper
|
|
96
|
+
end
|
|
97
|
+
class Interface
|
|
98
|
+
extend DRoby::Identifiable
|
|
99
|
+
extend DRoby::V5::ModelDumper
|
|
100
|
+
end
|
|
101
|
+
module Models
|
|
102
|
+
class Action
|
|
103
|
+
include DRoby::V5::Actions::Models::ActionDumper
|
|
104
|
+
class Argument
|
|
105
|
+
include DRoby::V5::Actions::Models::Action::ArgumentDumper
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
class MethodAction
|
|
110
|
+
include DRoby::V5::Actions::Models::MethodActionDumper
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
class CoordinationAction
|
|
114
|
+
include DRoby::V5::Actions::Models::CoordinationActionDumper
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
module Queries
|
|
120
|
+
class AndMatcher
|
|
121
|
+
include DRoby::V5::Queries::AndMatcherDumper
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
class ExecutionExceptionMatcher
|
|
125
|
+
include DRoby::V5::Queries::ExecutionExceptionMatcherDumper
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
class LocalizedErrorMatcher
|
|
129
|
+
include DRoby::V5::Queries::LocalizedErrorMatcherDumper
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
class NotMatcher
|
|
133
|
+
include DRoby::V5::Queries::NotMatcherDumper
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
class OrMatcher
|
|
137
|
+
include DRoby::V5::Queries::OrMatcherDumper
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
class PlanObjectMatcher
|
|
141
|
+
include DRoby::V5::Queries::PlanObjectMatcherDumper
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
class TaskMatcher
|
|
145
|
+
include DRoby::V5::Queries::TaskMatcherDumper
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
class Query
|
|
149
|
+
include DRoby::V5::Queries::QueryDumper
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
module Roby
|
|
2
|
+
module DRoby
|
|
3
|
+
# Object that acts as an observer for ExecutablePlan, handling
|
|
4
|
+
# the droby marshalling/demarshalling. Dumping to IO is delegated to
|
|
5
|
+
# {#logfile}, a separate object that must provide a #dump method the way
|
|
6
|
+
# {Logfile::Writer} does
|
|
7
|
+
class EventLogger
|
|
8
|
+
# The object that will be given the cycles to be written
|
|
9
|
+
#
|
|
10
|
+
# @return [#dump]
|
|
11
|
+
attr_reader :logfile
|
|
12
|
+
|
|
13
|
+
# The set of events for the current cycle. This is dumped only
|
|
14
|
+
# when the +cycle_end+ event is received
|
|
15
|
+
attr_reader :current_cycle
|
|
16
|
+
|
|
17
|
+
# The object manager
|
|
18
|
+
#
|
|
19
|
+
# @return [DRoby::ObjectManager]
|
|
20
|
+
attr_reader :object_manager
|
|
21
|
+
|
|
22
|
+
# The marshalling object
|
|
23
|
+
#
|
|
24
|
+
# @return [DRoby::Marshal]
|
|
25
|
+
attr_reader :marshal
|
|
26
|
+
|
|
27
|
+
# The time spent logging so far
|
|
28
|
+
attr_reader :dump_time
|
|
29
|
+
|
|
30
|
+
# @!method stats_mode?
|
|
31
|
+
# @!method stats_mode=(flag)
|
|
32
|
+
#
|
|
33
|
+
# Controls whether the logger should only dump statistics, or the
|
|
34
|
+
# full set of plan events
|
|
35
|
+
attr_predicate :stats_mode, true
|
|
36
|
+
|
|
37
|
+
# @!method sync?
|
|
38
|
+
# @!method sync=(flag)
|
|
39
|
+
#
|
|
40
|
+
# Controls whether log data should be flushed on disk after each
|
|
41
|
+
# cycle. It is set by default. Disable for improved performance
|
|
42
|
+
# if the data will not be displayed live
|
|
43
|
+
#
|
|
44
|
+
# {Roby::Application} disables it by default if the log server is
|
|
45
|
+
# disabled
|
|
46
|
+
attr_predicate :sync?, true
|
|
47
|
+
|
|
48
|
+
# @param [#dump] marshal the object that transforms the arguments
|
|
49
|
+
# into droby-compatible objects
|
|
50
|
+
# @param [Integer] queue_size if non-zero, the access to I/O will
|
|
51
|
+
# be done in a separate thread, and this parameter is the maximum
|
|
52
|
+
# amount of cycles that can be queued in a backlog until the
|
|
53
|
+
# main thread waits on the logger
|
|
54
|
+
def initialize(logfile, queue_size: 50)
|
|
55
|
+
@stats_mode = false
|
|
56
|
+
@logfile = logfile
|
|
57
|
+
@object_manager = ObjectManager.new(nil)
|
|
58
|
+
@marshal = Marshal.new(object_manager, nil)
|
|
59
|
+
@current_cycle = Array.new
|
|
60
|
+
@sync = true
|
|
61
|
+
@dump_time = 0
|
|
62
|
+
@mutex = Mutex.new
|
|
63
|
+
if queue_size > 0
|
|
64
|
+
@dump_queue = SizedQueue.new(queue_size)
|
|
65
|
+
@dump_thread = Thread.new(&method(:dump_loop))
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def synchronize(&block)
|
|
70
|
+
@mutex.synchronize(&block)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def log_queue_size
|
|
74
|
+
if threaded? then @dump_queue.size
|
|
75
|
+
else 0
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def threaded?
|
|
80
|
+
!!@dump_queue
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def flush
|
|
84
|
+
if threaded?
|
|
85
|
+
@dump_queue.push nil
|
|
86
|
+
@dump_thread.join
|
|
87
|
+
logfile.flush
|
|
88
|
+
@dump_thread = Thread.new(&method(:dump_loop))
|
|
89
|
+
else
|
|
90
|
+
logfile.flush
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Close this logger, flushing the remaining data to I/O
|
|
95
|
+
def close
|
|
96
|
+
dump(:cycle_end, Time.now, [Hash.new])
|
|
97
|
+
if threaded?
|
|
98
|
+
@dump_queue.push nil
|
|
99
|
+
@dump_thread.join
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
ensure
|
|
103
|
+
logfile.close
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def append_message(m, time, args)
|
|
107
|
+
if m == :merged_plan
|
|
108
|
+
plan_id, merged_plan = *args
|
|
109
|
+
|
|
110
|
+
merged_plan.tasks.each do |t|
|
|
111
|
+
object_manager.register_object(t)
|
|
112
|
+
end
|
|
113
|
+
merged_plan.free_events.each do |e|
|
|
114
|
+
object_manager.register_object(e)
|
|
115
|
+
end
|
|
116
|
+
merged_plan.task_events.each do |e|
|
|
117
|
+
object_manager.register_object(e)
|
|
118
|
+
end
|
|
119
|
+
args = [plan_id, merged_plan.droby_dump(marshal)]
|
|
120
|
+
elsif m == :finalized_task
|
|
121
|
+
task = args[1]
|
|
122
|
+
args = marshal.dump(args)
|
|
123
|
+
object_manager.deregister_object(task)
|
|
124
|
+
elsif m == :finalized_event
|
|
125
|
+
event = args[1]
|
|
126
|
+
args = marshal.dump(args)
|
|
127
|
+
object_manager.deregister_object(event)
|
|
128
|
+
else
|
|
129
|
+
args = marshal.dump(args)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
@current_cycle << m << time.tv_sec << time.tv_usec << args
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def dump_timepoint(event, time, args)
|
|
136
|
+
return if stats_mode?
|
|
137
|
+
|
|
138
|
+
synchronize do
|
|
139
|
+
@current_cycle << event << time.tv_sec << time.tv_usec << args
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Dump one log message
|
|
144
|
+
def dump(m, time, args)
|
|
145
|
+
return if stats_mode?
|
|
146
|
+
|
|
147
|
+
start = Time.now
|
|
148
|
+
synchronize do
|
|
149
|
+
append_message(m, time, args)
|
|
150
|
+
end
|
|
151
|
+
ensure @dump_time += (Time.now - start)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def flush_cycle(*last_message)
|
|
155
|
+
start = Time.now
|
|
156
|
+
if threaded?
|
|
157
|
+
if !@dump_thread.alive?
|
|
158
|
+
@dump_thread.value
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
synchronize do
|
|
162
|
+
append_message(*last_message)
|
|
163
|
+
@dump_queue << @current_cycle
|
|
164
|
+
@current_cycle = Array.new
|
|
165
|
+
end
|
|
166
|
+
else
|
|
167
|
+
append_message(*last_message)
|
|
168
|
+
logfile.dump(@current_cycle)
|
|
169
|
+
if sync?
|
|
170
|
+
logfile.flush
|
|
171
|
+
end
|
|
172
|
+
@current_cycle.clear
|
|
173
|
+
end
|
|
174
|
+
ensure @dump_time += (Time.now - start)
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# Main dump loop if the logger is threaded
|
|
178
|
+
def dump_loop
|
|
179
|
+
while cycle = @dump_queue.pop
|
|
180
|
+
logfile.dump(cycle)
|
|
181
|
+
if sync?
|
|
182
|
+
logfile.flush
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|