// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ @ file : Suppress (" unused ", Ġ" D uplicated Code ", Ġ" Hard Coded StringLiteral ") Ċ Ċ package Ġcom . intellij . util . indexing . diagnostic . presentation Ċ Ċ import Ġcom . intellij . openapi . util . text . Html Builder Ċ import Ġcom . intellij . openapi . util . text . Html Chunk Ċ import Ġcom . intellij . openapi . util . text . Html Chunk .* Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . util . indexing . diagnostic . Index Diagnostic Dump er Ċ import Ġcom . intellij . util . indexing . diagnostic . dto .* Ċ import Ġorg . jetbrains . annotations . N ls Ċ Ċ fun Ġcreate Aggregate Html ( ĊĠ ĠprojectName : ĠString , ĊĠ Ġdiagnostics : ĠList < Index Diagnostic Dump er . Existing Diagnostic > Ċ ): ĠString Ġ{ ĊĠ Ġval Ġapp Info Ġ= ĠJson Index Diagnostic App Info . create () ĊĠ Ġval Ġruntime Info Ġ= ĠJson Runtime Info . create () ĊĠ Ġreturn Ġhtml Ġ{ ĊĠĠĠ Ġbody Ġ{ ĊĠĠĠĠĠ Ġh 1 (" Project Ġname ") ĊĠĠĠĠĠ Ġtext ( projectName ) ĊĊĠĠĠĠĠ Ġprint App Info ( app Info ) ĊĠĠĠĠĠ Ġprint Runtime Info ( runtime Info ) ĊĊĠĠĠĠĠ Ġh 1 (" Indexing Ġhistory ") ĊĠĠĠĠĠ Ġtable Ġ{ ĊĠĠĠĠĠĠĠ Ġthead Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġth (" Started "); Ġth (" Total Ġduration "); Ġth (" Sc anning Ġduration "); Ġth (" Indexing Ġduration "); Ġth (" Details ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtbody Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( diagnostic Ġin Ġdiagnostics . sorted By Descending Ġ{ Ġit . indexing Times . updating Start . instant Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( diagnostic . indexing Times . updating Start . present able DateTime ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( diagnostic . indexing Times . total Updating Time . present able Duration ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( diagnostic . indexing Times . scan Files Time . present able Duration ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( diagnostic . indexing Times . indexing Time . present able Duration ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink ( diagnostic . html File . fileName . toString (), Ġ" details ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ}. toString () Ċ } Ċ Ċ private Ġfun ĠHtml Builder . print Runtime Info ( runtime Info : ĠJson Runtime Info ) Ġ{ ĊĠ Ġh 1 (" Runtime ") ĊĠ Ġtable Ġ{ ĊĠĠĠ Ġthead Ġ{ ĊĠĠĠĠĠ Ġtr Ġ{ Ġth (" Name "); Ġth (" Value ") Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġtbody Ġ{ ĊĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Max Ġmemory "); Ġtd ( StringUtil . format FileSize ( runtime Info . max Memory )) Ġ} ĊĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Number Ġof Ġprocessors "); Ġtd ( runtime Info . numberOf Processors . toString ()) Ġ} ĊĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Max Ġnumber Ġof Ġindexing Ġthreads "); Ġtd ( runtime Info . max NumberOf Indexing Threads . toString ()) Ġ} ĊĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Max Ġsize Ġof Ġfile Ġfor Ġanalysis "); Ġtd ( StringUtil . format FileSize ( runtime Info . maxSize Of File For Int elli Sense . to Long ())) Ġ} ĊĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠ Ġtd (" Max Ġsize Ġof Ġfile Ġfor Ġcontent Ġloading "); Ġtd ( StringUtil . format FileSize ( runtime Info . maxSize Of File For Content Loading . to Long ())) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠHtml Builder . print App Info ( app Info : ĠJson Index Diagnostic App Info ) Ġ{ ĊĠ Ġh 1 (" Application Ġinfo ") ĊĠ Ġtable Ġ{ ĊĠĠĠ Ġthead Ġ{ ĊĠĠĠĠĠ Ġtr Ġ{ Ġth (" Name "); Ġth (" Value ") Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġtbody Ġ{ ĊĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Build "); Ġtd ( app Info . build ) Ġ} ĊĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Build Ġdate "); Ġtd ( app Info . build Date . present able DateTime ()) Ġ} ĊĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Product Ġcode "); Ġtd ( app Info . product Code ) Ġ} ĊĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Generated "); Ġtd ( app Info . generated . present able DateTime ()) Ġ} ĊĠĠĠĠĠ Ġtr Ġ{ Ġtd (" OS "); Ġtd ( app Info . os ) Ġ} ĊĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Runtime "); Ġtd ( app Info . runtime ) Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun ĠJson Index Diagnostic . generate Html (): ĠString Ġ{ ĊĠ Ġreturn Ġhtml Ġ{ ĊĠĠĠ Ġbody Ġ{ ĊĠĠĠĠĠ Ġh 1 (" Project Ġname ") ĊĠĠĠĠĠ Ġtext ( project Indexing History . projectName ) ĊĊĠĠĠĠĠ Ġprint App Info ( app Info ) ĊĠĠĠĠĠ Ġprint Runtime Info ( runtime Info ) ĊĊĠĠĠĠĠ Ġh 1 (" Indexing Ġinfo ") ĊĠĠĠĠĠ Ġtable Ġ{ ĊĠĠĠĠĠĠĠ Ġthead Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġth (" Name "); Ġth (" Time ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtbody Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Number Ġof Ġfile Ġproviders "); Ġtd ( project Indexing History . sc anning Statistics . size . toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Number Ġof Ġscanned Ġfiles "); Ġtd ( project Indexing History . sc anning Statistics . sum By Ġ{ Ġit . numberOf Sc anned Files Ġ}. toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Number Ġof Ġfiles Ġindexed Ġby Ġinfrastructure Ġextensions Ġduring Ġthe Ġscan Ġ( without Ġloading Ġcontent )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( project Indexing History . sc anning Statistics . map Ġ{ Ġit . numberOf Files Fully Indexed By Infrastructure Extensions Ġ}. sum (). toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Number Ġof Ġfiles Ġsent Ġto Ġthe Ġindexing Ġstage Ġafter Ġscanning Ġ( to Ġload Ġfile Ġcontent Ġand Ġindex )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( project Indexing History . sc anning Statistics . sum By Ġ{ Ġit . numberOf Files For Indexing Ġ}. toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Number Ġof Ġfiles Ġindexed Ġby Ġinfrastructure Ġextensions Ġduring Ġthe Ġindexing Ġstage Ġ( with Ġloading Ġcontent )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( project Indexing History . file Provider Statistics . map Ġ{ Ġit . total NumberOf Files Fully Indexed By Extensions Ġ}. sum (). toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Number Ġof Ġfiles Ġindexed Ġduring Ġthe Ġindexing Ġstage Ġwith Ġloading Ġcontent Ġ( including Ġindexed Ġby Ġinfrastructure Ġextension )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( project Indexing History . file Provider Statistics . map Ġ{ Ġit . total NumberOf Indexed Files Ġ}. sum (). toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Number Ġof Ġtoo Ġlarge Ġfor Ġindexing Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( project Indexing History . file Provider Statistics . sum By Ġ{ Ġit . numberOf Too Large For Indexing Files Ġ}. toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġval Ġtimes Ġ= Ġproject Indexing History . times ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Total Ġupdating Ġtime "); Ġtd ( times . total Updating Time . present able Duration ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Inter rupted "); Ġtd ( times . was Inter rupted . toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Started Ġat "); Ġtd ( times . updating Start . present able DateTime ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Finished Ġat "); Ġtd ( times . updating End . present able DateTime ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Sus pended Ġtime "); Ġtd ( times . total Sus pended Time . present able Duration ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Indexing Ġtime "); Ġtd ( times . indexing Time . present able Duration ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Sc anning Ġtime "); Ġtd ( times . scan Files Time . present able Duration ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Push ing Ġproperties Ġtime "); Ġtd ( times . push Properties Time . present able Duration ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ Ġtd (" Running Ġextensions Ġtime "); Ġtd ( times . index Extensions Time . present able Duration ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġh 1 (" Statistics Ġper Ġfile Ġtype ") ĊĠĠĠĠĠ Ġtable Ġ{ ĊĠĠĠĠĠĠĠ Ġthead Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" File Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Number Ġof Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Part Ġof Ġtotal Ġindexing Ġtime ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Part Ġof Ġtotal Ġcontent Ġloading Ġtime ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Total Ġfiles Ġsize ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Indexing Ġspeed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" The Ġbiggest Ġcontributors ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtbody Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( stats Per FileType Ġin Ġproject Indexing History . total Stats Per FileType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per FileType . fileType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per FileType . total NumberOf Files . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per FileType . part Of Total Indexing Time . present able Percent ages ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per FileType . part Of Total Content Loading Time . present able Percent ages ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per FileType . total Files Size . present able Size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per FileType . indexing Speed . present able Speed ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstats Per FileType . big gest Contribut ors . join ToString ("\ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . part Of Total Indexing Time Of This FileType . present able Percent ages () Ġ+ Ġ": Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . provider Name Ġ+ Ġ" Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . numberOf Files Ġ+ Ġ" Ġfiles Ġof Ġtotal Ġsize Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . total Files Size . present able Size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġh 1 (" Statistics Ġper Ġindexer ") ĊĠĠĠĠĠ Ġtable Ġ{ ĊĠĠĠĠĠĠĠ Ġthead Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Index ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Number Ġof Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Part Ġof Ġtotal Ġindexing Ġtime ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Total Ġnumber Ġof Ġfiles Ġindexed Ġby Ġextensions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Total Ġfiles Ġsize ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Indexing Ġspeed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Snapshot Ġinput Ġmapping Ġstatistics ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtbody Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( stats Per Indexer Ġin Ġproject Indexing History . total Stats Per Indexer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per Indexer . index Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per Indexer . total NumberOf Files . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per Indexer . part Of Total Indexing Time . present able Percent ages ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per Indexer . total NumberOf Files Indexed By Extensions . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per Indexer . total Files Size . present able Size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per Indexer . indexing Speed . present able Speed ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠJson Project Indexing History . Json Stats Per Indexer . Json Snapshot Input Mapping Stats . present able (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhits Percent ages Ġ= ĠJson Percent ages ( total Hits , Ġtotal Requests ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmis ses Percent ages Ġ= ĠJson Percent ages ( total Mis ses , Ġtotal Requests ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" requests : Ġ$ total Requests , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hits : Ġ$ total Hits Ġ(${ hits Percent ages . present able Percent ages ()} ), Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mis ses : Ġ$ total Mis ses Ġ(${ mis ses Percent ages . present able Percent ages () })" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( stats Per Indexer . snapshot Input Mapping Stats . present able ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġshould Print Sc anned Files Ġ= Ġproject Indexing History . sc anning Statistics . any Ġ{ Ġit . sc anned Files . or Empty (). isNotEmpty () Ġ} ĊĠĠĠĠĠ Ġh 1 (" Sc anning ") ĊĠĠĠĠĠ Ġtable Ġ{ ĊĠĠĠĠĠĠĠ Ġthead Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Provider Ġname ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Number Ġof Ġscanned Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Number Ġof Ġfiles Ġscheduled Ġfor Ġindexing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Number Ġof Ġfiles Ġfully Ġindexed Ġby Ġinfrastructure Ġextensions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Number Ġof Ġdouble - sc anned Ġskipped Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Sc anning Ġtime ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Time Ġprocessing Ġup - to - date Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Time Ġupdating Ġcontent - less Ġindexes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Time Ġindexing Ġwithout Ġcontent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Print Sc anned Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Sc anned Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtbody Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sc anning Stats Ġin Ġproject Indexing History . sc anning Statistics ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( sc anning Stats . provider Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( sc anning Stats . numberOf Sc anned Files . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( sc anning Stats . numberOf Files For Indexing . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( sc anning Stats . numberOf Files Fully Indexed By Infrastructure Extensions . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( sc anning Stats . numberOf Skipped Files . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( sc anning Stats . sc anning Time . present able Duration ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( sc anning Stats . time Processing Up ToDate Files . present able Duration ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( sc anning Stats . time Updating Content Less Indexes . present able Duration ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( sc anning Stats . time Indexing Without Content . present able Duration ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Print Sc anned Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextarea Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscanning Stats . sc anned Files . or Empty (). join ToString ("\ n ") Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . path . present able Path Ġ+ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . was Fully Indexed By Infrastructure Extension Ġ-> Ġ" Ġ[ by Ġinfrastructure ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . is Up ToDate Ġ-> Ġ" Ġ[ up - to - date ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġshould Print Indexed Files Ġ= Ġproject Indexing History . file Provider Statistics . any Ġ{ Ġit . indexed Files . or Empty (). isNotEmpty () Ġ} ĊĠĠĠĠĠ Ġh 1 (" Indexing Ġwith Ġcontent ") ĊĠĠĠĠĠ Ġtable Ġ{ ĊĠĠĠĠĠĠĠ Ġthead Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Provider Ġname ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Total Ġindexing Ġtime ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Number Ġof Ġindexed Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Number Ġof Ġfiles Ġindexed Ġby Ġinfrastructure Ġextensions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Number Ġof Ġtoo Ġlarge Ġfor Ġindexing Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Print Indexed Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġth (" Indexed Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtbody Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( provider Stats Ġin Ġproject Indexing History . file Provider Statistics ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( provider Stats . provider Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( provider Stats . total Indexing Time . present able Duration ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( provider Stats . total NumberOf Indexed Files . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( provider Stats . total NumberOf Files Fully Indexed By Extensions . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( provider Stats . numberOf Too Large For Indexing Files . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Print Indexed Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextarea Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Text ( provider Stats . indexed Files . or Empty (). join ToString ("\ n ") Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . path . present able Path Ġ+ Ġif Ġ( file . was Fully Indexed By Extensions ) Ġ" Ġ[ by Ġinfrastructure ]" Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ}. toString () Ċ } Ċ Ċ private Ġfun Ġcreate Tag ( body : ĠHtml Builder . () Ġ-> ĠUnit , Ġtag : ĠElement ): ĠElement Ġ{ ĊĠ Ġval Ġtag Builder Ġ= ĠHtml Builder () ĊĠ Ġtag Builder . body () ĊĠ Ġreturn Ġtag Builder . to Fragment (). wrap With ( tag ) Ċ } Ċ Ċ private Ġfun ĠHtml Builder . text (@ N ls Ġtext : ĠString ) Ġ= Ġappend ( text ) Ċ private Ġfun ĠHtml Builder . raw Text (@ N ls Ġtext : ĠString ) Ġ= Ġappend Raw ( text ) Ċ Ċ private Ġin fix Ġoperator Ġfun ĠHtml Builder . plus (@ N ls Ġtext : ĠString ): ĠHtml Builder Ġ= Ġtext ( text ) Ċ private Ġfun ĠHtml Builder . h 1 (@ N ls Ġtitle : ĠString ) Ġ= Ġappend ( Html Chunk . text ( title ). wrap With ( tag (" h 1 "))) Ċ Ċ private Ġfun ĠHtml Builder . table ( body : ĠHtml Builder . () Ġ-> ĠUnit ) Ġ= Ġappend ( create Tag ( body , Ġtag (" table "))) Ċ private Ġfun ĠHtml Builder . thead ( body : ĠHtml Builder . () Ġ-> ĠUnit ) Ġ= Ġappend ( create Tag ( body , Ġtag (" thead "))) Ċ private Ġfun ĠHtml Builder . tbody ( body : ĠHtml Builder . () Ġ-> ĠUnit ) Ġ= Ġappend ( create Tag ( body , Ġtag (" tbody "))) Ċ private Ġfun ĠHtml Builder . tr ( body : ĠHtml Builder . () Ġ-> ĠUnit ) Ġ= Ġappend ( create Tag ( body , Ġtag (" tr "))) Ċ private Ġfun ĠHtml Builder . th ( body : ĠHtml Builder . () Ġ-> ĠUnit ) Ġ= Ġappend ( create Tag ( body , Ġtag (" th "))) Ċ private Ġfun ĠHtml Builder . th (@ N ls Ġtext : ĠString ) Ġ= Ġth Ġ{ Ġtext ( text ) Ġ} Ċ private Ġfun ĠHtml Builder . td ( body : ĠHtml Builder . () Ġ-> ĠUnit ) Ġ= Ġappend ( create Tag ( body , Ġtag (" td "))) Ċ private Ġfun ĠHtml Builder . td (@ N ls Ġtext : ĠString ) Ġ= Ġtd Ġ{ Ġtext ( text ) Ġ} Ċ Ċ private Ġfun ĠHtml Builder . textarea ( ĊĠ Ġcolumns : ĠInt Ġ= Ġ 7 5 , ĊĠ Ġrows : ĠInt Ġ= Ġ 1 0 , ĊĠ Ġbody : ĠHtml Builder . () Ġ-> ĠUnit Ċ ) Ġ= Ġappend ( ĊĠ Ġcreate Tag ( ĊĠĠĠ Ġbody , ĊĠĠĠ Ġtag (" textarea ") ĊĠĠĠĠĠ Ġ. attr (" cols ", Ġcolumns ) ĊĠĠĠĠĠ Ġ. attr (" rows ", Ġrows ) ĊĠĠĠĠĠ Ġ. attr (" readonly ", Ġ" true ") ĊĠĠĠĠĠ Ġ. attr (" placeholder ", Ġ" empty ") ĊĠĠĠĠĠ Ġ. attr (" style ", Ġ" white - space : Ġpre ; ") ĊĠ Ġ)) Ċ Ċ private Ġfun ĠHtml Builder . textarea (@ N ls Ġtext : ĠString ) Ġ= Ġtextarea Ġ{ Ġraw Text ( text ) Ġ} Ċ Ċ private Ġfun ĠHtml Builder . link ( target : ĠString , Ġtext : ĠString ) Ġ= Ġappend ( Html Builder (). append Link ( target , Ġtext )) Ċ private Ġfun ĠHtml Builder . div ( body : ĠHtml Builder . () Ġ-> ĠUnit ) Ġ= Ġappend ( create Tag ( body , Ġdiv ())) Ċ private Ġfun ĠHtml Builder . body ( body : ĠHtml Builder . () Ġ-> ĠUnit ) Ġ= Ġappend ( create Tag ( body , ĠHtml Chunk . body ())) Ċ private Ġfun ĠHtml Builder . html ( body : ĠHtml Builder . () Ġ-> ĠUnit ) Ġ= Ġcreate Tag ( body , Ġhtml ()) Ċ private Ġfun Ġhtml ( body : ĠHtml Builder . () Ġ-> ĠUnit ) Ġ= ĠHtml Builder (). html ( body )