@@ -2,122 +2,123 @@ import { dbFunctions } from "~/core/database";
22import storeContainerData from "~/core/docker/store-container-stats" ;
33import storeHostData from "~/core/docker/store-host-stats" ;
44import { logger } from "~/core/utils/logger" ;
5- import type { config } from "~ /typings/database" ;
5+ import type { config } from "../../.. /typings/database" ;
66
77function convertFromMinToMs ( minutes : number ) : number {
8- return minutes * 60 * 1000 ;
8+ return minutes * 60 * 1000 ;
99}
1010
1111async function initialRun (
12- scheduleName : string ,
13- scheduleFunction : Promise < void > | void ,
14- isAsync : boolean ,
12+ scheduleName : string ,
13+ scheduleFunction : Promise < void > | void ,
14+ isAsync : boolean
1515) {
16- try {
17- if ( isAsync ) {
18- await scheduleFunction ;
19- } else {
20- scheduleFunction ;
21- }
22- logger . info ( `Startup run success for: ${ scheduleName } ` ) ;
23- } catch ( error ) {
24- logger . error ( `Startup run failed for ${ scheduleName } , ${ error as string } ` ) ;
25- }
16+ try {
17+ if ( isAsync ) {
18+ await scheduleFunction ;
19+ } else {
20+ scheduleFunction ;
21+ }
22+ logger . info ( `Startup run success for: ${ scheduleName } ` ) ;
23+ } catch ( error ) {
24+ logger . error ( `Startup run failed for ${ scheduleName } , ${ error as string } ` ) ;
25+ }
2626}
2727
2828async function scheduledJob (
29- name : string ,
30- jobFn : ( ) => Promise < void > ,
31- intervalMs : number ,
29+ name : string ,
30+ jobFn : ( ) => Promise < void > ,
31+ intervalMs : number
3232) {
33- while ( true ) {
34- const start = Date . now ( ) ;
35- logger . info ( `Task Start: ${ name } ` ) ;
36- try {
37- await jobFn ( ) ;
38- logger . info ( `Task End: ${ name } succeeded.` ) ;
39- } catch ( e ) {
40- logger . error ( `Task End: ${ name } failed:` , e ) ;
41- }
42- const elapsed = Date . now ( ) - start ;
43- const delay = Math . max ( 0 , intervalMs - elapsed ) ;
44- await new Promise ( ( r ) => setTimeout ( r , delay ) ) ;
45- }
33+ while ( true ) {
34+ const start = Date . now ( ) ;
35+ logger . info ( `Task Start: ${ name } ` ) ;
36+ try {
37+ await jobFn ( ) ;
38+ logger . info ( `Task End: ${ name } succeeded.` ) ;
39+ } catch ( e ) {
40+ logger . error ( `Task End: ${ name } failed:` , e ) ;
41+ }
42+ const elapsed = Date . now ( ) - start ;
43+ const delay = Math . max ( 0 , intervalMs - elapsed ) ;
44+ await new Promise ( ( r ) => setTimeout ( r , delay ) ) ;
45+ }
4646}
4747
4848async function setSchedules ( ) {
49- try {
50- const rawConfigData : unknown [ ] = dbFunctions . getConfig ( ) ;
51- const configData = rawConfigData [ 0 ] ;
52-
53- if (
54- ! configData ||
55- typeof ( configData as config ) . keep_data_for !== "number" ||
56- typeof ( configData as config ) . fetching_interval !== "number"
57- ) {
58- logger . error ( "Invalid configuration data:" , configData ) ;
59- throw new Error ( "Invalid configuration data" ) ;
60- }
61-
62- const { keep_data_for, fetching_interval } = configData as config ;
63-
64- if ( keep_data_for === undefined ) {
65- const errMsg = "keep_data_for is undefined" ;
66- logger . error ( errMsg ) ;
67- throw new Error ( errMsg ) ;
68- }
69-
70- if ( fetching_interval === undefined ) {
71- const errMsg = "fetching_interval is undefined" ;
72- logger . error ( errMsg ) ;
73- throw new Error ( errMsg ) ;
74- }
75-
76- logger . info (
77- `Scheduling: Fetching container statistics every ${ fetching_interval } minutes` ,
78- ) ;
79-
80- logger . info (
81- `Scheduling: Updating host statistics every ${ fetching_interval } minutes` ,
82- ) ;
83-
84- logger . info (
85- `Scheduling: Cleaning up Database every hour and deleting data older then ${ keep_data_for } days` ,
86- ) ;
87-
88- // Schedule container data fetching
89- await initialRun ( "storeContainerData" , storeContainerData ( ) , true ) ;
90- scheduledJob (
91- "storeContainerData" ,
92- storeContainerData ,
93- convertFromMinToMs ( fetching_interval ) ,
94- ) ;
95-
96- // Schedule Host statistics updates
97- await initialRun ( "storeHostData" , storeHostData ( ) , true ) ;
98- scheduledJob (
99- "storeHostData" ,
100- storeHostData ,
101- convertFromMinToMs ( fetching_interval ) ,
102- ) ;
103-
104- // Schedule database cleanup
105- await initialRun (
106- "dbFunctions.deleteOldData" ,
107- dbFunctions . deleteOldData ( keep_data_for ) ,
108- false ,
109- ) ;
110- scheduledJob (
111- "cleanupOldData" ,
112- ( ) => Promise . resolve ( dbFunctions . deleteOldData ( keep_data_for ) ) ,
113- convertFromMinToMs ( 60 ) ,
114- ) ;
115-
116- logger . info ( "Schedules have been set successfully." ) ;
117- } catch ( error ) {
118- logger . error ( "Error setting schedules:" , error ) ;
119- throw error ;
120- }
49+ logger . info ( "Starting DockStatAPI" ) ;
50+ try {
51+ const rawConfigData : unknown [ ] = dbFunctions . getConfig ( ) ;
52+ const configData = rawConfigData [ 0 ] ;
53+
54+ if (
55+ ! configData ||
56+ typeof ( configData as config ) . keep_data_for !== "number" ||
57+ typeof ( configData as config ) . fetching_interval !== "number"
58+ ) {
59+ logger . error ( "Invalid configuration data:" , configData ) ;
60+ throw new Error ( "Invalid configuration data" ) ;
61+ }
62+
63+ const { keep_data_for, fetching_interval } = configData as config ;
64+
65+ if ( keep_data_for === undefined ) {
66+ const errMsg = "keep_data_for is undefined" ;
67+ logger . error ( errMsg ) ;
68+ throw new Error ( errMsg ) ;
69+ }
70+
71+ if ( fetching_interval === undefined ) {
72+ const errMsg = "fetching_interval is undefined" ;
73+ logger . error ( errMsg ) ;
74+ throw new Error ( errMsg ) ;
75+ }
76+
77+ logger . info (
78+ `Scheduling: Fetching container statistics every ${ fetching_interval } minutes`
79+ ) ;
80+
81+ logger . info (
82+ `Scheduling: Updating host statistics every ${ fetching_interval } minutes`
83+ ) ;
84+
85+ logger . info (
86+ `Scheduling: Cleaning up Database every hour and deleting data older then ${ keep_data_for } days`
87+ ) ;
88+
89+ // Schedule container data fetching
90+ await initialRun ( "storeContainerData" , storeContainerData ( ) , true ) ;
91+ scheduledJob (
92+ "storeContainerData" ,
93+ storeContainerData ,
94+ convertFromMinToMs ( fetching_interval )
95+ ) ;
96+
97+ // Schedule Host statistics updates
98+ await initialRun ( "storeHostData" , storeHostData ( ) , true ) ;
99+ scheduledJob (
100+ "storeHostData" ,
101+ storeHostData ,
102+ convertFromMinToMs ( fetching_interval )
103+ ) ;
104+
105+ // Schedule database cleanup
106+ await initialRun (
107+ "dbFunctions.deleteOldData" ,
108+ dbFunctions . deleteOldData ( keep_data_for ) ,
109+ false
110+ ) ;
111+ scheduledJob (
112+ "cleanupOldData" ,
113+ ( ) => Promise . resolve ( dbFunctions . deleteOldData ( keep_data_for ) ) ,
114+ convertFromMinToMs ( 60 )
115+ ) ;
116+
117+ logger . info ( "Schedules have been set successfully." ) ;
118+ } catch ( error ) {
119+ logger . error ( "Error setting schedules:" , error ) ;
120+ throw error ;
121+ }
121122}
122123
123124export { setSchedules } ;
0 commit comments