package Ġin flux db Ċ Ċ import Ġcom . influxdb . client . In flux DB Client Factory Ċ import Ġcom . influxdb . client . domain . Write Precision Ċ import Ġcom . influxdb . client . write . Point Ċ import Ġcom . influxdb . client . write . events . Back pressure Event Ċ import Ġcom . influxdb . client . write . events . Write Error Event Ċ import Ġcom . influxdb . client . write . events . Write Ret ri able Error Event Ċ import Ġmu . Kotlin Logging Ċ import Ġs mar th ome . Config Helper Ċ import Ġs mar th ome . Smart Home Solution Ċ Ċ object ĠIn flux Client Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{} ĊĠĠĠ Ġprivate Ġval Ġconfig Ġ= ĠConfig Helper . config . influx ĊĠĠĠ Ġprivate Ġval Ġclient Ġ= ĠIn flux DB Client Factory . create ( config . url , Ġconfig . token . toCharArray ()) ĊĠĠĠ Ġprivate Ġval Ġwrite Api Ġ= Ġclient . write Api ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠRuntime . get Runtime (). add Shutdown Hook ( object Ġ: ĠThread () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Received Ġshutdown Ġhook . ĠClosing ĠIn flux DB Ġclient ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġwrite Api . listen Events ( Back pressure Event :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" In flux Ġback pressure ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . log Event () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwrite Api . listen Events ( Write Error Event :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" In flux Ġwrite Ġerror ", Ġit . throwable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwrite Api . listen Events ( Write Ret ri able Error Event :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" In flux Ġwrite Ġret ri able Ġerror ", Ġit . throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . log Event () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpush ( point : ĠPoint , Ġsolution : ĠSmart Home Solution ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" Push ing Ġpoint Ġto ĠIn flux . ĠBucket : Ġ${ solution . bucket }") ĊĊĠĠĠĠĠĠĠ Ġwrite Api . write Point ( solution . bucket , Ġconfig . org , Ġpoint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpush ( points : ĠList < Point >, Ġsolution : ĠSmart Home Solution ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" Push ing Ġ${ points . size } Ġpoints Ġto ĠIn flux . ĠBucket : Ġ${ solution . bucket }") ĊĊĠĠĠĠĠĠĠ Ġwrite Api . write Points ( solution . bucket , Ġconfig . org , Ġpoints ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpush ( pojo : ĠAny , Ġsolution : ĠSmart Home Solution ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" Push ing ĠPO JO Ġmeasurement Ġ${ pojo . java Class . simple Name } Ġto ĠIn flux . ĠBucket : Ġ${ solution . bucket }") ĊĊĠĠĠĠĠĠĠ Ġwrite Api . write Measurement ( solution . bucket , Ġconfig . org , ĠWrite Precision . S , Ġpo jo ) ĊĠĠĠ Ġ} Ċ }