@arcblock/pm2-prom-module 2.6.1 → 2.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/core/pm2.js CHANGED
@@ -172,6 +172,9 @@ const detectActiveApps = () => {
172
172
  // @ts-expect-error
173
173
  dockerApps.map((x) => { var _a; return (_a = x.pm2_env) === null || _a === void 0 ? void 0 : _a.BLOCKLET_DOCKER_NAME; })).then((stats) => {
174
174
  stats.map((stat, i) => {
175
+ if (!stat) {
176
+ return;
177
+ }
175
178
  const entry = mapAppPids[dockerApps[i].name];
176
179
  if (entry) {
177
180
  entry.pids.forEach((pid) => {
@@ -199,8 +202,6 @@ const detectActiveApps = () => {
199
202
  .catch((err) => {
200
203
  console.error(err.stack || err);
201
204
  });
202
- // get docker stats
203
- // @ts-ignore
204
205
  });
205
206
  };
206
207
  const startPm2Connect = (conf) => {
package/metrics/index.js CHANGED
@@ -18,6 +18,7 @@ const node_os_1 = __importDefault(require("node:os"));
18
18
  const cpu_1 = require("../utils/cpu");
19
19
  const docker_1 = require("../utils/docker");
20
20
  const app_1 = require("./app");
21
+ const METRIC_BLOCKLET_SERVER_INFO = 'blocklet_server_info';
21
22
  const METRIC_FREE_MEMORY = 'free_memory';
22
23
  const METRIC_AVAILABLE_CPU = 'cpu_count';
23
24
  const METRIC_AVAILABLE_APPS = 'available_apps';
@@ -41,6 +42,18 @@ exports.dynamicGaugeMetricClients = {};
41
42
  // Metrics
42
43
  const initMetrics = (prefix) => {
43
44
  currentPrefix = prefix;
45
+ new prom_client_1.default.Gauge({
46
+ name: `${prefix}_${METRIC_BLOCKLET_SERVER_INFO}`,
47
+ help: 'Show blocklet server info',
48
+ collect() {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const info = yield (0, docker_1.getBlockletServerInfo)();
51
+ this.set(info, 1);
52
+ });
53
+ },
54
+ registers: [exports.registry],
55
+ labelNames: ['name', 'version', 'mode', 'internalIP'],
56
+ });
44
57
  new prom_client_1.default.Gauge({
45
58
  name: `${prefix}_${METRIC_FREE_MEMORY}`,
46
59
  help: 'Show available host free memory (System OS)',
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "@arcblock/pm2-prom-module",
3
- "version": "2.6.1",
3
+ "version": "2.6.3",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
7
  "description": "PM2 module to help collect applications statistic and send it to Prometheus server",
8
8
  "main": "index.js",
9
9
  "dependencies": {
10
+ "@abtnode/util": "^1.16.44",
11
+ "internal-ip": "^6.2.0",
10
12
  "pidusage": "^3.0.2",
11
13
  "pm2": "^5.3.0",
12
14
  "pmx": "beta",
@@ -15,12 +17,12 @@
15
17
  "zx": "^4.3.0"
16
18
  },
17
19
  "scripts": {
18
- "predev": "pm2 delete pm2-prom-module || true && npm run build",
19
- "dev": "pm2 install .",
20
+ "predev": "export PM2_HOME=~/.arcblock/abtnode && pm2 delete @arcblock/pm2-prom-module && pm2 uninstall @arcblock/pm2-prom-module || true && npm run build",
21
+ "dev": "export PM2_HOME=~/.arcblock/abtnode && pm2 install .",
20
22
  "build": "tsc -p tsconfig.json",
21
23
  "watch": "tsc -w -p tsconfig.json",
22
24
  "release": "npm run build && npm publish",
23
- "bump:version": "zx scripts/bump-version.mjs --quiet"
25
+ "bump-version": "zx scripts/bump-version.mjs --quiet"
24
26
  },
25
27
  "files": [
26
28
  "README.md",
package/utils/docker.js CHANGED
@@ -12,12 +12,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.getDockerStats = exports.getCPULimit = exports.getFreeMemory = exports.getUsedMemory = exports.getAvailableMemory = exports.hasDockerLimitFiles = void 0;
15
+ exports.getDockerStats = exports.getCPULimit = exports.getFreeMemory = exports.getUsedMemory = exports.getBlockletServerInfo = exports.getAvailableMemory = exports.hasDockerLimitFiles = void 0;
16
16
  const promises_1 = require("node:fs/promises");
17
17
  const node_os_1 = __importDefault(require("node:os"));
18
18
  const cpu_1 = require("./cpu");
19
19
  const zx_1 = require("zx");
20
20
  const xbytes_1 = __importDefault(require("xbytes"));
21
+ const get_ip_1 = __importDefault(require("@abtnode/util/lib/get-ip"));
22
+ const internal_ip_1 = require("internal-ip");
21
23
  // 禁用命令和结果的自动输出
22
24
  zx_1.$.verbose = false;
23
25
  //const MEMORY_AVAILABLE = '/sys/fs/cgroup/memory.limit_in_bytes';
@@ -50,6 +52,37 @@ const getAvailableMemory = () => __awaiter(void 0, void 0, void 0, function* ()
50
52
  }
51
53
  });
52
54
  exports.getAvailableMemory = getAvailableMemory;
55
+ const getBlockletServerInfo = () => __awaiter(void 0, void 0, void 0, function* () {
56
+ try {
57
+ const internalIP = (yield (0, internal_ip_1.v4)()) ||
58
+ (yield (0, get_ip_1.default)({ includeExternal: false, timeout: 5000 })).internal;
59
+ if (!internalIP) {
60
+ throw new Error('Failed to get internal IP address');
61
+ }
62
+ const response = yield fetch(`https://${internalIP.replace(/\./g, '-')}.ip.abtnet.io/.well-known/did.json`);
63
+ if (response.status !== 200) {
64
+ throw new Error(`Failed to get blocklet server info, ip: ${internalIP}, status: ${response.status}, statusText: ${response.statusText}`);
65
+ }
66
+ const data = yield response.json();
67
+ const metadata = data.services.find((service) => service.type === 'server').metadata;
68
+ return {
69
+ name: metadata.name,
70
+ version: metadata.version,
71
+ mode: metadata.mode,
72
+ internalIP,
73
+ };
74
+ }
75
+ catch (error) {
76
+ console.error(error);
77
+ return {
78
+ name: 'unknown',
79
+ version: 'unknown',
80
+ mode: 'unknown',
81
+ internalIP: 'unknown',
82
+ };
83
+ }
84
+ });
85
+ exports.getBlockletServerInfo = getBlockletServerInfo;
53
86
  const getUsedMemory = () => __awaiter(void 0, void 0, void 0, function* () {
54
87
  try {
55
88
  const data = (yield (0, promises_1.readFile)(MEMORY_USED, { encoding: 'utf8' })).trim();