cosmos 4.2.3-java → 4.2.4-java
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 +4 -4
- data/.gitignore +2 -0
- data/Manifest.txt +14 -1
- data/bin/dart_util +4 -0
- data/cosmos.gemspec +3 -2
- data/data/config/interface_modifiers.yaml +2 -1
- data/data/config/item_modifiers.yaml +1 -1
- data/data/config/parameter_modifiers.yaml +1 -1
- data/data/crc.txt +52 -45
- data/demo/config/data/crc.txt +6 -1
- data/demo/config/system/system.txt +1 -0
- data/demo/config/targets/DART/cmd_tlm/dart_cmds.txt +2 -0
- data/demo/config/targets/DART/cmd_tlm/dart_tlm.txt +40 -0
- data/demo/config/targets/DART/cmd_tlm_server.txt +6 -0
- data/demo/config/targets/DART/screens/status.txt +54 -0
- data/demo/config/targets/DART/target.txt +7 -0
- data/ext/cosmos/ext/structure/structure.c +16 -4
- data/lib/cosmos/dart/app/models/status.rb +2 -0
- data/lib/cosmos/dart/db/migrate/20180423205644_create_statuses.rb +22 -0
- data/lib/cosmos/dart/db/migrate/20180425211340_add_decom_state_index.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20180509204705_remove_indexes.rb +29 -0
- data/lib/cosmos/dart/db/migrate/20180510160002_remove_timestamps_from_ples.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20180511194944_add_packet_log_id_to_tables.rb +18 -0
- data/lib/cosmos/dart/db/schema.rb +15 -9
- data/lib/cosmos/dart/db/seeds.rb +8 -0
- data/lib/cosmos/dart/lib/dart_common.rb +5 -6
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +56 -5
- data/lib/cosmos/dart/lib/dart_decom_query.rb +108 -6
- data/lib/cosmos/dart/lib/dart_decommutator.rb +81 -22
- data/lib/cosmos/dart/lib/dart_importer.rb +44 -14
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +73 -55
- data/lib/cosmos/dart/lib/dart_reducer_manager.rb +34 -3
- data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +18 -7
- data/lib/cosmos/dart/processes/dart.rb +2 -1
- data/lib/cosmos/dart/processes/dart_decom_server.rb +2 -1
- data/lib/cosmos/dart/processes/dart_import.rb +1 -0
- data/lib/cosmos/dart/processes/dart_ingester.rb +1 -0
- data/lib/cosmos/dart/processes/dart_reducer.rb +1 -0
- data/lib/cosmos/dart/processes/dart_stream_server.rb +1 -0
- data/lib/cosmos/dart/processes/dart_util.rb +147 -0
- data/lib/cosmos/dart/processes/dart_worker.rb +1 -0
- data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +1 -1
- data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +1 -0
- data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +1 -0
- data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +1 -0
- data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +39 -36
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +2 -1
- data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +1 -2
- data/lib/cosmos/gui/widgets/dart_meta_frame.rb +13 -6
- data/lib/cosmos/interfaces.rb +1 -0
- data/lib/cosmos/interfaces/dart_status_interface.rb +91 -0
- data/lib/cosmos/interfaces/serial_interface.rb +5 -1
- data/lib/cosmos/io/json_drb.rb +7 -2
- data/lib/cosmos/io/json_drb_object.rb +11 -6
- data/lib/cosmos/io/json_rpc.rb +1 -0
- data/lib/cosmos/io/posix_serial_driver.rb +4 -2
- data/lib/cosmos/io/serial_driver.rb +8 -4
- data/lib/cosmos/io/win32_serial_driver.rb +4 -3
- data/lib/cosmos/packets/packet_config.rb +12 -2
- data/lib/cosmos/packets/structure_item.rb +1 -0
- data/lib/cosmos/script/extract.rb +4 -2
- data/lib/cosmos/streams/serial_stream.rb +10 -5
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +15 -15
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +1 -1
- data/lib/cosmos/tools/table_manager/table_manager.rb +6 -4
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +5 -4
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +1 -1
- data/lib/cosmos/top_level.rb +1 -1
- data/lib/cosmos/version.rb +4 -4
- data/spec/interfaces/serial_interface_spec.rb +13 -0
- data/spec/io/json_rpc_spec.rb +7 -0
- data/spec/io/win32_serial_driver_spec.rb +8 -0
- data/spec/packets/structure_item_spec.rb +6 -0
- data/spec/script/extract_spec.rb +5 -0
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +10 -0
- metadata +17 -3
- data/lib/cosmos/dart/app/helpers/application_helper.rb +0 -2
@@ -0,0 +1,54 @@
|
|
1
|
+
SCREEN AUTO AUTO 1.0 FIXED
|
2
|
+
|
3
|
+
VERTICAL
|
4
|
+
|
5
|
+
TITLE "DART Status"
|
6
|
+
|
7
|
+
HORIZONTAL
|
8
|
+
VERTICALBOX
|
9
|
+
SECTIONHEADER "Ingest Status"
|
10
|
+
|
11
|
+
LABELVALUE DART STATUS LAST_PLE_ID
|
12
|
+
LABELVALUE DART STATUS PLE_STATE_ERROR
|
13
|
+
LABELVALUE DART STATUS PLE_FIRST_TIME WITH_UNITS 22
|
14
|
+
LABELVALUE DART STATUS PLE_LAST_TIME WITH_UNITS 22
|
15
|
+
END
|
16
|
+
|
17
|
+
VERTICALBOX
|
18
|
+
SECTIONHEADER "Decom Status"
|
19
|
+
|
20
|
+
LABELVALUE DART STATUS PLE_STATE_NEED_DECOM
|
21
|
+
LABELVALUE DART STATUS DECOM_COUNT
|
22
|
+
LABELVALUE DART STATUS DECOM_ERROR_COUNT
|
23
|
+
LABELVALUE DART STATUS DECOM_MESSAGE_TIME WITH_UNITS 22
|
24
|
+
LABEL DECOM_MESSAGE:
|
25
|
+
VALUE DART STATUS DECOM_MESSAGE CONVERTED 50
|
26
|
+
END
|
27
|
+
END
|
28
|
+
HORIZONTAL
|
29
|
+
VERTICALBOX
|
30
|
+
SECTIONHEADER "Reduction Status"
|
31
|
+
|
32
|
+
LABELVALUE DART STATUS REDUCTION_COUNT
|
33
|
+
LABELVALUE DART STATUS REDUCTION_ERROR_COUNT
|
34
|
+
LABELVALUE DART STATUS REDUCTION_MESSAGE_TIME WITH_UNITS 22
|
35
|
+
LABEL REDUCTION_MESSAGE:
|
36
|
+
VALUE DART STATUS REDUCTION_MESSAGE CONVERTED 50
|
37
|
+
END
|
38
|
+
|
39
|
+
VERTICALBOX
|
40
|
+
SECTIONHEADER "Dart Database Status"
|
41
|
+
|
42
|
+
LABELVALUE DART STATUS DART_DATA_BYTES
|
43
|
+
LABELVALUE DART STATUS DART_LOGS_BYTES
|
44
|
+
LABELVALUE DART STATUS DART_DATABASE_BYTES
|
45
|
+
LABELVALUE DART STATUS DART_STATUS_SECONDS
|
46
|
+
END
|
47
|
+
|
48
|
+
END
|
49
|
+
|
50
|
+
VERTICALBOX
|
51
|
+
LABELVALUE DART STATUS RECEIVED_TIMEFORMATTED WITH_UNITS 22
|
52
|
+
END
|
53
|
+
END
|
54
|
+
|
@@ -46,6 +46,7 @@ static ID id_method_slice = 0;
|
|
46
46
|
static ID id_method_reverse = 0;
|
47
47
|
static ID id_method_Integer = 0;
|
48
48
|
static ID id_method_Float = 0;
|
49
|
+
static ID id_method_kind_of = 0;
|
49
50
|
|
50
51
|
static ID id_ivar_buffer = 0;
|
51
52
|
static ID id_ivar_bit_offset = 0;
|
@@ -1186,15 +1187,25 @@ static VALUE read_item(int argc, VALUE* argv, VALUE self)
|
|
1186
1187
|
* offset.
|
1187
1188
|
*/
|
1188
1189
|
static VALUE structure_item_spaceship(VALUE self, VALUE other_item) {
|
1189
|
-
int bit_offset =
|
1190
|
-
int other_bit_offset =
|
1190
|
+
int bit_offset = 0;
|
1191
|
+
int other_bit_offset = 0;
|
1191
1192
|
int bit_size = 0;
|
1192
1193
|
int other_bit_size = 0;
|
1193
1194
|
int create_index = 0;
|
1194
1195
|
int other_create_index = 0;
|
1195
1196
|
int have_create_index = 0;
|
1196
|
-
volatile VALUE v_create_index =
|
1197
|
-
volatile VALUE v_other_create_index =
|
1197
|
+
volatile VALUE v_create_index = Qnil;
|
1198
|
+
volatile VALUE v_other_create_index = Qnil;
|
1199
|
+
|
1200
|
+
if (!RTEST(rb_funcall(other_item, id_method_kind_of, 1, cStructureItem))) {
|
1201
|
+
return Qnil;
|
1202
|
+
}
|
1203
|
+
|
1204
|
+
bit_offset = FIX2INT(rb_ivar_get(self, id_ivar_bit_offset));
|
1205
|
+
other_bit_offset = FIX2INT(rb_ivar_get(other_item, id_ivar_bit_offset));
|
1206
|
+
|
1207
|
+
v_create_index = rb_ivar_get(self, id_ivar_create_index);
|
1208
|
+
v_other_create_index = rb_ivar_get(other_item, id_ivar_create_index);
|
1198
1209
|
if (RTEST(v_create_index) && RTEST(v_other_create_index)) {
|
1199
1210
|
create_index = FIX2INT(v_create_index);
|
1200
1211
|
other_create_index = FIX2INT(v_other_create_index);
|
@@ -1373,6 +1384,7 @@ void Init_structure (void)
|
|
1373
1384
|
id_method_reverse = rb_intern("reverse");
|
1374
1385
|
id_method_Integer = rb_intern("Integer");
|
1375
1386
|
id_method_Float = rb_intern("Float");
|
1387
|
+
id_method_kind_of = rb_intern("kind_of?");
|
1376
1388
|
|
1377
1389
|
MIN_INT8 = INT2NUM(-128);
|
1378
1390
|
MAX_INT8 = INT2NUM(127);
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class CreateStatuses < ActiveRecord::Migration[5.1]
|
2
|
+
def change
|
3
|
+
create_table :statuses do |t|
|
4
|
+
t.bigint :decom_count, :default => 0
|
5
|
+
t.bigint :decom_error_count, :default => 0
|
6
|
+
t.text :decom_message, :default => ""
|
7
|
+
t.datetime :decom_message_time
|
8
|
+
|
9
|
+
t.bigint :reduction_count, :default => 0
|
10
|
+
t.bigint :reduction_error_count, :default => 0
|
11
|
+
t.text :reduction_message, :default => ""
|
12
|
+
t.datetime :reduction_message_time
|
13
|
+
|
14
|
+
t.timestamps
|
15
|
+
end
|
16
|
+
status = Status.new
|
17
|
+
time = Time.utc(1970, 1, 1)
|
18
|
+
status.decom_message_time = time
|
19
|
+
status.reduction_message_time = time
|
20
|
+
status.save!
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class RemoveIndexes < ActiveRecord::Migration[5.1]
|
2
|
+
|
3
|
+
def change
|
4
|
+
remove_index :packet_log_entries, :is_tlm
|
5
|
+
remove_index :packet_log_entries, :target_id
|
6
|
+
remove_index :packet_log_entries, :meta_id
|
7
|
+
remove_index :packet_log_entries, :ready
|
8
|
+
remove_index :packet_log_entries, :packet_id
|
9
|
+
remove_index :packet_log_entries, :packet_log_id
|
10
|
+
|
11
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
12
|
+
# Since the decommutation tables are created dynamically we search
|
13
|
+
# through all the tables looking for tables named something like
|
14
|
+
# tXXX_YYY where XXX is the PacketConfig ID and YYY is the table index
|
15
|
+
if table.to_s =~ /^t(\d+)_(\d+)$/ # ASCII art? No! Regex!
|
16
|
+
packet_config_id = $1.to_i
|
17
|
+
table_index = $2.to_i
|
18
|
+
|
19
|
+
["", "_m", "_h", "_d"].each do |modifier|
|
20
|
+
table_name = table + modifier
|
21
|
+
remove_index table_name, :meta_id
|
22
|
+
remove_index table_name, :reduced_id
|
23
|
+
remove_index table_name, :reduced_state
|
24
|
+
add_index table_name, :reduced_state, :where => "reduced_state < 2"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class AddPacketLogIdToTables < ActiveRecord::Migration[5.1]
|
2
|
+
def change
|
3
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
4
|
+
# Since the decommutation tables are created dynamically we search
|
5
|
+
# through all the tables looking for tables named something like
|
6
|
+
# tXXX_YYY where XXX is the PacketConfig ID and YYY is the table index
|
7
|
+
if table.to_s =~ /^t(\d+)_(\d+)$/ # ASCII art? No! Regex!
|
8
|
+
packet_config_id = $1.to_i
|
9
|
+
table_index = $2.to_i
|
10
|
+
|
11
|
+
["", "_m", "_h", "_d"].each do |modifier|
|
12
|
+
table_name = table + modifier
|
13
|
+
add_column table_name, :packet_log_id, :integer
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
13
|
+
ActiveRecord::Schema.define(version: 20180511194944) do
|
14
14
|
|
15
15
|
# These are extensions that must be enabled in order to support this database
|
16
16
|
enable_extension "plpgsql"
|
@@ -54,18 +54,11 @@ ActiveRecord::Schema.define(version: 20180116214338) do
|
|
54
54
|
t.datetime "time", null: false
|
55
55
|
t.integer "packet_log_id", null: false
|
56
56
|
t.bigint "data_offset", null: false
|
57
|
-
t.datetime "created_at", null: false
|
58
|
-
t.datetime "updated_at", null: false
|
59
57
|
t.bigint "meta_id"
|
60
58
|
t.boolean "is_tlm", null: false
|
61
59
|
t.integer "decom_state", default: 0
|
62
60
|
t.boolean "ready", default: false
|
63
|
-
t.index ["
|
64
|
-
t.index ["meta_id"], name: "index_packet_log_entries_on_meta_id"
|
65
|
-
t.index ["packet_id"], name: "index_packet_log_entries_on_packet_id"
|
66
|
-
t.index ["packet_log_id"], name: "index_packet_log_entries_on_packet_log_id"
|
67
|
-
t.index ["ready"], name: "index_packet_log_entries_on_ready"
|
68
|
-
t.index ["target_id"], name: "index_packet_log_entries_on_target_id"
|
61
|
+
t.index ["decom_state"], name: "index_packet_log_entries_on_decom_state"
|
69
62
|
t.index ["time"], name: "index_packet_log_entries_on_time"
|
70
63
|
end
|
71
64
|
|
@@ -86,6 +79,19 @@ ActiveRecord::Schema.define(version: 20180116214338) do
|
|
86
79
|
t.index ["target_id", "name", "is_tlm"], name: "index_packets_on_target_id_and_name_and_is_tlm", unique: true
|
87
80
|
end
|
88
81
|
|
82
|
+
create_table "statuses", force: :cascade do |t|
|
83
|
+
t.bigint "decom_count", default: 0
|
84
|
+
t.bigint "decom_error_count", default: 0
|
85
|
+
t.text "decom_message", default: ""
|
86
|
+
t.datetime "decom_message_time"
|
87
|
+
t.bigint "reduction_count", default: 0
|
88
|
+
t.bigint "reduction_error_count", default: 0
|
89
|
+
t.text "reduction_message", default: ""
|
90
|
+
t.datetime "reduction_message_time"
|
91
|
+
t.datetime "created_at", null: false
|
92
|
+
t.datetime "updated_at", null: false
|
93
|
+
end
|
94
|
+
|
89
95
|
create_table "system_configs", force: :cascade do |t|
|
90
96
|
t.string "name", null: false
|
91
97
|
t.datetime "created_at", null: false
|
data/lib/cosmos/dart/db/seeds.rb
CHANGED
@@ -5,3 +5,11 @@
|
|
5
5
|
#
|
6
6
|
# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
|
7
7
|
# Character.create(name: 'Luke', movie: movies.first)
|
8
|
+
status = Status.first
|
9
|
+
unless status
|
10
|
+
status = Status.new
|
11
|
+
time = Time.utc(1970, 1, 1)
|
12
|
+
status.decom_message_time = time
|
13
|
+
status.reduction_message_time = time
|
14
|
+
status.save!
|
15
|
+
end
|
@@ -165,6 +165,7 @@ module DartCommon
|
|
165
165
|
t.bigint :ple_id
|
166
166
|
t.bigint :meta_id
|
167
167
|
t.bigint :reduced_id
|
168
|
+
t.integer :packet_log_id
|
168
169
|
t.integer :reduced_state, :default => 0
|
169
170
|
table_data_types.each_with_index do |data_type, index|
|
170
171
|
item_index = (table_index * MAX_COLUMNS_PER_TABLE) + index
|
@@ -183,9 +184,7 @@ module DartCommon
|
|
183
184
|
end
|
184
185
|
end
|
185
186
|
t.index :time
|
186
|
-
t.index :
|
187
|
-
t.index :reduced_state
|
188
|
-
t.index :reduced_id
|
187
|
+
t.index :reduced_state, :where => "reduced_state < 2"
|
189
188
|
end
|
190
189
|
create_reduction_table("t#{packet_config.id}_#{table_index}_h", table_data_types, table_index) # hour
|
191
190
|
create_reduction_table("t#{packet_config.id}_#{table_index}_m", table_data_types, table_index) # month
|
@@ -524,6 +523,7 @@ module DartCommon
|
|
524
523
|
# @param array_size [Integer, nil] Size of the array or nil if no array
|
525
524
|
# @return [Symbol] Database type such as :integer, :bigint, :string, etc.
|
526
525
|
def cosmos_data_type_to_db_type(data_type, bit_size, array_size)
|
526
|
+
return nil if data_type.nil? or bit_size.nil?
|
527
527
|
db_type = nil
|
528
528
|
case data_type
|
529
529
|
when :INT
|
@@ -674,6 +674,7 @@ module DartCommon
|
|
674
674
|
t.integer :num_samples
|
675
675
|
t.bigint :meta_id
|
676
676
|
t.bigint :reduced_id
|
677
|
+
t.integer :packet_log_id
|
677
678
|
t.integer :reduced_state, :default => 0
|
678
679
|
table_data_types.each_with_index do |data_type, index|
|
679
680
|
item_index = (table_index * MAX_COLUMNS_PER_TABLE) + index
|
@@ -686,9 +687,7 @@ module DartCommon
|
|
686
687
|
end
|
687
688
|
end
|
688
689
|
t.index :start_time
|
689
|
-
t.index :
|
690
|
-
t.index :reduced_state
|
691
|
-
t.index :reduced_id
|
690
|
+
t.index :reduced_state, :where => "reduced_state < 2"
|
692
691
|
end
|
693
692
|
end
|
694
693
|
|
@@ -9,6 +9,7 @@
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
10
10
|
|
11
11
|
require 'dart_common'
|
12
|
+
require 'cosmos/packet_logs/packet_log_reader'
|
12
13
|
|
13
14
|
class DartDatabaseCleaner
|
14
15
|
include DartCommon
|
@@ -17,18 +18,68 @@ class DartDatabaseCleaner
|
|
17
18
|
# if the DART packet logs were moved and force is false (default). This is
|
18
19
|
# deliberate because force causes all the lost (or moved) files to be deleted
|
19
20
|
# which forces them to be re-imported at their new location.
|
20
|
-
def self.clean(force)
|
21
|
+
def self.clean(force, full = false)
|
21
22
|
Cosmos::Logger::info("Starting database cleanup...")
|
22
23
|
cleaner = DartDatabaseCleaner.new
|
23
24
|
cleaner.clean_system_configs()
|
24
25
|
cleaner.clean_packet_logs(force)
|
25
26
|
cleaner.clean_packet_configs()
|
26
27
|
cleaner.clean_packet_log_entries()
|
27
|
-
|
28
|
-
|
28
|
+
if full
|
29
|
+
cleaner.clean_decommutation_tables()
|
30
|
+
cleaner.clean_reductions()
|
31
|
+
end
|
29
32
|
Cosmos::Logger::info("Database cleanup complete!")
|
30
33
|
end
|
31
34
|
|
35
|
+
def remove_packet_log(filename)
|
36
|
+
filename = filename.gsub("\\", "/") # Fix slashes
|
37
|
+
filename = File.expand_path(filename, Cosmos::System.paths['DART_DATA']) # Make absolute path
|
38
|
+
if File.exists?(filename)
|
39
|
+
packet_log = PacketLog.where("filename = ?", filename).first
|
40
|
+
if packet_log
|
41
|
+
size = File.size(filename)
|
42
|
+
reader = Cosmos::PacketLogReader.new
|
43
|
+
reader.open(filename)
|
44
|
+
first_packet = nil
|
45
|
+
last_packet = nil
|
46
|
+
start_time = nil
|
47
|
+
end_time = nil
|
48
|
+
begin
|
49
|
+
first_packet = reader.first
|
50
|
+
last_packet = reader.last
|
51
|
+
start_time = first_packet.received_time
|
52
|
+
end_time = last_packet.received_time
|
53
|
+
rescue
|
54
|
+
if size == Cosmos::PacketLogReader::COSMOS2_HEADER_LENGTH or size == 0
|
55
|
+
Cosmos::Logger::error("File contains no packets: #{filename}")
|
56
|
+
else
|
57
|
+
Cosmos::Logger::error("Error analyzing file: #{filename}")
|
58
|
+
end
|
59
|
+
exit(1)
|
60
|
+
ensure
|
61
|
+
reader.close
|
62
|
+
end
|
63
|
+
num_deleted = PacketLogEntry.where("time >= ? and time <= ? and packet_log_id = ?", start_time - 1.minute, end_time + 1.minute, packet_log.id).delete_all
|
64
|
+
Cosmos::Logger::info("Removed #{num_deleted} PacketLogEntries")
|
65
|
+
each_decom_and_reduced_table() do |packet_config_id, table_index, decom_model, minute_model, hour_model, day_model|
|
66
|
+
num_deleted = 0
|
67
|
+
num_deleted += decom_model.where("time >= ? and time <= ? and packet_log_id = ?", start_time - 1.minute, end_time + 1.minute, packet_log.id).delete_all
|
68
|
+
num_deleted += minute_model.where("start_time >= ? and start_time <= ? and packet_log_id = ?", start_time - 1.minute, end_time + 2.minutes, packet_log.id).delete_all
|
69
|
+
num_deleted += hour_model.where("start_time >= ? and start_time <= ? and packet_log_id = ?", start_time - 1.minute, end_time + 1.hour + 1.minutes, packet_log.id).delete_all
|
70
|
+
num_deleted += day_model.where("start_time >= ? and start_time <= ? and packet_log_id = ?", start_time - 1.minute, end_time + 1.hour + 1.day, packet_log.id).delete_all
|
71
|
+
Cosmos::Logger::info("Deleted #{num_deleted} rows from #{decom_model.table_name} and reductions")
|
72
|
+
end
|
73
|
+
packet_log.delete
|
74
|
+
Cosmos::Logger::info("Packet Log Id #{packet_log.id} deleted")
|
75
|
+
else
|
76
|
+
Cosmos::Logger::error("File does not exist in database: #{filename}")
|
77
|
+
end
|
78
|
+
else
|
79
|
+
Cosmos::Logger::error("File does not exist: #{filename}")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
32
83
|
# Ensure we have all the System Configs locally on the DART machine
|
33
84
|
def clean_system_configs
|
34
85
|
Cosmos::Logger::info("Cleaning up SystemConfig...")
|
@@ -95,7 +146,7 @@ class DartDatabaseCleaner
|
|
95
146
|
end
|
96
147
|
rescue => err
|
97
148
|
Cosmos::Logger::error("Error cleaning up packet config: #{packet_config.id}: #{err.formatted}")
|
98
|
-
raise "Cleanup failure - Database requires manual correction"
|
149
|
+
raise $!, "Cleanup failure - Database requires manual correction: #{err.message}", $!.backtrace
|
99
150
|
end
|
100
151
|
end
|
101
152
|
end
|
@@ -108,7 +159,7 @@ class DartDatabaseCleaner
|
|
108
159
|
# outstanding entries which are not ready while packets are being received.
|
109
160
|
# Note the normal shutdown process attempts to flush the log file and mark
|
110
161
|
# all outstanding entries as ready so this would only happen during a crash.
|
111
|
-
ples = PacketLogEntry.where("ready != true")
|
162
|
+
ples = PacketLogEntry.where("decom_state = 0 and ready != true")
|
112
163
|
return unless ples.length > 0
|
113
164
|
Cosmos::Logger::info("Removing unready packet log entries: #{ples.length}")
|
114
165
|
ples.destroy_all
|
@@ -53,7 +53,7 @@ class DartDecomQuery
|
|
53
53
|
# for other reduction values), and meta_id.
|
54
54
|
def query(request)
|
55
55
|
request_start_time = Time.now
|
56
|
-
Cosmos::Logger.info("#{request_start_time.formatted}:
|
56
|
+
Cosmos::Logger.info("#{request_start_time.formatted}: query: #{request}")
|
57
57
|
|
58
58
|
begin
|
59
59
|
start_time_sec = request['start_time_sec']
|
@@ -136,7 +136,7 @@ class DartDecomQuery
|
|
136
136
|
unless meta_ids.length > 0
|
137
137
|
meta_filters = request['meta_filters']
|
138
138
|
meta_filters ||= []
|
139
|
-
|
139
|
+
|
140
140
|
if meta_filters.length > 0
|
141
141
|
meta_ids = process_meta_filters(meta_filters, is_tlm, end_time)
|
142
142
|
end
|
@@ -149,10 +149,10 @@ class DartDecomQuery
|
|
149
149
|
offset = 0 if offset < 0
|
150
150
|
|
151
151
|
return query_decom_reduced(
|
152
|
-
item[0], item[1], item[2],
|
153
|
-
value_type, is_tlm,
|
154
|
-
start_time, end_time,
|
155
|
-
reduction, reduction_modifier,
|
152
|
+
item[0], item[1], item[2],
|
153
|
+
value_type, is_tlm,
|
154
|
+
start_time, end_time,
|
155
|
+
reduction, reduction_modifier,
|
156
156
|
item_name_modifier, limit, offset, meta_ids)
|
157
157
|
|
158
158
|
rescue Exception => error
|
@@ -168,6 +168,8 @@ class DartDecomQuery
|
|
168
168
|
# @param is_tlm true or false
|
169
169
|
# @return [Array<String>] Array of item names
|
170
170
|
def item_names(target_name, packet_name, is_tlm = true)
|
171
|
+
Cosmos::Logger.info("#{time.formatted}: item_names")
|
172
|
+
|
171
173
|
target = Target.where("name = ?", target_name).first
|
172
174
|
raise "Target #{target_name} not found" unless target
|
173
175
|
|
@@ -181,4 +183,104 @@ class DartDecomQuery
|
|
181
183
|
return item_names
|
182
184
|
end
|
183
185
|
|
186
|
+
# Returns status on the DART Database
|
187
|
+
def dart_status
|
188
|
+
start_time = Time.now
|
189
|
+
Cosmos::Logger.info("#{start_time.formatted}: dart_status")
|
190
|
+
result = {}
|
191
|
+
status = Status.first
|
192
|
+
|
193
|
+
# Ingest Status
|
194
|
+
# ---------------
|
195
|
+
# Last PacketLogEntry Id
|
196
|
+
last_ple = PacketLogEntry.select("id").last
|
197
|
+
if last_ple
|
198
|
+
result[:LAST_PLE_ID] = last_ple.id
|
199
|
+
else
|
200
|
+
result[:LAST_PLE_ID] = -1
|
201
|
+
end
|
202
|
+
# Num PacketLogEntries Needing Decom state = 0
|
203
|
+
result[:PLE_STATE_NEED_DECOM] = PacketLogEntry.where("decom_state = 0").count
|
204
|
+
# Num PacketLogEntries Errored - state >= 3
|
205
|
+
result[:PLE_STATE_ERROR] = PacketLogEntry.where("decom_state >= 3").count
|
206
|
+
# First Time in Database
|
207
|
+
sort_first_ple = PacketLogEntry.order("time ASC").select("time").first
|
208
|
+
if sort_first_ple
|
209
|
+
result[:PLE_FIRST_TIME_S] = sort_first_ple.time.tv_sec
|
210
|
+
result[:PLE_FIRST_TIME_US] = sort_first_ple.time.tv_usec
|
211
|
+
else
|
212
|
+
result[:PLE_FIRST_TIME_S] = 0
|
213
|
+
result[:PLE_FIRST_TIME_US] = 0
|
214
|
+
end
|
215
|
+
# Last Time in Database
|
216
|
+
sort_last_ple = PacketLogEntry.order("time DESC").select("time").first
|
217
|
+
if sort_last_ple
|
218
|
+
result[:PLE_LAST_TIME_S] = sort_last_ple.time.tv_sec
|
219
|
+
result[:PLE_LAST_TIME_US] = sort_last_ple.time.tv_usec
|
220
|
+
else
|
221
|
+
result[:PLE_LAST_TIME_S] = 0
|
222
|
+
result[:PLE_LAST_TIME_US] = 0
|
223
|
+
end
|
224
|
+
|
225
|
+
# Decom Status
|
226
|
+
# ---------------
|
227
|
+
# Decom Count
|
228
|
+
result[:DECOM_COUNT] = status.decom_count
|
229
|
+
# Decom Errors
|
230
|
+
result[:DECOM_ERROR_COUNT] = status.decom_error_count
|
231
|
+
# Decom Message
|
232
|
+
result[:DECOM_MESSAGE] = status.decom_message
|
233
|
+
# Decom Message Time
|
234
|
+
result[:DECOM_MESSAGE_TIME_S] = status.decom_message_time.tv_sec
|
235
|
+
result[:DECOM_MESSAGE_TIME_US] = status.decom_message_time.tv_usec
|
236
|
+
|
237
|
+
# Reduction Status
|
238
|
+
# ---------------
|
239
|
+
# Reduction Count
|
240
|
+
result[:REDUCTION_COUNT] = status.reduction_count
|
241
|
+
# Reduction Errors
|
242
|
+
result[:REDUCTION_ERROR_COUNT] = status.reduction_error_count
|
243
|
+
# Reduction Message
|
244
|
+
result[:REDUCTION_MESSAGE] = status.reduction_message
|
245
|
+
# Reduction Time
|
246
|
+
result[:REDUCTION_MESSAGE_TIME_S] = status.reduction_message_time.tv_sec
|
247
|
+
result[:REDUCTION_MESSAGE_TIME_US] = status.reduction_message_time.tv_usec
|
248
|
+
|
249
|
+
# Storage
|
250
|
+
# ---------------
|
251
|
+
Cosmos.set_working_dir do
|
252
|
+
# Size of outputs/dart/data folder
|
253
|
+
result[:DART_DATA_BYTES] = Dir.glob(File.join(Cosmos::System.paths['DART_DATA'], '**', '*')).map{ |f| File.size(f) }.inject(:+)
|
254
|
+
# Size of outputs/dart/logs folder
|
255
|
+
result[:DART_LOGS_BYTES] = Dir.glob(File.join(Cosmos::System.paths['DART_LOGS'], '**', '*')).map{ |f| File.size(f) }.inject(:+)
|
256
|
+
end
|
257
|
+
# Size of SQL Database
|
258
|
+
begin
|
259
|
+
result[:DART_DATABASE_BYTES] = ActiveRecord::Base.connection.execute("select pg_database_size('#{ActiveRecord::Base.connection_config[:database]}');")[0]['pg_database_size']
|
260
|
+
rescue
|
261
|
+
result[:DART_DATABASE_BYTES] = -1
|
262
|
+
end
|
263
|
+
|
264
|
+
end_time = Time.now
|
265
|
+
delta = end_time - start_time
|
266
|
+
result[:DART_STATUS_SECONDS] = delta
|
267
|
+
|
268
|
+
return result
|
269
|
+
end
|
270
|
+
|
271
|
+
def clear_errors
|
272
|
+
time = Time.now
|
273
|
+
Cosmos::Logger.info("#{time.formatted}: clear_errors")
|
274
|
+
status = Status.first
|
275
|
+
status.decom_error_count = 0
|
276
|
+
status.decom_message = ''
|
277
|
+
status.decom_message_time = time
|
278
|
+
status.reduction_error_count = 0
|
279
|
+
status.reduction_message = ''
|
280
|
+
status.reduction_message_time = time
|
281
|
+
status.save!
|
282
|
+
|
283
|
+
return nil
|
284
|
+
end
|
285
|
+
|
184
286
|
end
|