cosmos 4.4.0 → 4.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.dockerignore +2 -0
- data/.gitignore +1 -0
- data/.travis.yml +6 -6
- data/Dockerfile +70 -0
- data/Manifest.txt +37 -2
- data/README.md +9 -0
- data/Rakefile +55 -5
- data/appveyor.yml +18 -8
- data/autohotkey/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
- data/autohotkey/lib/cmd_sequence_exporter.rb +52 -0
- data/autohotkey/procedures/collect.rb +2 -2
- data/autohotkey/procedures/collect_util.rb +1 -1
- data/autohotkey/procedures/script_test.rb +1 -1
- data/autohotkey/tools/CmdSenderAHK2 +18 -0
- data/autohotkey/tools/cmd_extractor.ahk +11 -9
- data/autohotkey/tools/cmd_sender.ahk +35 -7
- data/autohotkey/tools/cmd_sender2.ahk +4 -0
- data/autohotkey/tools/cmd_sequence.ahk +22 -9
- data/autohotkey/tools/config_editor.ahk +4 -4
- data/autohotkey/tools/data_viewer.ahk +1 -1
- data/autohotkey/tools/limits_monitor.ahk +1 -1
- data/autohotkey/tools/packet_viewer.ahk +1 -1
- data/autohotkey/tools/script_runner.ahk +1 -1
- data/autohotkey/tools/test_runner2.ahk +1 -1
- data/autohotkey/tools/tlm_grapher.ahk +1 -1
- data/autohotkey/tools/tlm_grapher3.ahk +1 -1
- data/autohotkey/tools/tlm_viewer.ahk +1 -1
- data/autohotkey/tools/tlm_viewer2.ahk +1 -1
- data/autohotkey/tools/tlm_viewer5.ahk +1 -1
- data/bin/cstol_converter +1 -1
- data/bin/rubysloc +73 -28
- data/bin/xtce_converter +1 -1
- data/cosmos.gemspec +2 -2
- data/data/config/command_modifiers.yaml +16 -1
- data/data/config/interface_modifiers.yaml +3 -2
- data/data/config/param_item_modifiers.yaml +5 -0
- data/data/config/system.yaml +110 -23
- data/data/config/telemetry_modifiers.yaml +16 -1
- data/data/crc.txt +416 -411
- data/demo/Rakefile +4 -4
- data/demo/config/dart/Gemfile +1 -6
- data/demo/config/data/crc.txt +233 -232
- data/demo/config/system/system.txt +17 -6
- data/demo/config/system/system2.txt +17 -6
- data/demo/config/system/system_alt_ports.txt +17 -6
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +4 -4
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +4 -0
- data/demo/config/targets/INST/cmd_tlm/inst_tlm_override.txt +12 -0
- data/demo/config/targets/INST/lib/sim_inst.rb +2 -2
- data/demo/config/targets/INST/target.txt +1 -0
- data/demo/config/tools/handbook_creator/default_toc.xsl +59 -59
- data/demo/procedures/cosmos_api_test.rb +8 -8
- data/ext/cosmos/ext/buffered_file/buffered_file.c +2 -2
- data/ext/cosmos/ext/config_parser/config_parser.c +1 -2
- data/ext/cosmos/ext/line_graph/line_graph.c +53 -94
- data/ext/cosmos/ext/platform/platform.c +56 -21
- data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +4 -8
- data/ext/cosmos/ext/structure/structure.c +12 -0
- data/extensions/vscode/.gitignore +4 -0
- data/extensions/vscode/.vscode/launch.json +32 -0
- data/extensions/vscode/.vscode/settings.json +13 -0
- data/extensions/vscode/.vscode/tasks.json +79 -0
- data/extensions/vscode/License.txt +879 -0
- data/extensions/vscode/README.md +9 -0
- data/extensions/vscode/client/License.txt +879 -0
- data/extensions/vscode/client/README.md +39 -0
- data/extensions/vscode/client/cosmos.configuration.json +23 -0
- data/extensions/vscode/client/images/icon.png +0 -0
- data/extensions/vscode/client/package-lock.json +414 -0
- data/extensions/vscode/client/package.json +105 -0
- data/extensions/vscode/client/src/extension.ts +132 -0
- data/extensions/vscode/client/src/screen_preview.rb +25 -0
- data/extensions/vscode/client/syntaxes/cosmos.tmLanguage.json +219 -0
- data/extensions/vscode/client/tsconfig.json +17 -0
- data/extensions/vscode/package-lock.json +26 -0
- data/extensions/vscode/package.json +35 -0
- data/extensions/vscode/server/License.txt +879 -0
- data/extensions/vscode/server/package-lock.json +236 -0
- data/extensions/vscode/server/package.json +29 -0
- data/extensions/vscode/server/src/server.ts +59 -0
- data/extensions/vscode/server/tsconfig.json +16 -0
- data/install/Rakefile +4 -4
- data/install/config/dart/Gemfile +2 -7
- data/install/config/data/crc.txt +137 -137
- data/install/config/system/system.txt +17 -6
- data/install/config/tools/handbook_creator/default_toc.xsl +59 -59
- data/lib/cosmos/config/config_parser.rb +2 -10
- data/lib/cosmos/core_ext/class.rb +10 -0
- data/lib/cosmos/core_ext/time.rb +5 -3
- data/lib/cosmos/dart/config/boot.rb +1 -1
- data/lib/cosmos/dart/config/database.yml +2 -0
- data/lib/cosmos/dart/examples/dart_decom_client.rb +1 -1
- data/lib/cosmos/dart/lib/dart_common.rb +12 -5
- data/lib/cosmos/dart/lib/dart_constants.rb +15 -0
- data/lib/cosmos/dart/lib/dart_decom_query.rb +5 -6
- data/lib/cosmos/dart/lib/dart_decommutator.rb +64 -54
- data/lib/cosmos/dart/lib/dart_master_query.rb +71 -0
- data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +165 -134
- data/lib/cosmos/dart/processes/dart.rb +4 -2
- data/lib/cosmos/dart/processes/dart_decom_server.rb +3 -3
- data/lib/cosmos/dart/processes/dart_ingester.rb +38 -1
- data/lib/cosmos/dart/processes/dart_master.rb +44 -0
- data/lib/cosmos/dart/processes/dart_util.rb +115 -0
- data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +2 -2
- data/lib/cosmos/gui/qt.rb +10 -10
- data/lib/cosmos/gui/qt_tool.rb +17 -12
- data/lib/cosmos/gui/text/completion_text_edit.rb +2 -0
- data/lib/cosmos/gui/widgets/dart_meta_frame.rb +22 -3
- data/lib/cosmos/interfaces/dart_status_interface.rb +1 -1
- data/lib/cosmos/interfaces/linc_interface.rb +3 -3
- data/lib/cosmos/interfaces/protocols/burst_protocol.rb +1 -1
- data/lib/cosmos/interfaces/protocols/crc_protocol.rb +1 -1
- data/lib/cosmos/interfaces/protocols/length_protocol.rb +5 -0
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +3 -3
- data/lib/cosmos/interfaces/serial_interface.rb +7 -1
- data/lib/cosmos/interfaces/stream_interface.rb +1 -1
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +16 -16
- data/lib/cosmos/io/io_multiplexer.rb +6 -2
- data/lib/cosmos/io/json_drb.rb +5 -5
- data/lib/cosmos/io/json_drb_object.rb +7 -2
- data/lib/cosmos/io/json_drb_rack.rb +25 -5
- data/lib/cosmos/io/json_rpc.rb +1 -1
- data/lib/cosmos/io/posix_serial_driver.rb +60 -22
- data/lib/cosmos/io/serial_driver.rb +11 -8
- data/lib/cosmos/io/win32_serial_driver.rb +31 -3
- data/lib/cosmos/packet_logs/packet_log_reader.rb +2 -2
- data/lib/cosmos/packets/packet.rb +9 -9
- data/lib/cosmos/packets/packet_config.rb +27 -9
- data/lib/cosmos/packets/parsers/xtce_converter.rb +10 -10
- data/lib/cosmos/packets/parsers/xtce_parser.rb +3 -0
- data/lib/cosmos/packets/structure.rb +35 -5
- data/lib/cosmos/packets/structure_item.rb +5 -1
- data/lib/cosmos/packets/telemetry.rb +7 -1
- data/lib/cosmos/script/api_shared.rb +18 -1
- data/lib/cosmos/script/extract.rb +1 -1
- data/lib/cosmos/script/script.rb +4 -11
- data/lib/cosmos/streams/serial_stream.rb +11 -6
- data/lib/cosmos/system/system.rb +155 -57
- data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +15 -0
- data/lib/cosmos/tools/cmd_sender/cmd_params.rb +382 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +29 -318
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +14 -17
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +38 -331
- data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +16 -11
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +10 -8
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +2 -2
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1 -0
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +1 -1
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +29 -26
- data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +1 -1
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +5 -0
- data/lib/cosmos/tools/config_editor/config_editor.rb +34 -3
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +8 -9
- data/lib/cosmos/tools/config_editor/system_config_dialog.rb +158 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +1 -1
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -1
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +7 -4
- data/lib/cosmos/tools/test_runner/test.rb +6 -3
- data/lib/cosmos/tools/test_runner/test_runner.rb +6 -6
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +3 -3
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +1 -4
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +20 -16
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +21 -17
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +18 -11
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +17 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +2 -0
- data/lib/cosmos/top_level.rb +1 -1
- data/lib/cosmos/utilities/ruby_lex_utils.rb +34 -30
- data/lib/cosmos/utilities/simulated_target.rb +1 -1
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/excel.rb +23 -17
- data/run_gui_tests.bat +1 -0
- data/spec/core_ext/class_spec.rb +54 -0
- data/spec/core_ext/socket_spec.rb +1 -1
- data/spec/core_ext/time_spec.rb +4 -0
- data/spec/install/yaml_docs_spec.rb +26 -6
- data/spec/interfaces/linc_interface_spec.rb +1 -1
- data/spec/interfaces/protocols/length_protocol_spec.rb +39 -0
- data/spec/interfaces/serial_interface_spec.rb +1 -5
- data/spec/io/json_drb_rack_spec.rb +166 -0
- data/spec/io/json_drb_spec.rb +14 -0
- data/spec/io/json_rpc_spec.rb +4 -5
- data/spec/io/posix_serial_driver_spec.rb +81 -0
- data/spec/io/win32_serial_driver_spec.rb +33 -3
- data/spec/packet_logs/packet_log_reader_spec.rb +36 -37
- data/spec/packets/structure_spec.rb +52 -2
- data/spec/packets/telemetry_spec.rb +29 -1
- data/spec/script/extract_spec.rb +4 -1
- data/spec/system/system_spec.rb +111 -3
- data/spec/tools/cmd_tlm_server/api_spec.rb +12 -12
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +2 -2
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +4 -3
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +2 -3
- data/spec/utilities/logger_spec.rb +3 -3
- data/spec/utilities/message_log_spec.rb +6 -3
- data/tasks/gemfile_stats.rake +22 -13
- data/test/performance/Rakefile +4 -4
- data/test/performance/config/data/crc.txt +67 -48
- metadata +52 -11
- data/demo/outputs/dart/logs/README.txt +0 -1
- data/lib/cosmos/dart/Gemfile +0 -69
@@ -14,6 +14,7 @@ Cosmos.catch_fatal_exception do
|
|
14
14
|
require 'cosmos/gui/dialogs/progress_dialog'
|
15
15
|
require 'cosmos/gui/dialogs/scroll_text_dialog'
|
16
16
|
require 'cosmos/tools/config_editor/config_editor_frame'
|
17
|
+
require 'cosmos/tools/config_editor/system_config_dialog'
|
17
18
|
end
|
18
19
|
|
19
20
|
module Cosmos
|
@@ -72,6 +73,12 @@ module Cosmos
|
|
72
73
|
["tlm_viewer", "/config/tools/tlm_viewer/tlm_viewer.txt"],
|
73
74
|
}
|
74
75
|
|
76
|
+
# Class instance variable to store all the parsed metadata
|
77
|
+
@meta = {}
|
78
|
+
class << self
|
79
|
+
attr_reader :meta
|
80
|
+
end
|
81
|
+
|
75
82
|
def initialize(options)
|
76
83
|
# All code before super is executed twice in RubyQt Based classes
|
77
84
|
super(options) # MUST BE FIRST
|
@@ -86,8 +93,27 @@ module Cosmos
|
|
86
93
|
initialize_central_widget()
|
87
94
|
complete_initialize()
|
88
95
|
|
96
|
+
# Process all the configuration yaml files up front
|
97
|
+
# If they passed in a filename we need to wait for all meta files to be processed
|
98
|
+
wait = options.filename ? true : false
|
99
|
+
Splash.execute(self, wait) do |splash|
|
100
|
+
count = 1.0
|
101
|
+
CONFIGURATION_FILES.each do |key, vals|
|
102
|
+
type = vals[0]
|
103
|
+
next unless type
|
104
|
+
splash.message = "Processing #{type}.yaml"
|
105
|
+
splash.progress = count / CONFIGURATION_FILES.length
|
106
|
+
begin
|
107
|
+
ConfigEditor.meta[key] = @file_meta = MetaConfigParser.load("#{type}.yaml")
|
108
|
+
rescue => error
|
109
|
+
Kernel.raise $! if error.is_a? Psych::SyntaxError
|
110
|
+
end
|
111
|
+
count += 1.0
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
89
115
|
if options.filename
|
90
|
-
file_open(options.filename)
|
116
|
+
file_open(File.expand_path(options.filename))
|
91
117
|
else
|
92
118
|
create_tab()
|
93
119
|
end
|
@@ -227,9 +253,13 @@ module Cosmos
|
|
227
253
|
update_cursor()
|
228
254
|
end
|
229
255
|
|
230
|
-
@create_target = Qt::Action.new('
|
256
|
+
@create_target = Qt::Action.new('Create &Target', self)
|
231
257
|
@create_target.statusTip = 'Create a new COSMOS target'
|
232
258
|
@create_target.connect(SIGNAL('triggered()')) { create_target() }
|
259
|
+
|
260
|
+
@create_system_config = Qt::Action.new('Create New &System Config', self)
|
261
|
+
@create_system_config.statusTip = 'Create a new system configuration'
|
262
|
+
@create_system_config.connect(SIGNAL('triggered()')) { SystemConfigDialog.new(self) }
|
233
263
|
end
|
234
264
|
|
235
265
|
def initialize_menus
|
@@ -294,6 +324,7 @@ module Cosmos
|
|
294
324
|
|
295
325
|
# Actions Menu
|
296
326
|
actions_menu = menuBar.addMenu('&Actions')
|
327
|
+
actions_menu.addAction(@create_system_config)
|
297
328
|
actions_menu.addAction(@create_target)
|
298
329
|
|
299
330
|
# Help Menu
|
@@ -622,7 +653,7 @@ module Cosmos
|
|
622
653
|
end
|
623
654
|
File.open(File.join(target_folder, 'procedures', "#{target.downcase}_noop.rb"), 'w') do |file|
|
624
655
|
file.puts "require 'cosmos'"
|
625
|
-
file.puts "
|
656
|
+
file.puts "load_utility '#{File.basename(lib_filename)}'"
|
626
657
|
file.puts "\n"
|
627
658
|
file.puts "#{target.downcase} = #{lib_filename.filename_to_class_name}.new"
|
628
659
|
file.puts "#{target.downcase}.noop"
|
@@ -28,6 +28,10 @@ module Cosmos
|
|
28
28
|
def focusInEvent(event)
|
29
29
|
emit focus_in
|
30
30
|
end
|
31
|
+
|
32
|
+
def wheelEvent(event)
|
33
|
+
event.ignore()
|
34
|
+
end
|
31
35
|
end
|
32
36
|
|
33
37
|
class ConfigEditorFrame < Qt::Widget
|
@@ -290,17 +294,10 @@ module Cosmos
|
|
290
294
|
end
|
291
295
|
emit file_type_changed # Tell ConfigEditor about the file type
|
292
296
|
load_meta_data()
|
293
|
-
display_keyword_help()
|
294
297
|
end
|
295
298
|
|
296
299
|
def load_meta_data
|
297
|
-
|
298
|
-
type = ConfigEditor::CONFIGURATION_FILES[@file_type][0]
|
299
|
-
@file_meta = MetaConfigParser.load("#{type}.yaml")
|
300
|
-
rescue => error
|
301
|
-
Kernel.raise $! if error.is_a? Psych::SyntaxError
|
302
|
-
@file_meta = nil
|
303
|
-
end
|
300
|
+
@file_meta = ConfigEditor.meta[@file_type]
|
304
301
|
display_keyword_help()
|
305
302
|
end
|
306
303
|
|
@@ -565,7 +562,8 @@ module Cosmos
|
|
565
562
|
if attribute_value.is_a? Hash
|
566
563
|
# If the value is a Hash then we have parameter specific
|
567
564
|
# parameters embedded in this parameter we have to parse
|
568
|
-
value_widget =
|
565
|
+
value_widget = FocusComboBox.new()
|
566
|
+
value_widget.setFocusPolicy(Qt::StrongFocus)
|
569
567
|
value_widget.addItem(current_value) unless attribute_value.keys.include?(current_value)
|
570
568
|
value_widget.addItems(attribute_value.keys)
|
571
569
|
value_widget.setCurrentText(current_value)
|
@@ -581,6 +579,7 @@ module Cosmos
|
|
581
579
|
end
|
582
580
|
elsif attribute_value.is_a? Array # Just a bunch of strings
|
583
581
|
value_widget = FocusComboBox.new()
|
582
|
+
value_widget.setFocusPolicy(Qt::StrongFocus)
|
584
583
|
value_widget.addItems(attribute_value)
|
585
584
|
if required && current_value.nil?
|
586
585
|
value_widget.setStyleSheet("border: 1px solid red")
|
@@ -0,0 +1,158 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
4
|
+
# All Rights Reserved.
|
5
|
+
#
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
7
|
+
# under the terms of the GNU General Public License
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
10
|
+
|
11
|
+
require 'cosmos'
|
12
|
+
require 'cosmos/gui/qt'
|
13
|
+
|
14
|
+
module Cosmos
|
15
|
+
# Creates a dialog asking to create a new system configuration.
|
16
|
+
class SystemConfigDialog < Qt::Dialog
|
17
|
+
def initialize(parent)
|
18
|
+
super(parent) # MUST BE FIRST
|
19
|
+
@parent = parent
|
20
|
+
Cosmos.load_cosmos_icon
|
21
|
+
|
22
|
+
self.window_title = 'Create System Configuration'
|
23
|
+
layout = Qt::VBoxLayout.new
|
24
|
+
self.layout = layout
|
25
|
+
|
26
|
+
description = Qt::Label.new("Creating a new COSMOS system configuration allows you to reuse "\
|
27
|
+
"an existing COSMOS configuration but include different targets and/or change configuration details.")
|
28
|
+
description.setWordWrap(true)
|
29
|
+
layout.addWidget(description)
|
30
|
+
|
31
|
+
select = Qt::Label.new("Select an existing system.txt file to base the new configuration on:")
|
32
|
+
select.setWordWrap(true)
|
33
|
+
layout.addWidget(select)
|
34
|
+
@system_combo = Qt::ComboBox.new
|
35
|
+
Dir[File.join(::Cosmos::USERPATH, 'config', 'system', '*.txt')].each do |system|
|
36
|
+
@system_combo.addItem(File.basename(system))
|
37
|
+
end
|
38
|
+
layout.addWidget(@system_combo)
|
39
|
+
layout.addSpacing(10)
|
40
|
+
|
41
|
+
name_label = Qt::Label.new("Enter a name for the new system configuration that is descriptive "\
|
42
|
+
" but relatively short. For example, 'EMI', 'SW Test', etc:")
|
43
|
+
name_label.setWordWrap(true)
|
44
|
+
layout.addWidget(name_label)
|
45
|
+
@system_name = Qt::LineEdit.new
|
46
|
+
layout.addWidget(@system_name)
|
47
|
+
layout.addSpacing(10)
|
48
|
+
|
49
|
+
info = Qt::Label.new("This action will create a new COSMOS system.txt, "\
|
50
|
+
"cmd_tlm_server.txt, launcher.txt, and Windows Batch file appended with the specified name. "\
|
51
|
+
"For example, system_emi.txt, system_sw_test.txt, launcher_emi.txt, launcher_sw_test.txt, etc.")
|
52
|
+
info.setWordWrap(true)
|
53
|
+
layout.addWidget(info)
|
54
|
+
|
55
|
+
ok_button = Qt::PushButton.new('Ok')
|
56
|
+
connect(ok_button, SIGNAL('clicked()'), self, SLOT('accept()'))
|
57
|
+
cancel_button = Qt::PushButton.new('Cancel')
|
58
|
+
connect(cancel_button, SIGNAL('clicked()'), self, SLOT('reject()'))
|
59
|
+
|
60
|
+
hlayout = Qt::HBoxLayout.new
|
61
|
+
hlayout.addWidget(ok_button, 0, Qt::AlignLeft)
|
62
|
+
hlayout.addWidget(cancel_button, 0, Qt::AlignRight)
|
63
|
+
layout.addLayout(hlayout)
|
64
|
+
|
65
|
+
resize(500, 300)
|
66
|
+
|
67
|
+
self.show()
|
68
|
+
self.raise()
|
69
|
+
if self.exec() == Qt::Dialog::Accepted
|
70
|
+
build_system_config()
|
71
|
+
end
|
72
|
+
self.dispose()
|
73
|
+
end
|
74
|
+
|
75
|
+
def build_system_config
|
76
|
+
new_suffix = @system_name.text.downcase.gsub(' ','_')
|
77
|
+
existing_system = @system_combo.text
|
78
|
+
# Look for system_xxx.txt where we find the 'xxx' as the existing suffix
|
79
|
+
if existing = existing_system.scan(/.*?_(.*)\.txt/)[0]
|
80
|
+
existing_suffix = existing[0]
|
81
|
+
else
|
82
|
+
existing_suffix = nil
|
83
|
+
end
|
84
|
+
|
85
|
+
# First determine all the new files and make sure they don't already exist
|
86
|
+
new_system = File.join(Cosmos::USERPATH, 'config', 'system', "system_#{new_suffix}.txt")
|
87
|
+
return if file_exist?(new_system)
|
88
|
+
cmd_tlm_server_path = File.join('config', 'tools', 'cmd_tlm_server')
|
89
|
+
new_cmd_tlm_server = File.join(Cosmos::USERPATH, cmd_tlm_server_path, "cmd_tlm_server_#{new_suffix}.txt")
|
90
|
+
return if file_exist?(new_cmd_tlm_server)
|
91
|
+
launcher_path = File.join('config', 'tools', 'launcher')
|
92
|
+
new_launcher = File.join(Cosmos::USERPATH, launcher_path, "launcher_#{new_suffix}.txt")
|
93
|
+
return if file_exist?(new_launcher)
|
94
|
+
new_batch = File.join(Cosmos::USERPATH, "Launcher#{@system_name.text.gsub(' ','')}.bat")
|
95
|
+
return if file_exist?(new_batch)
|
96
|
+
|
97
|
+
# Create the new system.txt. We know the existing exists so simply copy it.
|
98
|
+
File.open(new_system, 'w') do |file|
|
99
|
+
file.puts File.read(File.join(::Cosmos::USERPATH, 'config', 'system', existing_system))
|
100
|
+
end
|
101
|
+
|
102
|
+
# Create the new cmd_tlm_server config and update the TITLE
|
103
|
+
data = get_config_contents(existing_suffix, cmd_tlm_server_path, 'cmd_tlm_server')
|
104
|
+
data.sub!(/\s*TITLE.*/, "TITLE 'COSMOS Command and Telemetry Server - #{@system_name.text} Configuration'")
|
105
|
+
File.open(new_cmd_tlm_server, 'w') {|file| file.puts data }
|
106
|
+
|
107
|
+
# Create the new launcher config and update the TITLE and Server LAUNCH commands
|
108
|
+
data = get_config_contents(existing_suffix, launcher_path, 'launcher')
|
109
|
+
data.sub!(/\s*TITLE.*/, "TITLE 'Launcher - #{@system_name.text} Configuration'")
|
110
|
+
data.gsub!(/LAUNCH\s+(\w+)/, "LAUNCH \\1 --system system_#{new_suffix}.txt")
|
111
|
+
# Convert all --config to -c to make it easier to replace in the next step
|
112
|
+
data.gsub!(/(.*LAUNCH\s+CmdTlmServer.*)(--config)(.*)/, "\\1-c\\3")
|
113
|
+
data.gsub!(/(.*LAUNCH\s+CmdTlmServer.*)-c\s+(\w+)(.*)/, "\\1-c cmd_tlm_server_#{new_suffix}\\3")
|
114
|
+
File.open(new_launcher, 'w') {|file| file.puts data }
|
115
|
+
|
116
|
+
File.open(new_batch, 'w') do |file|
|
117
|
+
file.puts "call tools\\Launcher.bat --config launcher_#{new_suffix}.txt --system system_#{new_suffix}.txt"
|
118
|
+
end
|
119
|
+
|
120
|
+
@parent.file_open(new_batch)
|
121
|
+
@parent.file_open(new_launcher)
|
122
|
+
@parent.file_open(new_cmd_tlm_server)
|
123
|
+
@parent.file_open(new_system)
|
124
|
+
Qt::MessageBox.information(self, "System Config Creation Success",
|
125
|
+
"The new system configuration was successfully created.\n\n"\
|
126
|
+
"The newly created files have been opened for further customization.")
|
127
|
+
end
|
128
|
+
|
129
|
+
def file_exist?(path)
|
130
|
+
if File.exist?(path)
|
131
|
+
Qt::MessageBox.warning(self, "Config file exists!", "#{path} already exists!")
|
132
|
+
return true
|
133
|
+
else
|
134
|
+
return false
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def get_config_contents(existing_suffix, base_path, file_name)
|
139
|
+
contents = ''
|
140
|
+
if existing_suffix
|
141
|
+
existing_file = File.join(Cosmos::USERPATH, base_path, "#{file_name}_#{existing_suffix}.txt")
|
142
|
+
if File.exist?(existing_file)
|
143
|
+
contents = File.read(existing_file)
|
144
|
+
end
|
145
|
+
else
|
146
|
+
# Otherwise see if there is a basic one we can copy
|
147
|
+
basic_config = File.join(Cosmos::USERPATH, base_path, "#{file_name}.txt")
|
148
|
+
if File.exist?(basic_config)
|
149
|
+
contents = File.read(basic_config)
|
150
|
+
else
|
151
|
+
# Otherwise use the install config
|
152
|
+
contents = File.read(File.join(Cosmos::PATH, 'install', base_path, "#{file_name}.txt"))
|
153
|
+
end
|
154
|
+
end
|
155
|
+
return contents
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -156,7 +156,7 @@ module Cosmos
|
|
156
156
|
msg << "PDF Handbooks created successfully"
|
157
157
|
progress_dialog.append_text(msg)
|
158
158
|
else
|
159
|
-
progress_dialog.append_text("\nPDF Handbooks could not be created.\n\nIs wkhtmltopdf in your PATH and are all existing pdfs closed?\n\
|
159
|
+
progress_dialog.append_text("\nPDF Handbooks could not be created.\n\nIs wkhtmltopdf in your PATH and are all existing pdfs closed?\n\nwkhtmltopdf can be found at: https://wkhtmltopdf.org/downloads.html.")
|
160
160
|
end
|
161
161
|
rescue => error
|
162
162
|
progress_dialog.append_text("\n\nError processing:\n#{error.formatted}")
|
@@ -115,7 +115,7 @@ module Cosmos
|
|
115
115
|
cover, cover_file = make_pdf_detail('cover', @pdf_cover_filename, @pdf_cover_title, target_name)
|
116
116
|
header, header_file = make_pdf_detail('--header-spacing 3 --header-html', @pdf_header_filename, @pdf_header_title, target_name)
|
117
117
|
footer, footer_file = make_pdf_detail('--footer-spacing 3 --footer-html', @pdf_footer_filename, @pdf_footer_title, target_name)
|
118
|
-
system_call = "wkhtmltopdf -L #{@pdf_side_margin} -R #{@pdf_side_margin} -T #{@pdf_top_margin} -B #{@pdf_bottom_margin} -s Letter #{header} #{footer} #{cover} #{@pdf_toc} \"#{tmp_html_file.path}\" \"#{File.dirname(filename)}/#{File.basename(filename, '.*')}.pdf\""
|
118
|
+
system_call = "wkhtmltopdf --enable-local-file-access -L #{@pdf_side_margin} -R #{@pdf_side_margin} -T #{@pdf_top_margin} -B #{@pdf_bottom_margin} -s Letter #{header} #{footer} #{cover} #{@pdf_toc} \"#{tmp_html_file.path}\" \"#{File.dirname(filename)}/#{File.basename(filename, '.*')}.pdf\""
|
119
119
|
status = nil
|
120
120
|
begin
|
121
121
|
Cosmos.set_working_dir(System.paths['HANDBOOKS']) do
|
@@ -594,12 +594,12 @@ module Cosmos
|
|
594
594
|
"ScriptRunnerFrame.instance.pre_line_instrumentation('#{filename}', #{line_no}); "
|
595
595
|
|
596
596
|
# Add the actual line
|
597
|
-
instrumented_line << "__return_val = "
|
597
|
+
instrumented_line << "__return_val = begin; "
|
598
598
|
instrumented_line << segment
|
599
599
|
instrumented_line.chomp!
|
600
600
|
|
601
601
|
# Add postline instrumentation
|
602
|
-
instrumented_line << "; ScriptRunnerFrame.instance.post_line_instrumentation('#{filename}', #{line_no}); "
|
602
|
+
instrumented_line << " end; ScriptRunnerFrame.instance.post_line_instrumentation('#{filename}', #{line_no}); "
|
603
603
|
|
604
604
|
# Complete begin block to catch exceptions
|
605
605
|
unless inside_begin
|
@@ -973,8 +973,10 @@ module Cosmos
|
|
973
973
|
if debug_text =~ /^@\S+$/ || @script_binding.local_variables.include?(debug_text.to_sym)
|
974
974
|
debug_text = "puts #{debug_text}" # Automatically add puts to print it
|
975
975
|
end
|
976
|
+
# Fortify: Dynamic Code Evaluation: Code Injection
|
976
977
|
eval(debug_text, @script_binding, 'debug', 1)
|
977
978
|
else
|
979
|
+
# Fortify: Dynamic Code Evaluation: Code Injection
|
978
980
|
Object.class_eval(debug_text, 'debug', 1)
|
979
981
|
end
|
980
982
|
handle_output_io()
|
@@ -1489,7 +1491,7 @@ module Cosmos
|
|
1489
1491
|
@@output_thread = nil
|
1490
1492
|
end
|
1491
1493
|
|
1492
|
-
@script.setReadOnly(false)
|
1494
|
+
@script.setReadOnly(false) unless @script.read_only
|
1493
1495
|
@script.stop_highlight unless uncaught_exception
|
1494
1496
|
select_tab_and_destroy_tabs_after_index(0)
|
1495
1497
|
remove_tabs()
|
@@ -1722,7 +1724,8 @@ module Cosmos
|
|
1722
1724
|
@active_script.setPlainText(data)
|
1723
1725
|
end
|
1724
1726
|
mark_breakpoints(filename)
|
1725
|
-
|
1727
|
+
@active_script.read_only = !File.writable?(filename)
|
1728
|
+
@active_script.setReadOnly(@active_script.read_only)
|
1726
1729
|
@active_script.stop_highlight
|
1727
1730
|
end
|
1728
1731
|
|
@@ -126,7 +126,7 @@ module Cosmos
|
|
126
126
|
if result
|
127
127
|
results << result
|
128
128
|
yield result if block_given?
|
129
|
-
raise StopScript if
|
129
|
+
raise StopScript if (results[-1].exceptions and @@abort_on_exception) or results[-1].stopped
|
130
130
|
end
|
131
131
|
|
132
132
|
# Run each test case
|
@@ -141,7 +141,7 @@ module Cosmos
|
|
141
141
|
if result
|
142
142
|
results << result
|
143
143
|
yield result if block_given?
|
144
|
-
raise StopScript if
|
144
|
+
raise StopScript if (results[-1].exceptions and @@abort_on_exception) or results[-1].stopped
|
145
145
|
end
|
146
146
|
|
147
147
|
results
|
@@ -176,7 +176,7 @@ module Cosmos
|
|
176
176
|
end
|
177
177
|
end
|
178
178
|
|
179
|
-
object.
|
179
|
+
object.public_send(method_name)
|
180
180
|
result.result = :PASS
|
181
181
|
|
182
182
|
if defined? ScriptRunnerFrame
|
@@ -387,17 +387,20 @@ module Cosmos
|
|
387
387
|
result = run_test_case(test_class, test_case, true)
|
388
388
|
results << result
|
389
389
|
yield result if block_given?
|
390
|
+
raise StopScript if (result.exceptions and test_class.abort_on_exception) or result.stopped
|
390
391
|
when :TEST_SETUP
|
391
392
|
result = run_test_setup(test_class, true)
|
392
393
|
if result
|
393
394
|
results << result
|
394
395
|
yield result if block_given?
|
396
|
+
raise StopScript if (result.exceptions and test_class.abort_on_exception) or result.stopped
|
395
397
|
end
|
396
398
|
when :TEST_TEARDOWN
|
397
399
|
result = run_test_teardown(test_class, true)
|
398
400
|
if result
|
399
401
|
results << result
|
400
402
|
yield result if block_given?
|
403
|
+
raise StopScript if (result.exceptions and test_class.abort_on_exception) or result.stopped
|
401
404
|
end
|
402
405
|
end
|
403
406
|
end
|
@@ -652,7 +652,7 @@ module Cosmos
|
|
652
652
|
ScriptRunnerFrame.instance = @script_runner_frame
|
653
653
|
build = false
|
654
654
|
@utilities.each do |utility|
|
655
|
-
if
|
655
|
+
if load_utility(utility)
|
656
656
|
build = true
|
657
657
|
end
|
658
658
|
end
|
@@ -865,13 +865,13 @@ module Cosmos
|
|
865
865
|
suite = CustomTestSuite.new
|
866
866
|
begin
|
867
867
|
# Remove any previously defined suite setup methods
|
868
|
-
CustomTestSuite.
|
868
|
+
CustomTestSuite.public_send(:remove_method, :setup)
|
869
869
|
rescue NameError
|
870
870
|
# NameError is raised if no setup method was defined
|
871
871
|
end
|
872
872
|
begin
|
873
873
|
# Remove any previously defined suite teardown methods
|
874
|
-
CustomTestSuite.
|
874
|
+
CustomTestSuite.public_send(:remove_method, :teardown)
|
875
875
|
rescue NameError
|
876
876
|
# NameError is raised if no teardown method was defined
|
877
877
|
end
|
@@ -884,7 +884,7 @@ module Cosmos
|
|
884
884
|
inst = @@test_suites.detect {|my_suite| my_suite.class.to_s == suite_node.text}
|
885
885
|
# Create a lambda which will call that one setup method
|
886
886
|
body = lambda { inst.setup }
|
887
|
-
CustomTestSuite.
|
887
|
+
CustomTestSuite.public_send(:define_method, :setup, &body)
|
888
888
|
end
|
889
889
|
if test_node.text == 'teardown'
|
890
890
|
cur_suite.teardown = true
|
@@ -892,7 +892,7 @@ module Cosmos
|
|
892
892
|
inst = @@test_suites.detect {|my_suite| my_suite.class.to_s == suite_node.text}
|
893
893
|
# Create a lambda which will call that one teardown method
|
894
894
|
body = lambda { inst.teardown}
|
895
|
-
CustomTestSuite.
|
895
|
+
CustomTestSuite.public_send(:define_method, :teardown, &body)
|
896
896
|
end
|
897
897
|
end
|
898
898
|
|
@@ -999,7 +999,7 @@ module Cosmos
|
|
999
999
|
when 'LOAD_UTILITY', 'REQUIRE_UTILITY'
|
1000
1000
|
parser.verify_num_parameters(1, 1, "LOAD_UTILITY <filename>")
|
1001
1001
|
begin
|
1002
|
-
|
1002
|
+
load_utility(params[0])
|
1003
1003
|
@utilities << params[0]
|
1004
1004
|
rescue Exception => err
|
1005
1005
|
require_errors << "<b>#{params[0]}</b>:\n#{err.formatted}\n"
|
@@ -455,7 +455,7 @@ module Cosmos
|
|
455
455
|
def self.post_options_parsed_hook(options)
|
456
456
|
if options.input_files or options.dart
|
457
457
|
normalize_config_options(options)
|
458
|
-
|
458
|
+
|
459
459
|
# Process config file
|
460
460
|
raise "Configuration File must be specified for command line processing" unless options.config_file
|
461
461
|
|
@@ -675,7 +675,7 @@ module Cosmos
|
|
675
675
|
process_args = [batch_name, @input_filenames, @log_dir, output_extension, @batch_filenames, @packet_log_frame.time_start, @packet_log_frame.time_end]
|
676
676
|
end
|
677
677
|
|
678
|
-
@tlm_extractor_processor.
|
678
|
+
@tlm_extractor_processor.public_send(process_method, *process_args) do |input_file_index, packet_count, file_progress|
|
679
679
|
# Handle Cancel
|
680
680
|
break if @cancel
|
681
681
|
|
@@ -760,7 +760,7 @@ module Cosmos
|
|
760
760
|
process_args = [batch_name, @log_dir, output_extension, @batch_filenames, @packet_log_frame.time_start, @packet_log_frame.time_end, @dart_meta_frame.meta_filters]
|
761
761
|
end
|
762
762
|
|
763
|
-
@tlm_extractor_processor.
|
763
|
+
@tlm_extractor_processor.public_send(process_method, *process_args) do |percentage, message|
|
764
764
|
# Handle Cancel
|
765
765
|
break if @cancel
|
766
766
|
progress_dialog.append_text(message)
|
@@ -385,10 +385,7 @@ module Cosmos
|
|
385
385
|
|
386
386
|
# Print column headings to output file
|
387
387
|
@output_file.print "%" if @matlab_header
|
388
|
-
column_names()
|
389
|
-
@output_file.print column_name
|
390
|
-
@output_file.print @delimiter
|
391
|
-
end
|
388
|
+
@output_file.print column_names.join(@delimiter)
|
392
389
|
@output_file.puts ""
|
393
390
|
@row_index += 1
|
394
391
|
end
|
@@ -10,11 +10,11 @@
|
|
10
10
|
|
11
11
|
require 'cosmos'
|
12
12
|
require 'cosmos/tools/tlm_extractor/tlm_extractor_config'
|
13
|
+
require 'cosmos/dart/lib/dart_constants'
|
13
14
|
|
14
15
|
module Cosmos
|
15
|
-
|
16
|
+
# Process the settings selected in the TlmExtractor to ultimately produce the output file
|
16
17
|
class TlmExtractorProcessor
|
17
|
-
|
18
18
|
attr_accessor :packet_log_reader
|
19
19
|
|
20
20
|
def initialize
|
@@ -31,7 +31,7 @@ module Cosmos
|
|
31
31
|
configs[-1].output_filename = File.join(output_dir, batch_name.tr(' ', '_') + '_' + filename_no_extension.tr(' ', '_') + output_extension)
|
32
32
|
end
|
33
33
|
process(input_filenames, configs, time_start, time_end, &block)
|
34
|
-
end
|
34
|
+
end
|
35
35
|
|
36
36
|
def process(input_filenames, configs, time_start = nil, time_end = nil)
|
37
37
|
Cosmos.set_working_dir do
|
@@ -50,10 +50,10 @@ module Cosmos
|
|
50
50
|
end
|
51
51
|
yield input_file_index, packet_count, 1.0 if block_given?
|
52
52
|
end
|
53
|
-
end
|
53
|
+
end
|
54
54
|
ensure
|
55
55
|
configs.each { |config| config.close_output_file }
|
56
|
-
end
|
56
|
+
end
|
57
57
|
|
58
58
|
def process_dart_batch(batch_name, output_dir, output_extension, config_filenames, time_start = nil, time_end = nil, meta_filters = [], &block)
|
59
59
|
configs = []
|
@@ -72,13 +72,13 @@ module Cosmos
|
|
72
72
|
items = []
|
73
73
|
configs.each { |config| config.mode = :dart; items.concat(config.normal_items); config.open_output_file }
|
74
74
|
items.uniq!
|
75
|
-
|
75
|
+
|
76
76
|
time_start = Time.utc(1970, 1, 1) unless time_start
|
77
77
|
time_end = Time.now unless time_end
|
78
78
|
|
79
79
|
results = {}
|
80
80
|
begin
|
81
|
-
server = JsonDRbObject.new(System.connect_hosts['DART_DECOM'], System.ports['DART_DECOM'])
|
81
|
+
server = JsonDRbObject.new(System.connect_hosts['DART_DECOM'], System.ports['DART_DECOM'], 1.0, Cosmos::System.x_csrf_token)
|
82
82
|
|
83
83
|
index = 0
|
84
84
|
items.each do |item_type, target_name, packet_name, item_name, value_type, dart_reduction, dart_reduced_type|
|
@@ -96,21 +96,27 @@ module Cosmos
|
|
96
96
|
request['reduction'] = dart_reduction.to_s
|
97
97
|
request['cmd_tlm'] = 'TLM'
|
98
98
|
request['offset'] = 0
|
99
|
-
request['limit'] =
|
99
|
+
request['limit'] = DartConstants::MAX_DECOM_RESULTS
|
100
100
|
if dart_reduction == :NONE
|
101
101
|
request['value_type'] = value_type.to_s
|
102
102
|
else
|
103
103
|
request['value_type'] = value_type.to_s + "_#{dart_reduced_type}"
|
104
104
|
end
|
105
105
|
request['meta_filters'] = meta_filters if meta_filters.length > 0
|
106
|
-
|
107
|
-
|
106
|
+
results[query_string] = []
|
107
|
+
while true
|
108
|
+
result = server.query(request)
|
109
|
+
results[query_string].concat(result)
|
110
|
+
break if result.length < DartConstants::MAX_DECOM_RESULTS
|
111
|
+
yield(index.to_f / items.length, " Total results: #{results[query_string].length}") if block_given?
|
112
|
+
request['offset'] += DartConstants::MAX_DECOM_RESULTS
|
113
|
+
end
|
108
114
|
index += 1
|
109
|
-
yield(index.to_f / items.length, "
|
115
|
+
yield(index.to_f / items.length, " Total results: #{results[query_string].length}") if block_given?
|
110
116
|
rescue Exception => error
|
111
117
|
yield(index.to_f / items.length, "Error querying #{query_string} : #{error.class}:#{error.message}\n#{error.backtrace.join("\n")}\n") if block_given?
|
112
118
|
return # Bail out because something bad happened
|
113
|
-
end
|
119
|
+
end
|
114
120
|
end
|
115
121
|
|
116
122
|
configs.each { |config| config.process_dart(results) }
|
@@ -121,7 +127,5 @@ module Cosmos
|
|
121
127
|
ensure
|
122
128
|
configs.each { |config| config.close_output_file }
|
123
129
|
end
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
end # module Cosmos
|
130
|
+
end
|
131
|
+
end
|
@@ -11,9 +11,9 @@
|
|
11
11
|
require 'cosmos'
|
12
12
|
require 'cosmos/gui/qt'
|
13
13
|
require 'cosmos/io/json_drb_object'
|
14
|
+
require 'cosmos/dart/lib/dart_constants'
|
14
15
|
|
15
16
|
module Cosmos
|
16
|
-
|
17
17
|
# Thread used to gather telemetry from DART and process it using a TabbedPlotsDefinition
|
18
18
|
class TabbedPlotsDartThread
|
19
19
|
# Array of exceptions that occurred
|
@@ -45,7 +45,7 @@ module Cosmos
|
|
45
45
|
|
46
46
|
# Execute each query
|
47
47
|
results = {}
|
48
|
-
server = JsonDRbObject.new(System.connect_hosts['DART_DECOM'], System.ports['DART_DECOM'])
|
48
|
+
server = JsonDRbObject.new(System.connect_hosts['DART_DECOM'], System.ports['DART_DECOM'], 1.0, Cosmos::System.x_csrf_token)
|
49
49
|
time_start = Time.utc(1970, 1, 1) unless time_start
|
50
50
|
time_end = Time.now unless time_end
|
51
51
|
progress_dialog.set_step_progress(0) if progress_dialog
|
@@ -67,23 +67,29 @@ module Cosmos
|
|
67
67
|
request['reduction'] = dart_reduction.to_s
|
68
68
|
request['cmd_tlm'] = 'TLM'
|
69
69
|
request['offset'] = 0
|
70
|
-
request['limit'] =
|
70
|
+
request['limit'] = DartConstants::MAX_DECOM_RESULTS
|
71
71
|
if dart_reduction == :NONE
|
72
72
|
request['value_type'] = value_type.to_s
|
73
73
|
else
|
74
74
|
request['value_type'] = value_type.to_s + "_#{dart_reduced_type}"
|
75
75
|
end
|
76
76
|
request['meta_filters'] = meta_filters unless meta_filters.empty?
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
result =
|
81
|
-
|
82
|
-
result
|
77
|
+
results[query_string] = []
|
78
|
+
while true
|
79
|
+
query_result = server.query(request)
|
80
|
+
result = query_result
|
81
|
+
if array_index
|
82
|
+
result = []
|
83
|
+
query_result.each do |qr|
|
84
|
+
result << [qr[0][array_index], qr[1], qr[2], qr[3], qr[4]]
|
85
|
+
end
|
83
86
|
end
|
87
|
+
results[query_string].concat(result)
|
88
|
+
break if query_result.length < DartConstants::MAX_DECOM_RESULTS
|
89
|
+
progress_dialog.append_text(" Total results: #{results[query_string].length}") if progress_dialog
|
90
|
+
request['offset'] += DartConstants::MAX_DECOM_RESULTS
|
84
91
|
end
|
85
|
-
results[query_string]
|
86
|
-
progress_dialog.append_text(" Received #{result.length} values") if progress_dialog
|
92
|
+
progress_dialog.append_text(" Total results: #{results[query_string].length}") if progress_dialog
|
87
93
|
progress_dialog.set_step_progress((index + 1).to_f / required_queries.length) if progress_dialog
|
88
94
|
rescue Exception => error
|
89
95
|
@errors << error
|
@@ -134,7 +140,7 @@ module Cosmos
|
|
134
140
|
@done = true
|
135
141
|
end
|
136
142
|
end
|
137
|
-
end
|
143
|
+
end
|
138
144
|
|
139
145
|
# Indicates if processing is complete
|
140
146
|
def done?
|
@@ -149,12 +155,10 @@ module Cosmos
|
|
149
155
|
@thread = nil
|
150
156
|
@done = true
|
151
157
|
return true, false
|
152
|
-
end
|
158
|
+
end
|
153
159
|
|
154
160
|
def graceful_kill
|
155
161
|
# Just to remove warnings
|
156
162
|
end
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
end # module Cosmos
|
163
|
+
end
|
164
|
+
end
|