class Quark::Mdk::MDKImpl

Attributes

_defaultTimeout[RW]
_disco[RW]
_discoSource[RW]
_environment[RW]
_metrics[RW]
_openclose[RW]
_reflection_hack[RW]
_running[RW]
_runtime[RW]
_tracer[RW]
_wsclient[RW]
logger[RW]
procUUID[RW]

Public Class Methods

new(runtime) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 591
def initialize(runtime)
    
    self.__init_fields__
    @_reflection_hack = ::Hash.new()
    @_runtime = runtime
    @_environment = ::Quark.mdk._parseEnvironment(runtime.getEnvVarsService().var("MDK_ENVIRONMENT").orElseGet("sandbox"))
    if (!((runtime).dependencies.hasService("failurepolicy_factory")))
        (runtime).dependencies.registerService("failurepolicy_factory", self.getFailurePolicy(runtime))
    end
    if ((runtime).dependencies.hasService("tracer"))
        @_tracer = ::DatawireQuarkCore.cast((@_runtime).dependencies.getService("tracer")) { ::Quark.mdk_tracing.Tracer }
    end
    @_disco = ::Quark.mdk_discovery.Discovery.new(runtime)
    @_wsclient = self.getWSClient(runtime)
    if ((@_wsclient) != (nil))
        @_openclose = ::Quark.mdk_protocol.OpenCloseSubscriber.new(@_wsclient, @procUUID, @_environment)
    end
    env = runtime.getEnvVarsService()
    discoFactory = self.getDiscoveryFactory(env)
    @_discoSource = discoFactory.create(@_disco, runtime)
    if (discoFactory.isRegistrar())
        (runtime).dependencies.registerService("discovery_registrar", @_discoSource)
    end
    if ((@_wsclient) != (nil))
        if ((@_tracer) == (nil))
            @_tracer = ::Quark.mdk_tracing.Tracer.new(runtime, @_wsclient)
        end
        @_metrics = ::Quark.mdk_metrics.MetricsClient.new(@_wsclient)
    end

    nil
end

Public Instance Methods

__init_fields__() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 895
def __init_fields__()
    
    self.logger = ::Quark.quark._getLogger("mdk")
    self._reflection_hack = nil
    self._runtime = nil
    self._wsclient = nil
    self._openclose = nil
    self._disco = nil
    self._discoSource = nil
    self._tracer = nil
    self._metrics = nil
    self.procUUID = ::Quark.quark.concurrent.Context.runtime().uuid()
    self._running = false
    self._defaultTimeout = nil
    self._environment = nil

    nil
end
_getClass() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 794
def _getClass()
    
    return "mdk.MDKImpl"

    nil
end
_getField(name) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 801
def _getField(name)
    
    if ((name) == ("CONTEXT_HEADER"))
        return ::Quark.mdk.MDK.CONTEXT_HEADER
    end
    if ((name) == ("logger"))
        return (self).logger
    end
    if ((name) == ("_reflection_hack"))
        return (self)._reflection_hack
    end
    if ((name) == ("_runtime"))
        return (self)._runtime
    end
    if ((name) == ("_wsclient"))
        return (self)._wsclient
    end
    if ((name) == ("_openclose"))
        return (self)._openclose
    end
    if ((name) == ("_disco"))
        return (self)._disco
    end
    if ((name) == ("_discoSource"))
        return (self)._discoSource
    end
    if ((name) == ("_tracer"))
        return (self)._tracer
    end
    if ((name) == ("_metrics"))
        return (self)._metrics
    end
    if ((name) == ("procUUID"))
        return (self).procUUID
    end
    if ((name) == ("_running"))
        return (self)._running
    end
    if ((name) == ("_defaultTimeout"))
        return (self)._defaultTimeout
    end
    if ((name) == ("_environment"))
        return (self)._environment
    end
    return nil

    nil
end
_setField(name, value) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 850
def _setField(name, value)
    
    if ((name) == ("logger"))
        (self).logger = value
    end
    if ((name) == ("_reflection_hack"))
        (self)._reflection_hack = ::DatawireQuarkCore.cast(value) { ::Hash }
    end
    if ((name) == ("_runtime"))
        (self)._runtime = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.MDKRuntime }
    end
    if ((name) == ("_wsclient"))
        (self)._wsclient = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.WSClient }
    end
    if ((name) == ("_openclose"))
        (self)._openclose = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.OpenCloseSubscriber }
    end
    if ((name) == ("_disco"))
        (self)._disco = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_discovery.Discovery }
    end
    if ((name) == ("_discoSource"))
        (self)._discoSource = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_discovery.DiscoverySource }
    end
    if ((name) == ("_tracer"))
        (self)._tracer = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_tracing.Tracer }
    end
    if ((name) == ("_metrics"))
        (self)._metrics = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_metrics.MetricsClient }
    end
    if ((name) == ("procUUID"))
        (self).procUUID = ::DatawireQuarkCore.cast(value) { ::String }
    end
    if ((name) == ("_running"))
        (self)._running = ::DatawireQuarkCore.cast(value) { ::Object }
    end
    if ((name) == ("_defaultTimeout"))
        (self)._defaultTimeout = ::DatawireQuarkCore.cast(value) { ::Float }
    end
    if ((name) == ("_environment"))
        (self)._environment = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.OperationalEnvironment }
    end

    nil
end
_timeout() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 693
def _timeout()
    
    return 10.0

    nil
end
derive(encodedContext) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 769
def derive(encodedContext)
    
    session = ::DatawireQuarkCore.cast(self.session()) { ::Quark.mdk.SessionImpl }
    parent = ::Quark.mdk_protocol.SharedContext.decode(encodedContext)
    ((session)._context).properties = (parent).properties
    if ((((session)._context).properties).key?("timeout"))
        (((session)._context).properties).delete("timeout")
    end
    session.info("mdk", ((("This session is derived from trace ") + ((parent).traceId)) + (" ")) + ((((parent).clock).clocks).to_s))
    return session

    nil
end
getDiscoveryFactory(env) click to toggle source

Choose DiscoverySource based on environment variables.

# File output/rb/mdk-2.0/lib/mdk.rb, line 630
def getDiscoveryFactory(env)
    
    config = env.var("MDK_DISCOVERY_SOURCE").orElseGet("")
    if ((config) == (""))
        config = ("datawire:") + (::Quark.mdk_introspection.DatawireToken.getToken(env))
    end
    result = ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_discovery.DiscoverySourceFactory }
    if ((config).start_with?("datawire:"))
        result = ::Quark.mdk_discovery.protocol.DiscoClientFactory.new(@_wsclient)
    else
        if ((config).start_with?("synapse:path="))
            result = ::Quark.mdk_discovery.synapse.Synapse.new((config)[(13)...((config).size)], (self)._environment)
        else
            if ((config).start_with?("static:nodes="))
                json = (config)[(13)...((config).size)]
                result = ::Quark.mdk_discovery.StaticRoutes.parseJSON(json)
            else
                raise (("Unknown MDK discovery source: ") + (config))
            end
        end
    end
    return result

    nil
end
getFailurePolicy(runtime) click to toggle source

Choose FailurePolicy based on environment variables.

# File output/rb/mdk-2.0/lib/mdk.rb, line 659
def getFailurePolicy(runtime)
    
    config = runtime.getEnvVarsService().var("MDK_FAILURE_POLICY").orElseGet("")
    if ((config) == ("recording"))
        return ::Quark.mdk_discovery.RecordingFailurePolicyFactory.new()
    else
        return ::Quark.mdk_discovery.CircuitBreakerFactory.new(runtime)
    end

    nil
end
getWSClient(runtime) click to toggle source

Get a WSClient, unless env variables suggest the user doesn't want one.

# File output/rb/mdk-2.0/lib/mdk.rb, line 674
def getWSClient(runtime)
    
    env = runtime.getEnvVarsService()
    token = env.var("DATAWIRE_TOKEN").orElseGet("")
    disco_config = env.var("MDK_DISCOVERY_SOURCE").orElseGet("")
    if ((token) == (""))
        if ((disco_config).start_with?("datawire:"))
            token = (disco_config)[(9)...((disco_config).size)]
        else
            return ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_protocol.WSClient }
        end
    end
    ddu = env.var("MDK_SERVER_URL")
    url = ddu.orElseGet("wss://mcp.datawire.io/rtp")
    return ::Quark.mdk_protocol.WSClient.new(runtime, ::Quark.mdk_rtp.getRTPParser(), url, token)

    nil
end
join(encodedContext) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 783
def join(encodedContext)
    
    session = ::Quark.mdk.SessionImpl.new(self, encodedContext, (self)._environment)
    if ((@_defaultTimeout) != (nil))
        session.setDeadline(@_defaultTimeout)
    end
    return session

    nil
end
register(service, version, address) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 730
def register(service, version, address)
    
    node = ::Quark.mdk_discovery.Node.new()
    (node).id = @procUUID
    (node).service = service
    (node).version = version
    (node).address = address
    (node).environment = (self)._environment
    (node).properties = {"datawire_nodeId" => @procUUID}
    @_disco.register(node)

    nil
end
session() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 758
def session()
    
    session = ::Quark.mdk.SessionImpl.new(self, nil, (self)._environment)
    if ((@_defaultTimeout) != (nil))
        session.setDeadline(@_defaultTimeout)
    end
    return session

    nil
end
setDefaultDeadline(seconds) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 744
def setDefaultDeadline(seconds)
    
    (self)._defaultTimeout = seconds

    nil
end
setDefaultTimeout(seconds) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 751
def setDefaultTimeout(seconds)
    
    self.setDefaultDeadline(seconds)

    nil
end
start() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 700
def start()
    
    (self)._running = true
    if ((@_wsclient) != (nil))
        (@_runtime).dispatcher.startActor(@_wsclient)
        (@_runtime).dispatcher.startActor(@_openclose)
        (@_runtime).dispatcher.startActor(@_tracer)
        (@_runtime).dispatcher.startActor(@_metrics)
    end
    (@_runtime).dispatcher.startActor(@_disco)
    (@_runtime).dispatcher.startActor(@_discoSource)

    nil
end
stop() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 715
def stop()
    
    (self)._running = false
    (@_runtime).dispatcher.stopActor(@_discoSource)
    (@_runtime).dispatcher.stopActor(@_disco)
    if ((@_wsclient) != (nil))
        (@_runtime).dispatcher.stopActor(@_tracer)
        (@_runtime).dispatcher.stopActor(@_openclose)
        (@_runtime).dispatcher.stopActor(@_wsclient)
    end
    @_runtime.stop()

    nil
end