Class: Quark::Mdk::MDKImpl

Inherits:
DatawireQuarkCore::QuarkObject show all
Extended by:
DatawireQuarkCore::Static
Defined in:
lib/mdk.rb

Constant Summary

Constants included from DatawireQuarkCore::Static

DatawireQuarkCore::Static::Unassigned

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from DatawireQuarkCore::Static

_lazy_statics, static, unlazy_statics

Methods inherited from DatawireQuarkCore::QuarkObject

#to_s

Constructor Details

#initialize(runtime) ⇒ MDKImpl

Returns a new instance of MDKImpl.



592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
# File 'lib/mdk.rb', line 592

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

Instance Attribute Details

#_defaultTimeoutObject

Returns the value of attribute _defaultTimeout.



583
584
585
# File 'lib/mdk.rb', line 583

def _defaultTimeout
  @_defaultTimeout
end

#_discoObject

Returns the value of attribute _disco.



583
584
585
# File 'lib/mdk.rb', line 583

def _disco
  @_disco
end

#_discoSourceObject

Returns the value of attribute _discoSource.



583
584
585
# File 'lib/mdk.rb', line 583

def _discoSource
  @_discoSource
end

#_environmentObject

Returns the value of attribute _environment.



583
584
585
# File 'lib/mdk.rb', line 583

def _environment
  @_environment
end

#_metricsObject

Returns the value of attribute _metrics.



583
584
585
# File 'lib/mdk.rb', line 583

def _metrics
  @_metrics
end

#_opencloseObject

Returns the value of attribute _openclose.



583
584
585
# File 'lib/mdk.rb', line 583

def _openclose
  @_openclose
end

#_reflection_hackObject

Returns the value of attribute _reflection_hack.



583
584
585
# File 'lib/mdk.rb', line 583

def _reflection_hack
  @_reflection_hack
end

#_runningObject

Returns the value of attribute _running.



583
584
585
# File 'lib/mdk.rb', line 583

def _running
  @_running
end

#_runtimeObject

Returns the value of attribute _runtime.



583
584
585
# File 'lib/mdk.rb', line 583

def _runtime
  @_runtime
end

#_tracerObject

Returns the value of attribute _tracer.



583
584
585
# File 'lib/mdk.rb', line 583

def _tracer
  @_tracer
end

#_wsclientObject

Returns the value of attribute _wsclient.



583
584
585
# File 'lib/mdk.rb', line 583

def _wsclient
  @_wsclient
end

#loggerObject

Returns the value of attribute logger.



583
584
585
# File 'lib/mdk.rb', line 583

def logger
  @logger
end

#procUUIDObject

Returns the value of attribute procUUID.



583
584
585
# File 'lib/mdk.rb', line 583

def procUUID
  @procUUID
end

Instance Method Details

#__init_fields__Object



896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
# File 'lib/mdk.rb', line 896

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

#_getClassObject



795
796
797
798
799
800
# File 'lib/mdk.rb', line 795

def _getClass()
    
    return "mdk.MDKImpl"

    nil
end

#_getField(name) ⇒ Object



802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
# File 'lib/mdk.rb', line 802

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) ⇒ Object



851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
# File 'lib/mdk.rb', line 851

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

#_timeoutObject



694
695
696
697
698
699
# File 'lib/mdk.rb', line 694

def _timeout()
    
    return 10.0

    nil
end

#derive(encodedContext) ⇒ Object



770
771
772
773
774
775
776
777
778
779
780
781
782
# File 'lib/mdk.rb', line 770

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) ⇒ Object

Choose DiscoverySource based on environment variables.



631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
# File 'lib/mdk.rb', line 631

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) ⇒ Object

Choose FailurePolicy based on environment variables.



660
661
662
663
664
665
666
667
668
669
670
# File 'lib/mdk.rb', line 660

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) ⇒ Object

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



675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
# File 'lib/mdk.rb', line 675

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) ⇒ Object



784
785
786
787
788
789
790
791
792
793
# File 'lib/mdk.rb', line 784

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) ⇒ Object



731
732
733
734
735
736
737
738
739
740
741
742
743
# File 'lib/mdk.rb', line 731

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

#sessionObject



759
760
761
762
763
764
765
766
767
768
# File 'lib/mdk.rb', line 759

def session()
    
    session = ::Quark.mdk.SessionImpl.new(self, nil, (self)._environment)
    if ((@_defaultTimeout) != (nil))
        session.setDeadline(@_defaultTimeout)
    end
    return session

    nil
end

#setDefaultDeadline(seconds) ⇒ Object



745
746
747
748
749
750
# File 'lib/mdk.rb', line 745

def setDefaultDeadline(seconds)
    
    (self)._defaultTimeout = seconds

    nil
end

#setDefaultTimeout(seconds) ⇒ Object



752
753
754
755
756
757
# File 'lib/mdk.rb', line 752

def setDefaultTimeout(seconds)
    
    self.setDefaultDeadline(seconds)

    nil
end

#startObject



701
702
703
704
705
706
707
708
709
710
711
712
713
714
# File 'lib/mdk.rb', line 701

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

#stopObject



716
717
718
719
720
721
722
723
724
725
726
727
728
729
# File 'lib/mdk.rb', line 716

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