cosmos 5.0.3 → 5.0.4

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/bin/cosmos +1 -1
  3. data/lib/cosmos/api/api.rb +1 -25
  4. data/lib/cosmos/api/cmd_api.rb +6 -6
  5. data/lib/cosmos/api/config_api.rb +10 -4
  6. data/lib/cosmos/api/limits_api.rb +1 -1
  7. data/lib/cosmos/api/settings_api.rb +19 -7
  8. data/lib/cosmos/api/target_api.rb +2 -2
  9. data/lib/cosmos/api/tlm_api.rb +8 -8
  10. data/lib/cosmos/config/config_parser.rb +2 -2
  11. data/lib/cosmos/config/meta_config_parser.rb +1 -1
  12. data/lib/cosmos/logs/log_writer.rb +2 -2
  13. data/lib/cosmos/microservices/decom_microservice.rb +1 -1
  14. data/lib/cosmos/microservices/interface_microservice.rb +0 -1
  15. data/lib/cosmos/microservices/microservice.rb +2 -2
  16. data/lib/cosmos/microservices/reducer_microservice.rb +12 -10
  17. data/lib/cosmos/models/cvt_model.rb +6 -6
  18. data/lib/cosmos/models/gem_model.rb +2 -2
  19. data/lib/cosmos/models/info_model.rb +1 -1
  20. data/lib/cosmos/models/interface_status_model.rb +1 -1
  21. data/lib/cosmos/models/metadata_model.rb +42 -216
  22. data/lib/cosmos/models/metric_model.rb +2 -2
  23. data/lib/cosmos/models/microservice_model.rb +1 -1
  24. data/lib/cosmos/models/microservice_status_model.rb +1 -1
  25. data/lib/cosmos/models/model.rb +16 -16
  26. data/lib/cosmos/models/note_model.rb +124 -0
  27. data/lib/cosmos/models/ping_model.rb +2 -1
  28. data/lib/cosmos/models/plugin_model.rb +1 -1
  29. data/lib/cosmos/models/process_status_model.rb +1 -1
  30. data/lib/cosmos/models/scope_model.rb +9 -6
  31. data/lib/cosmos/models/settings_model.rb +55 -0
  32. data/lib/cosmos/models/sorted_model.rb +165 -0
  33. data/lib/cosmos/models/target_model.rb +20 -20
  34. data/lib/cosmos/models/tool_config_model.rb +38 -0
  35. data/lib/cosmos/models/tool_model.rb +1 -1
  36. data/lib/cosmos/models/widget_model.rb +1 -1
  37. data/lib/cosmos/operators/microservice_operator.rb +2 -1
  38. data/lib/cosmos/script/calendar.rb +26 -15
  39. data/lib/cosmos/system/system.rb +2 -1
  40. data/lib/cosmos/top_level.rb +5 -1
  41. data/lib/cosmos/topics/autonomic_topic.rb +2 -2
  42. data/lib/cosmos/topics/calendar_topic.rb +1 -1
  43. data/lib/cosmos/topics/command_decom_topic.rb +31 -1
  44. data/lib/cosmos/topics/command_topic.rb +6 -4
  45. data/lib/cosmos/topics/interface_topic.rb +8 -8
  46. data/lib/cosmos/topics/limits_event_topic.rb +5 -3
  47. data/lib/cosmos/topics/notifications_topic.rb +1 -1
  48. data/lib/cosmos/topics/router_topic.rb +9 -9
  49. data/lib/cosmos/topics/telemetry_decom_topic.rb +1 -1
  50. data/lib/cosmos/topics/telemetry_topic.rb +1 -1
  51. data/lib/cosmos/topics/timeline_topic.rb +1 -1
  52. data/lib/cosmos/topics/topic.rb +21 -16
  53. data/lib/cosmos/utilities/logger.rb +3 -3
  54. data/lib/cosmos/utilities/metric.rb +32 -26
  55. data/lib/cosmos/utilities/s3.rb +1 -1
  56. data/lib/cosmos/utilities/s3_file_cache.rb +12 -6
  57. data/lib/cosmos/utilities/store.rb +1 -0
  58. data/lib/cosmos/utilities/store_autoload.rb +27 -126
  59. data/lib/cosmos/version.rb +5 -5
  60. metadata +7 -4
  61. data/lib/cosmos/models/narrative_model.rb +0 -280
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8cc294c0ebdd3984fd89fc3a21d4c269c47c6bc4bd7851f0f3ef5ae5393ad365
4
- data.tar.gz: 89168bfb640bb201cc62f1060b83285326ca7497feeea878c4ec81b6a0c8b40c
3
+ metadata.gz: 5a561fd5492c1b282759d45170da4e687b4e53eea086804bde1c549a75a8bdd5
4
+ data.tar.gz: c88407b16125e7ef2fb9764dd14338f6508e2fbde1567ff3b7d23b24f1b7dd2a
5
5
  SHA512:
6
- metadata.gz: 4f3524b98078bf0568a703d2622f81865fe1133a34434c203b03d2a29ff7dd55510a762fe06b75584fc35f90ebe06a31b4ee3882cdf2553628368f908912173f
7
- data.tar.gz: 6caeb0cefd049620051a44ffbe0d398e6e43a466bbd7c6cc5edb499652cb5c242c769afb91e560b310700059764ec4ecf64a1bc109ed7654af4ecc568c379e88
6
+ metadata.gz: f80a81b27f8c00611a730ef329b4c4afc01e572419ee03d1c7621295e2670a1e829d41511ee4a82af5874d43d32f7b51280281c26310ee8f1e79e767e987c542
7
+ data.tar.gz: 14f36f225ac641ca74dac4eca580ffad8e6ffea7d69bed1c685d387db0ff6d3977c6ad8b148b8a8117914bd7752914423d2691aa899b0ec902fde5c25f4e931a
data/bin/cosmos CHANGED
@@ -99,7 +99,7 @@ def generate(args)
99
99
  end
100
100
  base_name.sub!("target.rb", target_lib_filename)
101
101
  base_name.sub!("plugin.gemspec", "#{plugin_name}.gemspec")
102
- output = ERB.new(File.read(file)).result(b)
102
+ output = ERB.new(File.read(file), trim_mode: "-").result(b)
103
103
  File.open(base_name, 'w') do |file|
104
104
  file.write output
105
105
  end
@@ -28,36 +28,12 @@ require 'cosmos/api/settings_api'
28
28
  require 'cosmos/api/target_api'
29
29
  require 'cosmos/api/tlm_api'
30
30
  require 'cosmos/utilities/authorization'
31
+ require 'cosmos/topics/topic'
31
32
 
32
33
  module Cosmos
33
34
  module Api
34
35
  include Extract
35
36
  include Authorization
36
37
  include ApiShared
37
-
38
- # PRIVATE - Shared by cmd_api and tlm_api
39
-
40
- def _get_cnt(topic)
41
- _, packet = Store.instance.read_topic_last(topic)
42
- packet ? packet["received_count"].to_i : 0
43
- end
44
-
45
- def get_all_cmd_tlm_info(type, scope:, token:)
46
- authorize(permission: 'system', scope: scope, token: token)
47
- result = []
48
- keys = []
49
- count = 0
50
- loop do
51
- count, part = Store.scan(0, :match => "#{scope}__#{type}__*", :count => 1000)
52
- keys.concat(part)
53
- break if count.to_i == 0
54
- end
55
- keys.each do |key|
56
- _, _, target, packet = key.gsub(/{|}/, '').split('__') # split off scope and type
57
- result << [target, packet, _get_cnt(key)]
58
- end
59
- # Return the results sorted by target, packet
60
- result.sort_by { |a| [a[0], a[1]] }
61
- end
62
38
  end
63
39
  end
@@ -195,7 +195,7 @@ module Cosmos
195
195
  authorize(permission: 'cmd_info', target_name: target_name, packet_name: command_name, scope: scope, token: token)
196
196
  TargetModel.packet(target_name, command_name, type: :CMD, scope: scope)
197
197
  topic = "#{scope}__COMMAND__{#{target_name}}__#{command_name}"
198
- msg_id, msg_hash = Store.instance.read_topic_last(topic)
198
+ msg_id, msg_hash = Topic.get_newest_message(topic)
199
199
  if msg_id
200
200
  msg_hash['buffer'] = msg_hash['buffer'].b
201
201
  return msg_hash
@@ -302,7 +302,7 @@ module Cosmos
302
302
  # @return [Varies] value
303
303
  def get_cmd_value(target_name, command_name, parameter_name, value_type = :CONVERTED, scope: $cosmos_scope, token: $cosmos_token)
304
304
  authorize(permission: 'cmd_info', target_name: target_name, packet_name: command_name, scope: scope, token: token)
305
- Store.instance.get_cmd_item(target_name, command_name, parameter_name, type: value_type, scope: scope)
305
+ CommandDecomTopic.get_cmd_item(target_name, command_name, parameter_name, type: value_type, scope: scope)
306
306
  end
307
307
 
308
308
  # Returns the time the most recent command was sent
@@ -315,7 +315,7 @@ module Cosmos
315
315
  def get_cmd_time(target_name = nil, command_name = nil, scope: $cosmos_scope, token: $cosmos_token)
316
316
  authorize(permission: 'cmd_info', target_name: target_name, packet_name: command_name, scope: scope, token: token)
317
317
  if target_name and command_name
318
- time = Store.instance.get_cmd_item(target_name, command_name, 'RECEIVED_TIMESECONDS', type: :CONVERTED, scope: scope)
318
+ time = CommandDecomTopic.get_cmd_item(target_name, command_name, 'RECEIVED_TIMESECONDS', type: :CONVERTED, scope: scope)
319
319
  [target_name, command_name, time.to_i, ((time.to_f - time.to_i) * 1_000_000).to_i]
320
320
  else
321
321
  if target_name.nil?
@@ -327,7 +327,7 @@ module Cosmos
327
327
  time = 0
328
328
  command_name = nil
329
329
  TargetModel.packets(target_name, type: :CMD, scope: scope).each do |packet|
330
- cur_time = Store.instance.get_cmd_item(target_name, packet["packet_name"], 'RECEIVED_TIMESECONDS', type: :CONVERTED, scope: scope)
330
+ cur_time = CommandDecomTopic.get_cmd_item(target_name, packet["packet_name"], 'RECEIVED_TIMESECONDS', type: :CONVERTED, scope: scope)
331
331
  next unless cur_time
332
332
 
333
333
  if cur_time > time
@@ -349,7 +349,7 @@ module Cosmos
349
349
  def get_cmd_cnt(target_name, command_name, scope: $cosmos_scope, token: $cosmos_token)
350
350
  authorize(permission: 'system', target_name: target_name, packet_name: command_name, scope: scope, token: token)
351
351
  TargetModel.packet(target_name, command_name, type: :CMD, scope: scope)
352
- _get_cnt("#{scope}__COMMAND__{#{target_name}}__#{command_name}")
352
+ Topic.get_cnt("#{scope}__COMMAND__{#{target_name}}__#{command_name}")
353
353
  end
354
354
 
355
355
  # Get information on all command packets
@@ -362,7 +362,7 @@ module Cosmos
362
362
  TargetModel.packets(target_name, type: :CMD, scope: scope).each do | packet |
363
363
  command_name = packet['packet_name']
364
364
  key = "#{scope}__COMMAND__{#{target_name}}__#{command_name}"
365
- result << [target_name, command_name, _get_cnt(key)]
365
+ result << [target_name, command_name, Topic.get_cnt(key)]
366
366
  end
367
367
  end
368
368
  # Return the results sorted by target, packet
@@ -17,6 +17,8 @@
17
17
  # enterprise edition license of COSMOS if purchased from the
18
18
  # copyright holder
19
19
 
20
+ require 'cosmos/models/tool_config_model'
21
+
20
22
  module Cosmos
21
23
  module Api
22
24
  WHITELIST ||= []
@@ -34,19 +36,23 @@ module Cosmos
34
36
  end
35
37
 
36
38
  def list_configs(tool, scope: $cosmos_scope, token: $cosmos_token)
37
- Store.instance.hkeys("#{scope}__config__#{tool}")
39
+ authorize(permission: 'system', scope: scope, token: token)
40
+ ToolConfigModel.list_configs(tool, scope: scope)
38
41
  end
39
42
 
40
43
  def load_config(tool, name, scope: $cosmos_scope, token: $cosmos_token)
41
- Store.instance.hget("#{scope}__config__#{tool}", name)
44
+ authorize(permission: 'system', scope: scope, token: token)
45
+ ToolConfigModel.load_config(tool, name, scope: scope)
42
46
  end
43
47
 
44
48
  def save_config(tool, name, data, scope: $cosmos_scope, token: $cosmos_token)
45
- Store.instance.hset("#{scope}__config__#{tool}", name, data)
49
+ authorize(permission: 'system_set', scope: scope, token: token)
50
+ ToolConfigModel.save_config(tool, name, data, scope: scope)
46
51
  end
47
52
 
48
53
  def delete_config(tool, name, scope: $cosmos_scope, token: $cosmos_token)
49
- Store.instance.hdel("#{scope}__config__#{tool}", name)
54
+ authorize(permission: 'system_set', scope: scope, token: token)
55
+ ToolConfigModel.delete_config(tool, name, scope: scope)
50
56
  end
51
57
  end
52
58
  end
@@ -64,7 +64,7 @@ module Cosmos
64
64
  targets.each do |target_name|
65
65
  get_all_telemetry(target_name, scope: scope).each do |packet|
66
66
  topic = "#{scope}__TELEMETRY__{#{target_name}}__#{packet['packet_name']}"
67
- _, msg_hash = Store.get_newest_message(topic)
67
+ _, msg_hash = Topic.get_newest_message(topic)
68
68
  unless msg_hash && msg_hash['time'].to_i > stale_time
69
69
  next if with_limits_only && packet['items'].find { |item| item['limits'] }.nil?
70
70
 
@@ -19,8 +19,6 @@
19
19
 
20
20
  module Cosmos
21
21
  module Api
22
- SETTINGS_KEY = "cosmos__settings"
23
-
24
22
  WHITELIST ||= []
25
23
  WHITELIST.concat([
26
24
  'list_settings',
@@ -31,28 +29,42 @@ module Cosmos
31
29
  ])
32
30
 
33
31
  def list_settings(scope: $cosmos_scope, token: $cosmos_token)
34
- Store.instance.hkeys(SETTINGS_KEY)
32
+ authorize(permission: 'system', scope: scope, token: token)
33
+ SettingsModel.names(scope: scope)
35
34
  end
36
35
 
37
36
  def get_all_settings(scope: $cosmos_scope, token: $cosmos_token)
38
- Store.instance.hgetall(SETTINGS_KEY)
37
+ authorize(permission: 'system', scope: scope, token: token)
38
+ SettingsModel.all(scope: scope)
39
39
  end
40
40
 
41
41
  def get_setting(name, scope: $cosmos_scope, token: $cosmos_token)
42
- Store.instance.hget(SETTINGS_KEY, name)
42
+ authorize(permission: 'system', scope: scope, token: token)
43
+ setting = SettingsModel.get(name: name, scope: scope)
44
+ if setting
45
+ return setting["data"]
46
+ else
47
+ return nil
48
+ end
43
49
  end
44
50
 
45
51
  def get_settings(*args, scope: $cosmos_scope, token: $cosmos_token)
52
+ authorize(permission: 'system', scope: scope, token: token)
46
53
  ret = []
47
54
  args.each do |name|
48
- ret << Store.instance.hget(SETTINGS_KEY, name)
55
+ setting = SettingsModel.get(name: name, scope: scope)
56
+ if setting
57
+ ret << setting["data"]
58
+ else
59
+ ret << nil
60
+ end
49
61
  end
50
62
  return ret
51
63
  end
52
64
 
53
65
  def save_setting(name, data, scope: $cosmos_scope, token: $cosmos_token)
54
66
  authorize(permission: 'admin', scope: scope, token: token)
55
- Store.instance.hset(SETTINGS_KEY, name, data)
67
+ SettingsModel.set({ name: name, data: data }, scope: scope)
56
68
  end
57
69
  end
58
70
  end
@@ -56,12 +56,12 @@ module Cosmos
56
56
  cmd_cnt = 0
57
57
  packets = TargetModel.packets(target_name, type: :CMD, scope: scope)
58
58
  packets.each do |packet|
59
- cmd_cnt += _get_cnt("#{scope}__COMMAND__{#{target_name}}__#{packet['packet_name']}")
59
+ cmd_cnt += Topic.get_cnt("#{scope}__COMMAND__{#{target_name}}__#{packet['packet_name']}")
60
60
  end
61
61
  tlm_cnt = 0
62
62
  packets = TargetModel.packets(target_name, type: :TLM, scope: scope)
63
63
  packets.each do |packet|
64
- tlm_cnt += _get_cnt("#{scope}__TELEMETRY__{#{target_name}}__#{packet['packet_name']}")
64
+ tlm_cnt += Topic.get_cnt("#{scope}__TELEMETRY__{#{target_name}}__#{packet['packet_name']}")
65
65
  end
66
66
  interface_name = ''
67
67
  InterfaceModel.all(scope: scope).each do |name, interface|
@@ -190,7 +190,7 @@ module Cosmos
190
190
  authorize(permission: 'tlm', target_name: target_name, packet_name: packet_name, scope: scope, token: token)
191
191
  TargetModel.packet(target_name, packet_name, scope: scope)
192
192
  topic = "#{scope}__TELEMETRY__{#{target_name}}__#{packet_name}"
193
- msg_id, msg_hash = Store.instance.read_topic_last(topic)
193
+ msg_id, msg_hash = Topic.get_newest_message(topic)
194
194
  if msg_id
195
195
  msg_hash['buffer'] = msg_hash['buffer'].b
196
196
  return msg_hash
@@ -300,7 +300,7 @@ module Cosmos
300
300
  packets.each do |target_name, packet_name|
301
301
  authorize(permission: 'tlm', target_name: target_name, packet_name: packet_name, scope: scope, token: token)
302
302
  topic = "#{scope}__DECOM__{#{target_name}}__#{packet_name}"
303
- id, _ = Store.read_topic_last(topic)
303
+ id, _ = Topic.get_newest_message(topic)
304
304
  result[topic] = id ? id : '0-0'
305
305
  end
306
306
  result.to_a.join(SUBSCRIPTION_DELIMITER)
@@ -317,13 +317,13 @@ module Cosmos
317
317
  authorize(permission: 'tlm', scope: scope, token: token)
318
318
  # Split the list of topic, ID values and turn it into a hash for easy updates
319
319
  lookup = Hash[*id.split(SUBSCRIPTION_DELIMITER)]
320
- xread = Store.xread(lookup.keys, lookup.values, block: block, count: count)
320
+ xread = Topic.read_topics(lookup.keys, lookup.values, block, count)
321
321
  # Return the original ID and nil if we didn't get anything
322
322
  return [id, nil] if xread.empty?
323
323
  packets = []
324
324
  xread.each do |topic, data|
325
325
  data.each do |id, msg_hash|
326
- lookup[topic] = id # Store the new ID
326
+ lookup[topic] = id # save the new ID
327
327
  json_hash = JSON.parse(msg_hash['json_data'])
328
328
  msg_hash.delete('json_data')
329
329
  packets << msg_hash.merge(json_hash)
@@ -340,7 +340,7 @@ module Cosmos
340
340
  def get_tlm_cnt(target_name, packet_name, scope: $cosmos_scope, token: $cosmos_token)
341
341
  authorize(permission: 'system', target_name: target_name, packet_name: packet_name, scope: scope, token: token)
342
342
  TargetModel.packet(target_name, packet_name, scope: scope)
343
- _get_cnt("#{scope}__TELEMETRY__{#{target_name}}__#{packet_name}")
343
+ Topic.get_cnt("#{scope}__TELEMETRY__{#{target_name}}__#{packet_name}")
344
344
  end
345
345
 
346
346
  # Get information on all telemetry packets
@@ -353,12 +353,12 @@ module Cosmos
353
353
  TargetModel.packets(target_name, scope: scope).each do | packet |
354
354
  packet_name = packet['packet_name']
355
355
  key = "#{scope}__TELEMETRY__{#{target_name}}__#{packet_name}"
356
- result << [target_name, packet_name, _get_cnt(key)]
356
+ result << [target_name, packet_name, Topic.get_cnt(key)]
357
357
  end
358
358
  end
359
359
  ['UNKNOWN'].each do | x |
360
360
  key = "#{scope}__TELEMETRY__{#{x}}__#{x}"
361
- result << [x, x, _get_cnt(key)]
361
+ result << [x, x, Topic.get_cnt(key)]
362
362
  end
363
363
  # Return the result sorted by target, packet
364
364
  result.sort_by { |a| [a[0], a[1]] }
@@ -425,7 +425,7 @@ module Cosmos
425
425
  TargetModel.packets(target_name, scope: scope).each do |packet|
426
426
  item = packet['items'].find { |item| item['name'] == item_name }
427
427
  if item
428
- _, msg_hash = Store.instance.get_oldest_message("#{scope}__DECOM__{#{target_name}}__#{packet['packet_name']}")
428
+ _, msg_hash = Topic.get_oldest_message("#{scope}__DECOM__{#{target_name}}__#{packet['packet_name']}")
429
429
  if msg_hash && msg_hash['time'] && msg_hash['time'].to_i > latest
430
430
  packet_name = packet['packet_name']
431
431
  latest = msg_hash['time'].to_i
@@ -168,7 +168,7 @@ module Cosmos
168
168
  path = File.join(File.dirname(@filename), template_name)
169
169
  end
170
170
  Cosmos.set_working_dir(File.dirname(path)) do
171
- return ERB.new(File.read(path)).result(b)
171
+ return ERB.new(File.read(path), trim_mode: "-").result(b)
172
172
  end
173
173
  end
174
174
 
@@ -377,7 +377,7 @@ module Cosmos
377
377
  output = nil
378
378
  if run_erb
379
379
  Cosmos.set_working_dir(File.dirname(filename)) do
380
- output = ERB.new(File.read(filename)).result(binding.set_variables(variables))
380
+ output = ERB.new(File.read(filename), trim_mode: "-").result(binding.set_variables(variables))
381
381
  end
382
382
  else
383
383
  output = File.read(filename)
@@ -50,7 +50,7 @@ module Cosmos
50
50
 
51
51
  output = nil
52
52
  Cosmos.set_working_dir(File.dirname(path)) do
53
- output = ERB.new(File.read(path)).result(binding)
53
+ output = ERB.new(File.read(path), trim_mode: "-").result(binding)
54
54
  end
55
55
  tf.write(output)
56
56
  tf.close
@@ -19,7 +19,7 @@
19
19
 
20
20
  require 'thread'
21
21
  require 'cosmos/config/config_parser'
22
- require 'cosmos/utilities/store'
22
+ require 'cosmos/topics/topic'
23
23
  require 'cosmos/utilities/s3'
24
24
 
25
25
  module Cosmos
@@ -211,7 +211,7 @@ module Cosmos
211
211
  S3Utilities.move_log_file_to_s3(@filename, s3_key)
212
212
  # Now that the file is in S3, trim the Redis stream up until the previous file.
213
213
  # This keeps one file worth of data in Redis as a safety buffer
214
- Cosmos::Store.trim_topic(@redis_topic, @previous_file_redis_offset) if @redis_topic and @previous_file_redis_offset
214
+ Topic.trim_topic(@redis_topic, @previous_file_redis_offset) if @redis_topic and @previous_file_redis_offset
215
215
  @previous_file_redis_offset = @last_offset
216
216
  rescue Exception => err
217
217
  Logger.instance.error "Error closing #{@filename} : #{err.formatted}"
@@ -31,7 +31,7 @@ module Cosmos
31
31
 
32
32
  def initialize(*args)
33
33
  super(*args)
34
- Store.update_topic_offsets(@topics)
34
+ Topic.update_topic_offsets(@topics)
35
35
  System.telemetry.limits_change_callback = method(:limits_change_callback)
36
36
  end
37
37
 
@@ -143,7 +143,6 @@ module Cosmos
143
143
  hazardous, hazardous_description = System.commands.cmd_pkt_hazardous?(command)
144
144
  # Return back the error, description, and the formatted command
145
145
  # This allows the error handler to simply re-send the command
146
- # TODO: Should we set target_name, cmd_name, and cmd_params instead?
147
146
  next "HazardousError\n#{hazardous_description}\n#{System.commands.format(command)}" if hazardous
148
147
  end
149
148
 
@@ -40,7 +40,7 @@ module Cosmos
40
40
  attr_accessor :scope
41
41
 
42
42
  def self.run
43
- microservice = self.new(ARGV[0])
43
+ microservice = self.new(ENV['COSMOS_MICROSERVICE_NAME'])
44
44
  begin
45
45
  MicroserviceStatusModel.set(microservice.as_json, scope: microservice.scope)
46
46
  microservice.state = 'RUNNING'
@@ -52,7 +52,7 @@ module Cosmos
52
52
  else
53
53
  microservice.error = err
54
54
  microservice.state = 'DIED_ERROR'
55
- Logger.fatal("Microservice #{ARGV[0]} dying from exception\n#{err.formatted}")
55
+ Logger.fatal("Microservice #{ENV['COSMOS_MICROSERVICE_NAME']} dying from exception\n#{err.formatted}")
56
56
  end
57
57
  ensure
58
58
  MicroserviceStatusModel.set(microservice.as_json, scope: microservice.scope)
@@ -96,9 +96,8 @@ module Cosmos
96
96
  ReducerModel
97
97
  .all_files(type: :DECOM, target: @target_name, scope: @scope)
98
98
  .each do |file|
99
- if process_file(file, 'minute', MINUTE_ENTRY_SECS, MINUTE_FILE_SECS)
100
- ReducerModel.rm_file(file)
101
- end
99
+ process_file(file, 'minute', MINUTE_ENTRY_SECS, MINUTE_FILE_SECS)
100
+ ReducerModel.rm_file(file)
102
101
  end
103
102
  end
104
103
  end
@@ -108,9 +107,8 @@ module Cosmos
108
107
  ReducerModel
109
108
  .all_files(type: :MINUTE, target: @target_name, scope: @scope)
110
109
  .each do |file|
111
- if process_file(file, 'hour', HOUR_ENTRY_SECS, HOUR_FILE_SECS)
112
- ReducerModel.rm_file(file)
113
- end
110
+ process_file(file, 'hour', HOUR_ENTRY_SECS, HOUR_FILE_SECS)
111
+ ReducerModel.rm_file(file)
114
112
  end
115
113
  end
116
114
  end
@@ -120,9 +118,8 @@ module Cosmos
120
118
  ReducerModel
121
119
  .all_files(type: :HOUR, target: @target_name, scope: @scope)
122
120
  .each do |file|
123
- if process_file(file, 'day', DAY_ENTRY_SECS, DAY_FILE_SECS)
124
- ReducerModel.rm_file(file)
125
- end
121
+ process_file(file, 'day', DAY_ENTRY_SECS, DAY_FILE_SECS)
122
+ ReducerModel.rm_file(file)
126
123
  end
127
124
  end
128
125
  end
@@ -250,7 +247,12 @@ module Cosmos
250
247
  )
251
248
  true
252
249
  rescue => e
253
- Logger.error("Reducer Error #{e}\n#{e.backtrace}")
250
+ if file.local_path and File.exist?(file.local_path)
251
+ Logger.error("Reducer Error: #{filename}:#{File.size(file.local_path)} bytes: \n#{e.formatted}")
252
+ else
253
+ Logger.error("Reducer Error: #{filename}:(Not Retrieved): \n#{e.formatted}")
254
+ end
255
+ false
254
256
  end
255
257
 
256
258
  def reduce(type, data_keys, reduced)
@@ -40,12 +40,12 @@ module Cosmos
40
40
 
41
41
  # Delete the current value table for a target
42
42
  def self.del(target_name:, packet_name:, scope:)
43
- Store.hdel("#{scope}__tlm__#{target_name}", packet_name)
43
+ EphemeralStore.hdel("#{scope}__tlm__#{target_name}", packet_name)
44
44
  end
45
45
 
46
46
  # Set the current value table for a target, packet
47
47
  def self.set(hash, target_name:, packet_name:, scope:)
48
- Store.hset("#{scope}__tlm__#{target_name}", packet_name, JSON.generate(hash.as_json))
48
+ EphemeralStore.hset("#{scope}__tlm__#{target_name}", packet_name, JSON.generate(hash.as_json))
49
49
  end
50
50
 
51
51
  # Set an item in the current value table
@@ -62,9 +62,9 @@ module Cosmos
62
62
  else
63
63
  raise "Unknown type '#{type}' for #{target_name} #{packet_name} #{item_name}"
64
64
  end
65
- hash = JSON.parse(Store.hget("#{scope}__tlm__#{target_name}", packet_name))
65
+ hash = JSON.parse(EphemeralStore.hget("#{scope}__tlm__#{target_name}", packet_name))
66
66
  hash[field] = value
67
- Store.hset("#{scope}__tlm__#{target_name}", packet_name, JSON.generate(hash.as_json))
67
+ EphemeralStore.hset("#{scope}__tlm__#{target_name}", packet_name, JSON.generate(hash.as_json))
68
68
  end
69
69
 
70
70
  # Get an item from the current value table
@@ -86,7 +86,7 @@ module Cosmos
86
86
  else
87
87
  raise "Unknown type '#{type}' for #{target_name} #{packet_name} #{item_name}"
88
88
  end
89
- hash = JSON.parse(Store.hget("#{scope}__tlm__#{target_name}", packet_name))
89
+ hash = JSON.parse(EphemeralStore.hget("#{scope}__tlm__#{target_name}", packet_name))
90
90
  hash.values_at(*types).each do |result|
91
91
  return result if result
92
92
  end
@@ -106,7 +106,7 @@ module Cosmos
106
106
 
107
107
  lookups.each do |target_packet_key, target_name, packet_name, packet_values|
108
108
  unless packet_lookup[target_packet_key]
109
- packet = Store.hget("#{scope}__tlm__#{target_name}", packet_name)
109
+ packet = EphemeralStore.hget("#{scope}__tlm__#{target_name}", packet_name)
110
110
  raise "Packet '#{target_name} #{packet_name}' does not exist" unless packet
111
111
  packet_lookup[target_packet_key] = JSON.parse(packet)
112
112
  end
@@ -73,7 +73,7 @@ module Cosmos
73
73
  return nil
74
74
  end
75
75
 
76
- def self.install(name_or_path)
76
+ def self.install(name_or_path, scope:)
77
77
  temp_dir = Dir.mktmpdir
78
78
  begin
79
79
  if File.exist?(name_or_path)
@@ -81,7 +81,7 @@ module Cosmos
81
81
  else
82
82
  gem_file_path = get(temp_dir, name_or_path)
83
83
  end
84
- rubygems_url = get_setting('rubygems_url')
84
+ rubygems_url = get_setting('rubygems_url', scope: scope)
85
85
  Gem.sources = [rubygems_url] if rubygems_url
86
86
  Gem.done_installing_hooks.clear
87
87
  Gem.install(gem_file_path, "> 0.pre", :build_args => ['--no-document'], :prerelease => true)
@@ -24,7 +24,7 @@ module Cosmos
24
24
 
25
25
  # @return Hash information and statistics about the redis server
26
26
  def self.get()
27
- return Store.info()
27
+ return [Store.info(), EphemeralStore.info]
28
28
  end
29
29
 
30
30
  end
@@ -23,7 +23,7 @@ module Cosmos
23
23
  # Stores the status about an interface. This class also implements logic
24
24
  # to handle status for a router since the functionality is identical
25
25
  # (only difference is the Redis key used).
26
- class InterfaceStatusModel < Model
26
+ class InterfaceStatusModel < EphemeralModel
27
27
  INTERFACES_PRIMARY_KEY = 'cosmos_interface_status'
28
28
  ROUTERS_PRIMARY_KEY = 'cosmos_router_status'
29
29