mirror of
https://github.com/tale/headplane.git
synced 2026-09-04 19:25:43 +00:00
Proc mode: try to guess PID based on PPID when multiple found
This commit is contained in:
committed by
Aarnav Tale
parent
6ea9fe169d
commit
0344f17887
@@ -61,14 +61,37 @@ export default class ProcIntegration extends Integration<T> {
|
|||||||
|
|
||||||
log.debug('config', 'Found Headscale processes: %o', pids);
|
log.debug('config', 'Found Headscale processes: %o', pids);
|
||||||
if (pids.length > 1) {
|
if (pids.length > 1) {
|
||||||
log.error(
|
log.warn(
|
||||||
'config',
|
'config',
|
||||||
'Found %d Headscale processes: %s',
|
'Found %d Headscale processes: %s',
|
||||||
pids.length,
|
pids.length,
|
||||||
pids.join(', '),
|
pids.join(', '),
|
||||||
);
|
);
|
||||||
return false;
|
|
||||||
}
|
log.debug('config', 'Checking if any of them have Parent PID = 1, assuming thats the correct PID');
|
||||||
|
const ppidRegex = /(?:PPid:\s)(\d+)(?:\n?)/;
|
||||||
|
for (const pid of pids) {
|
||||||
|
const pidStatusPath = join('/proc', pid.toString(), 'status');
|
||||||
|
try {
|
||||||
|
log.debug('config', 'Reading %s', pidStatusPath);
|
||||||
|
const pidData = await readFile(pidStatusPath, 'utf8');
|
||||||
|
const ppidResult = pidData.match(ppidRegex);
|
||||||
|
|
||||||
|
if (ppidResult !== null) {
|
||||||
|
const potentialPPid = Number.parseInt(ppidResult[1], 10);
|
||||||
|
if (potentialPPid === 1) {
|
||||||
|
this.pid = pid;
|
||||||
|
log.info('config', 'Found potential Headscale process with PID: %d based on Parent PID = 1', this.pid);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
log.error('config', 'Failed to read %s: %s', pidStatusPath, error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (pids.length === 0) {
|
if (pids.length === 0) {
|
||||||
log.error('config', 'Could not find Headscale process');
|
log.error('config', 'Could not find Headscale process');
|
||||||
|
|||||||
Reference in New Issue
Block a user