Просмотр исходного кода

show current rows/s and EST during mariadb-import

Christian Kahlau 2 лет назад
Родитель
Сommit
10fa87c286
1 измененных файлов с 42 добавлено и 3 удалено
  1. 42 3
      server/src/ctrl/mariadb-importer.class.ts

+ 42 - 3
server/src/ctrl/mariadb-importer.class.ts

@@ -109,8 +109,11 @@ export class MariaDBImporter {
     const count = res.rows[0]['Count'] as number;
     let offset = 0;
     let pageSize = Math.min(CHUNK_SIZE, count);
+    let measure: number[] = [];
+    let estimate = '-- Rows/s | EST --:--:--';
+    let prevTime = new Date().getTime();
     while (offset + pageSize <= count) {
-      Logger.info('[INFO]', `Importing ServerDataEntry (${offset}/${count}) ...`);
+      Logger.info('[INFO]', `Importing ServerDataEntry (${offset}/${count}) - ${estimate} ...`);
       res = await this.oldDb.stmt('SELECT * FROM `ServerDataEntry` LIMIT ? OFFSET ?;', [pageSize, offset]);
 
       if (!res.rows.length) break;
@@ -120,6 +123,16 @@ export class MariaDBImporter {
 
       await this.newDb.query(sql, data);
 
+      measure.push((pageSize / (new Date().getTime() - prevTime)) * 1000);
+      if (measure.length > 10) measure.shift();
+      prevTime = new Date().getTime();
+
+      if (measure.length > 0) {
+        const rowsPerSec = measure.reduce((res, meas) => (res += meas), 0) / measure.length;
+        const estSecs = (count - offset) / rowsPerSec;
+        estimate = `${Math.round(rowsPerSec * 10) / 10} rows/s | EST ${moment(0).add(estSecs, 'seconds').format('HH:mm:ss')}`;
+      }
+
       offset += pageSize;
       pageSize = Math.min(pageSize, count - offset);
     }
@@ -131,8 +144,11 @@ export class MariaDBImporter {
     const count = res.rows[0]['Count'] as number;
     let offset = 0;
     let pageSize = Math.min(CHUNK_SIZE, count);
+    let measure: number[] = [];
+    let estimate = '-- Rows/s | EST --:--:--';
+    let prevTime = new Date().getTime();
     while (offset + pageSize <= count) {
-      Logger.info('[INFO]', `Importing ServerDataValue (${offset}/${count}) ...`);
+      Logger.info('[INFO]', `Importing ServerDataValue (${offset}/${count}) - ${estimate} ...`);
       const res = await this.oldDb.stmt('SELECT * FROM `ServerDataValue` LIMIT ? OFFSET ?;', [pageSize, offset]);
 
       if (!res.rows.length) break;
@@ -142,6 +158,16 @@ export class MariaDBImporter {
 
       await this.newDb.query(sql, data);
 
+      measure.push((pageSize / (new Date().getTime() - prevTime)) * 1000);
+      if (measure.length > 10) measure.shift();
+      prevTime = new Date().getTime();
+
+      if (measure.length > 0) {
+        const rowsPerSec = measure.reduce((res, meas) => (res += meas), 0) / measure.length;
+        const estSecs = (count - offset) / rowsPerSec;
+        estimate = `${Math.round(rowsPerSec * 10) / 10} rows/s | EST ${moment(0).add(estSecs, 'seconds').format('HH:mm:ss')}`;
+      }
+
       offset += pageSize;
       pageSize = Math.min(pageSize, count - offset);
     }
@@ -180,8 +206,11 @@ export class MariaDBImporter {
     const count = res.rows[0]['Count'] as number;
     let offset = 0;
     let pageSize = Math.min(CHUNK_SIZE, count);
+    let measure: number[] = [];
+    let estimate = '-- Rows/s | EST --:--:--';
+    let prevTime = new Date().getTime();
     while (offset + pageSize <= count) {
-      Logger.info('[INFO]', `Importing HealthCheckDataEntry (${offset}/${count}) ...`);
+      Logger.info('[INFO]', `Importing HealthCheckDataEntry (${offset}/${count}) - ${estimate} ...`);
       const res = await this.oldDb.stmt('SELECT * FROM `HealthCheckDataEntry` LIMIT ? OFFSET ?;', [pageSize, offset]);
 
       if (!res.rows.length) break;
@@ -194,6 +223,16 @@ export class MariaDBImporter {
 
       await this.newDb.query(sql, data);
 
+      measure.push((pageSize / (new Date().getTime() - prevTime)) * 1000);
+      if (measure.length > 10) measure.shift();
+      prevTime = new Date().getTime();
+
+      if (measure.length > 0) {
+        const rowsPerSec = measure.reduce((res, meas) => (res += meas), 0) / measure.length;
+        const estSecs = (count - offset) / rowsPerSec;
+        estimate = `${Math.round(rowsPerSec * 10) / 10} rows/s | EST ${moment(0).add(estSecs, 'seconds').format('HH:mm:ss')}`;
+      }
+
       offset += pageSize;
       pageSize = Math.min(pageSize, count - offset);
     }