fix: ensure the ATG will start from its saved status
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 25 Sep 2023 19:18:33 +0000 (21:18 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 25 Sep 2023 19:18:33 +0000 (21:18 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
13 files changed:
build-requirements.mjs
prepare.cjs
rollup.config.mjs
skip-preinstall.cjs
src/charging-station/AutomaticTransactionGenerator.ts
src/charging-station/Bootstrap.ts
src/charging-station/Helpers.ts
src/scripts/deleteChargingStations.cjs
src/scripts/setCSPublicFlag.cjs
src/utils/Configuration.ts
src/utils/Utils.ts
ui/web/.eslintrc.js
ui/web/start.js

index 44de19324ffe107232574abc390f9b6a80009be6..839be558929cb737f192b90a24cc4152ea284cbd 100644 (file)
@@ -1,20 +1,21 @@
 import chalk from 'chalk';
 import semVer from 'semver';
 import packageJson from './package.json' assert { type: 'json' };
+import { version, exit } from 'node:process';
 
 /**
  * Check if the current node version match the required engines version.
  */
 export function checkNodeVersion() {
   const enginesNodeVersion = packageJson.engines.node;
-  if (semVer.satisfies(process.version, enginesNodeVersion) === false) {
+  if (semVer.satisfies(version, enginesNodeVersion) === false) {
     console.error(
       chalk.red(
-        `Required node version ${enginesNodeVersion} not satisfied with current version ${process.version}.`,
+        `Required node version ${enginesNodeVersion} not satisfied with current version ${version}.`,
       ),
     );
     // eslint-disable-next-line n/no-process-exit
-    process.exit(1);
+    exit(1);
   }
 }
 
index 6160cf597883cf75183a7b6e72e015fc2121ccd0..6038d204336ac9032b5976f3f42c8f3221c500e8 100644 (file)
@@ -1,5 +1,7 @@
-const isCIEnvironment = process.env.CI !== undefined;
-const isCFEnvironment = process.env.VCAP_APPLICATION !== undefined;
+const { env } = require('node:process');
+
+const isCIEnvironment = env.CI !== undefined;
+const isCFEnvironment = env.VCAP_APPLICATION !== undefined;
 if (isCFEnvironment === false && isCIEnvironment === false) {
   // eslint-disable-next-line n/no-unpublished-require
   require('husky').install();
index c28aaf0460dd35fa7100ffffcba00c60c3c5b978..40f1d6794c150c409643c4874914fab5a0e0815c 100644 (file)
@@ -1,5 +1,6 @@
 /* eslint-disable n/no-unpublished-import */
 import * as os from 'node:os';
+import { env } from 'node:process';
 
 import json from '@rollup/plugin-json';
 import terser from '@rollup/plugin-terser';
@@ -23,8 +24,8 @@ const availableParallelism = () => {
   return availableParallelism;
 };
 
-const isDevelopmentBuild = process.env.BUILD === 'development';
-const isAnalyzeBuild = process.env.ANALYZE;
+const isDevelopmentBuild = env.BUILD === 'development';
+const isAnalyzeBuild = env.ANALYZE;
 const sourceMap = !!isDevelopmentBuild;
 
 export default defineConfig({
@@ -60,6 +61,7 @@ export default defineConfig({
     'node:http2',
     'node:path',
     'node:perf_hooks',
+    'node:process',
     'node:stream',
     'node:url',
     'node:util',
index 8ec526bccf5fd1212c59edaa39f0f04907927850..5be82290ac7a28cd41dfc6554bcdf9ae3e47dc5c 100644 (file)
@@ -1,8 +1,10 @@
-const skipPreinstall = process.env.SKIP_PREINSTALL || process.env.VCAP_APPLICATION !== undefined;
+const { env, exit } = require('node:process');
+
+const skipPreinstall = env.SKIP_PREINSTALL || env.VCAP_APPLICATION !== undefined;
 if (skipPreinstall) {
   // eslint-disable-next-line n/no-process-exit
-  process.exit();
+  exit();
 } else {
   // eslint-disable-next-line n/no-process-exit
-  process.exit(1);
+  exit(1);
 }
index e53026babedf21fccc915c88c022eabd3622bd02..a6858afe7acac7fdfc8a18b4713ae2a59db995e5 100644 (file)
@@ -363,6 +363,9 @@ export class AutomaticTransactionGenerator extends AsyncResource {
     delete connectorStatus?.lastRunDate;
     delete connectorStatus?.stopDate;
     delete connectorStatus?.stoppedDate;
+    if (connectorStatus?.start === true) {
+      connectorStatus.start = false;
+    }
     return (
       connectorStatus ?? {
         start: false,
index 4e8b43a9dffb309dc2558cbb909d47ad359185da..0cd15055871405fdf7441d89a362f260cd68269e 100644 (file)
@@ -2,6 +2,7 @@
 
 import { EventEmitter } from 'node:events';
 import { dirname, extname, join } from 'node:path';
+import { exit } from 'node:process';
 import { fileURLToPath } from 'node:url';
 import { isMainThread } from 'node:worker_threads';
 
@@ -354,13 +355,13 @@ export class Bootstrap extends EventEmitter {
         console.warn(
           chalk.yellow("'stationTemplateUrls' not defined or empty in configuration, exiting"),
         );
-        process.exit(exitCodes.missingChargingStationsConfiguration);
+        exit(exitCodes.missingChargingStationsConfiguration);
       }
       if (this.numberOfChargingStations === 0) {
         console.warn(
           chalk.yellow('No charging station template enabled in configuration, exiting'),
         );
-        process.exit(exitCodes.noChargingStationTemplates);
+        exit(exitCodes.noChargingStationTemplates);
       }
       this.initializedCounters = true;
     }
@@ -391,11 +392,11 @@ export class Bootstrap extends EventEmitter {
     console.info(`${chalk.green('Graceful shutdown')}`);
     this.stop()
       .then(() => {
-        process.exit(exitCodes.succeeded);
+        exit(exitCodes.succeeded);
       })
       .catch((error) => {
         console.error(chalk.red('Error while shutdowning charging stations simulator: '), error);
-        process.exit(exitCodes.gracefulShutdownError);
+        exit(exitCodes.gracefulShutdownError);
       });
   };
 
index 90ecd0e8154814c6a2be8f70c6b508690f59c096..99a8f82cb5dca431de4f3c6f49ca044129f16c7e 100644 (file)
@@ -1,6 +1,7 @@
 import { createHash, randomBytes } from 'node:crypto';
 import type { EventEmitter } from 'node:events';
 import { basename, dirname, join } from 'node:path';
+import { env } from 'node:process';
 import { fileURLToPath } from 'node:url';
 
 import chalk from 'chalk';
@@ -76,7 +77,7 @@ export const getChargingStationId = (
   stationTemplate: ChargingStationTemplate,
 ): string => {
   // In case of multiple instances: add instance index to charging station id
-  const instanceIndex = process.env.CF_INSTANCE_INDEX ?? 0;
+  const instanceIndex = env.CF_INSTANCE_INDEX ?? 0;
   const idSuffix = stationTemplate?.nameSuffix ?? '';
   const idStr = `000000000${index.toString()}`;
   return stationTemplate?.fixedName
index 0e8333c3472b0d26d269a4dd25616aa773d4c990..beffb18c36b2fa7f17748c21f302c1c84d84f9cc 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env node
 
-const fs = require('fs');
+const fs = require('node:fs');
 
 const { MongoClient } = require('mongodb');
 
index 1f412d1b047f91043bde76fb890bc6ee3e8fd477..10dc9d1194ecbace07fc35898044068dcfd755f2 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env node
 
-const fs = require('fs');
+const fs = require('node:fs');
 
 const { MongoClient } = require('mongodb');
 
index 0c5a356ac18cd35a0e9e201b3f910bed3f6ce5b2..53eb720ffdf6f467295406f6a3a47ab3ec51d18d 100644 (file)
@@ -1,5 +1,6 @@
 import { type FSWatcher, readFileSync, watch } from 'node:fs';
 import { dirname, join, resolve } from 'node:path';
+import { env } from 'node:process';
 import { fileURLToPath } from 'node:url';
 
 import chalk from 'chalk';
@@ -171,7 +172,7 @@ export class Configuration {
     }
     if (isCFEnvironment() === true) {
       delete uiServerConfiguration.options?.host;
-      uiServerConfiguration.options!.port = parseInt(process.env.PORT!);
+      uiServerConfiguration.options!.port = parseInt(env.PORT!);
     }
     return uiServerConfiguration;
   }
index 808ef380d170b2a5a11acfeaa96e7d23b49e1040..6a3d30fee9bbcebdc264a6239dfaec8601e1c5eb 100644 (file)
@@ -1,4 +1,5 @@
 import { randomBytes, randomInt, randomUUID, webcrypto } from 'node:crypto';
+import { env } from 'node:process';
 import { inspect } from 'node:util';
 
 import {
@@ -260,7 +261,7 @@ export const hasOwnProp = (object: unknown, property: PropertyKey): boolean => {
 };
 
 export const isCFEnvironment = (): boolean => {
-  return !isNullOrUndefined(process.env.VCAP_APPLICATION);
+  return !isNullOrUndefined(env.VCAP_APPLICATION);
 };
 
 export const isIterable = <T>(obj: T): boolean => {
index 18ddac2e27d121107056d3fec33985934490b85c..d82d3c5f6ef9cc228dcb52606aedad0e61433f8b 100644 (file)
@@ -1,3 +1,4 @@
+const { env } = require('node:process');
 const { defineConfig } = require('eslint-define-config');
 
 module.exports = defineConfig({
@@ -30,8 +31,8 @@ module.exports = defineConfig({
   },
 
   rules: {
-    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
-    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'no-console': env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'no-debugger': env.NODE_ENV === 'production' ? 'warn' : 'off',
     'vue/require-v-for-key': 'off',
     'vue/multi-word-component-names': 'off',
     'sort-imports': [
index 523b52678f52dcfb6217a8927122088866566cd7..9b18156cffee67d340d172bfac4753c40fd9f3a6 100644 (file)
@@ -1,10 +1,11 @@
-const http = require('http'),
-  path = require('path'),
+const http = require('node:http'),
+  path = require('node:path'),
+  { env } = require('node:process'),
   finalhandler = require('finalhandler'),
   serveStatic = require('serve-static');
 
-const isCFEnvironment = process.env.VCAP_APPLICATION !== undefined,
-  PORT = isCFEnvironment ? parseInt(process.env.PORT) : 3030,
+const isCFEnvironment = env.VCAP_APPLICATION !== undefined,
+  PORT = isCFEnvironment ? parseInt(env.PORT) : 3030,
   uiPath = path.join(__dirname, './dist');
 
 const serve = serveStatic(uiPath);