Dummy ontology module. This will be replaced by the real thing once it has settled.
- BOLT_ONTOLOGICAL_PREFIX
The general type prefix to add to Bolt events emitted by this gateway
- GPS_POSITION_TYPE
The type to use when emitting a batched GPS positions table
- NOT_IMPLEMENTED
Placeholder for stuff that’s not hooked up yet
Turn a HEAK event into a C2 event.
def self::globalize( message )
case message.type
when 'net.gps.position', 'sys.gps.position'
global_type, fields = self.globalize_position_message( message )
when /\Abolt\.finished\./
global_type, fields = self.globalize_communication_message( message )
else
self.log.debug "No translation for %p events" % [ message.type ]
return nil
end
self.log.debug "Translated a %p HEAK message to a %p Helios message" %
[ message.type, global_type ]
fields[:type] = global_type
return global_type, fields
end
globalize_communication_message( message )
Transform a HEAK workflow completion message
into a Helios communication message and return the type and payload.
def self::globalize_communication_message( message )
self.log.debug "Globalizing a communication message %p" % [ message ]
payload = self.globalize_generic_message( message )
bolt = message.data[:bolt] or
raise "malformed `bolt.finished' message: no bolt field"
suffix = bolt[:ontological_suffix] or
raise "malformed `bolt.finished' message: bolt had no ontological suffix"
type = BOLT_ONTOLOGICAL_PREFIX + suffix
payload[ :data ] = {
name: bolt[:name],
text: bolt[:text],
}
return type, payload
end
globalize_generic_message( message )
Build and return a general Helios message payload from the given HEAK message
and return it.
def self::globalize_generic_message( message )
self.log.debug "Extracting generic fields from %p" % [ message ]
operation = message.respond_to?( :opex ) ? message.opex : Ravn::BDE.mission[:name]
callsign = (message.respond_to?( :callsign ) && message.callsign) ?
message.callsign :
Ravn::BDE.callsign
return {
id: message.id,
time: message.time,
operation: operation,
callsign: callsign,
}
end
globalize_position_message( message )
Transform a HEAK position message
into a Helios position message and return the type and payload.
def self::globalize_position_message( message )
self.log.debug "Globalizing a position message %p" % [ message ]
payload = self.globalize_generic_message( message )
position_data = case message.type
when 'sys.gps.position'
message.data
when 'net.gps.position'
message.fields
else
raise "Unhandled position message type `%p'" % [ message.type ]
end
self.log.debug "Position data is: %p" % [ position_data ]
payload[ :data ] = {
position: position_data[:pos],
altitude: position_data[:hae],
circular_error: position_data[:ce],
linear_error: position_data[:le],
}
return GPS_POSITION_TYPE, payload
end