@@ -3,13 +3,16 @@ import {
33 Breadcrumb ,
44 BreadcrumbLogLevel ,
55 BreadcrumbsStorage ,
6+ BreadcrumbsStorageFactory ,
7+ BreadcrumbsStorageLimits ,
68 BreadcrumbType ,
79 jsonEscaper ,
810 RawBreadcrumb ,
911 SessionFiles ,
1012 TimeHelper ,
1113} from '@backtrace/sdk-core' ;
1214import path from 'path' ;
15+ import { Readable } from 'stream' ;
1316import { BacktraceFileAttachment } from '../attachment' ;
1417import { AlternatingFileWriter } from '../common/AlternatingFileWriter' ;
1518import { NodeFileSystem } from '../storage/interfaces/NodeFileSystem' ;
@@ -28,14 +31,15 @@ export class FileBreadcrumbsStorage implements BreadcrumbsStorage {
2831 constructor (
2932 private readonly _mainFile : string ,
3033 private readonly _fallbackFile : string ,
31- fileSystem : NodeFileSystem ,
32- maximumBreadcrumbs : number ,
34+ private readonly _fileSystem : NodeFileSystem ,
35+ private readonly _limits : BreadcrumbsStorageLimits ,
3336 ) {
3437 this . _writer = new AlternatingFileWriter (
38+ _fileSystem ,
3539 _mainFile ,
3640 _fallbackFile ,
37- Math . floor ( maximumBreadcrumbs / 2 ) ,
38- fileSystem ,
41+ Math . floor ( ( this . _limits . maximumBreadcrumbs ?? 100 ) / 2 ) ,
42+ this . _limits . maximumBreadcrumbsSize ,
3943 ) ;
4044 }
4145
@@ -52,19 +56,24 @@ export class FileBreadcrumbsStorage implements BreadcrumbsStorage {
5256 return undefined ;
5357 }
5458
55- return new FileBreadcrumbsStorage ( files [ 0 ] , files [ 1 ] , fileSystem , 1 ) ;
59+ return new FileBreadcrumbsStorage ( files [ 0 ] , files [ 1 ] , fileSystem , {
60+ maximumBreadcrumbs : 0 ,
61+ maximumBreadcrumbsSize : 0 ,
62+ } ) ;
5663 }
5764
58- public static create ( session : SessionFiles , fileSystem : NodeFileSystem , maximumBreadcrumbs : number ) {
59- const file1 = session . getFileName ( this . getFileName ( 0 ) ) ;
60- const file2 = session . getFileName ( this . getFileName ( 1 ) ) ;
61- return new FileBreadcrumbsStorage ( file1 , file2 , fileSystem , maximumBreadcrumbs ) ;
65+ public static factory ( session : SessionFiles , fileSystem : NodeFileSystem ) : BreadcrumbsStorageFactory {
66+ return ( { limits } ) => {
67+ const file1 = session . getFileName ( this . getFileName ( 0 ) ) ;
68+ const file2 = session . getFileName ( this . getFileName ( 1 ) ) ;
69+ return new FileBreadcrumbsStorage ( file1 , file2 , fileSystem , limits ) ;
70+ } ;
6271 }
6372
64- public getAttachments ( ) : BacktraceAttachment < unknown > [ ] {
73+ public getAttachments ( ) : [ BacktraceAttachment < Readable > , BacktraceAttachment < Readable > ] {
6574 return [
66- new BacktraceFileAttachment ( this . _mainFile , 'bt-breadcrumbs-0' ) ,
67- new BacktraceFileAttachment ( this . _fallbackFile , 'bt-breadcrumbs-1' ) ,
75+ new BacktraceFileAttachment ( this . _mainFile , 'bt-breadcrumbs-0' , this . _fileSystem ) ,
76+ new BacktraceFileAttachment ( this . _fallbackFile , 'bt-breadcrumbs-1' , this . _fileSystem ) ,
6877 ] ;
6978 }
7079
@@ -81,6 +90,14 @@ export class FileBreadcrumbsStorage implements BreadcrumbsStorage {
8190 } ;
8291
8392 const breadcrumbJson = JSON . stringify ( breadcrumb , jsonEscaper ( ) ) ;
93+ const jsonLength = breadcrumbJson . length + 1 ; // newline
94+ const sizeLimit = this . _limits . maximumBreadcrumbsSize ;
95+ if ( sizeLimit !== undefined ) {
96+ if ( jsonLength > sizeLimit ) {
97+ return id ;
98+ }
99+ }
100+
84101 this . _writer . writeLine ( breadcrumbJson ) ;
85102
86103 return id ;
0 commit comments