@@ -6,20 +6,32 @@ import { isHTTPError } from "@openally/httpie";
66
77// Import Internal Dependencies
88import { SystemDateProvider , type DateProvider } from "./DateProvider.class.ts" ;
9- import type { LoggerEventsMap } from "./logger.class.ts" ;
9+ import { type LoggerEventsMap , Logger } from "./logger.class.ts" ;
1010import type { ApiStats , Stats , Error } from "../types.ts" ;
1111
12+ export type Providers = {
13+ dateProvider ?: DateProvider ;
14+ logger ?: EventEmitter < LoggerEventsMap > ;
15+ } ;
16+
17+ export type Options = {
18+ isVerbose : boolean ;
19+ } ;
20+
1221export class StatsCollector {
1322 #logger: EventEmitter < LoggerEventsMap > ;
1423 #dateProvider: DateProvider ;
1524 #apiCalls: ApiStats [ ] = [ ] ;
1625 #startedAt: number ;
1726 #errors: Error [ ] = [ ] ;
27+ #isVerbose: boolean ;
1828
19- constructor ( logger : EventEmitter < LoggerEventsMap > , dateProvider : DateProvider = new SystemDateProvider ( ) ) {
29+ constructor ( providers : Providers , options : Options ) {
30+ const { dateProvider = new SystemDateProvider ( ) , logger = new Logger ( ) } = providers ;
2031 this . #logger = logger ;
2132 this . #dateProvider = dateProvider ;
2233 this . #startedAt = this . #dateProvider. now ( ) ;
34+ this . #isVerbose = options . isVerbose ;
2335 }
2436
2537 track < T extends ( ) => any > ( name : string , phase : string , fn : T ) : ReturnType < T > {
@@ -29,7 +41,7 @@ export class StatsCollector {
2941 if ( result instanceof Promise ) {
3042 return result
3143 . then ( ( res : ReturnType < T > ) => {
32- this . #addApiStat ( name , startedAt , this . #calcExecutionTime( startedAt ) ) ;
44+ this . #addApiStatVerbose ( name , startedAt , this . #calcExecutionTime( startedAt ) ) ;
3345
3446 return res ;
3547 } )
@@ -38,19 +50,26 @@ export class StatsCollector {
3850 this . #addError( {
3951 name, err, executionTime, phase
4052 } ) ;
41- this . #addApiStat( name , startedAt , executionTime ) ;
42-
53+ this . #apiCalls. push ( {
54+ name,
55+ startedAt,
56+ executionTime
57+ } ) ;
4358 throw err ;
4459 } ) as ReturnType < T > ;
4560 }
4661
47- this . #addApiStat ( name , startedAt , this . #calcExecutionTime( startedAt ) ) ;
62+ this . #addApiStatVerbose ( name , startedAt , this . #calcExecutionTime( startedAt ) ) ;
4863
4964 return result ;
5065 }
5166 catch ( err ) {
5267 const executionTime = this . #calcExecutionTime( startedAt ) ;
53- this . #addApiStat( name , startedAt , executionTime ) ;
68+ this . #apiCalls. push ( {
69+ name,
70+ startedAt,
71+ executionTime
72+ } ) ;
5473 this . #addError( {
5574 name, err, executionTime, phase
5675 } ) ;
@@ -62,12 +81,16 @@ export class StatsCollector {
6281 return this . #dateProvider. now ( ) - startedAt ;
6382 }
6483
65- #addApiStat ( name : string , startedAt : number , executionTime : number ) {
66- this . #apiCalls . push ( {
84+ #addApiStatVerbose ( name : string , startedAt : number , executionTime : number ) {
85+ const stat = {
6786 name,
6887 startedAt,
6988 executionTime
70- } ) ;
89+ } ;
90+ this . #apiCalls. push ( stat ) ;
91+ if ( this . #isVerbose) {
92+ this . #logger. emit ( "stat" , stat ) ;
93+ }
7194 }
7295
7396 #addError( params : {
0 commit comments