@@ -24,6 +24,30 @@ interface ISource {
2424 dependencies : DependencyReport [ ] ;
2525}
2626
27+ export interface ResponseMetrics {
28+ scanned : {
29+ total : number ,
30+ direct : number ,
31+ transitive : number
32+ } ,
33+ providers : {
34+ [ providers : string ] : {
35+ [ sources : string ] : {
36+ total : number ,
37+ direct : number ,
38+ transitive : number ,
39+ dependencies : number ,
40+ critical : number ,
41+ high : number ,
42+ medium : number ,
43+ low : number ,
44+ remediations : number ,
45+ recommendations : number ,
46+ }
47+ }
48+ }
49+ }
50+
2751/**
2852 * Implementation of IDependencyData interface.
2953 */
@@ -37,32 +61,45 @@ class DependencyData {
3761 ) { }
3862}
3963
40- /**
41- * Represents the parsed response of Red Hat Dependency Analytics (RHDA) analysis, with dependencies mapped by reference string.
42- */
43- interface IAnalysisResponse {
44- dependencies : Map < string , DependencyData [ ] > ;
45- }
46-
47- /**
48- * Implementation of IAnalysisResponse interface.
49- */
50- class AnalysisResponse implements IAnalysisResponse {
64+ class AnalysisResponse {
65+ metrics : ResponseMetrics = {
66+ scanned : {
67+ total : 0 ,
68+ direct : 0 ,
69+ transitive : 0
70+ } ,
71+ providers : { }
72+ } ;
5173 dependencies : Map < string , DependencyData [ ] > = new Map < string , DependencyData [ ] > ( ) ;
5274 provider : IDependencyProvider ;
5375
5476 constructor ( resData : AnalysisReport , diagnosticFilePath : Uri , provider : IDependencyProvider ) {
55-
5677 this . provider = provider ;
5778 const failedProviders : string [ ] = [ ] ;
5879 const sources : ISource [ ] = [ ] ;
5980
6081 if ( isDefined ( resData , 'providers' ) ) {
6182 Object . entries ( resData . providers ) . map ( ( [ providerName , providerData ] ) => {
83+ this . metrics . providers [ providerName ] = { } ;
6284 if ( isDefined ( providerData , 'status' , 'ok' ) && providerData . status . ok ) {
6385 if ( isDefined ( providerData , 'sources' ) ) {
6486 Object . entries ( providerData . sources ) . map ( ( [ sourceName , sourceData ] ) => {
6587 sources . push ( { id : `${ providerName } (${ sourceName } )` , dependencies : this . getDependencies ( sourceData ) } ) ;
88+
89+ if ( isDefined ( sourceData , 'summary' ) ) {
90+ this . metrics . providers [ providerName ] [ sourceName ] = {
91+ dependencies : sourceData . summary . dependencies ?? 0 ,
92+ direct : sourceData . summary . direct ?? 0 ,
93+ transitive : sourceData . summary . transitive ?? 0 ,
94+ critical : sourceData . summary . critical ?? 0 ,
95+ high : sourceData . summary . high ?? 0 ,
96+ medium : sourceData . summary . dependencies ?? 0 ,
97+ low : sourceData . summary . low ?? 0 ,
98+ recommendations : sourceData . summary . recommendations ?? 0 ,
99+ remediations : sourceData . summary . remediations ?? 0 ,
100+ total : sourceData . summary . total ?? 0 ,
101+ } ;
102+ }
66103 } ) ;
67104 }
68105 } else {
@@ -97,6 +134,14 @@ class AnalysisResponse implements IAnalysisResponse {
97134 } ) ;
98135 } ) ;
99136 }
137+
138+ if ( isDefined ( resData , 'scanned' ) ) {
139+ this . metrics . scanned = {
140+ direct : resData . scanned . direct ?? 0 ,
141+ total : resData . scanned . total ?? 0 ,
142+ transitive : resData . scanned . transitive ?? 0 ,
143+ } ;
144+ }
100145 }
101146
102147 /**
0 commit comments