@alwaysai/device-agent 0.0.20 → 0.1.1
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/lib/application-control/config.d.ts +0 -1
- package/lib/application-control/config.d.ts.map +1 -1
- package/lib/application-control/config.js +15 -29
- package/lib/application-control/config.js.map +1 -1
- package/lib/application-control/environment-variables.d.ts +7 -3
- package/lib/application-control/environment-variables.d.ts.map +1 -1
- package/lib/application-control/environment-variables.js +71 -35
- package/lib/application-control/environment-variables.js.map +1 -1
- package/lib/application-control/environment-variables.test.d.ts +2 -0
- package/lib/application-control/environment-variables.test.d.ts.map +1 -0
- package/lib/application-control/environment-variables.test.js +163 -0
- package/lib/application-control/environment-variables.test.js.map +1 -0
- package/lib/application-control/index.d.ts +3 -3
- package/lib/application-control/index.d.ts.map +1 -1
- package/lib/application-control/index.js +1 -3
- package/lib/application-control/index.js.map +1 -1
- package/lib/application-control/models.d.ts +0 -1
- package/lib/application-control/models.d.ts.map +1 -1
- package/lib/application-control/models.js +12 -26
- package/lib/application-control/models.js.map +1 -1
- package/lib/application-control/status.d.ts +3 -0
- package/lib/application-control/status.d.ts.map +1 -1
- package/lib/application-control/status.js +19 -1
- package/lib/application-control/status.js.map +1 -1
- package/lib/application-control/utils.d.ts.map +1 -1
- package/lib/application-control/utils.js +2 -2
- package/lib/application-control/utils.js.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts +6 -3
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.js +201 -151
- package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
- package/lib/cloud-connection/live-updates-handler.d.ts +3 -0
- package/lib/cloud-connection/live-updates-handler.d.ts.map +1 -1
- package/lib/cloud-connection/live-updates-handler.js +23 -7
- package/lib/cloud-connection/live-updates-handler.js.map +1 -1
- package/lib/cloud-connection/live-updates-handler.test.d.ts +2 -0
- package/lib/cloud-connection/live-updates-handler.test.d.ts.map +1 -0
- package/lib/cloud-connection/live-updates-handler.test.js +57 -0
- package/lib/cloud-connection/live-updates-handler.test.js.map +1 -0
- package/lib/cloud-connection/shadow-handler.d.ts +11 -3
- package/lib/cloud-connection/shadow-handler.d.ts.map +1 -1
- package/lib/cloud-connection/shadow-handler.js +22 -7
- package/lib/cloud-connection/shadow-handler.js.map +1 -1
- package/lib/cloud-connection/shadow-handler.test.js +313 -228
- package/lib/cloud-connection/shadow-handler.test.js.map +1 -1
- package/lib/cloud-connection/shadow.js +1 -1
- package/lib/cloud-connection/shadow.js.map +1 -1
- package/lib/environment.d.ts +1 -0
- package/lib/environment.d.ts.map +1 -1
- package/lib/environment.js +2 -1
- package/lib/environment.js.map +1 -1
- package/lib/infrastructure/agent-config.d.ts +3 -1
- package/lib/infrastructure/agent-config.d.ts.map +1 -1
- package/lib/subcommands/app/env-vars.d.ts +1 -1
- package/lib/subcommands/app/env-vars.d.ts.map +1 -1
- package/lib/subcommands/app/env-vars.js +32 -5
- package/lib/subcommands/app/env-vars.js.map +1 -1
- package/lib/subcommands/app/index.d.ts.map +1 -1
- package/lib/subcommands/app/index.js +4 -1
- package/lib/subcommands/app/index.js.map +1 -1
- package/lib/subcommands/app/models.d.ts.map +1 -1
- package/lib/subcommands/app/models.js +6 -1
- package/lib/subcommands/app/models.js.map +1 -1
- package/lib/subcommands/app/shadow.d.ts +7 -0
- package/lib/subcommands/app/shadow.d.ts.map +1 -0
- package/lib/subcommands/app/shadow.js +48 -0
- package/lib/subcommands/app/shadow.js.map +1 -0
- package/lib/subcommands/app/version.js +2 -2
- package/lib/subcommands/app/version.js.map +1 -1
- package/lib/util/cloud-mode-ready.d.ts +2 -0
- package/lib/util/cloud-mode-ready.d.ts.map +1 -0
- package/lib/util/cloud-mode-ready.js +22 -0
- package/lib/util/cloud-mode-ready.js.map +1 -0
- package/package.json +1 -1
- package/readme.md +140 -22
- package/src/application-control/config.ts +30 -31
- package/src/application-control/environment-variables.test.ts +171 -0
- package/src/application-control/environment-variables.ts +102 -43
- package/src/application-control/index.ts +3 -9
- package/src/application-control/models.ts +14 -29
- package/src/application-control/status.ts +20 -0
- package/src/application-control/utils.ts +4 -2
- package/src/cloud-connection/device-agent-cloud-connection.ts +220 -155
- package/src/cloud-connection/live-updates-handler.test.ts +68 -0
- package/src/cloud-connection/live-updates-handler.ts +30 -7
- package/src/cloud-connection/shadow-handler.test.ts +329 -239
- package/src/cloud-connection/shadow-handler.ts +38 -12
- package/src/cloud-connection/shadow.ts +1 -1
- package/src/environment.ts +2 -0
- package/src/infrastructure/agent-config.ts +1 -1
- package/src/subcommands/app/env-vars.ts +38 -8
- package/src/subcommands/app/index.ts +4 -1
- package/src/subcommands/app/models.ts +10 -1
- package/src/subcommands/app/shadow.ts +48 -0
- package/src/subcommands/app/version.ts +2 -2
- package/src/util/cloud-mode-ready.ts +23 -0
|
@@ -12,7 +12,6 @@ export declare function updateAppCfgFile(props: {
|
|
|
12
12
|
}): Promise<void>;
|
|
13
13
|
export declare function updateAppCfg(props: {
|
|
14
14
|
projectId: string;
|
|
15
|
-
appReleaseHash: string;
|
|
16
15
|
newAppCfg: AppConfig;
|
|
17
16
|
}): Promise<void>;
|
|
18
17
|
export declare function readDockerCompose(props: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAIhE,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,SAAS,CAAC,CAiBrB;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;CACnB,iBAaA;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;CAChB,iBAKA;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;CACtB,iBAmCA;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,gBAOnE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,GAAG,CAAC;CACpB,iBAQA"}
|
|
@@ -12,9 +12,7 @@ const status_1 = require("./status");
|
|
|
12
12
|
const logger_1 = require("../util/logger");
|
|
13
13
|
async function readAppCfgFile(props) {
|
|
14
14
|
const { projectId } = props;
|
|
15
|
-
|
|
16
|
-
throw new Error(`App ${projectId} is not present!`);
|
|
17
|
-
}
|
|
15
|
+
await (0, utils_1.requireAppInstalled)({ projectId });
|
|
18
16
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
19
17
|
const appJson = (0, app_1.AppJsonFile)(appDir);
|
|
20
18
|
if (!appJson.exists()) {
|
|
@@ -30,9 +28,6 @@ async function readAppCfgFile(props) {
|
|
|
30
28
|
exports.readAppCfgFile = readAppCfgFile;
|
|
31
29
|
async function writeAppCfgFile(props) {
|
|
32
30
|
const { projectId, appCfg } = props;
|
|
33
|
-
if (!(await (0, agent_config_1.AgentConfigFile)().isAppPresent({ projectId }))) {
|
|
34
|
-
throw new Error(`App ${projectId} is not present!`);
|
|
35
|
-
}
|
|
36
31
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
37
32
|
const appJson = (0, app_1.AppJsonFile)(appDir);
|
|
38
33
|
try {
|
|
@@ -51,37 +46,31 @@ async function updateAppCfgFile(props) {
|
|
|
51
46
|
}
|
|
52
47
|
exports.updateAppCfgFile = updateAppCfgFile;
|
|
53
48
|
async function updateAppCfg(props) {
|
|
54
|
-
const { projectId,
|
|
55
|
-
logger_1.logger.info(`Updating app config for ${projectId}
|
|
49
|
+
const { projectId, newAppCfg } = props;
|
|
50
|
+
logger_1.logger.info(`Updating app config for ${projectId}`);
|
|
56
51
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
throw new Error('Application is not installed!');
|
|
69
|
-
}
|
|
52
|
+
await (0, utils_1.requireAppReady)({ projectId });
|
|
53
|
+
const appReleaseHash = await (0, agent_config_1.AgentConfigFile)().getAppVersion({
|
|
54
|
+
projectId
|
|
55
|
+
});
|
|
56
|
+
await (0, agent_config_1.AgentConfigFile)().setAppInstalling({
|
|
57
|
+
projectId,
|
|
58
|
+
version: appReleaseHash
|
|
59
|
+
});
|
|
70
60
|
await writeAppCfgFile({ projectId, appCfg: newAppCfg });
|
|
71
61
|
await (0, utils_1.buildApp)({ appDir });
|
|
72
62
|
await (0, agent_config_1.AgentConfigFile)().setAppInstalled({
|
|
73
63
|
projectId,
|
|
74
64
|
version: appReleaseHash
|
|
75
65
|
});
|
|
76
|
-
await (0, status_1.
|
|
77
|
-
|
|
66
|
+
if (await (0, status_1.isAppStarted)({ projectId })) {
|
|
67
|
+
await (0, status_1.restartApp)({ projectId });
|
|
68
|
+
}
|
|
69
|
+
logger_1.logger.info(`Updated app config and rebuilt ${projectId}: ${JSON.stringify(newAppCfg, null, 2)}`);
|
|
78
70
|
}
|
|
79
71
|
exports.updateAppCfg = updateAppCfg;
|
|
80
72
|
async function readDockerCompose(props) {
|
|
81
73
|
const { projectId } = props;
|
|
82
|
-
if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
|
|
83
|
-
throw new Error(`App ${projectId} is not ready!`);
|
|
84
|
-
}
|
|
85
74
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
86
75
|
const spawner = (0, util_1.JsSpawner)({ path: appDir });
|
|
87
76
|
const composeContents = await spawner.readFile('docker-compose.yaml');
|
|
@@ -91,9 +80,6 @@ async function readDockerCompose(props) {
|
|
|
91
80
|
exports.readDockerCompose = readDockerCompose;
|
|
92
81
|
async function writeDockerCompose(props) {
|
|
93
82
|
const { projectId, dockerCompose } = props;
|
|
94
|
-
if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
|
|
95
|
-
throw new Error(`App ${projectId} is not ready!`);
|
|
96
|
-
}
|
|
97
83
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
98
84
|
const spawner = (0, util_1.JsSpawner)({ path: appDir });
|
|
99
85
|
const composeOutput = (0, yaml_1.stringify)(dockerCompose);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":";;;AAAA,iEAAiE;AACjE,+BAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
export interface EnvVars {
|
|
2
|
+
[service: string]: {
|
|
3
|
+
[name: string]: string;
|
|
4
|
+
};
|
|
5
|
+
}
|
|
1
6
|
export declare function setEnv(props: {
|
|
2
7
|
projectId: string;
|
|
3
|
-
|
|
4
|
-
service?: string;
|
|
8
|
+
envVars: EnvVars;
|
|
5
9
|
}): Promise<void>;
|
|
6
10
|
export declare function getAllEnvs(props: {
|
|
7
11
|
projectId: string;
|
|
8
|
-
}): Promise<
|
|
12
|
+
}): Promise<EnvVars>;
|
|
9
13
|
//# sourceMappingURL=environment-variables.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,OAAO;IACtB,CAAC,OAAO,EAAE,MAAM,GAAG;QACjB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC;CACH;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,iBAkE1E;AAWD,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAwCnB"}
|
|
@@ -2,46 +2,74 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getAllEnvs = exports.setEnv = void 0;
|
|
4
4
|
const util_1 = require("alwaysai/lib/util");
|
|
5
|
-
const agent_config_1 = require("../infrastructure/agent-config");
|
|
6
5
|
const config_1 = require("./config");
|
|
7
6
|
const utils_1 = require("./utils");
|
|
7
|
+
const logger_1 = require("../util/logger");
|
|
8
|
+
const agent_config_1 = require("../infrastructure/agent-config");
|
|
9
|
+
const status_1 = require("./status");
|
|
8
10
|
async function setEnv(props) {
|
|
9
|
-
const { projectId,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
const { projectId, envVars } = props;
|
|
12
|
+
await (0, utils_1.requireAppReady)({ projectId });
|
|
13
|
+
const appReleaseHash = await (0, agent_config_1.AgentConfigFile)().getAppVersion({
|
|
14
|
+
projectId
|
|
15
|
+
});
|
|
16
|
+
await (0, agent_config_1.AgentConfigFile)().setAppInstalling({
|
|
17
|
+
projectId,
|
|
18
|
+
version: appReleaseHash
|
|
19
|
+
});
|
|
13
20
|
const composeParsed = await (0, config_1.readDockerCompose)({ projectId });
|
|
14
|
-
if ('services' in composeParsed) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
throw new Error(`Service ${props.service} not found in ${services}`);
|
|
22
|
-
}
|
|
21
|
+
if (!('services' in composeParsed)) {
|
|
22
|
+
throw new Error(`Docker compose file for ${projectId} has no services!`);
|
|
23
|
+
}
|
|
24
|
+
const services = Object.keys(envVars);
|
|
25
|
+
for (const s of services) {
|
|
26
|
+
if (!Object.keys(composeParsed['services']).includes(s)) {
|
|
27
|
+
throw new Error(`Service ${s} not found in ${JSON.stringify(composeParsed['services'], null, 2)}`);
|
|
23
28
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
const envVarList = [];
|
|
30
|
+
for (const envVar of Object.keys(envVars[s])) {
|
|
31
|
+
envVarList.push(`${envVar}=${envVars[s][envVar]}`);
|
|
32
|
+
}
|
|
33
|
+
const service = composeParsed['services'][s];
|
|
34
|
+
// The environment field overrides the env files, so by appending to
|
|
35
|
+
// the environment list we can assure the value will be used over
|
|
36
|
+
// the env_file.
|
|
37
|
+
// NOTE: We are only appending the new values to the end of the
|
|
38
|
+
// environment variable list, which will override but not replace
|
|
39
|
+
// previous instances of the same environment variable.
|
|
40
|
+
if ('environment' in service) {
|
|
41
|
+
const environment = service['environment'];
|
|
42
|
+
composeParsed['services'][s]['environment'] =
|
|
43
|
+
environment.concat(envVarList);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
composeParsed['services'][s]['environment'] = envVarList;
|
|
35
47
|
}
|
|
36
48
|
}
|
|
37
49
|
await (0, config_1.writeDockerCompose)({ projectId, dockerCompose: composeParsed });
|
|
50
|
+
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
51
|
+
await (0, utils_1.buildApp)({ appDir });
|
|
52
|
+
await (0, agent_config_1.AgentConfigFile)().setAppInstalled({
|
|
53
|
+
projectId,
|
|
54
|
+
version: appReleaseHash
|
|
55
|
+
});
|
|
56
|
+
if (await (0, status_1.isAppStarted)({ projectId })) {
|
|
57
|
+
await (0, status_1.restartApp)({ projectId });
|
|
58
|
+
}
|
|
59
|
+
logger_1.logger.info(`Updated environment variables for ${projectId}: ${JSON.stringify(envVars, null, 2)}`);
|
|
38
60
|
}
|
|
39
61
|
exports.setEnv = setEnv;
|
|
62
|
+
async function convertStringEnvsToKeyVal(stringEnvs) {
|
|
63
|
+
const envVars = {};
|
|
64
|
+
stringEnvs.forEach((env) => {
|
|
65
|
+
const keyVal = env.split('=');
|
|
66
|
+
envVars[keyVal[0]] = keyVal[1];
|
|
67
|
+
});
|
|
68
|
+
return envVars;
|
|
69
|
+
}
|
|
40
70
|
async function getAllEnvs(props) {
|
|
41
71
|
const { projectId } = props;
|
|
42
|
-
|
|
43
|
-
throw new Error(`App ${projectId} is not ready!`);
|
|
44
|
-
}
|
|
72
|
+
await (0, utils_1.requireAppReady)({ projectId });
|
|
45
73
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
46
74
|
const spawner = (0, util_1.JsSpawner)({ path: appDir });
|
|
47
75
|
const envVars = {};
|
|
@@ -49,22 +77,30 @@ async function getAllEnvs(props) {
|
|
|
49
77
|
if ('services' in composeParsed) {
|
|
50
78
|
const services = Object.keys(composeParsed['services']);
|
|
51
79
|
for (const s of services) {
|
|
52
|
-
envVars[s] =
|
|
80
|
+
envVars[s] = {};
|
|
53
81
|
const service = composeParsed['services'][s];
|
|
82
|
+
// Read env_file first, since it is lowest on the hierarchy
|
|
54
83
|
if ('env_file' in service) {
|
|
55
84
|
const envFiles = service['env_file'];
|
|
56
85
|
for (const ef of envFiles) {
|
|
57
|
-
|
|
86
|
+
if (!(await spawner.exists(ef))) {
|
|
87
|
+
logger_1.logger.error(`Skipping env file ${ef} for service ${s}: not found!`);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
let envFileLines = (await spawner.readFile(ef)).split('\n');
|
|
91
|
+
// Filter out empty lines and comment lines
|
|
92
|
+
envFileLines = envFileLines.filter((v) => {
|
|
93
|
+
return v !== '' && !v.includes('#');
|
|
94
|
+
});
|
|
95
|
+
const newEnvVars = await convertStringEnvsToKeyVal(envFileLines);
|
|
96
|
+
envVars[s] = Object.assign(Object.assign({}, envVars[s]), newEnvVars);
|
|
58
97
|
}
|
|
59
98
|
}
|
|
60
99
|
if ('environment' in service) {
|
|
61
100
|
const environment = service['environment'];
|
|
62
|
-
|
|
101
|
+
const newEnvVars = await convertStringEnvsToKeyVal(environment);
|
|
102
|
+
envVars[s] = Object.assign(Object.assign({}, envVars[s]), newEnvVars);
|
|
63
103
|
}
|
|
64
|
-
// Filter out empty lines and comment lines
|
|
65
|
-
envVars[s] = envVars[s].filter((v) => {
|
|
66
|
-
return v !== '' && !v.includes('#');
|
|
67
|
-
});
|
|
68
104
|
}
|
|
69
105
|
}
|
|
70
106
|
return envVars;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAC9C,
|
|
1
|
+
{"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-variables.test.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const agent_config_1 = require("../infrastructure/agent-config");
|
|
4
|
+
const config_1 = require("./config");
|
|
5
|
+
const environment_variables_1 = require("./environment-variables");
|
|
6
|
+
const status_1 = require("./status");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
jest.mock('./config');
|
|
9
|
+
jest.mock('./utils');
|
|
10
|
+
jest.mocked(utils_1.requireAppReady).mockResolvedValue();
|
|
11
|
+
jest.mocked(utils_1.buildApp).mockResolvedValue();
|
|
12
|
+
jest.mock('./status');
|
|
13
|
+
jest.mocked(status_1.isAppStarted).mockResolvedValue(true);
|
|
14
|
+
jest.mocked(status_1.restartApp).mockResolvedValue();
|
|
15
|
+
jest.mock('../infrastructure/agent-config');
|
|
16
|
+
const mockSetAppInstalling = jest.fn().mockResolvedValue({});
|
|
17
|
+
const mockSetAppInstalled = jest.fn().mockResolvedValue({});
|
|
18
|
+
const mockGetAppVersion = jest.fn().mockResolvedValue('test-version');
|
|
19
|
+
jest.mocked(agent_config_1.AgentConfigFile).mockReturnValue({
|
|
20
|
+
setAppInstalling: mockSetAppInstalling,
|
|
21
|
+
setAppInstalled: mockSetAppInstalled,
|
|
22
|
+
getAppVersion: mockGetAppVersion
|
|
23
|
+
});
|
|
24
|
+
const projectId1 = 'test-project';
|
|
25
|
+
describe('Test environment variable get and set', () => {
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
jest.clearAllMocks();
|
|
28
|
+
});
|
|
29
|
+
describe('Test getAllEnvs()', () => {
|
|
30
|
+
test('get all envs with one service and no envs', async () => {
|
|
31
|
+
const compose = {
|
|
32
|
+
services: {
|
|
33
|
+
alwaysai: {}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
|
|
37
|
+
const envVars = await (0, environment_variables_1.getAllEnvs)({ projectId: projectId1 });
|
|
38
|
+
expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
|
|
39
|
+
projectId: projectId1
|
|
40
|
+
});
|
|
41
|
+
expect(envVars).toEqual({
|
|
42
|
+
alwaysai: {}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
// TODO: Add test with env file
|
|
46
|
+
test('get all envs with one service and two envs', async () => {
|
|
47
|
+
const compose = {
|
|
48
|
+
services: {
|
|
49
|
+
alwaysai: {
|
|
50
|
+
environment: ['TEST=1', 'TEST2=2']
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
|
|
55
|
+
const envVars = await (0, environment_variables_1.getAllEnvs)({ projectId: projectId1 });
|
|
56
|
+
expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
|
|
57
|
+
projectId: projectId1
|
|
58
|
+
});
|
|
59
|
+
expect(envVars).toEqual({
|
|
60
|
+
alwaysai: { TEST: '1', TEST2: '2' }
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
test('get all envs with two services and envs', async () => {
|
|
64
|
+
const compose = {
|
|
65
|
+
services: {
|
|
66
|
+
alwaysai: {
|
|
67
|
+
environment: ['TEST=3', 'TEST2=4']
|
|
68
|
+
},
|
|
69
|
+
edgeiq: {
|
|
70
|
+
environment: ['TEST3=5', 'TEST4=6']
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
|
|
75
|
+
const envVars = await (0, environment_variables_1.getAllEnvs)({ projectId: projectId1 });
|
|
76
|
+
expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
|
|
77
|
+
projectId: projectId1
|
|
78
|
+
});
|
|
79
|
+
expect(envVars).toEqual({
|
|
80
|
+
alwaysai: { TEST: '3', TEST2: '4' },
|
|
81
|
+
edgeiq: { TEST3: '5', TEST4: '6' }
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe('Test setEnv()', () => {
|
|
86
|
+
test('Set one env', async () => {
|
|
87
|
+
const compose = {
|
|
88
|
+
services: {
|
|
89
|
+
alwaysai: {}
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
|
|
93
|
+
const envVars = { alwaysai: { TEST: '1' } };
|
|
94
|
+
await (0, environment_variables_1.setEnv)({ projectId: projectId1, envVars });
|
|
95
|
+
expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
|
|
96
|
+
projectId: projectId1
|
|
97
|
+
});
|
|
98
|
+
expect(jest.mocked(config_1.writeDockerCompose)).toBeCalledWith({
|
|
99
|
+
projectId: projectId1,
|
|
100
|
+
dockerCompose: {
|
|
101
|
+
services: {
|
|
102
|
+
alwaysai: {
|
|
103
|
+
environment: ['TEST=1']
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
test('Update one env', async () => {
|
|
110
|
+
const environment = ['TEST1=1', 'TEST2=2'];
|
|
111
|
+
const compose = {
|
|
112
|
+
services: {
|
|
113
|
+
alwaysai: { environment }
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
|
|
117
|
+
const envVars = { alwaysai: { TEST1: '2' } };
|
|
118
|
+
await (0, environment_variables_1.setEnv)({ projectId: projectId1, envVars });
|
|
119
|
+
expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
|
|
120
|
+
projectId: projectId1
|
|
121
|
+
});
|
|
122
|
+
expect(jest.mocked(config_1.writeDockerCompose)).toBeCalledWith({
|
|
123
|
+
projectId: projectId1,
|
|
124
|
+
dockerCompose: {
|
|
125
|
+
services: {
|
|
126
|
+
alwaysai: {
|
|
127
|
+
environment: ['TEST1=1', 'TEST2=2', 'TEST1=2']
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
test('Update one env with two services', async () => {
|
|
134
|
+
const environment = ['TEST1=3', 'TEST2=4'];
|
|
135
|
+
const compose = {
|
|
136
|
+
services: {
|
|
137
|
+
alwaysai: { environment },
|
|
138
|
+
other: { environment: ['OTHER_TEST=1'] }
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
|
|
142
|
+
const envVars = { alwaysai: { TEST1: '2' } };
|
|
143
|
+
await (0, environment_variables_1.setEnv)({ projectId: projectId1, envVars });
|
|
144
|
+
expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
|
|
145
|
+
projectId: projectId1
|
|
146
|
+
});
|
|
147
|
+
expect(jest.mocked(config_1.writeDockerCompose)).toBeCalledWith({
|
|
148
|
+
projectId: projectId1,
|
|
149
|
+
dockerCompose: {
|
|
150
|
+
services: {
|
|
151
|
+
alwaysai: {
|
|
152
|
+
environment: ['TEST1=3', 'TEST2=4', 'TEST1=2']
|
|
153
|
+
},
|
|
154
|
+
other: {
|
|
155
|
+
environment: ['OTHER_TEST=1']
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
//# sourceMappingURL=environment-variables.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-variables.test.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { readAppCfgFile, updateAppCfg
|
|
1
|
+
import { readAppCfgFile, updateAppCfg } from './config';
|
|
2
2
|
import { installApp, uninstallApp } from './install';
|
|
3
3
|
import { rollbackApp } from './backup';
|
|
4
4
|
import { getAppStatus, startApp, getAppLogs, stopApp, restartApp } from './status';
|
|
5
5
|
import { ModelDetails } from './types';
|
|
6
|
-
import { getAllEnvs, setEnv } from './environment-variables';
|
|
7
|
-
export { readAppCfgFile, updateAppCfg,
|
|
6
|
+
import { EnvVars, getAllEnvs, setEnv } from './environment-variables';
|
|
7
|
+
export { readAppCfgFile, updateAppCfg, installApp, uninstallApp, rollbackApp, getAppStatus, startApp, getAppLogs, stopApp, restartApp, ModelDetails, EnvVars, getAllEnvs, setEnv };
|
|
8
8
|
import { getAppModels, removeModel, replaceModels, updateModels, updateModelsWithPresignedUrls } from './models';
|
|
9
9
|
export { getAppModels, removeModel, replaceModels, updateModels, updateModelsWithPresignedUrls };
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,YAAY,EACZ,OAAO,EACP,UAAU,EACV,MAAM,EACP,CAAC;AAGF,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,6BAA6B,EAC9B,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,6BAA6B,EAC9B,CAAC"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateModelsWithPresignedUrls = exports.updateModels = exports.replaceModels = exports.removeModel = exports.getAppModels = exports.setEnv = exports.getAllEnvs = exports.restartApp = exports.stopApp = exports.getAppLogs = exports.startApp = exports.getAppStatus = exports.rollbackApp = exports.uninstallApp = exports.installApp = exports.
|
|
3
|
+
exports.updateModelsWithPresignedUrls = exports.updateModels = exports.replaceModels = exports.removeModel = exports.getAppModels = exports.setEnv = exports.getAllEnvs = exports.restartApp = exports.stopApp = exports.getAppLogs = exports.startApp = exports.getAppStatus = exports.rollbackApp = exports.uninstallApp = exports.installApp = exports.updateAppCfg = exports.readAppCfgFile = void 0;
|
|
4
4
|
const config_1 = require("./config");
|
|
5
5
|
Object.defineProperty(exports, "readAppCfgFile", { enumerable: true, get: function () { return config_1.readAppCfgFile; } });
|
|
6
6
|
Object.defineProperty(exports, "updateAppCfg", { enumerable: true, get: function () { return config_1.updateAppCfg; } });
|
|
7
|
-
Object.defineProperty(exports, "readDockerCompose", { enumerable: true, get: function () { return config_1.readDockerCompose; } });
|
|
8
|
-
Object.defineProperty(exports, "writeDockerCompose", { enumerable: true, get: function () { return config_1.writeDockerCompose; } });
|
|
9
7
|
const install_1 = require("./install");
|
|
10
8
|
Object.defineProperty(exports, "installApp", { enumerable: true, get: function () { return install_1.installApp; } });
|
|
11
9
|
Object.defineProperty(exports, "uninstallApp", { enumerable: true, get: function () { return install_1.uninstallApp; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":";;;AAAA,qCAAwD;AActD,+FAdO,uBAAc,OAcP;AACd,6FAfuB,qBAAY,OAevB;AAdd,uCAAqD;AAenD,2FAfO,oBAAU,OAeP;AACV,6FAhBmB,sBAAY,OAgBnB;AAfd,qCAAuC;AAgBrC,4FAhBO,oBAAW,OAgBP;AAfb,qCAMkB;AAUhB,6FAfA,qBAAY,OAeA;AACZ,yFAfA,iBAAQ,OAeA;AACR,2FAfA,mBAAU,OAeA;AACV,wFAfA,gBAAO,OAeA;AACP,2FAfA,mBAAU,OAeA;AAZZ,mEAAsE;AAepE,2FAfgB,kCAAU,OAehB;AACV,uFAhB4B,8BAAM,OAgB5B;AAGR,gBAAgB;AAChB,qCAMkB;AAGhB,6FARA,qBAAY,OAQA;AACZ,4FARA,oBAAW,OAQA;AACX,8FARA,sBAAa,OAQA;AACb,6FARA,qBAAY,OAQA;AACZ,8GARA,sCAA6B,OAQA"}
|
|
@@ -19,7 +19,6 @@ export declare function installModelsWithPresignedURLs(modelPayloads: ModelInsta
|
|
|
19
19
|
export declare function updateModelsWithPresignedUrls(props: {
|
|
20
20
|
projectId: string;
|
|
21
21
|
modelInstallPayloads: ModelInstallPayload[];
|
|
22
|
-
appReleaseHash: string;
|
|
23
22
|
newAppCfg: AppConfig;
|
|
24
23
|
}): Promise<void>;
|
|
25
24
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/application-control/models.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/application-control/models.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAerE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAUvC,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2BAoB9D;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,iBAiBA;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,iBAyBA;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAU9D;AAED,wBAAsB,8BAA8B,CAClD,aAAa,EAAE,mBAAmB,EAAE,EACpC,SAAS,EAAE,MAAM,iBAsClB;AAED,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,SAAS,EAAE,SAAS,CAAC;CACtB,iBAkDA"}
|
|
@@ -114,24 +114,18 @@ async function installModelsWithPresignedURLs(modelPayloads, targetDir) {
|
|
|
114
114
|
}
|
|
115
115
|
exports.installModelsWithPresignedURLs = installModelsWithPresignedURLs;
|
|
116
116
|
async function updateModelsWithPresignedUrls(props) {
|
|
117
|
-
const { projectId, modelInstallPayloads,
|
|
117
|
+
const { projectId, modelInstallPayloads, newAppCfg } = props;
|
|
118
118
|
logger_1.logger.info(`Installing models for ${projectId}`);
|
|
119
119
|
const spawner = (0, util_1.JsSpawner)();
|
|
120
120
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
throw new Error('Application is not installed!');
|
|
133
|
-
}
|
|
134
|
-
const ogAppCfg = await (0, config_1.readAppCfgFile)({ projectId });
|
|
121
|
+
await (0, utils_1.requireAppReady)({ projectId });
|
|
122
|
+
const appReleaseHash = await (0, agent_config_1.AgentConfigFile)().getAppVersion({
|
|
123
|
+
projectId
|
|
124
|
+
});
|
|
125
|
+
await (0, agent_config_1.AgentConfigFile)().setAppInstalling({
|
|
126
|
+
projectId,
|
|
127
|
+
version: appReleaseHash
|
|
128
|
+
});
|
|
135
129
|
const ogDir = path.join(appDir, constants_1.APP_MODELS_DIRECTORY_NAME);
|
|
136
130
|
// Copy all current models to restore dir in case of failure
|
|
137
131
|
const restoreDir = `${ogDir}.restore`;
|
|
@@ -153,18 +147,10 @@ async function updateModelsWithPresignedUrls(props) {
|
|
|
153
147
|
projectId,
|
|
154
148
|
version: appReleaseHash
|
|
155
149
|
});
|
|
156
|
-
await (0, status_1.
|
|
150
|
+
if (await (0, status_1.isAppStarted)({ projectId })) {
|
|
151
|
+
await (0, status_1.restartApp)({ projectId });
|
|
152
|
+
}
|
|
157
153
|
logger_1.logger.info(`Models installed for project ${projectId}`);
|
|
158
|
-
/* Leave error handling to higher level so errors are sent to cloud
|
|
159
|
-
} catch (e) {
|
|
160
|
-
logger.error(
|
|
161
|
-
'Error updating app models from presigned URL, restoring models.',
|
|
162
|
-
e.message
|
|
163
|
-
);
|
|
164
|
-
await spawner.rimraf(ogDir);
|
|
165
|
-
await copyDir({ srcPath: restoreDir, destPath: ogDir });
|
|
166
|
-
await writeAppCfgFile({ projectId, appCfg: ogAppCfg });
|
|
167
|
-
*/
|
|
168
154
|
}
|
|
169
155
|
finally {
|
|
170
156
|
await spawner.rimraf(tmpDir);
|