@aiscene/aiserver 1.9.9 → 2.0.0
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/dist/core/adb.js +3 -3
- package/dist/core/adb.js.map +1 -1
- package/dist/task/guada-online-batch-poller.d.ts +3 -0
- package/dist/task/guada-online-batch-poller.d.ts.map +1 -1
- package/dist/task/guada-online-batch-poller.js +34 -14
- package/dist/task/guada-online-batch-poller.js.map +1 -1
- package/package.json +1 -1
package/dist/core/adb.js
CHANGED
|
@@ -22,12 +22,12 @@ export async function runAdb(deviceId, args, timeout = 10000) {
|
|
|
22
22
|
export function adbShellArgs(...args) {
|
|
23
23
|
return ['shell', ...args];
|
|
24
24
|
}
|
|
25
|
-
function
|
|
25
|
+
function escapeShellArg(arg) {
|
|
26
26
|
if (/^[A-Za-z0-9_@%+=:,./-]+$/.test(arg))
|
|
27
27
|
return arg;
|
|
28
|
-
return
|
|
28
|
+
return arg.replace(/([\\\s"'`$&|;<>(){}[\]*?!~#])/g, '\\$1');
|
|
29
29
|
}
|
|
30
30
|
export function adbShellCommandArgs(...args) {
|
|
31
|
-
return ['shell', args.map((arg) =>
|
|
31
|
+
return ['shell', args.map((arg) => escapeShellArg(String(arg))).join(' ')];
|
|
32
32
|
}
|
|
33
33
|
//# sourceMappingURL=adb.js.map
|
package/dist/core/adb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adb.js","sourceRoot":"","sources":["../../src/core/adb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE5C,KAAK,UAAU,UAAU,CACvB,IAAc,EACd,OAAe;IAEf,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC9B,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CACzC,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAc,EACd,UAAkB,KAAK;IAEvB,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAAgB,EAChB,IAAc,EACd,UAAkB,KAAK;IAEvB,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC9D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAG,IAAc;IAC5C,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,
|
|
1
|
+
{"version":3,"file":"adb.js","sourceRoot":"","sources":["../../src/core/adb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE5C,KAAK,UAAU,UAAU,CACvB,IAAc,EACd,OAAe;IAEf,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC9B,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CACzC,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAc,EACd,UAAkB,KAAK;IAEvB,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAAgB,EAChB,IAAc,EACd,UAAkB,KAAK;IAEvB,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC9D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAG,IAAc;IAC5C,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACrD,OAAO,GAAG,CAAC,OAAO,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAG,IAAc;IACnD,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -10,10 +10,13 @@ export declare class GuadaOnlineBatchPoller {
|
|
|
10
10
|
private activeBatchIds;
|
|
11
11
|
private config;
|
|
12
12
|
private runner;
|
|
13
|
+
private pollCount;
|
|
14
|
+
private lastEmptyLogAt;
|
|
13
15
|
start(config: TaskConfig, runner: BatchRunner): void;
|
|
14
16
|
stop(): void;
|
|
15
17
|
private poll;
|
|
16
18
|
private claimNextTask;
|
|
19
|
+
private logEmptyPoll;
|
|
17
20
|
private getGuadaApiBase;
|
|
18
21
|
}
|
|
19
22
|
export declare const guadaOnlineBatchPoller: GuadaOnlineBatchPoller;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guada-online-batch-poller.d.ts","sourceRoot":"","sources":["../../src/task/guada-online-batch-poller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM5D,KAAK,WAAW,GAAG;IACjB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/E,CAAC;
|
|
1
|
+
{"version":3,"file":"guada-online-batch-poller.d.ts","sourceRoot":"","sources":["../../src/task/guada-online-batch-poller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM5D,KAAK,WAAW,GAAG;IACjB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/E,CAAC;AAmBF,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,cAAc,CAAK;IAE3B,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAyBpD,IAAI,IAAI,IAAI;YAQE,IAAI;YA+BJ,aAAa;IAyC3B,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,eAAe;CAUxB;AAED,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"}
|
|
@@ -7,18 +7,19 @@ const logger = createLogger('GuadaBatchPoller');
|
|
|
7
7
|
function trimRightSlash(value) {
|
|
8
8
|
return value.trim().replace(/\/+$/, '');
|
|
9
9
|
}
|
|
10
|
-
function
|
|
10
|
+
function getLocalIPs() {
|
|
11
11
|
const interfaces = os.networkInterfaces();
|
|
12
|
+
const addresses = [];
|
|
12
13
|
for (const name of Object.keys(interfaces)) {
|
|
13
14
|
const nets = interfaces[name];
|
|
14
15
|
if (!nets)
|
|
15
16
|
continue;
|
|
16
17
|
for (const net of nets) {
|
|
17
18
|
if (net.family === 'IPv4' && !net.internal)
|
|
18
|
-
|
|
19
|
+
addresses.push(net.address);
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
|
-
return '127.0.0.1';
|
|
22
|
+
return addresses.length > 0 ? Array.from(new Set(addresses)) : ['127.0.0.1'];
|
|
22
23
|
}
|
|
23
24
|
export class GuadaOnlineBatchPoller {
|
|
24
25
|
interval = null;
|
|
@@ -27,6 +28,8 @@ export class GuadaOnlineBatchPoller {
|
|
|
27
28
|
activeBatchIds = new Set();
|
|
28
29
|
config;
|
|
29
30
|
runner;
|
|
31
|
+
pollCount = 0;
|
|
32
|
+
lastEmptyLogAt = 0;
|
|
30
33
|
start(config, runner) {
|
|
31
34
|
const enabled = String(process.env.GUADA_ONLINE_BATCH_POLLER_ENABLED || 'true').toLowerCase() !== 'false';
|
|
32
35
|
if (!enabled) {
|
|
@@ -41,6 +44,8 @@ export class GuadaOnlineBatchPoller {
|
|
|
41
44
|
this.config = config;
|
|
42
45
|
this.runner = runner;
|
|
43
46
|
this.running = true;
|
|
47
|
+
this.pollCount = 0;
|
|
48
|
+
this.lastEmptyLogAt = 0;
|
|
44
49
|
this.interval = setInterval(() => {
|
|
45
50
|
void this.poll();
|
|
46
51
|
}, Math.max(3000, config.pollInterval || 5000));
|
|
@@ -60,10 +65,13 @@ export class GuadaOnlineBatchPoller {
|
|
|
60
65
|
if (this.activeBatchIds.size >= Math.max(1, this.config.maxConcurrent || 1))
|
|
61
66
|
return;
|
|
62
67
|
this.polling = true;
|
|
68
|
+
this.pollCount += 1;
|
|
63
69
|
try {
|
|
64
70
|
const task = await this.claimNextTask();
|
|
65
|
-
if (!task?.batchId || !Array.isArray(task.cases) || task.cases.length === 0)
|
|
71
|
+
if (!task?.batchId || !Array.isArray(task.cases) || task.cases.length === 0) {
|
|
72
|
+
this.logEmptyPoll();
|
|
66
73
|
return;
|
|
74
|
+
}
|
|
67
75
|
if (this.activeBatchIds.has(task.batchId))
|
|
68
76
|
return;
|
|
69
77
|
this.activeBatchIds.add(task.batchId);
|
|
@@ -89,20 +97,23 @@ export class GuadaOnlineBatchPoller {
|
|
|
89
97
|
if (!apiBase)
|
|
90
98
|
return null;
|
|
91
99
|
const auth = loadNodeAuth();
|
|
100
|
+
const localIpAddresses = getLocalIPs();
|
|
101
|
+
const devices = deviceRepo.getOnline().map((device) => ({
|
|
102
|
+
deviceId: device.serialNumber,
|
|
103
|
+
serialNumber: device.serialNumber,
|
|
104
|
+
udid: device.serialNumber,
|
|
105
|
+
deviceName: device.model,
|
|
106
|
+
platform: device.platform,
|
|
107
|
+
osType: device.platform === 'ios' ? 'iOS' : 'Android',
|
|
108
|
+
status: device.status,
|
|
109
|
+
}));
|
|
92
110
|
const response = await axios.post(`${apiBase}/test-loop/online/tasks/next`, {
|
|
93
111
|
nodeId: this.config.nodeId,
|
|
94
112
|
nodeAuthId: auth?.nodeAuthId,
|
|
95
|
-
ipAddress:
|
|
113
|
+
ipAddress: localIpAddresses[0],
|
|
114
|
+
ipAddresses: localIpAddresses,
|
|
96
115
|
callbackBaseUrl: apiBase,
|
|
97
|
-
devices
|
|
98
|
-
deviceId: device.serialNumber,
|
|
99
|
-
serialNumber: device.serialNumber,
|
|
100
|
-
udid: device.serialNumber,
|
|
101
|
-
deviceName: device.model,
|
|
102
|
-
platform: device.platform,
|
|
103
|
-
osType: device.platform === 'ios' ? 'iOS' : 'Android',
|
|
104
|
-
status: device.status,
|
|
105
|
-
})),
|
|
116
|
+
devices,
|
|
106
117
|
}, {
|
|
107
118
|
timeout: 10000,
|
|
108
119
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -117,6 +128,15 @@ export class GuadaOnlineBatchPoller {
|
|
|
117
128
|
}
|
|
118
129
|
return task;
|
|
119
130
|
}
|
|
131
|
+
logEmptyPoll() {
|
|
132
|
+
const now = Date.now();
|
|
133
|
+
if (this.pollCount === 1 || now - this.lastEmptyLogAt >= 30000) {
|
|
134
|
+
this.lastEmptyLogAt = now;
|
|
135
|
+
const localIpAddresses = getLocalIPs();
|
|
136
|
+
const devices = deviceRepo.getOnline();
|
|
137
|
+
logger.info(`Guada online batch poll heartbeat: no task, nodeId=${this.config.nodeId}, ips=${localIpAddresses.join(',')}, devices=${devices.length}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
120
140
|
getGuadaApiBase(config) {
|
|
121
141
|
const raw = process.env.GUADA_AI_API_BASE_URL ||
|
|
122
142
|
process.env.LOGIN_SCRIPT_API_URL ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guada-online-batch-poller.js","sourceRoot":"","sources":["../../src/task/guada-online-batch-poller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEpE,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAMhD,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,
|
|
1
|
+
{"version":3,"file":"guada-online-batch-poller.js","sourceRoot":"","sources":["../../src/task/guada-online-batch-poller.ts"],"names":[],"mappings":"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"}
|