package Ġso . h awk . catch er Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . JsonArray Ċ import Ġcom . google . gson . Json Element Ċ import Ġcom . google . gson . JsonObject Ċ import Ġso . h awk . catch er . addons . Addon Ċ import Ġso . h awk . catch er . addons . Custom Addon Ċ import Ġso . h awk . catch er . addons . Custom Addon Wrapper Ċ import Ġso . h awk . catch er . configurations . I Configurations Ċ import Ġso . h awk . catch er . provider . User Provider Ċ Ċ /** Ċ Ġ* ĠEvents Ġare Ġprocessed Ġand Ġcollected Ġinto ĠJson Ġobjects Ċ Ġ* Ġ@ param Ġconfigurations ĠContains Ġthe Ġbasic Ġsettings Ġof Ġcatch er Ġoperation Ċ Ġ* Ġ@ param Ġsetting Provider ĠContains Ġinformation Ġabout Ġthe Ġapplication Ġand Ġthe Ġtoken Ċ Ġ* Ġ@ param Ġuser Provider ĠContains Ġinformation Ġabout Ġuser Ċ Ġ* Ġ@ param Ġgson ĠTo Ġbuild ĠJson Ġobjects Ċ Ġ* Ġ@ param Ġlogger ĠLogging Ġevents Ġwhen Ġbuilding Ġand Ġsending Ġjson Ġobjects Ċ Ġ*/ Ċ internal Ġclass ĠEventHandler ( ĊĠĠĠ Ġprivate Ġval Ġconfigurations : ĠI Configurations , ĊĠĠĠ Ġprivate Ġval Ġsetting Provider : ĠH awk Setting Provider , ĊĠĠĠ Ġprivate Ġval Ġuser Provider : ĠUser Provider , ĊĠĠĠ Ġprivate Ġval Ġgson : ĠGson , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠBase Logger Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCATCH ER _ TYPE Ġ= Ġ" errors / android " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠList Ġof Ġkeys Ġfor Ġbuilding Ġstack trace Ġjson ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTACK TRACE _ FILE _ KEY Ġ= Ġ" file " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTACK TRACE _ LINE _ KEY Ġ= Ġ" line " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTACK TRACE _ FUNCTION _ KEY Ġ= Ġ" function " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠList Ġof Ġkeys Ġfor Ġbuilding Ġuser Ġjson ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUSER _ ID _ KEY Ġ= Ġ" id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUSER _ NAME _ KEY Ġ= Ġ" name " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠList Ġof Ġkeys Ġfor Ġbuilding Ġpayload Ġjson ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP AY LOAD _ TITLE _ KEY Ġ= Ġ" title " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP AY LOAD _ TYPE _ KEY Ġ= Ġ" type " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP AY LOAD _ BACK TRACE _ KEY Ġ= Ġ" backtrace " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP AY LOAD _ RELEASE _ KEY Ġ= Ġ" release " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP AY LOAD _ ADD ONS _ KEY Ġ= Ġ" addons " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP AY LOAD _ CONTEXT _ KEY Ġ= Ġ" context " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP AY LOAD _ USER _ KEY Ġ= Ġ" user " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠList Ġof Ġkeys Ġfor Ġbuilding Ġjson ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTOKEN _ KEY Ġ= Ġ" token " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCATCH ER _ TYPE _ KEY Ġ= Ġ" catch er Type " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP AY LOAD _ KEY Ġ= Ġ" payload " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠForm ing Ġstack Ġtrace ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġthrowable ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget StackTrace ( throwable : ĠThrowable ?): ĠJson Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstack Trace Elements Ġ= Ġthrowable !!. stack Trace ĊĠĠĠĠĠĠĠ Ġreturn ĠJson Array (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Trace Elements . map (:: convert StackTrace Element ToJson ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach (:: add ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠForm ing Ġstack Ġtrace Ġinformation ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġelement Ġstack Ġtrace Ġelement ĊĠĠĠĠ Ġ* Ġ@ return Ġjson Ġobject Ġwith Ġinformation Ġof Ġstack Ġtrace Ġelement ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconvert StackTrace Element ToJson ( element : ĠStack Trace Element ): ĠJson Element Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson StackTrace Element Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠ Ġjson StackTrace Element . addProperty ( STACK TRACE _ FILE _ KEY , Ġelement . className ) ĊĠĠĠĠĠĠĠ Ġjson StackTrace Element . addProperty ( STACK TRACE _ LINE _ KEY , Ġelement . line Number ) ĊĠĠĠĠĠĠĠ Ġjson StackTrace Element . addProperty ( STACK TRACE _ FUNCTION _ KEY , Ġelement . methodName ) ĊĠĠĠĠĠĠĠ Ġreturn Ġjson StackTrace Element ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠForm ing Ġpayload Ġinformation Ġof Ġevent ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġthrowable Ġ[ Throwable ] ĊĠĠĠĠ Ġ* Ġ@ param Ġis Fatal ĠFlag Ġif Ġthrowable Ġis Ġfatal ĊĠĠĠĠ Ġ* Ġ@ param Ġcustom Addons ĠAdditional Ġexternal Ġinformation ĊĠĠĠĠ Ġ* Ġ@ param Ġdefault Addons ĠList Ġof Ġadditional Ġadd ons Ġfor Ġadding Ġinformation Ġabout Ġthe Ġevent ĊĠĠĠĠ Ġ* Ġ@ return ĠAn Ġobject Ġthat Ġcontains Ġinformation Ġabout Ġthe Ġerror , Ġabout Ġthe Ġuser , Ġinformation Ġabout Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġand Ġadditional Ġinformation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġpayload ( ĊĠĠĠĠĠĠĠ Ġthrowable : ĠThrowable , ĊĠĠĠĠĠĠĠ Ġis Fatal : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġcustom Addons : ĠList < Addon > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġdefault Addons : ĠList < Addon > ĊĠĠĠ Ġ): ĠJson Element Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġversion Name Ġ= Ġsetting Provider . version Name ĊĠĠĠĠĠĠĠ Ġval Ġapp Version Ġ= Ġsetting Provider . app Version ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġthrowable . message ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġthrowable :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġval Ġback trace Ġ= Ġget StackTrace ( throwable ) ĊĠĠĠĠĠĠĠ Ġval Ġrelease Ġ= Ġ"$ version Name ($ app Version )" ĊĠĠĠĠĠĠĠ Ġval Ġadd ons Ġ= ĠJsonObject (). also Ġ{ Ġadd ons Object Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Addons . forEach Ġ{ Ġaddon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddon . fill JsonObject ( addons Object ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠJsonObject (). also Ġ{ Ġcontext Object Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Addons . forEach Ġ{ Ġaddon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddon . fill JsonObject ( context Object ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Provider . currentUser ()?. let Ġ{ ĠcurrentUser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property ( USER _ ID _ KEY , ĠcurrentUser . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property ( USER _ NAME _ KEY , ĠcurrentUser . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property ( PAYLOAD _ TITLE _ KEY , Ġtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property ( PAYLOAD _ TYPE _ KEY , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( PAYLOAD _ BACK TRACE _ KEY , Ġback trace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property ( PAYLOAD _ RELEASE _ KEY , Ġrelease ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( PAYLOAD _ ADD ONS _ KEY , Ġadd ons ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( PAYLOAD _ CONTEXT _ KEY , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( PAYLOAD _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġjson Ġwith Ġexception Ġand Ġdevice Ġinformation ĊĠĠĠĠ Ġ* Ġ@ param Ġthrowable ĠEvent Ġto Ġbe Ġprocessed ĊĠĠĠĠ Ġ* Ġ@ param Ġis Fatal ĠFlag Ġif Ġthrowable Ġis Ġfatal ĊĠĠĠĠ Ġ* Ġ@ param Ġexternal Custom Addon ĠAdditional Ġexternal Ġinformation ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġjson Ġobject Ġthat Ġrepresents Ġa Ġhandled Ġexception Ġwith Ġadditional Ġinformation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġform ing Json Exception Info ( ĊĠĠĠĠĠĠĠ Ġthrowable : ĠThrowable , ĊĠĠĠĠĠĠĠ Ġis Fatal : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġexternal Custom Addon : ĠCustom Addon ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcause Throwable Ġ= Ġthrowable . cause Ġ?: Ġthrowable ĊĠĠĠĠĠĠĠ Ġval Ġreport Json Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠ Ġval Ġcustom Addons Ġ= Ġexternal Custom Addon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġconfigurations . custom Addons Ġ+ ĠCustom Addon Wrapper ( it , Ġgson ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġconfigurations . custom Addons ĊĠĠĠĠĠĠĠ Ġreport Json . addProperty ( TOKEN _ KEY , Ġsetting Provider . token ) ĊĠĠĠĠĠĠĠ Ġreport Json . addProperty ( CATCH ER _ TYPE _ KEY , ĠCATCH ER _ TYPE ) ĊĠĠĠĠĠĠĠ Ġreport Json . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP AY LOAD _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload ( cause Throwable , Ġcustom Addons Ġ= Ġcustom Addons , Ġdefault Addons Ġ= Ġconfigurations . addons ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlogger . i (" Post Ġjson Ġ= Ġ$ report Json ") ĊĠĠĠĠĠĠĠ Ġreturn Ġreport Json ĊĠĠĠ Ġ} Ċ }