// ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġsoftware . aws . tool k its . jetbrains . services . telemetry Ċ Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . application . Application Info Ċ import Ġcom . intellij . openapi . application . Application Names Info Ċ import Ġcom . intellij . openapi . components . Service Manager Ċ import Ġcom . intellij . openapi . project . Default Project Factory Ċ import Ġcom . intellij . openapi . util . System Info Ċ import Ġsoftware . amazon . aw ssdk . regions . Region Ċ import Ġsoftware . amazon . aw ssdk . services . toolkit telemetry . Toolkit Telemetry Client Ċ import Ġsoftware . amazon . aw ssdk . services . toolkit telemetry . model . AWS Product Ċ import Ġsoftware . amazon . aw ssdk . services . toolkit telemetry . model . Unit Ċ import Ġsoftware . aws . tool k its . core . Toolkit Client Manager Ċ import Ġsoftware . aws . tool k its . core . region . Toolkit Region Provider Ċ import Ġsoftware . aws . tool k its . core . telemetry . Metric Event Ċ import Ġsoftware . aws . tool k its . core . telemetry . Telemetry Batch er Ċ import Ġsoftware . aws . tool k its . core . telemetry . Default Telemetry Batch er Ċ import Ġsoftware . aws . tool k its . core . telemetry . Default Metric Event Ċ import Ġsoftware . aws . tool k its . core . utils . getLogger Ċ import Ġsoftware . aws . tool k its . core . utils . warn Ċ import Ġsoftware . aws . tool k its . jetbrains . Aws Toolkit Ċ import Ġsoftware . aws . tool k its . jetbrains . core . Aws Sdk Client Ċ import Ġsoftware . aws . tool k its . jetbrains . settings . Aws Settings Ċ import Ġjava . net . URI Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Scheduled ExecutorService Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ interface ĠTe lemetry Service Ġ: ĠDis posable Ġ{ ĊĠĠĠ Ġfun Ġrecord ( namespace : ĠString , Ġbuild Event : ĠMetric Event . Builder . () Ġ-> Ġkotlin . Unit Ġ= Ġ{} ): ĠMetric Event ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): ĠTe lemetry Service Ġ= ĠService Manager . getService ( Telemetry Service :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠDefault Telemetry Service ( ĊĠĠĠ Ġmessage Bus Service : ĠMessage Bus Service , ĊĠĠĠ Ġsettings : ĠAws Settings , ĊĠĠĠ Ġpublish Interval : ĠLong , ĊĠĠĠ Ġpublish Interval Unit : ĠTimeUnit , ĊĠĠĠ Ġprivate Ġval Ġexecutor : ĠScheduled ExecutorService , ĊĠĠĠ Ġprivate Ġval Ġbatch er : ĠTe lemetry Batch er Ċ ) Ġ: ĠTe lemetry Service Ġ{ ĊĠĠĠ Ġprivate Ġval Ġis Dis posing : ĠAtomic Boolean Ġ= ĠAtomic Boolean ( false ) ĊĠĠĠ Ġprivate Ġval ĠstartTime : ĠInstant ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġsdk Client : ĠAws Sdk Client , ĊĠĠĠĠĠĠĠ Ġregion Provider : ĠToolkit Region Provider , ĊĠĠĠĠĠĠĠ Ġmessage Bus Service : ĠMessage Bus Service , ĊĠĠĠĠĠĠĠ Ġsettings : ĠAws Settings ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġmessage Bus Service , ĊĠĠĠĠĠĠĠ Ġsettings , ĊĠĠĠĠĠĠĠ ĠDEFAULT _ PUBL ISH _ INTERVAL , ĊĠĠĠĠĠĠĠ ĠDEFAULT _ PUBL ISH _ INTERVAL _ UNIT , ĊĠĠĠĠĠĠĠ Ġcreate Default Executor (), ĊĠĠĠĠĠĠĠ ĠDefault Telemetry Batch er ( Default Telemetry Publisher ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAWS Product . AWS _ TOOL KIT _ FOR _ J ET _ BR AIN S , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAws Toolkit . PLUGIN _ VERSION , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . clientId . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Names Info . getInstance (). full ProductName With Edition , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Info . getInstance (). full Version , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToolkit Telemetry Client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠDetermine Ġwhy Ġthis Ġclient Ġis Ġnot Ġpicked Ġup Ġby Ġdefault . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. httpClient ( sdk Client . sdk HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. region ( Region . US _ EAST _ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. endpoint Override ( URI . create (" https :// client - telemetry . us - east - 1 . amazonaws . com ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. credentials Provider ( AWSC ognito Credentials Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" us - east - 1 : 8 2 0 fd 6 d 1 - 9 5 c 0 - 4 ca 4 - bff b - 3 f 0 1 d 3 2 da 8 4 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠService Manager . getService ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Project Factory . getInstance (). default Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToolkit Client Manager :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion Ġ= ĠRegion . US _ EAST _ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Info . OS _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Info . OS _ VERSION ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Bus Service . message Bus . connect (). subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Bus Service . telemetry Enabled Topic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠTe lemetry Enabled Changed Notifier Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnotify ( is Telemetry Enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbatch er . on Telemetry Enabled Changed ( is Telemetry Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmessage Bus Service . message Bus . sync Publisher ( message Bus Service . telemetry Enabled Topic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. notify ( settings . is Telemetry Enabled ) ĊĊĠĠĠĠĠĠĠ Ġexecutor . schedule With Fixed Delay ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPublish Activity (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Interval , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Interval , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Interval Unit ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrecord (" Toolkit Start "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= Ġit . create Time ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Dis posing . compare AndSet ( false , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexecutor . shutdown () ĊĊĠĠĠĠĠĠĠ Ġval ĠendTime Ġ= ĠInstant . now () ĊĠĠĠĠĠĠĠ Ġrecord (" Toolkit End ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcreateTime ( endTime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatum (" duration ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ( Duration . between ( startTime , ĠendTime ). to Millis (). toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit ( Unit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbatch er . shutdown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrecord ( namespace : ĠString , Ġbuild Event : ĠMetric Event . Builder . () Ġ-> Ġkotlin . Unit ): ĠMetric Event Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠDefault Metric Event . builder ( namespace ) ĊĠĠĠĠĠĠĠ Ġbuild Event ( builder ) ĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġbatch er . enqueue ( event ) ĊĠĠĠĠĠĠĠ Ġreturn Ġevent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠPublish Activity Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Dis posing . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbatch er . flush ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn ( e ) Ġ{ Ġ" Unexpected Ġexception Ġwhile Ġpublishing Ġtelemetry " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= Ġget Logger < Telemetry Service >() ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ PUBL ISH _ INTERVAL Ġ= Ġ 5 L ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ PUBL ISH _ INTERVAL _ UNIT Ġ= ĠTimeUnit . MIN UTES ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Default Executor () Ġ= ĠExec utors . new Single Thread Scheduled Executor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdaemon Thread Ġ= ĠThread ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdaemon Thread . is Daemon Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdaemon Thread . name Ġ= Ġ" AWS - Toolkit - Metrics - Publisher " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdaemon Thread ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ