/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 5 ĠAndrew ĠO ' M alley Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . github . and rew oma . kw ery . core . interceptor Ċ Ċ import Ġcom . github . and rew oma . kw ery . core . interceptor . Logging Summary Interceptor . Execution Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠLogging Summary Interceptor Test Ġ{ ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Summary Ġreport Ġshould Ġbe Ġrank ed Ġby Ġclosed Ġcost Ġdescending `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexecution s Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Actor Dao . findById s ", Ġstarted Ġ= Ġ 4 2 7 7 8 2 0 8 0 9 3 5 5 6 , Ġexecuted Ġ= Ġ 4 2 7 7 8 2 0 9 4 3 2 5 9 5 , Ġclosed Ġ= Ġ 4 2 7 7 8 2 0 9 8 4 1 3 7 8 , Ġrow Count Ġ= Ġ 2 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Film Actor Dao . findBy Film Ids ", Ġstarted Ġ= Ġ 4 2 7 7 8 1 8 5 0 4 1 8 3 2 , Ġexecuted Ġ= Ġ 4 2 7 7 8 2 0 0 7 4 3 1 6 0 , Ġclosed Ġ= Ġ 4 2 7 7 8 2 0 6 7 2 0 6 1 3 , Ġrow Count Ġ= Ġ 5 4 6 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Film Dao . findAll ", Ġstarted Ġ= Ġ 4 2 7 7 8 1 4 4 1 0 2 9 5 5 , Ġexecuted Ġ= Ġ 4 2 7 7 8 1 4 7 6 2 8 1 7 5 , Ġclosed Ġ= Ġ 4 2 7 7 8 1 7 1 3 8 5 4 7 3 , Ġrow Count Ġ= Ġ 1 0 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Language Dao . findById s ", Ġstarted Ġ= Ġ 4 2 7 7 8 1 7 9 8 8 5 2 2 2 , Ġexecuted Ġ= Ġ 4 2 7 7 8 1 8 1 2 4 2 6 0 1 , Ġclosed Ġ= Ġ 4 2 7 7 8 1 8 1 3 8 1 2 6 9 , Ġrow Count Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Time Ġ= Ġ 2 0 3 5 7 2 5 2 5 L ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" Ċ Executed Ġ 4 Ġstatements Ġin Ġ 2 1 . 9 2 3 Ġms Ġ( closed Ġin Ġ 5 2 . 2 0 5 Ġms ) Ġaffect ing Ġ 6 , 6 6 3 Ġrows Ġusing Ġ 2 5 . 6 % Ġof Ġrequest Ġtotal Ġ( 2 0 3 . 5 7 3 Ġms ): ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalls ĠĠĠ ĠExec ĠĠ ĠClose ĠĠ ĠRows ĠĠĠĠĠ Ġ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFil m Dao . findAll ĠĠĠĠĠĠ 1 ĠĠĠ 3 . 5 2 5 ĠĠ 2 7 . 2 8 3 ĠĠ 1 , 0 0 0 ĠĠ 5 2 . 3 % ĊĠĠĠ ĠFil m Actor Dao . findBy Film Ids ĠĠĠĠĠĠ 1 ĠĠ 1 5 . 7 0 1 ĠĠ 2 1 . 6 7 9 ĠĠ 5 , 4 6 2 ĠĠ 4 1 . 5 % ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActor Dao . findById s ĠĠĠĠĠĠ 1 ĠĠĠ 1 . 3 3 9 ĠĠĠ 1 . 7 4 8 ĠĠĠĠ 2 0 0 ĠĠĠ 3 . 3 % ĊĠĠĠĠĠĠĠĠ ĠLanguage Dao . findById s ĠĠĠĠĠĠ 1 ĠĠĠ 1 . 3 5 7 ĠĠĠ 1 . 4 9 6 ĠĠĠĠĠĠ 1 ĠĠĠ 2 . 9 % """ ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected . replace (" ! ". to Regex (), Ġ""), Ġgenerate Report ( request Time , Ġexecution s )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Summary Ġreport Ġshould Ġaggregate Ġcalls Ġto Ġsame Ġstatement `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexecution s Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Actor Dao . findById s ", Ġstarted Ġ= Ġ 4 2 7 7 8 2 0 8 0 9 3 5 5 6 , Ġexecuted Ġ= Ġ 4 2 7 7 8 2 0 9 4 3 2 5 9 5 , Ġclosed Ġ= Ġ 4 2 7 7 8 2 0 9 8 4 1 3 7 8 , Ġrow Count Ġ= Ġ 2 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Film Actor Dao . findBy Film Ids ", Ġstarted Ġ= Ġ 4 2 7 7 8 1 8 5 0 4 1 8 3 2 , Ġexecuted Ġ= Ġ 4 2 7 7 8 2 0 0 7 4 3 1 6 0 , Ġclosed Ġ= Ġ 4 2 7 7 8 2 0 6 7 2 0 6 1 3 , Ġrow Count Ġ= Ġ 5 4 6 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Film Dao . findAll ", Ġstarted Ġ= Ġ 4 2 7 7 8 1 4 4 1 0 2 9 5 5 , Ġexecuted Ġ= Ġ 4 2 7 7 8 1 4 7 6 2 8 1 7 5 , Ġclosed Ġ= Ġ 4 2 7 7 8 1 7 1 3 8 5 4 7 3 , Ġrow Count Ġ= Ġ 1 0 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Language Dao . findById s ", Ġstarted Ġ= Ġ 4 2 7 7 8 1 7 9 8 8 5 2 2 2 , Ġexecuted Ġ= Ġ 4 2 7 7 8 1 8 1 2 4 2 6 0 1 , Ġclosed Ġ= Ġ 4 2 7 7 8 1 8 1 3 8 1 2 6 9 , Ġrow Count Ġ= Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Actor Dao . findById s ", Ġstarted Ġ= Ġ 4 2 7 7 8 2 0 8 0 9 3 5 5 6 , Ġexecuted Ġ= Ġ 4 2 7 7 8 2 0 9 4 3 2 5 9 5 , Ġclosed Ġ= Ġ 4 2 7 7 8 2 0 9 8 4 1 3 7 8 , Ġrow Count Ġ= Ġ 2 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Film Actor Dao . findBy Film Ids ", Ġstarted Ġ= Ġ 4 2 7 7 8 1 8 5 0 4 1 8 3 2 , Ġexecuted Ġ= Ġ 4 2 7 7 8 2 0 0 7 4 3 1 6 0 , Ġclosed Ġ= Ġ 4 2 7 7 8 2 0 6 7 2 0 6 1 3 , Ġrow Count Ġ= Ġ 5 4 6 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Film Dao . findAll ", Ġstarted Ġ= Ġ 4 2 7 7 8 1 4 4 1 0 2 9 5 5 , Ġexecuted Ġ= Ġ 4 2 7 7 8 1 4 7 6 2 8 1 7 5 , Ġclosed Ġ= Ġ 4 2 7 7 8 1 7 1 3 8 5 4 7 3 , Ġrow Count Ġ= Ġ 1 0 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution ( name Ġ= Ġ" Language Dao . findById s ", Ġstarted Ġ= Ġ 4 2 7 7 8 1 7 9 8 8 5 2 2 2 , Ġexecuted Ġ= Ġ 4 2 7 7 8 1 8 1 2 4 2 6 0 1 , Ġclosed Ġ= Ġ 4 2 7 7 8 1 8 1 3 8 1 2 6 9 , Ġrow Count Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Time Ġ= Ġ 2 0 3 5 7 2 5 2 5 L Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" Ċ Executed Ġ 8 Ġstatements Ġin Ġ 4 3 . 8 4 6 Ġms Ġ( closed Ġin Ġ 1 0 4 . 4 1 0 Ġms ) Ġaffect ing Ġ 1 9 , 9 8 9 Ġrows Ġusing Ġ 2 5 . 6 % Ġof Ġrequest Ġtotal Ġ( 4 0 7 . 1 4 5 Ġms ): ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalls ĠĠĠ ĠExec ĠĠ ĠClose ĠĠĠ ĠRows ĠĠĠĠĠ Ġ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFil m Dao . findAll ĠĠĠĠĠĠ 2 ĠĠĠ 7 . 0 5 0 ĠĠ 5 4 . 5 6 5 ĠĠĠ 2 , 0 0 0 ĠĠ 5 2 . 3 % ĊĠĠĠ ĠFil m Actor Dao . findBy Film Ids ĠĠĠĠĠĠ 2 ĠĠ 3 1 . 4 0 3 ĠĠ 4 3 . 3 5 8 ĠĠ 1 0 , 9 2 4 ĠĠ 4 1 . 5 % ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActor Dao . findById s ĠĠĠĠĠĠ 2 ĠĠĠ 2 . 6 7 8 ĠĠĠ 3 . 4 9 6 ĠĠĠĠĠ 4 0 0 ĠĠĠ 3 . 3 % ĊĠĠĠĠĠĠĠĠ ĠLanguage Dao . findById s ĠĠĠĠĠĠ 2 ĠĠĠ 2 . 7 1 5 ĠĠĠ 2 . 9 9 2 ĠĠĠĠĠĠĠ 2 ĠĠĠ 2 . 9 % """ ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected . replace (" ! ". to Regex (), Ġ""), Ġgenerate Report ( request Time , Ġexecution s )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġgenerate Report ( request Time : ĠLong , Ġexecution s : ĠMutable List < Execution >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( totals , Ġsummar ies ) Ġ= ĠLogging Summary Interceptor . sum mar ise Request ( executions ) ĊĠĠĠĠĠĠĠ Ġreturn ĠLogging Summary Interceptor . create Report ( request Time , Ġtotals , Ġsummar ies ) ĊĠĠĠ Ġ} Ċ }