/* Ċ Ġ* ĠCopyright ĠThe ĠOpen Telemetry ĠAuthors Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ package Ġio . op entelemetry . kotlin . sdk . trace . samp lers Ċ Ċ import Ġio . op entelemetry . kotlin . api . common . Attributes Ċ import Ġio . op entelemetry . kotlin . api . trace . Span Ċ import Ġio . op entelemetry . kotlin . api . trace . Span Context Ċ import Ġio . op entelemetry . kotlin . api . trace . Span Kind Ċ import Ġio . op entelemetry . kotlin . context . Context Ċ import Ġio . op entelemetry . kotlin . sdk . trace . data . Link Data Ċ Ċ /** Ċ Ġ* ĠA ĠSampler Ġthat Ġuses Ġthe Ġsampled Ġflag Ġof Ġthe Ġparent ĠSpan , Ġif Ġpresent . ĠIf Ġthe Ġspan Ġhas Ġno Ġparent , Ċ Ġ* Ġthis ĠSampler Ġwill Ġuse Ġthe Ġ" root " Ġsampler Ġthat Ġit Ġis Ġbuilt Ġwith . ĠSee Ġdocumentation Ġon Ġthe Ġ[ Ġ] Ċ Ġ* Ġmethods Ġfor Ġthe Ġdetails Ġon Ġthe Ġvarious Ġconfigurable Ġoptions . Ċ Ġ*/ Ċ internal Ġclass ĠParent Based Sampler ( ĊĠĠĠ Ġprivate Ġval Ġroot : ĠSampler , ĊĠĠĠ Ġremote Parent Sample d : ĠSampler ?, ĊĠĠĠ Ġremote Parent Not Sample d : ĠSampler ?, ĊĠĠĠ Ġlocal Parent Sample d : ĠSampler ?, ĊĠĠĠ Ġlocal Parent Not Sample d : ĠSampler ? Ċ ) Ġ: ĠSampler Ġ{ ĊĠĠĠ Ġprivate Ġval Ġremote Parent Sample d : ĠSampler ĊĠĠĠ Ġprivate Ġval Ġremote Parent Not Sample d : ĠSampler ĊĠĠĠ Ġprivate Ġval Ġlocal Parent Sample d : ĠSampler ĊĠĠĠ Ġprivate Ġval Ġlocal Parent Not Sample d : ĠSampler ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . remote Parent Sample d Ġ= Ġremote Parent Sample d Ġ?: ĠSampler . always On () ĊĠĠĠĠĠĠĠ Ġthis . remote Parent Not Sample d Ġ= Ġremote Parent Not Sample d Ġ?: ĠSampler . always Off () ĊĠĠĠĠĠĠĠ Ġthis . local Parent Sample d Ġ= Ġlocal Parent Sample d Ġ?: ĠSampler . always On () ĊĠĠĠĠĠĠĠ Ġthis . local Parent Not Sample d Ġ= Ġlocal Parent Not Sample d Ġ?: ĠSampler . always Off () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIf Ġa Ġparent Ġis Ġset , Ġalways Ġfollows Ġthe Ġsame Ġsampling Ġdecision Ġas Ġthe Ġparent . ĊĠĠĠ Ġ// ĠOtherwise , Ġuses Ġthe Ġdelegate Sampler Ġprovided Ġat Ġinitialization Ġto Ġmake Ġa Ġdecision . ĊĠĠĠ Ġoverride Ġfun Ġshould Sample ( ĊĠĠĠĠĠĠĠ Ġparent Context : ĠContext , ĊĠĠĠĠĠĠĠ Ġtrace Id : ĠString , ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġspan Kind : ĠSpan Kind , ĊĠĠĠĠĠĠĠ Ġattributes : ĠAttributes , ĊĠĠĠĠĠĠĠ Ġparent Links : ĠList < Link Data > ĊĠĠĠ Ġ): ĠS ampling Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Span Context : ĠSpan Context Ġ= ĠSpan . from Context ( parent Context ). span Context ĊĠĠĠĠĠĠĠ Ġif Ġ(! parent Span Context . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroot . should Sample ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Kind , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Links ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Span Context . is Remote ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( parent Span Context . is Sample d ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Parent Sample d . should Sample ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Kind , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Links ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Parent Not Sample d . should Sample ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Kind , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Links ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( parent Span Context . is Sample d ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Parent Sample d . should Sample ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Kind , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Links ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Parent Not Sample d . should Sample ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Kind , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Links ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Parent Based {" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" root :${ root . description }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" remote Parent Sample d :${ remote Parent Sample d . description }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" remote Parent Not Sample d :${ remote Parent Not Sample d . description }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" local Parent Sample d :${ local Parent Sample d . description }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" local Parent Not Sample d :${ local Parent Not Sample d . description }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdescription ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠParent Based Sampler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġthat Ġ= Ġother ĊĠĠĠĠĠĠĠ Ġreturn Ġroot Ġ== Ġthat . root Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Parent Sample d Ġ== Ġthat . remote Parent Sample d Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Parent Not Sample d Ġ== Ġthat . remote Parent Not Sample d Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Parent Sample d Ġ== Ġthat . local Parent Sample d Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Parent Not Sample d Ġ== Ġthat . local Parent Not Sample d ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠInt Ġ= Ġroot . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġremote Parent Sample d . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġremote Parent Not Sample d . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġlocal Parent Sample d . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġlocal Parent Not Sample d . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ