Skip to content

Commit d3d5467

Browse files
MichalCzpatuwwy
authored andcommitted
Remove cpu-features and systeminformation modules
1 parent 8b77012 commit d3d5467

File tree

10 files changed

+101
-65
lines changed

10 files changed

+101
-65
lines changed

packages/adapters/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
"dockerode": "^3.3.4",
2828
"scramjet": "^4.36.9",
2929
"shell-escape": "^0.2.0",
30-
"systeminformation": "^5.21.7",
3130
"ts.data.json": "^2.2.0"
3231
},
3332
"devDependencies": {

packages/host/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@
3636
"minimist": "^1.2.6",
3737
"pico-s3": "^2.0.0",
3838
"rereadable-stream": "^1.4.14",
39-
"scramjet": "^4.36.9",
40-
"systeminformation": "^5.21.7"
39+
"scramjet": "^4.36.9"
4140
},
4241
"devDependencies": {
4342
"@scramjet/types": "^0.38.0",

packages/host/src/lib/cpm-connector.ts

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import fs from "fs";
22
import { Readable } from "stream";
33
import * as http from "http";
44

5-
import { networkInterfaces } from "systeminformation";
6-
75
import { CPMMessageCode, InstanceMessageCode, SequenceMessageCode } from "@scramjet/symbols";
86
import {
97
STHRestAPI,
@@ -26,7 +24,7 @@ import { ObjLogger } from "@scramjet/obj-logger";
2624
import { ReasonPhrases } from "http-status-codes";
2725
import { DuplexStream } from "@scramjet/api-server";
2826
import { VerserClientConnection } from "@scramjet/verser/src/types";
29-
import { EOL } from "os";
27+
import { EOL, networkInterfaces } from "os";
3028

3129
type STHInformation = {
3230
id?: string;
@@ -460,22 +458,38 @@ export class CPMConnector extends TypedEmitter<Events> {
460458
/**
461459
* Returns network interfaces information.
462460
*
463-
* @returns {Promise<NetworkInfo>} Promise resolving to NetworkInfo object.
461+
* @returns Promise resolving to NetworkInfo object.
464462
*/
465463
async getNetworkInfo(): Promise<NetworkInfo[]> {
466-
const fields = ["iface", "ifaceName", "ip4", "ip4subnet", "ip6", "ip6subnet", "mac", "dhcp"];
464+
const net = Object.entries(networkInterfaces());
465+
const ifs: NetworkInfo[] = [];
466+
467+
for (const [ifname, ifdata] of net) {
468+
const ipv4 = ifdata?.find(({ family }) => family === "IPv4");
469+
const ipv6 = ifdata?.find(({ family }) => family === "IPv6");
467470

468-
const nInterfaces = await networkInterfaces();
471+
if (!ipv4?.mac && !ipv6?.mac) continue;
469472

470-
return [nInterfaces].flat().map((iface: any) => {
471-
const info: any = {};
473+
const netInfo: NetworkInfo = {
474+
iface: ifname,
475+
ifaceName: ifname,
476+
mac: (ipv4?.mac || ipv6?.mac) as string,
477+
dhcp: false
478+
};
472479

473-
for (const field of fields) {
474-
info[field] = iface[field];
480+
if (ipv4?.address) {
481+
netInfo.ip4 = ipv4?.address;
482+
netInfo.ip4subnet = ipv4?.cidr as "string";
483+
}
484+
if (ipv6?.address) {
485+
netInfo.ip6 = ipv6?.address;
486+
netInfo.ip6subnet = ipv6?.cidr as "string";
475487
}
476488

477-
return info;
478-
});
489+
ifs.push(netInfo);
490+
}
491+
492+
return ifs;
479493
}
480494

481495
async sendLoad() {

packages/host/src/lib/host.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import { inspect } from "util";
4646
import { auditMiddleware, logger as auditMiddlewareLogger } from "./middlewares/audit";
4747
import { AuditedRequest, Auditor } from "./auditor";
4848
import { getTelemetryAdapter, ITelemetryAdapter } from "@scramjet/telemetry";
49-
import { cpus, totalmem } from "os";
49+
import { cpus, homedir, totalmem } from "os";
5050
import { S3Client } from "./s3-client";
5151
import { DuplexStream } from "@scramjet/api-server";
5252
import { readFileSync } from "fs";
@@ -56,6 +56,7 @@ import { ContentType } from "./serviceDiscovery/contentType";
5656
import SequenceStore from "./sequenceStore";
5757
import { GetSequenceResponse } from "@scramjet/types/src/rest-api-sth";
5858
import { loadModule, logger as loadModuleLogger } from "@scramjet/module-loader";
59+
import { parse } from "path";
5960

6061
const buildInfo = readJsonFile("build.info", __dirname, "..");
6162
const packageFile = findPackage(__dirname).next();
@@ -194,6 +195,7 @@ export class Host implements IComponent {
194195
* @param {SocketServer} socketServer Server to listen for connections from Instances.
195196
* @param {STHConfiguration} sthConfig Configuration.
196197
*/
198+
// eslint-disable-next-line complexity
197199
constructor(apiServer: APIExpose, socketServer: SocketServer, sthConfig: STHConfiguration) {
198200
this.config = sthConfig;
199201
this.publicConfig = ConfigService.getConfigInfo(sthConfig);
@@ -239,7 +241,15 @@ export class Host implements IComponent {
239241

240242
const { safeOperationLimit, instanceRequirements } = this.config;
241243

242-
this.loadCheck = new LoadCheck(new LoadCheckConfig({ safeOperationLimit, instanceRequirements }));
244+
const fsPaths = [
245+
parse(process.cwd()).root, // root dir
246+
homedir(),
247+
this.config.sequencesRoot
248+
];
249+
250+
if (this.config.kubernetes.sequencesRoot) fsPaths.push(this.config.kubernetes.sequencesRoot);
251+
252+
this.loadCheck = new LoadCheck(new LoadCheckConfig({ safeOperationLimit, instanceRequirements, fsPaths }));
243253
this.loadCheck.logger.pipe(this.logger);
244254

245255
this.socketServer = socketServer;

packages/load-check/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717
"@scramjet/obj-logger": "^0.38.0",
1818
"@scramjet/utility": "^0.38.0",
1919
"scramjet": "^4.36.9",
20-
"systeminformation": "^5.21.7",
20+
"diskusage-ng": "1.0.2",
21+
"node-os-utils": "1.3.7",
2122
"uuid": "^8.3.2"
2223
},
2324
"devDependencies": {
2425
"@scramjet/types": "^0.38.0",
2526
"@types/node": "15.12.5",
27+
"@types/node-os-utils": "^1.2.0",
2628
"@types/uuid": "^8.3.4",
2729
"ava": "^3.15.0",
2830
"ts-node": "^10.9.1",

packages/load-check/src/load-check.ts

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@ import { ObjLogger } from "@scramjet/obj-logger";
22
import { IComponent, LoadCheckStat, LoadCheckRequirements, LoadCheckContstants } from "@scramjet/types";
33
import { defer } from "@scramjet/utility";
44

5-
import sysinfo from "systeminformation";
65
import { DataStream, StringStream } from "scramjet";
76
import { LoadCheckConfig } from "./config/load-check-config";
7+
import { loadavg } from "os";
88

9-
const MB = 1024 * 1024;
9+
import _du from "diskusage-ng";
10+
import { promisify } from "util";
11+
import { mem } from "node-os-utils";
12+
13+
const MEBIBYTE = 1024 * 1024;
14+
const du = promisify(_du);
1015

1116
/**
1217
* Provides methods to monitor resources usage and determine if machine is not overloaded.
@@ -37,11 +42,11 @@ export class LoadCheck implements IComponent {
3742
if (!config.isValid()) throw new Error("Invalid load-check configuration");
3843
this.config = config.get();
3944
this.constants = {
40-
SAFE_OPERATION_LIMIT: this.config.safeOperationLimit * MB,
45+
SAFE_OPERATION_LIMIT: this.config.safeOperationLimit * MEBIBYTE,
4146
MIN_INSTANCE_REQUIREMENTS: {
42-
freeMem: this.config.instanceRequirements.freeMem * MB,
47+
freeMem: this.config.instanceRequirements.freeMem * MEBIBYTE,
4348
cpuLoad: this.config.instanceRequirements.cpuLoad,
44-
freeSpace: this.config.instanceRequirements.freeSpace * MB
49+
freeSpace: this.config.instanceRequirements.freeSpace * MEBIBYTE
4550
}
4651
};
4752
}
@@ -52,18 +57,32 @@ export class LoadCheck implements IComponent {
5257
* @returns {Promise<LoadCheckStat>} Promise resolving to gathered load check data.
5358
*/
5459
async getLoadCheck(): Promise<LoadCheckStat> {
55-
const [load, disksInfo, memInfo] = await Promise.all([
56-
sysinfo.currentLoad(),
57-
sysinfo.fsSize(),
58-
sysinfo.mem()
60+
const safeOperationsLimit = this.constants.SAFE_OPERATION_LIMIT;
61+
62+
const [currentLoad = 85, , avgLoad] = loadavg();
63+
64+
const [usage, _fsSize] = await Promise.all([
65+
mem.info(),
66+
Promise.all(this.config.fsPaths.map(async (path) => ({ path, usage: await du(path) })))
5967
]);
6068

69+
const memFree = (usage.totalMemMb - usage.usedMemMb) * MEBIBYTE;
70+
const memUsed = usage.usedMemMb * MEBIBYTE;
71+
72+
const fsSize = _fsSize.map(({ path, usage: fsUsage }) => ({
73+
fs: path,
74+
available: fsUsage.available - safeOperationsLimit,
75+
size: fsUsage.total,
76+
used: fsUsage.used,
77+
use: fsUsage.used / fsUsage.total
78+
}));
79+
6180
return {
62-
avgLoad: load.avgLoad,
63-
currentLoad: load.currentLoad || 85,
64-
memFree: memInfo.free + Math.max(0, memInfo.buffcache - this.constants.SAFE_OPERATION_LIMIT),
65-
memUsed: memInfo.used,
66-
fsSize: disksInfo
81+
avgLoad,
82+
currentLoad,
83+
memFree,
84+
memUsed,
85+
fsSize
6786
};
6887
}
6988

@@ -95,27 +114,12 @@ export class LoadCheck implements IComponent {
95114
* @returns {DataStream} Stream with load check data.
96115
*/
97116
getLoadCheckStream(): StringStream {
98-
const safeOperationsLimit = this.constants.SAFE_OPERATION_LIMIT;
117+
const _this = this;
99118

100119
return DataStream.from(
101120
async function*() {
102121
while (true) {
103-
const [load, disksInfo, memInfo] = await Promise.all([
104-
sysinfo.currentLoad(),
105-
sysinfo.fsSize(),
106-
sysinfo.mem()
107-
]);
108-
109-
yield {
110-
avgLoad: load.avgLoad,
111-
currentLoad: load.currentLoad || 85,
112-
memFree: memInfo.free + Math.max(
113-
0,
114-
memInfo.buffcache - safeOperationsLimit
115-
),
116-
memUsed: memInfo.used,
117-
fsSize: disksInfo
118-
};
122+
yield _this.getLoadCheck();
119123

120124
await defer(1000);
121125
}

packages/types/src/load-check-stat.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,8 @@ export type LoadCheckRequirements = {
4141
* The amount of memory that must remain free.
4242
*/
4343
safeOperationLimit: number;
44-
/**
45-
* Minimum requirements to start new Manager instance.
46-
*/
47-
instanceRequirements: InstanceRequirements
44+
fsPaths: string[];
45+
instanceRequirements: InstanceRequirements;
4846
}
4947

5048
export type LoadCheckContstants = {

packages/types/src/network-info.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
export type NetworkInfo = {
22
iface: string,
33
ifaceName: string;
4-
ip4: string;
5-
ip4subnet: string;
6-
ip6: string;
7-
ip6subnet: string;
4+
ip4?: string;
5+
ip4subnet?: string;
6+
ip6?: string;
7+
ip6subnet?: string;
88
mac: string;
99
dhcp: boolean;
1010
}

scripts/dev/start-seq.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ const host = new HostClient("http://localhost:8000/api/v1");
99
const pkg = createReadStream(resolve(__dirname, "../../sth/packages/reference-apps/stdio-sequence.tar.gz"));
1010

1111
const sequence = await host.sendSequence(pkg);
12-
const instance = await sequence.start({}, []);
13-
const instanceInfo = { id: instance.id, ...(await instance.getInfo()).data };
12+
const instance = await sequence.start({ appConfig: {} });
13+
const instanceInfo = { id: instance.id, ...await instance.getInfo() };
1414

1515
// eslint-disable-next-line no-console
1616
console.error(instanceInfo);

yarn.lock

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1351,6 +1351,11 @@
13511351
"@types/node" "*"
13521352
form-data "^4.0.0"
13531353

1354+
"@types/node-os-utils@^1.2.0":
1355+
version "1.3.0"
1356+
resolved "https://registry.yarnpkg.com/@types/node-os-utils/-/node-os-utils-1.3.0.tgz#df06d65292a4ccf99d332e39c4f64e94c538fad5"
1357+
integrity sha512-XwVteWQx/XkfRPyaGkw8dEbrCAkoRZ73pI3XznUYIpzbCfpQB3UnDlR5TnmdhetlT889tUJGF8QWo9xrgTpsiA==
1358+
13541359
"@types/node@*", "@types/[email protected]":
13551360
version "15.12.5"
13561361
resolved "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz"
@@ -3008,6 +3013,11 @@ dir-glob@^3.0.1:
30083013
dependencies:
30093014
path-type "^4.0.0"
30103015

3016+
3017+
version "1.0.2"
3018+
resolved "https://registry.yarnpkg.com/diskusage-ng/-/diskusage-ng-1.0.2.tgz#5ded0862ce3726ca2ddc2956a66b0673877cd3a1"
3019+
integrity sha512-IO+Dbvxf5kXGuOEAHFCSf/aW9z/E96OwUH1Szstf2Rjzy+AP6sr/Y5yQh70fdX8SEFKdkTMpVG+b5jR7Uw3Q1Q==
3020+
30113021
docker-modem@^3.0.0:
30123022
version "3.0.6"
30133023
resolved "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.6.tgz"
@@ -6061,6 +6071,11 @@ node-int64@^0.4.0:
60616071
resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz"
60626072
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
60636073

6074+
6075+
version "1.3.7"
6076+
resolved "https://registry.yarnpkg.com/node-os-utils/-/node-os-utils-1.3.7.tgz#77cc341ae39584e12d3aadf6046fe420ff4c9340"
6077+
integrity sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q==
6078+
60646079
node-preload@^0.2.1:
60656080
version "0.2.1"
60666081
resolved "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz"
@@ -7341,7 +7356,7 @@ scramjet-core@^4.32.12:
73417356
resolved "https://registry.npmjs.org/scramjet-core/-/scramjet-core-4.32.12.tgz"
73427357
integrity sha512-FkNaZqzXvzqdwrUWzMztJq2RUBcpBlm08zOYIhA69+//FzgrespLBz7DmCXdXfujjvmUIFGgq/T3aPFy1ctonw==
73437358

7344-
scramjet@^4.36.9:
7359+
scramjet@^4.36.6, scramjet@^4.36.9:
73457360
version "4.37.0"
73467361
resolved "https://registry.yarnpkg.com/scramjet/-/scramjet-4.37.0.tgz#2e89f07cbaffd1f9cdd5a3da64aba250745aac13"
73477362
integrity sha512-Y6b59qGsulkr5MxiVn9CABnL9pE/sPKihCcWSUhzZc6W0YWbfLWRXc1fE1M40QKfOQUBxks81efzJ7WpEuFmlQ==
@@ -7928,11 +7943,6 @@ supports-preserve-symlinks-flag@^1.0.0:
79287943
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
79297944
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
79307945

7931-
systeminformation@^5.21.7:
7932-
version "5.21.20"
7933-
resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.20.tgz"
7934-
integrity sha512-AyS1fNc+MDoAJtFknFbbo587H8h6yejJwM+H9rVusnOToIEkiMehMyD5JM7o3j55Cto20MawIZrcgNMgd4BfOQ==
7935-
79367946
tar-fs@~2.0.1:
79377947
version "2.0.1"
79387948
resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz"

0 commit comments

Comments
 (0)