package Ġcom . rim mer . metrics . server . generated . type Ċ Ċ import Ġorg . joda . time . DateTime Ċ import Ġio . netty . buffer . Byte Buf Ċ import Ġjava . util .* Ċ import Ġcom . rim mer . y tt rium .* Ċ import Ġcom . rim mer . y tt rium . serialize .* Ċ import Ġcom . rim mer . y tt rium . router . plugin . IPAddress Ċ import Ġcom . rim mer . metrics . generated . type .* Ċ Ċ data Ġclass ĠCategory Metric ( ĊĠĠĠ Ġval Ġmetric : ĠMetric , ĊĠĠĠ Ġval Ġunit : ĠMetric Unit , ĊĠĠĠ Ġval Ġservers : ĠMap < String , ĠServer Metric > Ċ ): ĠWrit able Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġencode Json ( writer : ĠJson Writer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . start Object () ĊĠĠĠĠĠĠĠ Ġwriter . field ( metric FieldName ) ĊĠĠĠĠĠĠĠ Ġmetric . encode Json ( writer ) ĊĠĠĠĠĠĠĠ Ġwriter . field ( unit FieldName ) ĊĠĠĠĠĠĠĠ Ġunit . encode Json ( writer ) ĊĠĠĠĠĠĠĠ Ġwriter . field ( servers FieldName ) ĊĠĠĠĠĠĠĠ Ġwriter . start Object () ĊĠĠĠĠĠĠĠ Ġfor ( kv Ġin Ġservers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . field ( kv . key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkv . value . encode Json ( writer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . end Object () ĊĠĠĠĠĠĠĠ Ġwriter . end Object () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġencode Binary ( buffer : ĠByte Buf ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheader 0 Ġ= Ġ 3 9 7 ĊĠĠĠĠĠĠĠ Ġbuffer . write Var Int ( header 0 ) ĊĠĠĠĠĠĠĠ Ġmetric . encode Binary ( buffer ) ĊĠĠĠĠĠĠĠ Ġunit . encode Binary ( buffer ) ĊĠĠĠĠĠĠĠ Ġbuffer . write Var Long (( servers . size . to Long () Ġshl Ġ 6 ) Ġor Ġ 4 Ġor Ġ( 5 Ġshl Ġ 3 )) ĊĠĠĠĠĠĠĠ Ġfor ( kv Ġin Ġservers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . writeString ( kv . key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkv . value . encode Binary ( buffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠReader ( Category Metric :: class . java , Ġ{ fromJson ( it )}, Ġ{ from Binary ( it )}) ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Binary ( buffer : ĠByte Buf ): ĠCategory Metric Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmetric : ĠMetric ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġunit : ĠMetric Unit ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġservers : ĠHashMap < String , ĠServer Metric > Ġ= ĠHashMap () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . read Object Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetric Ġ= ĠMetric . from Binary ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= ĠMetric Unit . from Binary ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength _ servers Ġ= Ġbuffer . read Var Long () Ġ ush r Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi _ servers Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( i _ servers Ġ< Ġlength _ servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservers _ k Ġ= Ġbuffer . readString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservers _ v Ġ= ĠServer Metric . from Binary ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservers . put ( servers _ k , Ġservers _ v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi _ servers ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( metric Ġ== Ġnull Ġ|| Ġunit Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid StateException (" Category Metric Ġinstance Ġis Ġmissing Ġrequired Ġfields ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCategory Metric ( metric !! , Ġunit !! , Ġservers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( token : ĠJson Token ): ĠCategory Metric Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmetric : ĠMetric ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġunit : ĠMetric Unit ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġservers : ĠHashMap < String , ĠServer Metric > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken . expect ( Json Token . Type . Start Object ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken . parse () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( token . type Ġ== ĠJson Token . Type . End Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( token . type Ġ== ĠJson Token . Type . FieldName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( token . string Payload . hashCode ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetric Field Hash Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetric Ġ= ĠMetric . fromJson ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Field Hash Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= ĠMetric Unit . fromJson ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservers Field Hash Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken . expect ( Json Token . Type . Start Object ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken . parse () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( token . type Ġ== ĠJson Token . Type . End Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( token . type Ġ== ĠJson Token . Type . FieldName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservers _ k Ġ= Ġtoken . string Payload ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservers _ v Ġ= ĠServer Metric . fromJson ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservers . put ( servers _ k , Ġservers _ v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid StateException (" Invalid Ġjson : Ġexpected Ġfield Ġor Ġobject Ġend ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtoken . skip Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid StateException (" Invalid Ġjson : Ġexpected Ġfield Ġor Ġobject Ġend ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( metric Ġ== Ġnull Ġ|| Ġunit Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid StateException (" Category Metric Ġinstance Ġis Ġmissing Ġrequired Ġfields ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCategory Metric ( metric , Ġunit , Ġservers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ