@phystack/device-phyos 4.4.31
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/README.md +6 -0
- package/bin/index.js +2 -0
- package/dist/edge-hub.js +1079 -0
- package/dist/edge-hub.js.map +1 -0
- package/dist/http-proxy.js +54 -0
- package/dist/http-proxy.js.map +1 -0
- package/dist/index.js +489 -0
- package/dist/index.js.map +1 -0
- package/dist/methods/devdevice.js +123 -0
- package/dist/methods/devdevice.js.map +1 -0
- package/dist/methods/environment.js +346 -0
- package/dist/methods/environment.js.map +1 -0
- package/dist/methods/index.js +24 -0
- package/dist/methods/index.js.map +1 -0
- package/dist/methods/network/ca.js +48 -0
- package/dist/methods/network/ca.js.map +1 -0
- package/dist/methods/network/hostname.js +56 -0
- package/dist/methods/network/hostname.js.map +1 -0
- package/dist/methods/network/lan.js +183 -0
- package/dist/methods/network/lan.js.map +1 -0
- package/dist/methods/network/wifi.js +289 -0
- package/dist/methods/network/wifi.js.map +1 -0
- package/dist/methods/reboot.js +22 -0
- package/dist/methods/reboot.js.map +1 -0
- package/dist/methods/ssh.js +148 -0
- package/dist/methods/ssh.js.map +1 -0
- package/dist/services/scheduler.service.js +325 -0
- package/dist/services/scheduler.service.js.map +1 -0
- package/dist/store/types/network-interface.type.js +3 -0
- package/dist/store/types/network-interface.type.js.map +1 -0
- package/dist/time-sync.js +109 -0
- package/dist/time-sync.js.map +1 -0
- package/dist/types/command.types.js +8 -0
- package/dist/types/command.types.js.map +1 -0
- package/dist/types/container.types.js +3 -0
- package/dist/types/container.types.js.map +1 -0
- package/dist/types/event.types.js +9 -0
- package/dist/types/event.types.js.map +1 -0
- package/dist/types/job.types.js +15 -0
- package/dist/types/job.types.js.map +1 -0
- package/dist/types/twin.types.js +21 -0
- package/dist/types/twin.types.js.map +1 -0
- package/dist/utilities/docker-progress-tracker.js +28 -0
- package/dist/utilities/docker-progress-tracker.js.map +1 -0
- package/dist/utilities/docker.js +819 -0
- package/dist/utilities/docker.js.map +1 -0
- package/dist/utilities/instances.js +169 -0
- package/dist/utilities/instances.js.map +1 -0
- package/dist/utilities/jobs.js +103 -0
- package/dist/utilities/jobs.js.map +1 -0
- package/dist/utilities/local-twins.js +204 -0
- package/dist/utilities/local-twins.js.map +1 -0
- package/dist/utilities/network-settings.js +147 -0
- package/dist/utilities/network-settings.js.map +1 -0
- package/dist/utilities/symlink.js +47 -0
- package/dist/utilities/symlink.js.map +1 -0
- package/dist/utilities/sysinfo.js +118 -0
- package/dist/utilities/sysinfo.js.map +1 -0
- package/dist/utilities/twin-manager.js +108 -0
- package/dist/utilities/twin-manager.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const net_1 = __importDefault(require("net"));
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const ws_1 = __importDefault(require("ws"));
|
|
9
|
+
const child_process_1 = require("child_process");
|
|
10
|
+
const phy_logger_1 = require("@phystack/phy-logger");
|
|
11
|
+
const https_proxy_agent_1 = require("https-proxy-agent");
|
|
12
|
+
const logger = new phy_logger_1.PhyLogger({
|
|
13
|
+
logToFile: false,
|
|
14
|
+
logToConsole: true,
|
|
15
|
+
includeTrace: true,
|
|
16
|
+
namespace: 'device-phyos > ssh.ts',
|
|
17
|
+
});
|
|
18
|
+
function shouldSkipProxy(urlString) {
|
|
19
|
+
const noProxy = process.env.NO_PROXY || process.env.no_proxy;
|
|
20
|
+
if (!noProxy)
|
|
21
|
+
return false;
|
|
22
|
+
const hostname = new URL(urlString).hostname.toLowerCase();
|
|
23
|
+
return noProxy
|
|
24
|
+
.split(',')
|
|
25
|
+
.map((entry) => entry.trim().toLowerCase())
|
|
26
|
+
.filter(Boolean)
|
|
27
|
+
.some((entry) => entry === '*' || hostname.endsWith(entry));
|
|
28
|
+
}
|
|
29
|
+
const sshMethod = async (payload) => {
|
|
30
|
+
const { data } = payload;
|
|
31
|
+
if (!data) {
|
|
32
|
+
throw new Error('Missing required parameters: key, url, or auth');
|
|
33
|
+
}
|
|
34
|
+
logger.info('sshMethod(): SSH method invoked with data:', data);
|
|
35
|
+
const { key, auth, url } = data;
|
|
36
|
+
if (!key || !url || !auth) {
|
|
37
|
+
throw new Error('Missing required parameters: key, url, or auth');
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const dirPath = '/home/phygrid/.ssh';
|
|
41
|
+
if (!fs_1.default.existsSync(dirPath)) {
|
|
42
|
+
fs_1.default.mkdirSync(dirPath, { recursive: true });
|
|
43
|
+
}
|
|
44
|
+
await fs_1.default.promises.writeFile('/home/phygrid/.ssh/authorized_keys', key);
|
|
45
|
+
(0, child_process_1.spawnSync)('chmod', ['700', '/home/phygrid/.ssh']);
|
|
46
|
+
(0, child_process_1.spawnSync)('chmod', ['600', '/home/phygrid/.ssh/authorized_keys']);
|
|
47
|
+
logger.info('sshMethod(): SSH key updated successfully.');
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const errorMessage = error instanceof Error
|
|
51
|
+
? `${error.message}\n${error.stack}`
|
|
52
|
+
: JSON.stringify(error, Object.getOwnPropertyNames(error));
|
|
53
|
+
logger.error('sshMethod(): Failed to write SSH key:', errorMessage);
|
|
54
|
+
throw new Error('Failed to update SSH key');
|
|
55
|
+
}
|
|
56
|
+
const port = 22;
|
|
57
|
+
const host = '127.0.0.1';
|
|
58
|
+
const connectWebSocket = () => {
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
const wsOptions = {
|
|
61
|
+
headers: { Authorization: 'Bearer ' + auth },
|
|
62
|
+
};
|
|
63
|
+
if (shouldSkipProxy(url)) {
|
|
64
|
+
logger.info(`connectWebSocket(): Skipping proxy for ${url}`);
|
|
65
|
+
const ws = new ws_1.default(url, wsOptions);
|
|
66
|
+
ws.on('open', () => {
|
|
67
|
+
logger.info('connectWebSocket(): WebSocket connected (no proxy).');
|
|
68
|
+
resolve(ws);
|
|
69
|
+
});
|
|
70
|
+
ws.on('error', (err) => {
|
|
71
|
+
const errMsg = err instanceof Error ? `${err.message}\n${err.stack}` : JSON.stringify(err, Object.getOwnPropertyNames(err));
|
|
72
|
+
logger.error(`connectWebSocket(): WebSocket error (no proxy): ${errMsg}`);
|
|
73
|
+
reject(err);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const proxyUrl = process.env.HTTPS_PROXY ||
|
|
78
|
+
process.env.https_proxy ||
|
|
79
|
+
process.env.HTTP_PROXY ||
|
|
80
|
+
process.env.http_proxy;
|
|
81
|
+
if (proxyUrl) {
|
|
82
|
+
logger.info(`connectWebSocket(): Using proxy: ${proxyUrl} for ${url}`);
|
|
83
|
+
wsOptions.agent = new https_proxy_agent_1.HttpsProxyAgent(proxyUrl);
|
|
84
|
+
}
|
|
85
|
+
const ws = new ws_1.default(url, wsOptions);
|
|
86
|
+
ws.on('open', () => {
|
|
87
|
+
logger.info('connectWebSocket(): WebSocket connected (with proxy).');
|
|
88
|
+
resolve(ws);
|
|
89
|
+
});
|
|
90
|
+
ws.on('error', (err) => {
|
|
91
|
+
const errMsg = err instanceof Error ? `${err.message}\n${err.stack}` : JSON.stringify(err, Object.getOwnPropertyNames(err));
|
|
92
|
+
logger.error(`connectWebSocket(): WebSocket error (with proxy): ${errMsg}`);
|
|
93
|
+
reject(err);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
const establishSSHConnection = () => {
|
|
99
|
+
return new Promise((resolve, reject) => {
|
|
100
|
+
const conn = net_1.default.createConnection({ port, host }, () => {
|
|
101
|
+
logger.info('establishSSHConnection(): SSH connection established.');
|
|
102
|
+
resolve(conn);
|
|
103
|
+
});
|
|
104
|
+
conn.on('error', (err) => {
|
|
105
|
+
const errMsg = err instanceof Error ? `${err.message}\n${err.stack}` : JSON.stringify(err, Object.getOwnPropertyNames(err));
|
|
106
|
+
logger.error(`establishSSHConnection(): SSH connection error: ${errMsg}`);
|
|
107
|
+
reject(err);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
try {
|
|
112
|
+
const [ws, conn] = await Promise.all([connectWebSocket(), establishSSHConnection()]);
|
|
113
|
+
logger.info('sshMethod(): Proxying streams between SSH and WebSocket.');
|
|
114
|
+
const wsStream = ws_1.default.createWebSocketStream(ws);
|
|
115
|
+
conn.pipe(wsStream).pipe(conn);
|
|
116
|
+
conn.on('error', (err) => {
|
|
117
|
+
const errMsg = err instanceof Error ? `${err.message}\n${err.stack}` : JSON.stringify(err, Object.getOwnPropertyNames(err));
|
|
118
|
+
logger.error(`SSH connection error after piping: ${errMsg}`);
|
|
119
|
+
});
|
|
120
|
+
ws.on('error', (err) => {
|
|
121
|
+
const errMsg = err instanceof Error ? `${err.message}\n${err.stack}` : JSON.stringify(err, Object.getOwnPropertyNames(err));
|
|
122
|
+
logger.error(`WebSocket error after piping: ${errMsg}`);
|
|
123
|
+
});
|
|
124
|
+
let cleanedUp = false;
|
|
125
|
+
const cleanup = () => {
|
|
126
|
+
if (cleanedUp)
|
|
127
|
+
return;
|
|
128
|
+
cleanedUp = true;
|
|
129
|
+
if (!conn.destroyed) {
|
|
130
|
+
conn.destroy();
|
|
131
|
+
}
|
|
132
|
+
if (ws.readyState !== ws_1.default.CLOSING && ws.readyState !== ws_1.default.CLOSED) {
|
|
133
|
+
ws.close();
|
|
134
|
+
}
|
|
135
|
+
logger.info('sshMethod(): Cleaned up connections.');
|
|
136
|
+
};
|
|
137
|
+
conn.once('close', cleanup);
|
|
138
|
+
ws.once('close', cleanup);
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
const errMsg = err instanceof Error
|
|
142
|
+
? `${err.message}\n${err.stack}`
|
|
143
|
+
: JSON.stringify(err, Object.getOwnPropertyNames(err));
|
|
144
|
+
logger.error(`sshMethod(): Error during connection setup: ${errMsg}`);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
exports.default = sshMethod;
|
|
148
|
+
//# sourceMappingURL=ssh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../src/methods/ssh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.Scheduler = void 0;
|
|
27
|
+
const schedule = __importStar(require("node-schedule"));
|
|
28
|
+
const job_types_1 = require("../types/job.types");
|
|
29
|
+
const phy_logger_1 = require("@phystack/phy-logger");
|
|
30
|
+
const fs = __importStar(require("fs"));
|
|
31
|
+
const path = __importStar(require("path"));
|
|
32
|
+
const { spawn } = require('child_process');
|
|
33
|
+
const logger = new phy_logger_1.PhyLogger({
|
|
34
|
+
logToFile: false,
|
|
35
|
+
logToConsole: true,
|
|
36
|
+
includeTrace: true,
|
|
37
|
+
namespace: 'scheduler.service',
|
|
38
|
+
});
|
|
39
|
+
class Scheduler {
|
|
40
|
+
scheduledJobs = new Map();
|
|
41
|
+
phyhub = undefined;
|
|
42
|
+
executionCounts = new Map();
|
|
43
|
+
initialized = false;
|
|
44
|
+
healthCheckInterval = null;
|
|
45
|
+
jobStateFile = '/data/scheduler_jobs.json';
|
|
46
|
+
constructor() {
|
|
47
|
+
this.startHealthCheck();
|
|
48
|
+
this.loadPersistedJobs();
|
|
49
|
+
logger.info(`Scheduler initialized.`);
|
|
50
|
+
}
|
|
51
|
+
startHealthCheck() {
|
|
52
|
+
if (this.healthCheckInterval) {
|
|
53
|
+
clearInterval(this.healthCheckInterval);
|
|
54
|
+
}
|
|
55
|
+
this.healthCheckInterval = setInterval(() => {
|
|
56
|
+
this.checkSchedulerHealth();
|
|
57
|
+
}, 3600000);
|
|
58
|
+
}
|
|
59
|
+
checkSchedulerHealth() {
|
|
60
|
+
try {
|
|
61
|
+
const scheduledJobCount = this.scheduledJobs.size;
|
|
62
|
+
const nextJobs = {};
|
|
63
|
+
this.scheduledJobs.forEach((job, id) => {
|
|
64
|
+
try {
|
|
65
|
+
const nextExecution = job.nextInvocation();
|
|
66
|
+
nextJobs[id] = nextExecution ? nextExecution.toString() : 'Not scheduled';
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
nextJobs[id] = 'Error determining next execution';
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
logger.info(`Scheduler health check: ${scheduledJobCount} jobs active`, { nextJobs });
|
|
73
|
+
if (!this.phyhub) {
|
|
74
|
+
logger.warn('Scheduler health check: phyhub is not connected');
|
|
75
|
+
}
|
|
76
|
+
this.persistJobState();
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
logger.error('Scheduler health check failed', error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
persistJobState() {
|
|
83
|
+
try {
|
|
84
|
+
const jobsState = {};
|
|
85
|
+
this.scheduledJobs.forEach((_, id) => {
|
|
86
|
+
const execCount = this.executionCounts.get(id) || 0;
|
|
87
|
+
jobsState[id] = {
|
|
88
|
+
executionCount: execCount,
|
|
89
|
+
lastChecked: new Date().toISOString()
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
const dir = path.dirname(this.jobStateFile);
|
|
93
|
+
if (!fs.existsSync(dir)) {
|
|
94
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
95
|
+
}
|
|
96
|
+
fs.writeFileSync(this.jobStateFile, JSON.stringify(jobsState, null, 2));
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
logger.error('Failed to persist job state', error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
loadPersistedJobs() {
|
|
103
|
+
try {
|
|
104
|
+
if (fs.existsSync(this.jobStateFile)) {
|
|
105
|
+
const jobsState = JSON.parse(fs.readFileSync(this.jobStateFile, 'utf8'));
|
|
106
|
+
for (const [id, state] of Object.entries(jobsState)) {
|
|
107
|
+
if (typeof state === 'object' && state !== null && 'executionCount' in state) {
|
|
108
|
+
this.executionCounts.set(id, state.executionCount);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
logger.info(`Loaded persisted state for ${Object.keys(jobsState).length} jobs`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
logger.error('Failed to load persisted jobs', error);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
setHubDevice(phyhub) {
|
|
119
|
+
if (!phyhub) {
|
|
120
|
+
logger.error('setHubDevice(): Invalid phyhub object provided');
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const wasConnected = !!this.phyhub;
|
|
124
|
+
this.phyhub = phyhub;
|
|
125
|
+
this.initialized = true;
|
|
126
|
+
if (!wasConnected && this.phyhub) {
|
|
127
|
+
logger.info('setHubDevice(): HubDevice connected to scheduler');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
scheduleJob(job, tz, deviceTwinId) {
|
|
131
|
+
try {
|
|
132
|
+
if (!this.initialized) {
|
|
133
|
+
logger.warn(`scheduleJob(): Scheduler not yet initialized. Attempting to schedule job ${job.id} anyway.`);
|
|
134
|
+
}
|
|
135
|
+
if (!this.phyhub) {
|
|
136
|
+
throw new Error('HubDevice object not initialized. Jobs cannot be properly reported.');
|
|
137
|
+
}
|
|
138
|
+
if (!job.schedule) {
|
|
139
|
+
throw new Error('Cron schedule is required');
|
|
140
|
+
}
|
|
141
|
+
if (this.isJobScheduled(job.id)) {
|
|
142
|
+
logger.info(`scheduleJob(): Job ${job.id} is already scheduled. Replacing old job with new job`);
|
|
143
|
+
this.cancelJob(job.id);
|
|
144
|
+
}
|
|
145
|
+
if (job.status !== job_types_1.JobStatusEnum.Pending) {
|
|
146
|
+
throw new Error('Job already running');
|
|
147
|
+
}
|
|
148
|
+
const scheduleFunction = async () => {
|
|
149
|
+
try {
|
|
150
|
+
const currentExecutions = (this.executionCounts.get(job.id) || 0) + 1;
|
|
151
|
+
this.executionCounts.set(job.id, currentExecutions);
|
|
152
|
+
const twinId = deviceTwinId;
|
|
153
|
+
if (job.maxExecutions && currentExecutions >= job.maxExecutions) {
|
|
154
|
+
this.cancelJob(job.id);
|
|
155
|
+
job.status = job_types_1.JobStatusEnum.Completed;
|
|
156
|
+
await this.reportJobStatus(twinId, job);
|
|
157
|
+
logger.info(`scheduleJob(): Job ${job.id} has been completed due to reaching max executions`);
|
|
158
|
+
}
|
|
159
|
+
logger.info(`scheduleJob(): Executing ${job.data.command} of scheduled job ${job.id}`);
|
|
160
|
+
try {
|
|
161
|
+
const cmd = spawn('/usr/bin/systemctl', [job.data.command]);
|
|
162
|
+
cmd.on('error', (error) => {
|
|
163
|
+
logger.error(`scheduleJob(): Failed to execute '${job.data.command}' for job ${job.id}`, error);
|
|
164
|
+
});
|
|
165
|
+
cmd.on('exit', (code, signal) => {
|
|
166
|
+
if (code === 0) {
|
|
167
|
+
logger.info(`scheduleJob(): Command '${job.data.command}' executed successfully for job ${job.id} at time ${new Date().toISOString()}`);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
logger.error(`scheduleJob(): Command '${job.data.command}' for job ${job.id} exited with code ${code} and signal ${signal}`);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
catch (cmdError) {
|
|
175
|
+
logger.error(`scheduleJob(): Exception while executing command for job ${job.id}`, cmdError);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch (funcError) {
|
|
179
|
+
logger.error(`scheduleJob(): Exception in schedule function for job ${job.id}`, funcError);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
const scheduledJob = schedule.scheduleJob({
|
|
183
|
+
rule: job.schedule,
|
|
184
|
+
tz
|
|
185
|
+
}, scheduleFunction);
|
|
186
|
+
if (!scheduledJob) {
|
|
187
|
+
throw new Error(`Failed to create scheduled job with cron: ${job.schedule}`);
|
|
188
|
+
}
|
|
189
|
+
this.scheduledJobs.set(job.id, scheduledJob);
|
|
190
|
+
this.persistJobState();
|
|
191
|
+
try {
|
|
192
|
+
const formatter = new Intl.DateTimeFormat("en-US", {
|
|
193
|
+
timeZone: tz,
|
|
194
|
+
year: "numeric",
|
|
195
|
+
month: "long",
|
|
196
|
+
day: "numeric",
|
|
197
|
+
hour: "2-digit",
|
|
198
|
+
minute: "2-digit",
|
|
199
|
+
second: "2-digit",
|
|
200
|
+
timeZoneName: "short",
|
|
201
|
+
});
|
|
202
|
+
const nextInvocation = scheduledJob.nextInvocation();
|
|
203
|
+
if (nextInvocation) {
|
|
204
|
+
const scheduledAt = formatter.format(new Date(nextInvocation.toString()));
|
|
205
|
+
const currentDateTime = formatter.format(new Date());
|
|
206
|
+
logger.info(`scheduleJob(): Job ${job.id} has been scheduled to run at ${scheduledAt} [current time: ${currentDateTime}]`);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
logger.warn(`scheduleJob(): Job ${job.id} scheduled but nextInvocation is undefined`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (formattingError) {
|
|
213
|
+
logger.error(`scheduleJob(): Error formatting job schedule time for job ${job.id}`, formattingError);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
logger.error(`scheduleJob(): Failed to schedule job ${job.id}`, error);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async reportJobStatus(twinId, job) {
|
|
221
|
+
if (!this.phyhub) {
|
|
222
|
+
logger.warn(`reportJobStatus(): Cannot report job ${job.id} status - phyhub not initialized`);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
try {
|
|
226
|
+
await this.phyhub.reportDeviceJob(twinId, job);
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
logger.error(`reportJobStatus(): Failed to report job ${job.id} status`, error);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
cancelJob(jobId) {
|
|
233
|
+
try {
|
|
234
|
+
const job = this.scheduledJobs.get(jobId);
|
|
235
|
+
if (job) {
|
|
236
|
+
job.cancel();
|
|
237
|
+
this.scheduledJobs.delete(jobId);
|
|
238
|
+
this.executionCounts.delete(jobId);
|
|
239
|
+
this.persistJobState();
|
|
240
|
+
logger.info(`cancelJob(): Successfully cancelled job ${jobId}`);
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
logger.warn(`cancelJob(): Job ${jobId} not found`);
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
logger.error(`cancelJob(): Error cancelling job ${jobId}`, error);
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
getScheduledJobs() {
|
|
252
|
+
return Array.from(this.scheduledJobs.keys());
|
|
253
|
+
}
|
|
254
|
+
isJobScheduled(jobId) {
|
|
255
|
+
return this.scheduledJobs.has(jobId);
|
|
256
|
+
}
|
|
257
|
+
instantJob(job, deviceTwinId) {
|
|
258
|
+
try {
|
|
259
|
+
const twinId = deviceTwinId;
|
|
260
|
+
logger.info(`instantJob(): Executing ${job.data.command} of instant job ${job.id}`);
|
|
261
|
+
const cmd = spawn('/usr/bin/systemctl', [job.data.command]);
|
|
262
|
+
job.status = job_types_1.JobStatusEnum.Completed;
|
|
263
|
+
this.reportJobStatus(twinId, job).catch(err => {
|
|
264
|
+
logger.error(`instantJob(): Failed to report job completion for ${job.id}`, err);
|
|
265
|
+
});
|
|
266
|
+
cmd.on('error', (error) => {
|
|
267
|
+
logger.error(`instantJob(): Failed to execute '${job.data.command}' for job ${job.id}`, error);
|
|
268
|
+
});
|
|
269
|
+
cmd.on('exit', (code, signal) => {
|
|
270
|
+
if (code === 0) {
|
|
271
|
+
logger.info(`instantJob(): Command '${job.data.command}' executed successfully for job ${job.id}`);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
logger.error(`instantJob(): Command '${job.data.command}' for job ${job.id} exited with code ${code} and signal ${signal}`);
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
logger.error(`instantJob(): Exception executing job ${job.id}`, error);
|
|
280
|
+
job.status = job_types_1.JobStatusEnum.Completed;
|
|
281
|
+
this.reportJobStatus(deviceTwinId, job).catch(err => {
|
|
282
|
+
logger.error(`instantJob(): Failed to report job error for ${job.id}`, err);
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
processJobs(jobs, tz = 'UTC', deviceTwinId) {
|
|
287
|
+
if (!jobs || !Array.isArray(jobs) || jobs.length === 0) {
|
|
288
|
+
logger.info(`processJobs(): No jobs to process`);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (!deviceTwinId) {
|
|
292
|
+
logger.error(`processJobs(): Missing required deviceTwinId`);
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
logger.info(`processJobs(): Processing ${jobs.length} jobs with timezone ${tz}`);
|
|
296
|
+
jobs.forEach((job) => {
|
|
297
|
+
if (!job || typeof job !== 'object' || !('id' in job)) {
|
|
298
|
+
logger.warn(`processJobs(): Skipping invalid job`);
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
try {
|
|
302
|
+
if (job.status === job_types_1.JobStatusEnum.Pending) {
|
|
303
|
+
switch (job.type) {
|
|
304
|
+
case job_types_1.JobTypeEnum.ScheduledCmd:
|
|
305
|
+
this.scheduleJob(job, tz, deviceTwinId);
|
|
306
|
+
break;
|
|
307
|
+
case job_types_1.JobTypeEnum.InstantCmd:
|
|
308
|
+
this.instantJob(job, deviceTwinId);
|
|
309
|
+
break;
|
|
310
|
+
default:
|
|
311
|
+
logger.warn(`processJobs(): Unknown job type for job ${job.id}: ${job.type}`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
logger.info(`processJobs(): Skipping job ${job.id} with status ${job.status}`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
logger.error(`processJobs(): Error processing job ${job.id}`, error);
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
exports.Scheduler = Scheduler;
|
|
325
|
+
//# sourceMappingURL=scheduler.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.service.js","sourceRoot":"","sources":["../../src/services/scheduler.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-interface.type.js","sourceRoot":"","sources":["../../../src/store/types/network-interface.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.default = syncTime;
|
|
27
|
+
const getAxiosInstanceWithProxy = async () => {
|
|
28
|
+
const module = await Promise.resolve().then(() => __importStar(require('@phystack/axios-proxy')));
|
|
29
|
+
return module.default;
|
|
30
|
+
};
|
|
31
|
+
const child_process_1 = require("child_process");
|
|
32
|
+
const util_1 = require("util");
|
|
33
|
+
const phy_logger_1 = require("@phystack/phy-logger");
|
|
34
|
+
const os_1 = require("os");
|
|
35
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
36
|
+
const ONE_HOUR_MS = 60 * 60 * 1000;
|
|
37
|
+
const RETRY_DELAY_MS = 5000;
|
|
38
|
+
const logger = new phy_logger_1.PhyLogger({
|
|
39
|
+
logToFile: false,
|
|
40
|
+
logToConsole: true,
|
|
41
|
+
includeTrace: true,
|
|
42
|
+
namespace: 'time-sync',
|
|
43
|
+
});
|
|
44
|
+
const url = 'http://screen.omborigrid.com/is-online.json';
|
|
45
|
+
function hasValidNetworkInterface() {
|
|
46
|
+
const interfaces = (0, os_1.networkInterfaces)();
|
|
47
|
+
for (const [, addresses] of Object.entries(interfaces)) {
|
|
48
|
+
if (!addresses)
|
|
49
|
+
continue;
|
|
50
|
+
for (const addr of addresses) {
|
|
51
|
+
if (addr.family === 'IPv4' && !addr.address.startsWith('169.254.')) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
async function syncTimeLoop(axios) {
|
|
59
|
+
while (true) {
|
|
60
|
+
try {
|
|
61
|
+
while (!hasValidNetworkInterface()) {
|
|
62
|
+
logger.info('syncTime(): Waiting for valid network interface...');
|
|
63
|
+
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY_MS));
|
|
64
|
+
}
|
|
65
|
+
const response = await axios.get(url, {
|
|
66
|
+
timeout: 10000,
|
|
67
|
+
validateStatus: () => true,
|
|
68
|
+
headers: {
|
|
69
|
+
'Cache-Control': 'no-cache, no-store, must-revalidate',
|
|
70
|
+
'Pragma': 'no-cache',
|
|
71
|
+
'Expires': '0'
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
const dateHeader = response.headers.date;
|
|
75
|
+
if (!dateHeader) {
|
|
76
|
+
logger.error('syncTime(): No date header received');
|
|
77
|
+
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY_MS));
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
logger.info('syncTime(): Attempting to set system time to:', { targetDate: dateHeader });
|
|
81
|
+
const commands = [
|
|
82
|
+
`sudo date -s "${dateHeader}"`,
|
|
83
|
+
'sudo hwclock --systohc'
|
|
84
|
+
];
|
|
85
|
+
for (const command of commands) {
|
|
86
|
+
const { stderr } = await execAsync(command, { timeout: 3000 });
|
|
87
|
+
if (stderr) {
|
|
88
|
+
logger.error('syncTime(): Error executing command:', { command, error: stderr });
|
|
89
|
+
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY_MS));
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
logger.info('syncTime(): System time synchronized successfully');
|
|
94
|
+
await new Promise(resolve => setTimeout(resolve, ONE_HOUR_MS));
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
logger.error('syncTime(): Failed to sync time:', error);
|
|
98
|
+
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY_MS));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function syncTime() {
|
|
103
|
+
const axios = await (await getAxiosInstanceWithProxy())();
|
|
104
|
+
syncTimeLoop(axios).catch(error => {
|
|
105
|
+
logger.error('syncTime(): Background sync loop failed:', error);
|
|
106
|
+
});
|
|
107
|
+
return Promise.resolve();
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=time-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-sync.js","sourceRoot":"","sources":["../src/time-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeviceCommand = void 0;
|
|
4
|
+
var DeviceCommand;
|
|
5
|
+
(function (DeviceCommand) {
|
|
6
|
+
DeviceCommand["Reboot"] = "reboot";
|
|
7
|
+
})(DeviceCommand || (exports.DeviceCommand = DeviceCommand = {}));
|
|
8
|
+
//# sourceMappingURL=command.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.types.js","sourceRoot":"","sources":["../../src/types/command.types.ts"],"names":[],"mappings":";;;AAAA,IAAY,aAEX;AAFD,WAAY,aAAa;IACvB,kCAAiB,CAAA;AACnB,CAAC,EAFW,aAAa,6BAAb,aAAa,QAExB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.types.js","sourceRoot":"","sources":["../../src/types/container.types.ts"],"names":[],"mappings":""}
|