class Quark::Mdk::SessionImpl

Attributes

_context[RW]
_experimental[RW]
_interactionReports[RW]
_mdk[RW]
_resolved[RW]

Public Class Methods

_level(level) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1187
def self._level(level)
    
    if ((::Quark.mdk.SessionImpl._levels).key?(level))
        return (::Quark.mdk.SessionImpl._levels)[level]
    else
        return 0
    end

    nil
end
new(mdk, encodedContext, localEnvironment) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1078
def initialize(mdk, encodedContext, localEnvironment)
    
    self.__init_fields__
    @_experimental = ((mdk)._runtime.getEnvVarsService().var("MDK_EXPERIMENTAL").orElseGet("")) != ("")
    @_mdk = mdk
    encodedContext = ::DatawireQuarkCore.cast(encodedContext) { ::String }
    if (((encodedContext) == (nil)) || ((encodedContext) == ("")))
        @_context = ::Quark.mdk_protocol.SharedContext.new()
        (@_context).environment = localEnvironment
    else
        ctx = ::Quark.mdk_protocol.SharedContext.decode(encodedContext)
        @_context = ctx.start_span()
    end
    self._start_interaction()

    nil
end

Public Instance Methods

__init_fields__() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1478
def __init_fields__()
    
    self._mdk = nil
    self._resolved = ::DatawireQuarkCore::List.new([])
    self._interactionReports = ::DatawireQuarkCore::List.new([])
    self._context = nil
    self._experimental = false

    nil
end
_current_interaction() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1317
def _current_interaction()
    
    return (@_resolved)[((@_resolved).size) - (1)]

    nil
end
_enabled(level) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1198
def _enabled(level)
    
    ilevel = ::Quark.mdk.SessionImpl._level("INFO")
    if (self.hasProperty("trace"))
        ilevel = ::Quark.mdk.SessionImpl._level(::DatawireQuarkCore.cast(self.getProperty("trace")) { ::String })
    end
    return (::Quark.mdk.SessionImpl._level(level)) <= (ilevel)

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

    nil
end
_getField(name) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1423
def _getField(name)
    
    if ((name) == ("_levels"))
        return ::Quark.mdk.SessionImpl._levels
    end
    if ((name) == ("_inLogging"))
        return ::Quark.mdk.SessionImpl._inLogging
    end
    if ((name) == ("_mdk"))
        return (self)._mdk
    end
    if ((name) == ("_resolved"))
        return (self)._resolved
    end
    if ((name) == ("_interactionReports"))
        return (self)._interactionReports
    end
    if ((name) == ("_context"))
        return (self)._context
    end
    if ((name) == ("_experimental"))
        return (self)._experimental
    end
    return nil

    nil
end
_log(level, category, text) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1209
def _log(level, category, text)
    
    if (::Quark.mdk.SessionImpl._inLogging.getValue())
        return ::DatawireQuarkCore.cast(nil) { ::Quark.mdk.LoggedMessageId }
    end
    ::Quark.mdk.SessionImpl._inLogging.setValue(true)
    evt = ::Quark.mdk_tracing.createLogEvent(@_context, (@_mdk).procUUID, level, category, text)
    if ((((@_mdk)._tracer) != (nil)) && (self._enabled(level)))
        (@_mdk)._tracer.log(evt)
    end
    ::Quark.mdk.SessionImpl._inLogging.setValue(false)
    return ::Quark.mdk.LoggedMessageId.new((@_context).traceId, (((evt).context).clock).clocks, ((@_context).environment).name, ((@_context).environment).fallbackName)

    nil
end
_resolve(service, version) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1260
def _resolve(service, version)
    
    if (@_experimental)
        routes = ::DatawireQuarkCore.cast(self.getProperty("routes")) { ::Hash }
        if (((routes) != (nil)) && ((routes).key?(service)))
            targets = (routes)[service]
            idx = 0
            while ((idx) < ((targets).size)) do
                target = (targets)[idx]
                if (::Quark.mdk_util.versionMatch((target)["version"], version))
                    service = (target)["target"]
                    version = (target)["targetVersion"]
                    break
                end
                idx = (idx) + (1)
            end
        end
    end
    return (@_mdk)._disco.resolve(service, version, self.getEnvironment()).andThen(::Quark.quark._BoundMethod.new(self, "_resolvedCallback", ::DatawireQuarkCore::List.new([])))

    nil
end
_resolvedCallback(result) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1309
def _resolvedCallback(result)
    
    (self._current_interaction()) << (result)
    return result

    nil
end
_setField(name, value) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1451
def _setField(name, value)
    
    if ((name) == ("_levels"))
        ::Quark.mdk.SessionImpl._levels = ::DatawireQuarkCore.cast(value) { ::Hash }
    end
    if ((name) == ("_inLogging"))
        ::Quark.mdk.SessionImpl._inLogging = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::TLS }
    end
    if ((name) == ("_mdk"))
        (self)._mdk = ::DatawireQuarkCore.cast(value) { ::Quark.mdk.MDKImpl }
    end
    if ((name) == ("_resolved"))
        (self)._resolved = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List }
    end
    if ((name) == ("_interactionReports"))
        (self)._interactionReports = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List }
    end
    if ((name) == ("_context"))
        (self)._context = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.SharedContext }
    end
    if ((name) == ("_experimental"))
        (self)._experimental = ::DatawireQuarkCore.cast(value) { ::Object }
    end

    nil
end
_start_interaction() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1333
def _start_interaction()
    
    interactionReport = ::Quark.mdk_metrics.InteractionEvent.new()
    (interactionReport).node = (@_mdk).procUUID
    (interactionReport).startTimestamp = ((1000.0) * ((@_mdk)._runtime.getTimeService().time())).round()
    (interactionReport).session = (@_context).traceId
    (interactionReport).environment = (@_context).environment
    (@_interactionReports) << (interactionReport)
    (@_resolved) << (::DatawireQuarkCore::List.new([]))
    return interactionReport

    nil
end
critical(category, text) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1225
def critical(category, text)
    
    return self._log("CRITICAL", category, text)

    nil
end
debug(category, text) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1253
def debug(category, text)
    
    return self._log("DEBUG", category, text)

    nil
end
error(category, text) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1232
def error(category, text)
    
    return self._log("ERROR", category, text)

    nil
end
externalize() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1354
def externalize()
    
    result = @_context.encode()
    @_context.tick()
    return result

    nil
end
fail_interaction(message) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1363
def fail_interaction(message)
    
    suspects = self._current_interaction()
    (@_resolved)[((@_resolved).size) - (1)] = (::DatawireQuarkCore::List.new([]))
    involved = ::DatawireQuarkCore::List.new([])
    idx = 0
    while ((idx) < ((suspects).size)) do
        node = (suspects)[idx]
        idx = (idx) + (1)
        (involved) << (node.toString())
        node.failure()
        (@_interactionReports)[((@_interactionReports).size) - (1)].addNode(node, false)
    end
    text = "no dependent services involved"
    if (((involved).size) > (0))
        text = ("involved: ") + ((involved).join(", "))
    end
    self.error("interaction failure", ((text) + ("\n\n")) + (message))

    nil
end
finish_interaction() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1385
def finish_interaction()
    
    nodes = self._current_interaction()
    (@_resolved).delete_at(((@_resolved).size) - (1))
    report = (@_interactionReports).delete_at(((@_interactionReports).size) - (1))
    (report).endTimestamp = ((1000.0) * ((@_mdk)._runtime.getTimeService().time())).round()
    lmid = self.info("MDK", "Finished interaction.")
    (report).endClock = (lmid).causalLevel
    idx = 0
    while ((idx) < ((nodes).size)) do
        node = (nodes)[idx]
        node.success()
        report.addNode(node, true)
        idx = (idx) + (1)
    end
    if (((@_mdk)._metrics) != (nil))
        (@_mdk)._metrics.sendInteraction(report)
    end

    nil
end
getEnvironment() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1099
def getEnvironment()
    
    return ((self)._context).environment

    nil
end
getProperty(property) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1106
def getProperty(property)
    
    return ((@_context).properties)[property]

    nil
end
getRemainingTime() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1148
def getRemainingTime()
    
    deadline = ::DatawireQuarkCore.cast(self.getProperty("timeout")) { ::Float }
    if ((deadline) == (nil))
        return ::DatawireQuarkCore.cast(nil) { ::Float }
    end
    return (deadline) - ((@_mdk)._runtime.getTimeService().time())

    nil
end
hasProperty(property) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1120
def hasProperty(property)
    
    return ((@_context).properties).key?(property)

    nil
end
info(category, text) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1246
def info(category, text)
    
    return self._log("INFO", category, text)

    nil
end
inject() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1347
def inject()
    
    return self.externalize()

    nil
end
interact(cmd) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1407
def interact(cmd)
    
    self.start_interaction()
    (cmd).call(self)
    self.finish_interaction()

    nil
end
resolve(service, version) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1290
def resolve(service, version)
    
    timeout = @_mdk._timeout()
    session_timeout = self.getRemainingTime()
    if (((session_timeout) != (nil)) && ((session_timeout) < (timeout)))
        timeout = session_timeout
    end
    return self.resolve_until(service, version, timeout)

    nil
end
resolve_async(service, version) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1283
def resolve_async(service, version)
    
    return ::Quark.mdk_util.toNativePromise(self._resolve(service, version))

    nil
end
resolve_until(service, version, timeout) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1302
def resolve_until(service, version, timeout)
    
    return ::DatawireQuarkCore.cast(::Quark.mdk_util.WaitForPromise.wait(self._resolve(service, version), timeout, (((("service ") + (service)) + ("(")) + (version)) + (")"))) { ::Quark.mdk_discovery.Node }

    nil
end
route(service, version, target, targetVersion) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1159
def route(service, version, target, targetVersion)
    
    routes = nil
    if (!(self.hasProperty("routes")))
        routes = {}
        self.setProperty("routes", routes)
    else
        routes = ::DatawireQuarkCore.cast(self.getProperty("routes")) { ::Hash }
    end
    targets = nil
    if ((routes).key?(service))
        targets = (routes)[service]
    else
        targets = ::DatawireQuarkCore::List.new([])
        (routes)[service] = (targets)
    end
    (targets) << ({"version" => version, "target" => target, "targetVersion" => targetVersion})

    nil
end
setDeadline(timeout) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1134
def setDeadline(timeout)
    
    current = self.getRemainingTime()
    if ((current) == (nil))
        current = timeout
    end
    if ((timeout) > (current))
        timeout = current
    end
    self.setProperty("timeout", ((@_mdk)._runtime.getTimeService().time()) + (timeout))

    nil
end
setProperty(property, value) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1113
def setProperty(property, value)
    
    ((@_context).properties)[property] = (value)

    nil
end
setTimeout(timeout) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1127
def setTimeout(timeout)
    
    self.setDeadline(timeout)

    nil
end
start_interaction() click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1324
def start_interaction()
    
    interactionReport = self._start_interaction()
    lmid = self.info("MDK", "Starting interaction.")
    (interactionReport).startClock = (lmid).causalLevel

    nil
end
trace(level) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1180
def trace(level)
    
    self.setProperty("trace", level)

    nil
end
warn(category, text) click to toggle source
# File output/rb/mdk-2.0/lib/mdk.rb, line 1239
def warn(category, text)
    
    return self._log("WARN", category, text)

    nil
end