package Ġorg . kal as im Ċ Ċ import Ġcom . github . hol ger brand l . json builder . json Ċ import Ġkr ang l .* Ċ import Ġorg . kal as im . analysis . Entity Created Event Ċ import Ġorg . kal as im . analysis . Resource Activity Event Ċ import Ġorg . kal as im . misc .* Ċ import Ġorg . kal as im . monitor s .* Ċ import Ġorg . k oin . core . K oin Ċ import Ġjava . util .* Ċ import Ġkotlin . random . Random Ċ Ċ // ĠTODO ĠAn alyze Ġwe Ġwe Ġsupport Ġthe Ġsame Ġpre empt ible Ġcontract Ġas Ġsim mer Ġ( U car 2 0 1 9 , Ġp 1 1 ) Ġ( in Ġparticular Ġrestart ) ĊĊ Ċ /** ĠA Ġpolicy Ġthat Ġdefines Ġin Ġwhat Ġorder Ġrequests Ġare Ġhon ored . ĠSee Ġ[ user Ġmanual ]( https :// www . kal as im . org / resource /# request - hon or - policies ). Ġ*/ Ċ sealed Ġclass ĠRequest Hon or Policy Ġ{ ĊĠĠĠ Ġobject ĠStrict F CF S Ġ: ĠRequest Hon or Policy () ĊĠĠĠ Ġobject ĠRel ax ed F CF S Ġ: ĠRequest Hon or Policy () ĊĠĠĠ Ġobject ĠS Q F Ġ: ĠRequest Hon or Policy () ĊĠĠĠ Ġobject ĠR AN DOM Ġ: ĠRequest Hon or Policy () ĊĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġclass ĠWeight ed F CF S ( ĊĠĠĠĠĠĠĠ Ġval Ġalpha : ĠNumber , ĊĠĠĠĠĠĠĠ Ġval Ġcap Time Diff At : ĠNumber ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġcap Quantity At : ĠNumber ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: ĠRequest Hon or Policy () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCalculate Ġweighted Ġscore Ġof Ġquantity Ġand Ġticks Ġsind Ġrequest . ĠRequests Ġresulting Ġin Ġlarge Ġvalues Ġwill Ġbe Ġhon ored Ġfirst . Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcompute Request Weight ( time Since Request : ĠDouble , Ġrequest Quantity : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( cap Time Diff At Ġ== Ġnull Ġ|| Ġcap Time Diff At . toDouble () Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( cap Quantity At Ġ== Ġnull Ġ|| Ġcap Quantity At . toDouble () Ġ> Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Diff Trim med Ġ= Ġtrim Optional ( time Since Request , Ġcap Time Diff At ?. toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquantity Trim med Ġ= Ġtrim Optional ( request Quantity , Ġcap Quantity At ?. toDouble ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( alpha . toDouble () Ġ* Ġtime Diff Trim med ) Ġ/ Ġquantity Trim med ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġtrim Optional ( value : ĠDouble , ĠmaxValue : ĠDouble ?) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( max Value Ġ!= Ġnull Ġ&& Ġvalue Ġ> ĠmaxValue ) ĠmaxValue Ġelse Ġvalue Ċ Ċ // ĠĠĠĠĠĠĠ Ġinit Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( alpha Ġin Ġ 0 . 0 .. 1 . 0 ) Ġ{ Ġ" alpha Ġmust Ġbe Ġbetween Ġ 0 Ġand Ġ 1 Ġ" Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠA Ġresource Ġwith Ġa Ġmaximum Ġ` capacity ` Ġand Ġa Ġfill Ġ` level ` Ġfor Ġwhich Ġclaims Ġare Ġnot Ġtracked Ġand Ġdo Ġnot Ġneed Ġto Ġbe Ġreleased . ĠFor Ġfull Ġcontract Ġand Ġdescription Ġsee Ġ[ user Ġmanual ]( https :// www . kal as im . org / resource /# dep letable - resource ) Ċ Ġ* Ċ Ġ* Ġ@ param Ġhon or Policy ĠThe Ġorder Ġin Ġwhich Ġmultiple Ġcomp eting Ġresource Ġrequests Ġare Ġhon ored . ĠSee Ġ[ hon or Ġpolicies ]( https :// www . kal as im . org / resource /# request - hon or - policies ) Ċ Ġ*/ Ċ open Ġclass ĠDep letable Resource ( ĊĠĠĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġcapacity : ĠNumber , ĊĠĠĠ Ġinitial Level : ĠNumber Ġ= Ġcapacity , ĊĠĠĠ Ġhon or Policy : ĠRequest Hon or Policy Ġ= ĠRequest Hon or Policy . Strict F CF S , ĊĠĠĠ Ġpre empt ive : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġk oin : ĠK oin Ġ= ĠDependency Context . get () Ċ ) Ġ: ĠResource ( ĊĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠ Ġcapacity Ġ= Ġcapacity , ĊĠĠĠ Ġhon or Policy Ġ= Ġhon or Policy , ĊĠĠĠ Ġpre empt ive Ġ= Ġpre empt ive , ĊĠĠĠ Ġk oin Ġ= Ġk oin Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĠIndicates Ġthe Ġcurrent Ġlevel Ġof Ġthe Ġresource . ĠTech n ically Ġis Ġa Ġsyn onym Ġfor Ġ` capacity Ġ- Ġclaimed ` Ġ*/ ĊĠĠĠ Ġval Ġlevel ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcapacity Ġ- Ġclaimed ĊĊĊĠĠĠ Ġ/** ĠIndicates Ġif Ġdep letable Ġresource Ġis Ġat Ġfull Ġcapacity . Ġ*/ ĊĠĠĠ Ġval Ġis Full : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlevel Ġ== Ġcapacity ĊĊĠĠĠ Ġ/** ĠIndicates Ġif Ġdep letable Ġresource Ġis Ġdep leted Ġ( level == 0 ) Ġ*/ ĊĠĠĠ Ġval Ġis Dep leted ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlevel Ġ== Ġ 0 . 0 ĊĊ Ċ // ĠĠĠ Ġval Ġlevel Timeline Ġ= ĠMetric Timeline (" Level Ġof Ġ${ this . name }", Ġinitial Value Ġ= Ġavailable Quantity , Ġk oin Ġ= Ġk oin ) Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġupdated Derived Metrics () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġlevel Timeline . add Value ( level ) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġlevel Timeline ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( capacity Timeline Ġ- Ġclaimed Timeline ). copy (" Level Ġof Ġ${ this @ Dep letable Resource . name }") ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdep letable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġclaimed Ġ= Ġcapacity . toDouble () Ġ- Ġinitial Level . toDouble () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġcan Component Hon or Quantity ( component : ĠComponent , Ġquantity : ĠDouble ) Ġ= Ġwhen ( hon or Policy ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRequest Hon or Policy . RANDOM , ĠRequest Hon or Policy . Rel ax ed F CF S , Ġis ĠRequest Hon or Policy . Weighted F CF S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Hon or Quantity ( quantity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠRequest Hon or Policy . SQ F , ĠRequest Hon or Policy . Strict F CF S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnote : ĠS Q F Ġlooks Ġthe Ġsame Ġas ĠStrict F CF S , Ġbut Ġthe Ġqueue Ġcomparator Ġis Ġdifferent Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ( quantity Ġ< Ġ 0 Ġ|| Ġrequest ers . q . peek (). component Ġ== Ġcomponent ) Ġ&& Ġcan Hon or Quantity ( quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( quantity Ġ<= Ġ 0 Ġ|| Ġ( request ers . q Ġas ĠPriority Queue ). sorted Iterator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . component . requests [ this ] !!. quantity Ġ> Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull ()?. component Ġ== Ġcomponent ) Ġ&& Ġcan Hon or Quantity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠS Q F Comparator ( val Ġresource : ĠResource ) Ġ: ĠComparator < CQ Element < Component >> Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcompare ( o 1 : ĠC Q Element < Component >, Ġo 2 : ĠC Q Element < Component >): ĠInt Ġ= Ġcompare Values By ( o 1 , Ġo 2 , ĊĠĠĠĠĠĠĠ Ġ{ Ġit . priority ?. value ?. times (- 1 ) Ġ?: Ġ 0 Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ Ġit . component . requests [ resource ] !!. quantity Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ class ĠRandom Comparator ( val Ġrandom : ĠRandom ) Ġ: ĠComparator < CQ Element < Component >> Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcompare ( o 1 : ĠC Q Element < Component >, Ġo 2 : ĠC Q Element < Component >): ĠInt Ġ= Ġcompare Values By ( o 1 , Ġo 2 , ĊĠĠĠĠĠĠĠ Ġ{ Ġit . priority ?. value ?. times (- 1 ) Ġ?: Ġ 0 Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ Ġrandom . nextInt () Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġsimulation Ġentity Ġwith Ġa Ġlimited Ġcapacity , Ġthat Ġcan Ġbe Ġrequested Ġby Ġother Ġsimulation Ġcomponents . ĠFor Ġdetails Ġsee Ġhttps :// www . kal as im . org / resource / Ċ Ġ* Ċ Ġ* Ġ@ param Ġhon or Policy ĠThe Ġorder Ġin Ġwhich Ġmultiple Ġcomp eting Ġresource Ġrequests Ġare Ġhon ored . ĠSee Ġ[ hon or Ġpolicies ]( https :// www . kal as im . org / resource /# request - hon or - policies ) Ċ Ġ* Ġ@ param Ġpre empt ive ĠIndicates Ġif Ġa Ġresource Ġshould Ġallow Ġpre empt ive Ġrequests . ĠSee Ġ[ pre empt ive Ġresources ]( https :// www . kal as im . org / resource /# pre - empt ive - resources ). Ċ Ġ*/ Ċ open Ġclass ĠResource ( ĊĠĠĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġcapacity : ĠNumber Ġ= Ġ 1 , ĊĠĠĠ Ġval Ġhon or Policy : ĠRequest Hon or Policy Ġ= ĠRequest Hon or Policy . Strict F CF S , ĊĠĠĠ Ġval Ġpre empt ive : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġk oin : ĠK oin Ġ= ĠDependency Context . get () Ċ ) Ġ: ĠSimulation Entity ( name Ġ= Ġname , Ġsim K oin Ġ= Ġk oin ) Ġ{ ĊĊĠĠĠ Ġinternal Ġvar Ġdep letable : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġmin q : ĠDouble Ġ= ĠDouble . MAX _ VALUE ĊĊĊĠĠĠ Ġ// Ġshould Ġwe Ġthis Ġmake Ġreadonly Ġfrom Ġoutside ? ĊĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠ Ġval Ġrequest ers Ġ= ĠComponent Queue ( ĊĠĠĠĠĠĠĠ Ġ" request ers Ġof Ġ${ this . name }", ĊĠĠĠĠĠĠĠ Ġcomparator Ġ= Ġwhen ( hon or Policy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Hon or Policy . SQ F Ġ-> ĠS Q F Comparator ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Hon or Policy . RANDOM Ġ-> ĠRandom Comparator ( random ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠPriority F CF S Queue Comparator () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġk oin Ġ= Ġk oin ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġclaim ers Ġ= ĠComponent Queue < Component >(" claim ers Ġof Ġ${ this . name }", Ġk oin Ġ= Ġk oin ) ĊĊĠĠĠ Ġvar Ġcapacity Ġ= Ġcapacity . toDouble () ĊĠĠĠĠĠĠĠ Ġset ( new Capacity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Capacity Range ( new Capacity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( new Capacity Ġ< Ġclaimed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCap acity Limit Exception ( this , Ġ" can Ġnot Ġreduce Ġcapacity Ġbelow Ġcurrent Ġclaims ", Ġnow , Ġnew Capacity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapacity Diff Ġ= Ġnew Capacity Ġ- Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġnew Capacity ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Timeline . add Value ( capacity ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Derived Metrics () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this Ġis ĠDep letable Resource ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmaintain Ġthe Ġfill Ġlevel Ġof Ġdep letable Ġresources ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclaimed Ġ+= Ġcapacity Diff ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Request () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Ġhttps :// stackoverflow . com / questions / 4 1 2 1 4 4 5 2 / why - dont - property - initial izers - call - a - custom - setter ĊĠĠĠ Ġ/** Ġ ĠCurrently Ġclaimed Ġquantity . ĠThis Ġcan 't Ġbe Ġset Ġdirectly Ġbut Ġvia Ġrequest Ġ*/ ĊĠĠĠ Ġvar Ġclaimed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġinternal Ġset ( x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Quantity Ġ= Ġfield Ġ- Ġx ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġx ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġugly Ġh ak Ġis Ġneeded Ġto Ġavoid Ġtracking Ġof Ġinitial Level Ġsetting Ġin ĠDR Ġconstructor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this Ġis ĠDep letable Resource Ġ&& Ġdiff Quantity Ġ== Ġ 0 . 0 Ġ&& Ġrequest ers . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( field Ġ< ĠEPS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclaimed Timeline . add Value ( x ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Derived Metrics () Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this Ġis ĠDep letable Resource Ġ&& Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġif Ġ( diff Quantity Ġ> Ġ 0 ) Ġ" Released " Ġelse Ġ" Cl a imed " Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġlog ("$ action Ġ${ diff Quantity . absolute Value } Ġfrom Ġ'$ name '") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġit Ġwould Ġseem Ġnatural Ġto Ġtry Req e ust Ġhere , Ġbut Ġsince Ġthis Ġis Ġnot Ġdone Ġin Ġcase Ġof Ġbump ing , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġdo Ġit Ġmanually Ġat Ġthe Ġcall - site Ġinstead ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Ġtodo Ġwhen Ġwould Ġa Ġcap city Ġless Ġthan Ġ 0 ? ĊĠĠĠ Ġval Ġoccup ancy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif ( capacity Ġ< Ġ 0 ) Ġ 0 . 0 Ġelse Ġclaimed Ġ/ Ġcapacity ĊĊĠĠĠ Ġ// Ġnote : Ġcalled Ġ_ just _ Ġavailable Ġand Ġavailable Qu an ity Ġbecause Ġmore Ġread ible Ġin Ġmany Ġsituations Ġdo ctors . available ĊĠĠĠ Ġval Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcapacity Ġ- Ġclaimed ĊĊĊĊĠĠĠ Ġ// Ġbecause ĠDouble . MAX _ VALUE - 1 < ĠDouble . MAX _ VALUE Ġ Ġis Ġwrong Ġon Ġthe ĠJVM Ġ( because Ġof Ġlimited Ġprecision ) ĊĠĠĠ Ġ// Ġwe Ġneed Ġto Ġensure Ġthat Ġcapac ities Ġare Ġin Ġa Ġrange Ġwhere Ġkal as im Ġwill Ġfunction Ġcorrectly ĊĠĠĠ Ġprivate Ġfun Ġvalidate Capacity Range ( capacity : ĠNumber ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( capacity . toDouble () Ġ>= 0 Ġ&& Ġ Ġcapacity . toDouble () Ġ<= ĠInt . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġcapac ities Ġin Ġrange Ġ[ 0 , ĠInt . MAX _ VALUE ] Ġare Ġsupported Ġby Ġkal as im " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġvalidate Capacity Range ( capacity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcapacity Timeline Ġ= ĠMetric Timeline (" Capacity Ġof Ġ${ super . name }", Ġinitial Value Ġ= Ġcapacity , Ġk oin Ġ= Ġk oin ) ĊĠĠĠ Ġval Ġclaimed Timeline Ġ= ĠMetric Timeline (" Cl a imed Ġquantity Ġof Ġ${ this . name }", Ġk oin Ġ= Ġk oin ) ĊĊĠĠĠ Ġ// ĠĠĠ Ġval Ġavailability Timeline Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠMetric Timeline (" Available Ġquantity Ġof Ġ${ this . name }", Ġinitial Value Ġ= Ġavailable Quantity , Ġk oin Ġ= Ġk oin ) Ċ // ĠĠĠ Ġval Ġoccup ancy Timeline Ġ= ĠMetric Timeline (" Occup ancy Ġof Ġ${ this . name }", Ġk oin Ġ= Ġk oin ) ĊĠĠĠ Ġval Ġavailability Timeline ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( capacity Timeline Ġ- Ġclaimed Timeline ) Ġ// . also Ġ{ Ġit . name Ġ= Ġ" Occup ancy Ġof Ġ${ this . name } "} ĊĊĠĠĠ Ġ// ĠĠĠ Ġval Ġoccup ancy Timeline Ġ= ĠMetric Timeline (" Occup ancy Ġof Ġ${ this . name }", Ġk oin Ġ= Ġk oin ) ĊĠĠĠ Ġval Ġoccup ancy Timeline ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclaimed Timeline Ġ/ Ġcapacity Timeline ĊĊĊĠĠĠ Ġvar Ġtracking Policy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠResource Tracking Config Ġ= ĠResource Tracking Config () ĊĠĠĠĠĠĠĠ Ġset ( new Policy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġnew Policy ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( new Policy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Timeline . enabled Ġ= Ġtrack Utilization ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclaimed Timeline . enabled Ġ= Ġtrack Utilization Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailability Timeline . enabled Ġ= Ġtrack Utilization Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoccup ancy Timeline . enabled Ġ= Ġtrack Utilization ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest ers . length Of St ay Statistics . enabled Ġ= Ġtrack Queue Statistics ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest ers . size Timeline . enabled Ġ= Ġtrack Queue Statistics ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclaim ers . length Of St ay Statistics . enabled Ġ= Ġtrack Queue Statistics ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclaim ers . size Timeline . enabled Ġ= Ġtrack Queue Statistics ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠĠĠĠĠ Ġtracking Policy Ġ= Ġenv . tracking Policy Factory . get Policy ( this ) ĊĊĠĠĠĠĠĠĠ Ġlog ( tracking Policy . log Creation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEntity Created Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnow , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenv . current Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" capacity =$ capacity Ġ" Ġ+ Ġif ( dep letable ) Ġ" anonymous " Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġtry Request () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( hon or Policy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Hon or Policy . Rel ax ed F CF S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote : ĠThis Ġis Ġan Ġins anel y Ġexpensive Ġoperation , Ġas Ġwe Ġneed Ġto Ġto Ġbuild Ġanother Ġsorted Ġcopy Ġof Ġthe Ġrequest ers Ġqueue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( request ers . q Ġas ĠPriority Queue ). sorted Iterator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġneeded Ġto Ġavoid Ġrecursion Ġerrors Ġwhen Ġthis Ġiterator Ġcontains Ġno Ġlonger Ġvalid Ġrequest Ġobjects ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwithout Ġ' org . kal as im . test . Dep letable Hon or Policy Test . it Ġshould Ġallow Ġusing Ġa Ġrelax ed ĠF CF S ' Ġwill Ġfail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . component . requests . containsKey ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it . component . requests . containsKey ( this )){ Ġ" invalid Ġrequest er Ġqueue Ġstate "} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Hon or Quantity ( it . component . requests [ this ] !!. quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take While Ġ{ Ġit . component . try Request () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. count () Ġ// Ġactually Ġtrigger Ġotherwise Ġlazy Ġsequence ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Hon or Policy . SQ F , ĠRequest Hon or Policy . Strict F CF S , ĠRequest Hon or Policy . RANDOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġoriginal Ġport Ġfrom Ġsal ab im ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( request ers . q . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// try Ġhon or Ġas Ġmany Ġrequests Ġas Ġpossible ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( min q Ġ> Ġ( capacity Ġ- Ġclaimed Ġ+ ĠEPS )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! request ers . q . peek (). component . try Request ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġcan Ġnot Ġhon or Ġthis Ġrequest , Ġwe Ġmust Ġstop Ġhere Ġ( to Ġrespect Ġrequest Ġprior ities ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRequest Hon or Policy . Weighted F CF S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote : ĠThis Ġis Ġan Ġins anel y Ġexpensive Ġoperation , Ġas Ġwe Ġneed Ġto Ġres ort Ġthe Ġrequest ers Ġqueue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted With Ġ= Ġrequest ers . q . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted With Ġ{ Ġo 1 , Ġo 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompare Values By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo 1 , Ġo 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . priority ?. value ?. times (- 1 ) Ġ?: Ġ 0 Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Quantity Ġ= Ġit . component . requests [ this ] !!. quantity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Since Request Ġ= Ġnow Ġ- Ġit . enter Time ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ* Ġhon or Policy . compute Request Weight ( time Since Request , Ġrequest Quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . enter Time Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Convert Call Chain Into Sequence ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted With ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġcan Hon or Quantity ( it . component . requests [ this ] !!. quantity ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take While Ġ{ Ġit . component . try Request () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. count () Ġ// Ġactually Ġtrigger Ġotherwise Ġlazy Ġsequence ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġopen Ġfun Ġcan Component Hon or Quantity ( component : ĠComponent , Ġquantity : ĠDouble ) Ġ= Ġwhen ( hon or Policy ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRequest Hon or Policy . RANDOM , ĠRequest Hon or Policy . Rel ax ed F CF S , Ġis ĠRequest Hon or Policy . Weighted F CF S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Hon or Quantity ( quantity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠRequest Hon or Policy . SQ F , ĠRequest Hon or Policy . Strict F CF S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnote : Ġit 's Ġlooks Ġthe Ġsame Ġas ĠStrict F CF S , Ġbut Ġthe Ġqueue Ġcomparator Ġis Ġdifferent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest ers . q . peek (). component Ġ== Ġcomponent Ġ&& Ġcan Hon or Quantity ( quantity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġcan Hon or Quantity ( quantity : ĠDouble ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( quantity Ġ> Ġ 0 Ġ&& Ġquantity Ġ> Ġcapacity Ġ- Ġclaimed Ġ+ ĠEPS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif (- quantity Ġ> Ġclaimed Ġ+ ĠEPS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġremove Request er ( component : ĠComponent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest ers . remove ( component ) ĊĠĠĠĠĠĠĠ Ġif ( request ers . isEmpty ()) Ġmin q Ġ= ĠDouble . MAX _ VALUE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠPrints Ġa Ġsummary Ġof Ġstatistics Ġof Ġa Ġresource . Ġ*/ ĊĠĠĠ Ġfun Ġprint Statistics () Ġ= Ġprintln ( statistics . toString ()) ĊĊĠĠĠ Ġoverride Ġval Ġsnapshot ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠResource Snapshot ( this ) ĊĊĠĠĠ Ġval Ġstatistics ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠResource Statistics ( this ) ĊĊĊĠĠĠ Ġval Ġactivities ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠList < Resource Activity Event > Ġ= Ġmutable ListOf () Ċ // ĠĠĠ Ġval Ġtimeline Ġ= Ġenv . event Collector < Request Scope Event >() Ċ Ċ } Ċ Ċ internal Ġfun Ġ< E > ĠPriority Queue < E >. sorted Iterator () Ġ= Ġsequence Ġ{ ĊĠĠĠ Ġval Ġpq Copy Ġ= ĠPriority Queue ( this @ sorted Iterator ) ĊĊĠĠĠ Ġwhile ( pq Copy . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġyield ( pq Copy . poll ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ċ // ĠResource Ġtimeline Ġfor Ġstream lined Ġanalytics Ċ // Ċ Ċ enum Ġclass ĠResource Metric Ġ{ ĠCap acity , ĠCla imed , ĠRequest ers , ĠClaim ers , ĠOcc up ancy , ĠAvailability Ġ} Ċ data Ġclass Ġfo ( ĊĠĠĠ Ġval Ġduration : ĠDouble ?, ĊĠĠĠ Ġval Ġstart : ĠTick Time , ĊĠĠĠ Ġval Ġvalue : ĠDouble , ĊĠĠĠ Ġval Ġmetric : ĠResource Metric , ĊĠĠĠ Ġval Ġend : ĠTick Time ?, ĊĠĠĠ Ġval Ġresource : ĠAny Ċ ) Ċ Ċ data Ġclass ĠResource Timeline Segment ( ĊĠĠĠ Ġval Ġresource : ĠResource , ĊĠĠĠ Ġval Ġstart : ĠTick Time , ĊĠĠĠ Ġval Ġend : ĠTick Time ?, ĊĠĠĠ Ġval Ġduration : ĠDouble ?, ĊĠĠĠ Ġval Ġmetric : ĠResource Metric , ĊĠĠĠ Ġval Ġvalue : ĠDouble , Ċ // ĠĠĠ Ġval Ġstart _ wt : ĠInstant ? Ġ= Ġnull , Ċ // ĠĠĠ Ġval Ġend _ wt : ĠInstant ? Ġ= Ġnull Ċ ) Ġ{ Ċ // ĠĠĠ Ġ@ Suppress (" unused ") Ċ // ĠĠĠ Ġ// Ġneeded Ġby Ġkr ang l Ġif Ġno Ġtick - transform Ġis Ġdefined Ċ // ĠĠĠ Ġconstructor ( Ċ // ĠĠĠĠĠĠĠ Ġresource Ġ: ĠResource , Ċ // ĠĠĠĠĠĠĠ Ġduration : ĠDouble , Ċ // ĠĠĠĠĠĠĠ Ġstart : ĠTick Time , Ċ // ĠĠĠĠĠĠĠ Ġend : ĠTick Time , Ċ // ĠĠĠĠĠĠĠ Ġvalue : ĠDouble , Ċ // ĠĠĠĠĠĠĠ Ġmetric : ĠResource Metric Ċ // ĠĠĠ Ġ) Ġ: Ġthis ( resource , Ġstart , Ġend , duration , Ġ Ġmetric , value , Ġnull , Ġnull ) Ġ{ Ċ // Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstart WT Ġ= Ġresource . env . offset Transform ?. tick 2 wall Time ( start ) ĊĠĠĠ Ġval Ġend WT Ġ= Ġend ?. let Ġ{ Ġresource . env . offset Transform ?. tick 2 wall Time ( it ) Ġ} Ċ } ĊĊ Ċ val ĠResource . timeline : ĠList < Resource Timeline Segment > ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcap Stats Ġ= Ġcapacity Timeline . stats Data (). asList (). as DataFrame () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addColumn (" Metric ") Ġ{ ĠResource Metric . Capacity Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclaim Stats Ġ= Ġclaimed Timeline . stats Data (). asList (). as DataFrame () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addColumn (" Metric ") Ġ{ ĠResource Metric . Cl a imed Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġocc Stats Ġ= Ġoccup ancy Timeline . stats Data (). asList (). as DataFrame () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addColumn (" Metric ") Ġ{ ĠResource Metric . Occup ancy Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġavail Stats Ġ= Ġoccup ancy Timeline . stats Data (). asList (). as DataFrame () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addColumn (" Metric ") Ġ{ ĠResource Metric . Availability Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest ers Ġ= Ġrequest ers . size Timeline . stats Data (). asList (). as DataFrame () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addColumn (" Metric ") Ġ{ ĠResource Metric . Request ers Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclaim ers Ġ= Ġclaim ers . size Timeline . stats Data (). asList (). as DataFrame () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addColumn (" Metric ") Ġ{ ĠResource Metric . Claim ers Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġstats DF Ġ= Ġbind Rows ( cap Stats , Ġclaim Stats , Ġavail Stats , Ġocc Stats , Ġrequest ers , Ġclaim ers ) ĊĠĠĠĠĠĠĠ Ġstats DF Ġ= Ġstats DF . rename (" timestamp " Ġto Ġ" start ") ĊĠĠĠĠĠĠĠ Ġstats DF Ġ= Ġstats DF . addColumn (" end ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Col ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [" start "]. map < Tick Time > Ġ{ Ġit . value Ġ} Ġas ĠList < Double >) Ġ+ Ġit [" duration "] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstats DF Ġ= Ġstats DF . addColumn (" resource ") Ġ{ Ġthis @ timeline Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġconvert Ġto Ġtick - time Ċ // ĠĠĠĠĠĠĠ Ġstats DF Ġ= Ġstats DF . addColumn (" start ") Ġ{ Ġexpr Ġ-> Ġexpr [" start "]. map < Double > Ġ{ ĠTick Time ( it ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġstats DF Ġ= Ġstats DF . addColumn (" end ") Ġ{ Ġexpr Ġ-> Ġexpr [" end "]. map < Double > Ġ{ ĠTick Time ( it ) Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptionally Ġadd Ġwall times Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( env . tick Transform Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstats DF Ġ= Ġstats DF . addColumn (" start _ wt ") Ġ{ Ġit [" start "]. map < Tick Time > Ġ{ Ġenv . as Wall Time ( it ) Ġ} Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstats DF Ġ= Ġstats DF . addColumn (" end _ wt ") Ġ{ Ġit [" end "]. map < Tick Time > Ġ{ Ġenv . as Wall Time ( it ) Ġ} Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġstats DF . rows As < Resource Timeline Segment >(). toList () ĊĠĠĠ Ġ} Ċ Ċ @ Suppress (" unused ") Ċ class ĠResource Snapshot ( resource : ĠResource ) Ġ: ĠAuto Json (), ĠEntity Snapshot Ġ{ ĊĠĠĠ Ġval Ġname : ĠString Ġ= Ġresource . name ĊĠĠĠ Ġval Ġnow Ġ= Ġresource . now ĊĠĠĠ Ġval Ġcreation Time Ġ= Ġresource . creation Time ĊĊĠĠĠ Ġval Ġclaimed Quantity Ġ= Ġresource . claimed ĊĠĠĠ Ġval Ġcapacity Ġ= Ġresource . capacity ĊĊĠĠĠ Ġ// Ġuse Ġa Ġdedicated Ġtype Ġhere Ġto Ġsee Ġnull Ġpri os Ġin Ġjson ĊĠĠĠ Ġval Ġclaimed By Ġ= Ġresource . claim ers . q . toList (). map Ġ{ Ġit . component . name Ġto Ġit . priority Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠReq Comp ( val Ġcomponent : ĠString , Ġval Ġquantity : ĠDouble ?) ĊĊĠĠĠ Ġval Ġrequested By Ġ= Ġresource . request ers . q . toList (). map Ġ{ ĊĠĠĠĠĠĠĠ ĠReq Comp ( it . component . name , Ġit . component . requests [ resource ]?. quantity ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ @ Suppress (" Member Visibility Can Be Private ") Ċ class ĠResource Statistics ( resource : ĠResource ) Ġ: ĠJson able () Ġ{ ĊĊĠĠĠ Ġval Ġname Ġ= Ġresource . name ĊĠĠĠ Ġval Ġtimestamp Ġ= Ġresource . env . now ĊĊĠĠĠ Ġval Ġrequest ers Ġ= Ġresource . request ers . statistics ĊĠĠĠ Ġval Ġclaim ers Ġ= Ġresource . claim ers . statistics ĊĊĠĠĠ Ġval Ġcapacity Ġ= Ġresource . capacity Timeline . statistics ( false ) ĊĠĠĠ Ġval Ġavailable Quantity Ġ= Ġresource . availability Timeline . statistics ( false ) ĊĠĠĠ Ġval Ġclaimed Quantity Ġ= Ġresource . claimed Timeline . statistics ( false ) ĊĠĠĠ Ġval Ġoccup ancy Ġ= Ġresource . occup ancy Timeline . statistics ( false ) ĊĊĊĠĠĠ Ġoverride Ġfun ĠtoJson () Ġ= Ġjson Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name " Ġto Ġname ĊĠĠĠĠĠĠĠ Ġ" timestamp " Ġto Ġtimestamp ĊĠĠĠĠĠĠĠ Ġ" type " Ġto Ġthis @ Resource Statistics . java Class . simple Name ĊĊĠĠĠĠĠĠĠ Ġ" requester Stats " Ġto Ġrequest ers . toJson () ĊĠĠĠĠĠĠĠ Ġ" claimer Stats " Ġto Ġclaim ers . toJson () ĊĊĠĠĠĠĠĠĠ Ġ" capacity " Ġto Ġcapacity . toJson () ĊĠĠĠĠĠĠĠ Ġ" available Quantity " Ġto Ġavailable Quantity . toJson () ĊĠĠĠĠĠĠĠ Ġ" claimed Quantity " Ġto Ġclaimed Quantity . toJson () ĊĠĠĠĠĠĠĠ Ġ" occup ancy " Ġto Ġoccup ancy . toJson () ĊĠĠĠ Ġ} Ċ } ĊĊĊĊ