@alwaysai/device-agent 0.2.0 → 1.0.0-pre-release
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/LICENSE +12 -0
- package/lib/application-control/config.d.ts.map +1 -1
- package/lib/application-control/config.js +6 -1
- package/lib/application-control/config.js.map +1 -1
- package/lib/application-control/index.d.ts +2 -2
- package/lib/application-control/index.d.ts.map +1 -1
- package/lib/application-control/index.js +2 -2
- package/lib/application-control/index.js.map +1 -1
- package/lib/application-control/install.d.ts +2 -2
- package/lib/application-control/install.d.ts.map +1 -1
- package/lib/application-control/install.js +10 -0
- package/lib/application-control/install.js.map +1 -1
- package/lib/application-control/status.d.ts +3 -3
- package/lib/application-control/status.d.ts.map +1 -1
- package/lib/application-control/status.js +4 -4
- package/lib/application-control/status.js.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts +7 -7
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.js +158 -100
- package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
- package/lib/cloud-connection/live-updates-handler.d.ts +9 -9
- package/lib/cloud-connection/live-updates-handler.d.ts.map +1 -1
- package/lib/cloud-connection/live-updates-handler.js +45 -42
- package/lib/cloud-connection/live-updates-handler.js.map +1 -1
- package/lib/cloud-connection/live-updates-handler.test.js +6 -5
- package/lib/cloud-connection/live-updates-handler.test.js.map +1 -1
- package/lib/cloud-connection/message-builder.d.ts +7 -0
- package/lib/cloud-connection/message-builder.d.ts.map +1 -0
- package/lib/cloud-connection/message-builder.js +63 -0
- package/lib/cloud-connection/message-builder.js.map +1 -0
- package/lib/cloud-connection/messages.d.ts +5 -15
- package/lib/cloud-connection/messages.d.ts.map +1 -1
- package/lib/cloud-connection/messages.js +22 -31
- package/lib/cloud-connection/messages.js.map +1 -1
- package/lib/cloud-connection/publisher.d.ts +4 -5
- package/lib/cloud-connection/publisher.d.ts.map +1 -1
- package/lib/cloud-connection/publisher.js +12 -21
- package/lib/cloud-connection/publisher.js.map +1 -1
- package/lib/cloud-connection/transaction-queue.d.ts +12 -0
- package/lib/cloud-connection/transaction-queue.d.ts.map +1 -0
- package/lib/cloud-connection/transaction-queue.js +38 -0
- package/lib/cloud-connection/transaction-queue.js.map +1 -0
- package/lib/cloud-connection/transaction-queue.test.d.ts +2 -0
- package/lib/cloud-connection/transaction-queue.test.d.ts.map +1 -0
- package/lib/cloud-connection/transaction-queue.test.js +46 -0
- package/lib/cloud-connection/transaction-queue.test.js.map +1 -0
- package/lib/local-connection/rabbitmq-connection.d.ts.map +1 -1
- package/lib/local-connection/rabbitmq-connection.js +5 -1
- package/lib/local-connection/rabbitmq-connection.js.map +1 -1
- package/lib/subcommands/app/index.d.ts.map +1 -1
- package/lib/subcommands/app/index.js +1 -0
- package/lib/subcommands/app/index.js.map +1 -1
- package/lib/subcommands/app/models.d.ts +5 -0
- package/lib/subcommands/app/models.d.ts.map +1 -1
- package/lib/subcommands/app/models.js +42 -1
- package/lib/subcommands/app/models.js.map +1 -1
- package/lib/subcommands/app/status.js +1 -1
- package/lib/subcommands/app/status.js.map +1 -1
- package/lib/subcommands/app/version.d.ts.map +1 -1
- package/lib/subcommands/app/version.js +9 -11
- package/lib/subcommands/app/version.js.map +1 -1
- package/package.json +5 -4
- package/readme.md +30 -1
- package/src/application-control/config.ts +5 -1
- package/src/application-control/index.ts +2 -2
- package/src/application-control/install.ts +17 -4
- package/src/application-control/status.ts +9 -8
- package/src/cloud-connection/device-agent-cloud-connection.ts +225 -132
- package/src/cloud-connection/live-updates-handler.test.ts +6 -5
- package/src/cloud-connection/live-updates-handler.ts +90 -64
- package/src/cloud-connection/message-builder.ts +117 -0
- package/src/cloud-connection/messages.ts +27 -35
- package/src/cloud-connection/publisher.ts +17 -30
- package/src/cloud-connection/transaction-queue.test.ts +55 -0
- package/src/cloud-connection/transaction-queue.ts +40 -0
- package/src/local-connection/rabbitmq-connection.ts +5 -1
- package/src/subcommands/app/index.ts +3 -1
- package/src/subcommands/app/models.ts +44 -0
- package/src/subcommands/app/status.ts +2 -2
- package/src/subcommands/app/version.ts +16 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-queue.js","sourceRoot":"","sources":["../../src/cloud-connection/transaction-queue.ts"],"names":[],"mappings":";;;AAAA,MAAa,gBAAgB;IAI3B;QAFQ,uBAAkB,GAA+B,EAAE,CAAC;QAG1D,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC/B,CAAC;IAEM,cAAc,CAAC,IAAY,EAAE,SAAiB;QACnD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;YAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;SAC3C;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,iCAAiC,CAAC,CAAC;SAChE;IACH,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAEM,eAAe,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEM,oBAAoB,CAAC,IAAY;QACtC,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAEM,WAAW,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IAEM,kBAAkB;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACF;AAvCD,4CAuCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-queue.test.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/transaction-queue.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const device_agent_schemas_1 = require("@alwaysai/device-agent-schemas");
|
|
4
|
+
const transaction_queue_1 = require("./transaction-queue");
|
|
5
|
+
describe('Test Transaction Queue', () => {
|
|
6
|
+
let txnQueue;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
txnQueue = new transaction_queue_1.TransactionQueue();
|
|
9
|
+
jest.clearAllMocks();
|
|
10
|
+
});
|
|
11
|
+
test('Add new to transaction queue', async () => {
|
|
12
|
+
const txId = (0, device_agent_schemas_1.generateTxId)();
|
|
13
|
+
const projectId = '1241fad-agah-gfadg-2352dgzg';
|
|
14
|
+
txnQueue.addTxIdToQueue(txId, projectId);
|
|
15
|
+
expect(txnQueue.checkTxnInQueue(txId)).toBeTruthy();
|
|
16
|
+
});
|
|
17
|
+
test('Attempt to add existing to transaction queue, results in failure', async () => {
|
|
18
|
+
const txId = (0, device_agent_schemas_1.generateTxId)();
|
|
19
|
+
const projectId = '1241fad-agah-gfadg-2352dgzg';
|
|
20
|
+
txnQueue.addTxIdToQueue(txId, projectId);
|
|
21
|
+
expect(() => txnQueue.addTxIdToQueue(txId, projectId)).toThrow(`txId ${txId} is already added to the queue!`);
|
|
22
|
+
});
|
|
23
|
+
test('Check current transaction', async () => {
|
|
24
|
+
const txId = (0, device_agent_schemas_1.generateTxId)();
|
|
25
|
+
const projectId = '1241fad-agah-gfadg-2352dgzg';
|
|
26
|
+
txnQueue.addTxIdToQueue(txId, projectId);
|
|
27
|
+
const txId2 = (0, device_agent_schemas_1.generateTxId)();
|
|
28
|
+
const projectId2 = '1241faegta-agah-gagadg-2352dgzg';
|
|
29
|
+
txnQueue.addTxIdToQueue(txId2, projectId2);
|
|
30
|
+
expect(txnQueue.getCurrentTxId()).toEqual(txId);
|
|
31
|
+
});
|
|
32
|
+
test('Test remove transaction from queue', async () => {
|
|
33
|
+
const txId = (0, device_agent_schemas_1.generateTxId)();
|
|
34
|
+
const projectId = '1241fad-agah-gfadg-2352dgzg';
|
|
35
|
+
txnQueue.addTxIdToQueue(txId, projectId);
|
|
36
|
+
txnQueue.completeCurrentTxn();
|
|
37
|
+
expect(txnQueue.getCurrentTxId()).toBeUndefined();
|
|
38
|
+
});
|
|
39
|
+
test('Test get project ID for a given txId', async () => {
|
|
40
|
+
const txId = (0, device_agent_schemas_1.generateTxId)();
|
|
41
|
+
const projectId = '1241fad-agah-gfadg-2352dgzg';
|
|
42
|
+
txnQueue.addTxIdToQueue(txId, projectId);
|
|
43
|
+
expect(txnQueue.getProjectIdForTxnId(txId)).toEqual(projectId);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=transaction-queue.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-queue.test.js","sourceRoot":"","sources":["../../src/cloud-connection/transaction-queue.test.ts"],"names":[],"mappings":";;AAAA,yEAA8D;AAC9D,2DAAuD;AAEvD,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,QAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,oCAAgB,EAAE,CAAC;QAClC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAA,mCAAY,GAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,6BAA6B,CAAC;QAChD,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,IAAI,GAAG,IAAA,mCAAY,GAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,6BAA6B,CAAC;QAChD,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAC5D,QAAQ,IAAI,iCAAiC,CAC9C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,IAAI,GAAG,IAAA,mCAAY,GAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,6BAA6B,CAAC;QAChD,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAG,IAAA,mCAAY,GAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,iCAAiC,CAAC;QACrD,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,IAAI,GAAG,IAAA,mCAAY,GAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,6BAA6B,CAAC;QAChD,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAE9B,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,GAAG,IAAA,mCAAY,GAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,6BAA6B,CAAC;QAChD,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEzC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-connection.d.ts","sourceRoot":"","sources":["../../src/local-connection/rabbitmq-connection.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAEjE,wBAAsB,6BAA6B,qBAwBlD;AAED,wBAAsB,8BAA8B,
|
|
1
|
+
{"version":3,"file":"rabbitmq-connection.d.ts","sourceRoot":"","sources":["../../src/local-connection/rabbitmq-connection.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAEjE,wBAAsB,6BAA6B,qBAwBlD;AAED,wBAAsB,8BAA8B,kBAgCnD;AAED,wBAAsB,sBAAsB,kBA2B3C;AAED,wBAAsB,qBAAqB,kBAc1C"}
|
|
@@ -46,7 +46,11 @@ async function writeRabbitMQDockerComposeFile() {
|
|
|
46
46
|
ports: [`${constants_1.LOCAL_CONNECTION_PORT}:${constants_1.LOCAL_CONNECTION_PORT}`],
|
|
47
47
|
hostname: 'my-rabbit',
|
|
48
48
|
restart: 'on-failure',
|
|
49
|
-
environment: [`RABBITMQ_NODE_PORT=${constants_1.LOCAL_CONNECTION_PORT}`]
|
|
49
|
+
environment: [`RABBITMQ_NODE_PORT=${constants_1.LOCAL_CONNECTION_PORT}`],
|
|
50
|
+
volumes: [
|
|
51
|
+
'./rabbitmq/:/var/lib/rabbitmq/',
|
|
52
|
+
'./rabbitmq/log/:/var/log/rabbitmq/'
|
|
53
|
+
]
|
|
50
54
|
}
|
|
51
55
|
}
|
|
52
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-connection.js","sourceRoot":"","sources":["../../src/local-connection/rabbitmq-connection.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,yCAAkC;AAClC,mDAAqC;AACrC,6BAA6B;AAE7B,qDAG6B;AAC7B,4CAA8C;AAC9C,2CAAoD;AAEvC,QAAA,mBAAmB,GAAG,kBAAkB,CAAC;AACzC,QAAA,qBAAqB,GAAG,2BAA2B,CAAC;AAE1D,KAAK,UAAU,6BAA6B;IACjD,eAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAA,gBAAS,GAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,8CAAgC,CAAC,CAAC,EAAE;QAC7D,eAAM,CAAC,IAAI,CACT,gEAAgE,CACjE,CAAC;QACF,OAAO,KAAK,CAAC;KACd;IACD,MAAM,aAAa,GAAG,MAAM,wBAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,mCAAqB,EAAE,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,EAAE;QAClC,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvD,IACE,eAAe,CAAC,IAAI,KAAK,6BAAqB;YAC9C,eAAe,CAAC,KAAK,KAAK,IAAI,EAC9B;YACA,eAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;SACb;QACD,eAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;KACd;IACD,eAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC;AACf,CAAC;AAxBD,sEAwBC;AAEM,KAAK,UAAU,8BAA8B;IAClD,MAAM,OAAO,GAAG,IAAA,gBAAS,GAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,mCAAqB,CAAC,CAAC,EAAE;QAClD,MAAM,IAAA,gBAAS,GAAE,CAAC,MAAM,CAAC,mCAAqB,CAAC,CAAC;KACjD;IAED,eAAM,CAAC,KAAK,CACV,6EAA6E,iCAAqB,EAAE,CACrG,CAAC;IAEF,MAAM,wBAAwB,GAAG;QAC/B,QAAQ,EAAE;YACR,CAAC,2BAAmB,CAAC,EAAE;gBACrB,cAAc,EAAE,6BAAqB;gBACrC,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,CAAC,GAAG,iCAAqB,IAAI,iCAAqB,EAAE,CAAC;gBAC5D,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,YAAY;gBACrB,WAAW,EAAE,CAAC,sBAAsB,iCAAqB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"rabbitmq-connection.js","sourceRoot":"","sources":["../../src/local-connection/rabbitmq-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/index.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,YAAY,mDAwBvB,CAAC"}
|
|
@@ -24,6 +24,7 @@ exports.appCliBranch = (0, alwayscli_1.CliBranch)({
|
|
|
24
24
|
models_1.addModelCliLeaf,
|
|
25
25
|
models_1.removeModelCliLeaf,
|
|
26
26
|
models_1.replaceModelsCliLeaf,
|
|
27
|
+
models_1.installModelCliLeaf,
|
|
27
28
|
models_1.updateModelsCliLeaf,
|
|
28
29
|
env_vars_1.getAllEnvsCliLeaf,
|
|
29
30
|
env_vars_1.setEnvCliLeaf,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/subcommands/app/index.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAChD,yCAA8D;AAC9D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/subcommands/app/index.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAChD,yCAA8D;AAC9D,qCAOkB;AAClB,qCAMkB;AAClB,uCAKmB;AACnB,qCAAiE;AAEpD,QAAA,YAAY,GAAG,IAAA,qBAAS,EAAC;IACpC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE;QACX,yBAAe;QACf,2BAAiB;QACjB,4BAAmB;QACnB,wBAAe;QACf,uBAAc;QACd,0BAAiB;QACjB,0BAAiB;QACjB,6BAAmB;QACnB,4BAAkB;QAClB,6BAAoB;QACpB,wBAAe;QACf,2BAAkB;QAClB,6BAAoB;QACpB,4BAAmB;QACnB,4BAAmB;QACnB,4BAAiB;QACjB,wBAAa;QACb,yBAAgB;QAChB,4BAAmB;KACpB;CACF,CAAC,CAAC"}
|
|
@@ -6,6 +6,11 @@ export declare const addModelCliLeaf: import("@alwaysai/alwayscli/lib/types").Cl
|
|
|
6
6
|
model: import("@alwaysai/alwayscli").CliInput<string, true>;
|
|
7
7
|
version: import("@alwaysai/alwayscli").CliInput<string, true>;
|
|
8
8
|
}, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
|
|
9
|
+
export declare const installModelCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
|
|
10
|
+
project: import("@alwaysai/alwayscli").CliInput<string, true>;
|
|
11
|
+
modelName: import("@alwaysai/alwayscli").CliInput<string, true>;
|
|
12
|
+
modelVersion: import("@alwaysai/alwayscli").CliInput<number, true>;
|
|
13
|
+
}, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
|
|
9
14
|
export declare const removeModelCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
|
|
10
15
|
project: import("@alwaysai/alwayscli").CliInput<string, true>;
|
|
11
16
|
model: import("@alwaysai/alwayscli").CliInput<string, true>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/models.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/models.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,oBAAoB;;4DAc/B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;4DA4C1B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;4DAyC9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;4DAkB7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;4DAqB/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DAiB9B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateModelsCliLeaf = exports.replaceModelsCliLeaf = exports.removeModelCliLeaf = exports.addModelCliLeaf = exports.showAppModelsCliLeaf = void 0;
|
|
3
|
+
exports.updateModelsCliLeaf = exports.replaceModelsCliLeaf = exports.removeModelCliLeaf = exports.installModelCliLeaf = exports.addModelCliLeaf = exports.showAppModelsCliLeaf = void 0;
|
|
4
4
|
const alwayscli_1 = require("@alwaysai/alwayscli");
|
|
5
5
|
const application_control_1 = require("../../application-control");
|
|
6
6
|
const device_agent_cloud_connection_1 = require("../../cloud-connection/device-agent-cloud-connection");
|
|
@@ -61,6 +61,47 @@ exports.addModelCliLeaf = (0, alwayscli_1.CliLeaf)({
|
|
|
61
61
|
await deviceAgent.stop();
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
|
+
exports.installModelCliLeaf = (0, alwayscli_1.CliLeaf)({
|
|
65
|
+
name: 'install-model',
|
|
66
|
+
description: 'Install an alwaysAI model to a project',
|
|
67
|
+
namedInputs: {
|
|
68
|
+
project: (0, alwayscli_1.CliStringInput)({
|
|
69
|
+
description: 'Project ID',
|
|
70
|
+
required: true
|
|
71
|
+
}),
|
|
72
|
+
modelName: (0, alwayscli_1.CliStringInput)({
|
|
73
|
+
description: 'Model Name',
|
|
74
|
+
required: true
|
|
75
|
+
}),
|
|
76
|
+
modelVersion: (0, alwayscli_1.CliNumberInput)({
|
|
77
|
+
description: 'Model Version',
|
|
78
|
+
required: true
|
|
79
|
+
})
|
|
80
|
+
},
|
|
81
|
+
async action(_, opts) {
|
|
82
|
+
const { project, modelName, modelVersion } = opts;
|
|
83
|
+
const deviceAgent = new device_agent_cloud_connection_1.DeviceAgentCloudConnection();
|
|
84
|
+
await deviceAgent.setupHandlers();
|
|
85
|
+
const topic = deviceAgent.getShadowTopics().projects.getAccepted;
|
|
86
|
+
const newAppCfg = await (0, application_control_1.readAppCfgFile)({ projectId: project });
|
|
87
|
+
newAppCfg['models'][modelName] = modelVersion;
|
|
88
|
+
const message = {
|
|
89
|
+
state: {
|
|
90
|
+
delta: {
|
|
91
|
+
[project]: {
|
|
92
|
+
appConfig: JSON.stringify(newAppCfg)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
clientToken: deviceAgent.getClientId()
|
|
97
|
+
};
|
|
98
|
+
await deviceAgent.handleMessage(topic, message);
|
|
99
|
+
while (deviceAgent.isCmdInProgress(project)) {
|
|
100
|
+
await (0, sleep_1.default)(1000);
|
|
101
|
+
}
|
|
102
|
+
await deviceAgent.stop();
|
|
103
|
+
}
|
|
104
|
+
});
|
|
64
105
|
exports.removeModelCliLeaf = (0, alwayscli_1.CliLeaf)({
|
|
65
106
|
name: 'remove-model',
|
|
66
107
|
description: 'Remove a model from an alwaysAI app',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/subcommands/app/models.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/subcommands/app/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ exports.getAppStatusCliLeaf = (0, alwayscli_1.CliLeaf)({
|
|
|
22
22
|
},
|
|
23
23
|
async action(_, opts) {
|
|
24
24
|
const { project } = opts;
|
|
25
|
-
const appStatus = await (0, application_control_1.
|
|
25
|
+
const appStatus = await (0, application_control_1.getAppState)({ projectId: project });
|
|
26
26
|
logger_1.logger.info(JSON.stringify(appStatus, null, 2));
|
|
27
27
|
}
|
|
28
28
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/subcommands/app/status.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,mDAA8D;AAC9D,mEAMmC;AACnC,8CAA2C;AAE9B,QAAA,mBAAmB,GAAG,IAAA,mBAAO,EAAC;IACzC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,6CAA6C;IAC1D,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,IAAA,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/subcommands/app/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/version.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,eAAe,yKAQ1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;4DAmC5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DA8B9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;4DAc7B,CAAC"}
|
|
@@ -37,13 +37,12 @@ exports.installAppCliLeaf = (0, alwayscli_1.CliLeaf)({
|
|
|
37
37
|
const message = {
|
|
38
38
|
timestamp: '',
|
|
39
39
|
topic,
|
|
40
|
+
messageType: device_agent_schemas_1.keyMirrors.toDeviceAgentMessageType.app_version_control,
|
|
41
|
+
txId: (0, device_agent_schemas_1.generateTxId)(),
|
|
40
42
|
payload: {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
projectId: project,
|
|
45
|
-
appReleaseHash: releaseHash
|
|
46
|
-
}
|
|
43
|
+
baseCommand: device_agent_schemas_1.keyMirrors.appVersionControl.install,
|
|
44
|
+
projectId: project,
|
|
45
|
+
appReleaseHash: releaseHash
|
|
47
46
|
}
|
|
48
47
|
};
|
|
49
48
|
await deviceAgent.handleMessage(topic, message);
|
|
@@ -70,12 +69,11 @@ exports.uninstallAppCliLeaf = (0, alwayscli_1.CliLeaf)({
|
|
|
70
69
|
const message = {
|
|
71
70
|
timestamp: '',
|
|
72
71
|
topic,
|
|
72
|
+
messageType: device_agent_schemas_1.keyMirrors.toDeviceAgentMessageType.app_version_control,
|
|
73
|
+
txId: (0, device_agent_schemas_1.generateTxId)(),
|
|
73
74
|
payload: {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
baseCommand: device_agent_schemas_1.keyMirrors.appVersionControl.uninstall,
|
|
77
|
-
projectId: project
|
|
78
|
-
}
|
|
75
|
+
baseCommand: device_agent_schemas_1.keyMirrors.appVersionControl.uninstall,
|
|
76
|
+
projectId: project
|
|
79
77
|
}
|
|
80
78
|
};
|
|
81
79
|
await deviceAgent.handleMessage(topic, message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/subcommands/app/version.ts"],"names":[],"mappings":";;;AAAA,mDAA8D;AAC9D,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/subcommands/app/version.ts"],"names":[],"mappings":";;;AAAA,mDAA8D;AAC9D,yEAIwC;AACxC,mEAAwD;AACxD,wGAAkG;AAClG,oEAAoE;AACpE,4CAAqC;AAExB,QAAA,eAAe,GAAG,IAAA,mBAAO,EAAC;IACrC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,yBAAyB;IACtC,WAAW,EAAE,EAAE;IACf,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,IAAI,GAAG,MAAM,IAAA,8BAAe,GAAE,CAAC,OAAO,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,IAAA,mBAAO,EAAC;IACvC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,wCAAwC;IACrD,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,WAAW,EAAE,IAAA,0BAAc,EAAC;YAC1B,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,0DAA0B,EAAE,CAAC;QACrD,MAAM,WAAW,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAA6B;YACxC,SAAS,EAAE,EAAE;YACb,KAAK;YACL,WAAW,EAAE,iCAAU,CAAC,wBAAwB,CAAC,mBAAmB;YACpE,IAAI,EAAE,IAAA,mCAAY,GAAE;YACpB,OAAO,EAAE;gBACP,WAAW,EAAE,iCAAU,CAAC,iBAAiB,CAAC,OAAO;gBACjD,SAAS,EAAE,OAAO;gBAClB,cAAc,EAAE,WAAW;aAC5B;SACF,CAAC;QACF,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;YAC3C,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAC;SACnB;QACD,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,IAAA,mBAAO,EAAC;IACzC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,wBAAwB;IACrC,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,WAAW,GAAG,IAAI,0DAA0B,EAAE,CAAC;QACrD,MAAM,WAAW,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAA6B;YACxC,SAAS,EAAE,EAAE;YACb,KAAK;YACL,WAAW,EAAE,iCAAU,CAAC,wBAAwB,CAAC,mBAAmB;YACpE,IAAI,EAAE,IAAA,mCAAY,GAAE;YACpB,OAAO,EAAE;gBACP,WAAW,EAAE,iCAAU,CAAC,iBAAiB,CAAC,SAAS;gBACnD,SAAS,EAAE,OAAO;aACnB;SACF,CAAC;QACF,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;YAC3C,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAC;SACnB;QACD,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,kBAAkB,GAAG,IAAA,mBAAO,EAAC;IACxC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,kDAAkD;IAC/D,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,MAAM,EAAE,IAAI;IACZ,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,IAAA,iCAAW,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alwaysai/device-agent",
|
|
3
3
|
"description": "The alwaysAI Device Agent",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "1.0.0-pre-release",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
7
7
|
"publishConfig": {
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
"@alwaysai/alwayscli": "0.3.2",
|
|
38
38
|
"@alwaysai/app-configuration-schemas": "0.1.0",
|
|
39
39
|
"@alwaysai/config-nodejs": "0.3.0",
|
|
40
|
-
"@alwaysai/device-agent-schemas": "1.2
|
|
40
|
+
"@alwaysai/device-agent-schemas": "2.1.2",
|
|
41
41
|
"ajv": "8.11.0",
|
|
42
|
-
"alwaysai": "2.
|
|
42
|
+
"alwaysai": "2.2.0",
|
|
43
43
|
"amqplib": "0.10.3",
|
|
44
44
|
"aws-iot-device-sdk": "2.2.12",
|
|
45
45
|
"docker-compose": "0.23.17",
|
|
@@ -91,5 +91,6 @@
|
|
|
91
91
|
"name": "alwaysAI, Inc.",
|
|
92
92
|
"email": "contact@alwaysai.co"
|
|
93
93
|
},
|
|
94
|
-
"homepage": "https://alwaysai.co"
|
|
94
|
+
"homepage": "https://alwaysai.co",
|
|
95
|
+
"license": "SEE LICENSE IN LICENSE"
|
|
95
96
|
}
|
package/readme.md
CHANGED
|
@@ -63,7 +63,7 @@ Where:
|
|
|
63
63
|
devices page of the alwaysAI Dashboard. If a device name is not provided, one
|
|
64
64
|
will be generated for you and logged to the console for reference.
|
|
65
65
|
|
|
66
|
-
**Important note**: If your password contains one or more special characters and you receive an error message that your password does not match your username but you are sure that it is correctly entered, please try
|
|
66
|
+
**Important note**: If your password contains one or more special characters and you receive an error message that your password does not match your username but you are sure that it is correctly entered, please try preceding every special character in your password with a backslash, and re-running the provisioning command. You can also reset your password at https://console.alwaysai.co/dashboard by logging out, navigating to the sign in page, and clicking '`Forgot Password?`'.
|
|
67
67
|
|
|
68
68
|
Confirm the Device Agent is running with the following command:
|
|
69
69
|
|
|
@@ -379,3 +379,32 @@ service run the following command on the device:
|
|
|
379
379
|
```bash
|
|
380
380
|
$ aai-agent app set-env TEST_ENV=1 --project <project_id> --service alwaysai
|
|
381
381
|
```
|
|
382
|
+
## Device Cleaning and Uninstalling
|
|
383
|
+
In order to fully clean the device and uninstall the agent, use the following steps:
|
|
384
|
+
|
|
385
|
+
### 1. Stop PM2 instance of the device agent
|
|
386
|
+
Using `pm2 list`, display the list of current pm2 instances. The output should look like this:
|
|
387
|
+
```bash
|
|
388
|
+
$ pm2 list
|
|
389
|
+
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
|
|
390
|
+
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
|
|
391
|
+
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
|
|
392
|
+
│ 0 │ aai-agent │ fork │ 15 │ online │ 0% │ 2.8mb │
|
|
393
|
+
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
|
|
394
|
+
```
|
|
395
|
+
Start with `pm2 stop <id>` where `<id>` is the id of the aai-agent.
|
|
396
|
+
Then, run `pm2 delete 0`.
|
|
397
|
+
Follow it with these two commands:
|
|
398
|
+
`pm2 flush`, `pm2 unstartup`
|
|
399
|
+
|
|
400
|
+
### 2. Remove alwaysAI Provisioned Device
|
|
401
|
+
Open a new terminal.
|
|
402
|
+
Run `aai-agent device clean`
|
|
403
|
+
|
|
404
|
+
### 3. Uninstall aai Device Agent from the device
|
|
405
|
+
Run `sudo npm uninstall -g @alwaysai/device-agent`
|
|
406
|
+
Verify successful removal by running `aai-agent`. You should see a response similar to `-bash: /usr/bin/aai-agent: No such file or directory`.
|
|
407
|
+
|
|
408
|
+
### 4. Remove the device from the aai Dashboard
|
|
409
|
+
Go to https://console.alwaysai.co/dashboard/devices, Go to Devices, find the device in question, and remove the device using the trashcan icon.
|
|
410
|
+
|
|
@@ -121,6 +121,10 @@ export async function writeDockerCompose(props: {
|
|
|
121
121
|
const spawner = JsSpawner({ path: appDir });
|
|
122
122
|
const composeOutput = stringify(dockerCompose);
|
|
123
123
|
// Validate new contents
|
|
124
|
-
|
|
124
|
+
try {
|
|
125
|
+
await compose.config({ cwd: appDir, configAsString: composeOutput });
|
|
126
|
+
} catch (e) {
|
|
127
|
+
logger.error(JSON.stringify(e));
|
|
128
|
+
}
|
|
125
129
|
await spawner.writeFile('docker-compose.yaml', composeOutput);
|
|
126
130
|
}
|
|
@@ -2,7 +2,7 @@ import { readAppCfgFile, updateAppCfg } from './config';
|
|
|
2
2
|
import { installApp, uninstallApp } from './install';
|
|
3
3
|
import { rollbackApp } from './backup';
|
|
4
4
|
import {
|
|
5
|
-
|
|
5
|
+
getAppState,
|
|
6
6
|
startApp,
|
|
7
7
|
getAppLogs,
|
|
8
8
|
stopApp,
|
|
@@ -17,7 +17,7 @@ export {
|
|
|
17
17
|
installApp,
|
|
18
18
|
uninstallApp,
|
|
19
19
|
rollbackApp,
|
|
20
|
-
|
|
20
|
+
getAppState,
|
|
21
21
|
startApp,
|
|
22
22
|
getAppLogs,
|
|
23
23
|
stopApp,
|
|
@@ -4,9 +4,9 @@ import * as path from 'path';
|
|
|
4
4
|
import { buildDockerImage } from 'alwaysai/lib/util/docker';
|
|
5
5
|
import { JsSpawner, Spawner } from 'alwaysai/lib/util';
|
|
6
6
|
import { getAppDir, downloadPackageUsingPresignedUrl, buildApp } from './utils';
|
|
7
|
-
import {
|
|
7
|
+
import { AppDetails } from '@alwaysai/device-agent-schemas';
|
|
8
8
|
import { BACKUP_EXT } from './backup';
|
|
9
|
-
import { startApp, stopApp } from './status';
|
|
9
|
+
import { startApp, stopApp, isAppStarted } from './status';
|
|
10
10
|
import { AgentConfigFile } from '../infrastructure/agent-config';
|
|
11
11
|
import { ProjectJsonFile } from 'alwaysai/lib/core/project';
|
|
12
12
|
import {
|
|
@@ -41,9 +41,9 @@ type SignedUrlPayloadType = {
|
|
|
41
41
|
}[];
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
-
export async function getInstalledApps(): Promise<
|
|
44
|
+
export async function getInstalledApps(): Promise<AppDetails[]> {
|
|
45
45
|
const apps = await AgentConfigFile().getApps();
|
|
46
|
-
const appDetails:
|
|
46
|
+
const appDetails: AppDetails[] = [];
|
|
47
47
|
for (const app of apps) {
|
|
48
48
|
const { projectId, version } = app;
|
|
49
49
|
appDetails.push({ projectId, version });
|
|
@@ -66,6 +66,19 @@ export async function installApp(props: {
|
|
|
66
66
|
throw new Error('Application already has installation in progress!');
|
|
67
67
|
}
|
|
68
68
|
logger.info('Application is already installed, updating');
|
|
69
|
+
|
|
70
|
+
// make sure the app is stopped if it's running, to clear the docker container.
|
|
71
|
+
if (await isAppStarted({ projectId })) {
|
|
72
|
+
logger.info('Application currently running. Stopping...');
|
|
73
|
+
try {
|
|
74
|
+
await stopApp({ projectId });
|
|
75
|
+
} catch (error) {
|
|
76
|
+
logger.error(
|
|
77
|
+
'Could not stop the application. Old container might still be present after installation.'
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
69
82
|
await AgentConfigFile().setAppInstalling({
|
|
70
83
|
projectId,
|
|
71
84
|
version: appReleaseHash
|
|
@@ -4,23 +4,24 @@ import { JsSpawner } from 'alwaysai/lib/util';
|
|
|
4
4
|
import { runDockerLogin } from '../docker/docker-cmd';
|
|
5
5
|
import { getAppDir, requireAppInstalled, requireAppReady } from './utils';
|
|
6
6
|
import {
|
|
7
|
-
ServiceStatusPacket,
|
|
8
|
-
AppStatePacket,
|
|
9
7
|
keyMirrors,
|
|
10
|
-
AppStateValue
|
|
8
|
+
AppStateValue,
|
|
9
|
+
AppDetails,
|
|
10
|
+
AppState,
|
|
11
|
+
ServiceStatus
|
|
11
12
|
} from '@alwaysai/device-agent-schemas';
|
|
12
13
|
import { AgentConfigFile } from '../infrastructure/agent-config';
|
|
13
14
|
import { logger } from '../util/logger';
|
|
14
15
|
|
|
15
|
-
export async function
|
|
16
|
+
export async function getAppState(props: {
|
|
16
17
|
projectId: string;
|
|
17
|
-
}): Promise<
|
|
18
|
+
}): Promise<AppState> {
|
|
18
19
|
const { projectId } = props;
|
|
19
20
|
if (!(await AgentConfigFile().isAppPresent({ projectId }))) {
|
|
20
21
|
throw new Error('Application is not installed');
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
const appDetails = {
|
|
24
|
+
const appDetails: AppDetails = {
|
|
24
25
|
projectId,
|
|
25
26
|
version: await AgentConfigFile().getAppVersion({ projectId })
|
|
26
27
|
};
|
|
@@ -43,7 +44,7 @@ export async function getAppStatus(props: {
|
|
|
43
44
|
);
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
const services:
|
|
47
|
+
const services: ServiceStatus[] = [];
|
|
47
48
|
const spawner = JsSpawner({ path: appDir });
|
|
48
49
|
for (const name of composeServices.data.services) {
|
|
49
50
|
// Get container name for service
|
|
@@ -101,7 +102,7 @@ export async function isAppStarted(props: {
|
|
|
101
102
|
projectId: string;
|
|
102
103
|
}): Promise<boolean> {
|
|
103
104
|
const { projectId } = props;
|
|
104
|
-
const appStatus = await
|
|
105
|
+
const appStatus = await getAppState({ projectId });
|
|
105
106
|
if (appStatus.services.length === 0) {
|
|
106
107
|
// Services list will be empty if app has not yet been started.
|
|
107
108
|
// NOTE: This depends on internal handling in getAppStatus()
|