1
1
import { ResourcePerformance } from './resourcePerformance' ;
2
2
import { Resource } from 'src/models/Resource' ;
3
-
3
+ import { clearStorageFiles } from './helper' ;
4
4
export class ResourcePerformanceManager {
5
5
private static _instance : ResourcePerformanceManager ;
6
6
private static _initialized : boolean = false ;
7
7
private static _initializing : boolean = false ;
8
8
9
+ private actionIdx : number = 0 ;
10
+
9
11
private resources : Resource [ ] = [ ] ;
10
12
private resourcePerformances : {
11
13
[ resourceSlug : string ] : ResourcePerformance ;
@@ -27,49 +29,69 @@ export class ResourcePerformanceManager {
27
29
if ( ResourcePerformanceManager . _initializing ) {
28
30
return ;
29
31
}
30
- console . time ( 'ResourcePerformanceManager.initialize' ) ;
32
+ console . time (
33
+ `ResourcePerformanceManager.initialize - op# ${ this . actionIdx } `
34
+ ) ;
31
35
ResourcePerformanceManager . _initializing = true ;
32
36
await this . initializeResources ( resources , false ) ;
33
37
ResourcePerformanceManager . _initialized = true ;
34
38
ResourcePerformanceManager . _initializing = false ;
35
- console . timeEnd ( 'ResourcePerformanceManager.initialize' ) ;
39
+ console . timeEnd (
40
+ `ResourcePerformanceManager.initialize - op# ${ this . actionIdx } `
41
+ ) ;
42
+ this . actionIdx ++ ;
36
43
}
37
44
38
- private async initializeResources (
39
- resources : Resource [ ] ,
40
- hardInitialize : boolean
41
- ) {
42
- this . resources = resources ;
43
- for ( const resource of this . resources ) {
44
- // if (resource.slug != 'ethereum-gas') {
45
- // continue;
46
- // }
47
- this . resourcePerformances [ resource . slug ] = new ResourcePerformance (
48
- resource
49
- ) ;
50
- if ( hardInitialize ) {
51
- console . log (
52
- `ResourcePerformanceManager Hard initializing resource ${ resource . slug } `
53
- ) ;
54
- await this . resourcePerformances [ resource . slug ] . hardInitialize ( ) ;
55
- } else {
56
- console . log (
57
- `ResourcePerformanceManager Soft initializing resource ${ resource . slug } `
58
- ) ;
59
- await this . resourcePerformances [ resource . slug ] . softInitialize ( ) ;
60
- }
61
- console . log ( `ResourcePerformanceManager Resource ${ resource . slug } done` ) ;
45
+ public async hardRefreshResource ( resourceSlug : string ) {
46
+ console . log (
47
+ `ResourcePerformanceManager Hard Refresh Resource ${ resourceSlug } - op# ${ this . actionIdx } `
48
+ ) ;
49
+ const resource = this . resources . find ( ( r ) => r . slug === resourceSlug ) ;
50
+ if ( ! resource ) {
51
+ throw new Error ( `Resource ${ resourceSlug } not found` ) ;
52
+ }
53
+ await this . updateResourceCache ( resource , true , 'refresh' ) ;
54
+ console . log (
55
+ `ResourcePerformanceManager Hard Refresh Resource ${ resourceSlug } done - op# ${ this . actionIdx } `
56
+ ) ;
57
+ this . actionIdx ++ ;
58
+ }
59
+
60
+ public async softRefreshResource ( resourceSlug : string ) {
61
+ console . log (
62
+ `ResourcePerformanceManager Soft Refresh Resource ${ resourceSlug } - op# ${ this . actionIdx } `
63
+ ) ;
64
+ const resource = this . resources . find ( ( r ) => r . slug === resourceSlug ) ;
65
+ if ( ! resource ) {
66
+ throw new Error ( `Resource ${ resourceSlug } not found` ) ;
62
67
}
68
+ await this . updateResourceCache ( resource , false , 'refresh' ) ;
69
+ console . log (
70
+ `ResourcePerformanceManager Soft Refresh Resource ${ resourceSlug } done - op# ${ this . actionIdx } `
71
+ ) ;
72
+ this . actionIdx ++ ;
63
73
}
64
74
65
- public async hardRefresh ( resources : Resource [ ] ) {
66
- console . log ( 'ResourcePerformanceManager Hard Refresh' ) ;
75
+ public async hardRefreshAllResources ( resources : Resource [ ] ) {
76
+ console . log (
77
+ `ResourcePerformanceManager Hard Refresh All Resources - op# ${ this . actionIdx } `
78
+ ) ;
67
79
await this . initializeResources ( resources , true ) ;
80
+ console . log (
81
+ `ResourcePerformanceManager Hard Refresh All Resources done - op# ${ this . actionIdx } `
82
+ ) ;
83
+ this . actionIdx ++ ;
68
84
}
69
85
70
- public async softRefresh ( resources : Resource [ ] ) {
71
- console . log ( 'ResourcePerformanceManager Soft Refresh' ) ;
86
+ public async softRefreshAllResources ( resources : Resource [ ] ) {
87
+ console . log (
88
+ `ResourcePerformanceManager Soft Refresh All Resources - op# ${ this . actionIdx } `
89
+ ) ;
72
90
await this . initializeResources ( resources , false ) ;
91
+ console . log (
92
+ `ResourcePerformanceManager Soft Refresh All Resources done - op# ${ this . actionIdx } `
93
+ ) ;
94
+ this . actionIdx ++ ;
73
95
}
74
96
75
97
public getResourcePerformance ( resourceSlug : string ) {
@@ -107,4 +129,53 @@ export class ResourcePerformanceManager {
107
129
}
108
130
return this . resourcePerformances ;
109
131
}
132
+
133
+ private async initializeResources (
134
+ resources : Resource [ ] ,
135
+ hardInitialize : boolean
136
+ ) {
137
+ // Clean up existing resource performances
138
+ // await Promise.all(
139
+ // Object.values(this.resourcePerformances).map(async (rp) => {
140
+ // await rp.cleanup(); // TODO implement this method in ResourcePerformance class. It should stop (using AbortController) any running process (db or fs)
141
+ // })
142
+ // );
143
+
144
+ // Remove files from disk (hard init will recreate them)
145
+ if ( hardInitialize ) {
146
+ await clearStorageFiles ( ) ;
147
+ }
148
+
149
+ // Get rid of existing resource performances and start fresh
150
+ this . resourcePerformances = { } ;
151
+
152
+ this . resources = resources ;
153
+ for ( const resource of this . resources ) {
154
+ this . resourcePerformances [ resource . slug ] = new ResourcePerformance (
155
+ resource
156
+ ) ;
157
+ await this . updateResourceCache ( resource , hardInitialize , 'initialize' ) ;
158
+ console . log (
159
+ `ResourcePerformanceManager Initialize Resource ${ resource . slug } done - op# ${ this . actionIdx } `
160
+ ) ;
161
+ }
162
+ }
163
+
164
+ private async updateResourceCache (
165
+ resource : Resource ,
166
+ hardInitialize : boolean ,
167
+ logMode : 'initialize' | 'refresh'
168
+ ) {
169
+ if ( hardInitialize ) {
170
+ console . log (
171
+ `ResourcePerformanceManager Hard ${ logMode } resource ${ resource . slug } `
172
+ ) ;
173
+ await this . resourcePerformances [ resource . slug ] . hardInitialize ( ) ;
174
+ } else {
175
+ console . log (
176
+ `ResourcePerformanceManager Soft ${ logMode } resource ${ resource . slug } `
177
+ ) ;
178
+ await this . resourcePerformances [ resource . slug ] . softInitialize ( ) ;
179
+ }
180
+ }
110
181
}
0 commit comments