/* Ċ Ġ* ĠThis Ġfile Ġis Ġa Ġcopy Ġof : Ċ Ġ* Ġhttps :// github . com / mi hk els / graph ite - client - kotlin / blob / master / graph ite - client / src / main / kotlin / com / mi hk els / graph ite / client / Basic Graph ite Client . kt Ċ Ġ* Ġwith Ġsome Ġminor Ġmodifications . Ċ Ġ* ĠIt Ġcan Ġbe Ġremoved Ġwhen Ġgraph ite - kotlin - client Ġgets Ġpublished Ġto ĠMaven ĠCentral . Ċ Ġ*/ Ċ Ċ package Ġcom . mal in sk iy . mar athon . analytics . external . graph ite Ċ Ċ import Ġcom . mal in sk iy . mar athon . extension . with Prefix Ċ import Ġjava . io . IOException Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . net . Socket Ċ import Ġjava . net . Unknown Host Exception Ċ import Ġjava . time . Instant Ċ Ċ data Ġclass ĠGraph ite Metric ( ĊĠĠĠ Ġval Ġmetric Name : ĠString , ĊĠĠĠ Ġval Ġmetric Value : ĠString , ĊĠĠĠ Ġval Ġtimestamp : ĠLong Ġ= ĠInstant . now (). to Epoch Milli () Ċ ) Ċ Ċ interface ĠGraph ite Client Ġ{ ĊĠĠĠ Ġfun Ġsend ( graph ite Metric : ĠGraph ite Metric ) ĊĠĠĠ Ġfun Ġsend ( graph ite Metrics : ĠCollection < Graph ite Metric >) Ċ } Ċ Ċ interface ĠData Sender Ġ{ ĊĠĠĠ Ġfun Ġsend Data ( host : ĠString , Ġport : ĠInt , Ġcallback : Ġ( PrintWriter ) Ġ-> ĠUnit ) Ċ } Ċ Ċ class ĠSocket Sender Ġ: ĠData Sender Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsend Data ( host : ĠString , Ġport : ĠInt , Ġcallback : Ġ( PrintWriter ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSocket ( host , Ġport ). get OutputStream (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrintWriter ( it , Ġtrue ). use Ġ{ Ġcallback ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠBasic Graph ite Client ( ĊĠĠĠ Ġprivate Ġval Ġhost : ĠString , ĊĠĠĠ Ġprivate Ġval Ġport : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġprefix : ĠString ?, ĊĠĠĠ Ġprivate Ġval Ġdata Sender : ĠData Sender Ġ= ĠSocket Sender () Ċ ) Ġ: ĠGraph ite Client Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsend ( graph ite Metric : ĠGraph ite Metric ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsender Ġ{ Ġwriter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠconvertTo St ing ( graph ite Metric ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . print ( message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend ( graph ite Metrics : ĠCollection < Graph ite Metric >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( graph ite Metrics . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender Ġ{ Ġwriter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph ite Metrics ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodified Ġ= ĠconvertTo St ing ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodified ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġwriter . print ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsender ( callback : Ġ( PrintWriter ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Sender . send Data ( host , Ġport , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnknown Host Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGraph ite Exception (" Unknown Ġhost : Ġ${ host }") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGraph ite Exception (" Error Ġwhile Ġwriting Ġdata Ġto Ġgraph ite : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠconvertTo St ing ( metric : ĠGraph ite Metric ) Ġ= ĊĠĠĠĠĠĠĠ Ġ"${ metric . metric Name . with Prefix ( prefix )} Ġ${ metric . metric Value } Ġ${ metric . timestamp Ġ/ Ġ 1 0 0 0 }\ n " Ċ } Ċ Ċ class ĠGraph ite Exception ( message : ĠString ) Ġ: ĠException ( message ) Ċ