Ravn::

Ontology module

Dummy ontology module. This will be replaced by the real thing once it has settled.

Constants

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

Public Class Methods

globalize( message )

Turn a HEAK event into a C2 event.

# File lib/ravn/ontology.rb, line 25
def self::globalize( message )

        # This will eventually be more abstracted when we know more
        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.

# File lib/ravn/ontology.rb, line 97
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.

# File lib/ravn/ontology.rb, line 50
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.

# File lib/ravn/ontology.rb, line 69
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

        # :TODO: `opex` should be set in the source
        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