@@ -5,11 +5,13 @@ import { DefaultSettings, EditorSettings } from '../settings/Settings';
55import { LoggerFactory } from '../telemetry/LoggerFactory' ;
66import { ScopedTelemetry } from '../telemetry/ScopedTelemetry' ;
77import { Telemetry } from '../telemetry/TelemetryDecorator' ;
8+ import { Closeable } from '../utils/Closeable' ;
89import { Delayer } from '../utils/Delayer' ;
10+ import { byteSize } from '../utils/String' ;
911import { CloudFormationFileType , Document , DocumentType } from './Document' ;
1012import { DocumentMetadata } from './DocumentProtocol' ;
1113
12- export class DocumentManager implements SettingsConfigurable {
14+ export class DocumentManager implements SettingsConfigurable , Closeable {
1315 private readonly log = LoggerFactory . getLogger ( DocumentManager ) ;
1416
1517 @Telemetry ( ) private readonly telemetry ! : ScopedTelemetry ;
@@ -19,6 +21,7 @@ export class DocumentManager implements SettingsConfigurable {
1921 private readonly documentMap = new Map < string , Document > ( ) ;
2022
2123 private settingsSubscription ?: SettingsSubscription ;
24+ private readonly interval : NodeJS . Timeout ;
2225
2326 constructor (
2427 private readonly documents : TextDocuments < TextDocument > ,
@@ -27,6 +30,9 @@ export class DocumentManager implements SettingsConfigurable {
2730 } ,
2831 ) {
2932 this . registerDocumentGauges ( ) ;
33+ this . interval = setInterval ( ( ) => {
34+ this . emitDocSizeMetrics ( ) ;
35+ } , 30 * 1000 ) ;
3036 }
3137
3238 configure ( settingsManager : ISettingsSubscriber ) : void {
@@ -157,6 +163,12 @@ export class DocumentManager implements SettingsConfigurable {
157163 }
158164 }
159165
166+ private emitDocSizeMetrics ( ) {
167+ for ( const doc of this . documentMap . values ( ) ) {
168+ this . telemetry . histogram ( `documents.size.bytes` , byteSize ( doc . contents ( ) ) , { unit : 'By' } ) ;
169+ }
170+ }
171+
160172 private countDocumentsByCfnType ( cfnType : CloudFormationFileType ) : number {
161173 return [ ...this . documentMap . values ( ) ] . filter ( ( doc ) => doc . cfnFileType === cfnType ) . length ;
162174 }
@@ -168,4 +180,8 @@ export class DocumentManager implements SettingsConfigurable {
168180 private countDocumentsByExtension ( extension : string ) : number {
169181 return [ ...this . documentMap . values ( ) ] . filter ( ( doc ) => doc . isTemplate ( ) && doc . extension === extension ) . length ;
170182 }
183+
184+ close ( ) {
185+ clearInterval ( this . interval ) ;
186+ }
171187}
0 commit comments