@alwaysai/device-agent 0.0.4 → 0.0.5
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/backup.d.ts.map +1 -1
- package/lib/application-control/backup.js +10 -6
- package/lib/application-control/backup.js.map +1 -1
- package/lib/application-control/environment-variables.d.ts +9 -0
- package/lib/application-control/environment-variables.d.ts.map +1 -0
- package/lib/application-control/environment-variables.js +82 -0
- package/lib/application-control/environment-variables.js.map +1 -0
- package/lib/application-control/index.d.ts +9 -0
- package/lib/application-control/index.d.ts.map +1 -0
- package/lib/application-control/index.js +27 -0
- package/lib/application-control/index.js.map +1 -0
- package/lib/application-control/install.d.ts +8 -2
- package/lib/application-control/install.d.ts.map +1 -1
- package/lib/application-control/install.js +72 -42
- package/lib/application-control/install.js.map +1 -1
- package/lib/application-control/models.d.ts.map +1 -1
- package/lib/application-control/models.js +7 -17
- package/lib/application-control/models.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 +19 -20
- package/lib/application-control/status.js.map +1 -1
- package/lib/application-control/types.d.ts +0 -13
- package/lib/application-control/types.d.ts.map +1 -1
- package/lib/application-control/utils.d.ts +2 -9
- package/lib/application-control/utils.d.ts.map +1 -1
- package/lib/application-control/utils.js +13 -28
- package/lib/application-control/utils.js.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts +15 -2
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.js +200 -27
- package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
- package/lib/docker/docker-cmd.js +2 -2
- package/lib/docker/docker-cmd.js.map +1 -1
- package/lib/docker/docker-compose-cmd.js +2 -2
- package/lib/docker/docker-compose-cmd.js.map +1 -1
- package/lib/environment.d.ts +2 -0
- package/lib/environment.d.ts.map +1 -1
- package/lib/environment.js +3 -1
- package/lib/environment.js.map +1 -1
- package/lib/index.js +10 -8
- package/lib/index.js.map +1 -1
- package/lib/infrastructure/agent-config.d.ts +73 -0
- package/lib/infrastructure/agent-config.d.ts.map +1 -0
- package/lib/infrastructure/agent-config.js +186 -0
- package/lib/infrastructure/agent-config.js.map +1 -0
- package/lib/infrastructure/agent-config.test.d.ts +2 -0
- package/lib/infrastructure/agent-config.test.d.ts.map +1 -0
- package/lib/infrastructure/agent-config.test.js +135 -0
- package/lib/infrastructure/agent-config.test.js.map +1 -0
- package/lib/infrastructure/certificates-and-tokens.d.ts +6 -0
- package/lib/infrastructure/certificates-and-tokens.d.ts.map +1 -0
- package/lib/infrastructure/certificates-and-tokens.js +69 -0
- package/lib/infrastructure/certificates-and-tokens.js.map +1 -0
- package/lib/{util → infrastructure}/urls.d.ts +0 -0
- package/lib/infrastructure/urls.d.ts.map +1 -0
- package/lib/{util → infrastructure}/urls.js +3 -3
- package/lib/infrastructure/urls.js.map +1 -0
- package/lib/root.js +3 -3
- package/lib/root.js.map +1 -1
- package/lib/subcommands/app/app.d.ts +8 -1
- package/lib/subcommands/app/app.d.ts.map +1 -1
- package/lib/subcommands/app/app.js +58 -24
- package/lib/subcommands/app/app.js.map +1 -1
- package/lib/subcommands/app/index.d.ts.map +1 -1
- package/lib/subcommands/app/index.js +2 -0
- package/lib/subcommands/app/index.js.map +1 -1
- package/lib/subcommands/device/device.d.ts +6 -0
- package/lib/subcommands/device/device.d.ts.map +1 -0
- package/lib/subcommands/device/device.js +62 -0
- package/lib/subcommands/device/device.js.map +1 -0
- package/lib/subcommands/device/index.d.ts +2 -0
- package/lib/subcommands/device/index.d.ts.map +1 -0
- package/lib/subcommands/device/index.js +11 -0
- package/lib/subcommands/device/index.js.map +1 -0
- package/lib/subcommands/get-model-package.d.ts +5 -0
- package/lib/subcommands/get-model-package.d.ts.map +1 -0
- package/lib/subcommands/get-model-package.js +51 -0
- package/lib/subcommands/get-model-package.js.map +1 -0
- package/lib/subcommands/index.d.ts +8 -1
- package/lib/subcommands/index.d.ts.map +1 -1
- package/lib/subcommands/index.js +9 -3
- package/lib/subcommands/index.js.map +1 -1
- package/lib/subcommands/login.d.ts +3 -2
- package/lib/subcommands/login.d.ts.map +1 -1
- package/lib/subcommands/login.js +11 -4
- package/lib/subcommands/login.js.map +1 -1
- package/lib/util/copy-dir.js +3 -3
- package/lib/util/copy-dir.js.map +1 -1
- package/lib/util/directories.js +5 -5
- package/lib/util/directories.js.map +1 -1
- package/package.json +19 -14
- package/readme.md +176 -79
- package/src/application-control/backup.ts +10 -6
- package/src/application-control/environment-variables.ts +81 -0
- package/src/application-control/index.ts +40 -0
- package/src/application-control/install.ts +79 -55
- package/src/application-control/models.ts +12 -17
- package/src/application-control/status.ts +26 -24
- package/src/application-control/types.ts +0 -4
- package/src/application-control/utils.ts +10 -25
- package/src/cloud-connection/device-agent-cloud-connection.ts +243 -40
- package/src/docker/docker-cmd.ts +1 -1
- package/src/docker/docker-compose-cmd.ts +1 -1
- package/src/environment.ts +2 -0
- package/src/index.ts +10 -7
- package/src/infrastructure/agent-config.test.ts +143 -0
- package/src/infrastructure/agent-config.ts +217 -0
- package/src/infrastructure/certificates-and-tokens.ts +71 -0
- package/src/{util → infrastructure}/urls.ts +1 -1
- package/src/root.ts +3 -3
- package/src/subcommands/app/app.ts +57 -19
- package/src/subcommands/app/index.ts +4 -0
- package/src/subcommands/device/device.ts +63 -0
- package/src/subcommands/device/index.ts +8 -0
- package/src/subcommands/get-model-package.ts +60 -0
- package/src/subcommands/index.ts +9 -3
- package/src/subcommands/login.ts +11 -4
- package/src/util/copy-dir.ts +1 -1
- package/src/util/directories.ts +8 -8
- package/lib/constants.d.ts +0 -13
- package/lib/constants.d.ts.map +0 -1
- package/lib/constants.js +0 -18
- package/lib/constants.js.map +0 -1
- package/lib/subcommands/device-control.d.ts +0 -2
- package/lib/subcommands/device-control.d.ts.map +0 -1
- package/lib/subcommands/device-control.js +0 -19
- package/lib/subcommands/device-control.js.map +0 -1
- package/lib/util/spawner/gnu-spawner.d.ts +0 -9
- package/lib/util/spawner/gnu-spawner.d.ts.map +0 -1
- package/lib/util/spawner/gnu-spawner.js +0 -102
- package/lib/util/spawner/gnu-spawner.js.map +0 -1
- package/lib/util/spawner/js-spawner.d.ts +0 -5
- package/lib/util/spawner/js-spawner.d.ts.map +0 -1
- package/lib/util/spawner/js-spawner.js +0 -89
- package/lib/util/spawner/js-spawner.js.map +0 -1
- package/lib/util/spawner/types.d.ts +0 -28
- package/lib/util/spawner/types.d.ts.map +0 -1
- package/lib/util/spawner/types.js +0 -3
- package/lib/util/spawner/types.js.map +0 -1
- package/lib/util/spawner-base/index.d.ts +0 -17
- package/lib/util/spawner-base/index.d.ts.map +0 -1
- package/lib/util/spawner-base/index.js +0 -30
- package/lib/util/spawner-base/index.js.map +0 -1
- package/lib/util/spawner-base/run-foreground-sync.d.ts +0 -3
- package/lib/util/spawner-base/run-foreground-sync.d.ts.map +0 -1
- package/lib/util/spawner-base/run-foreground-sync.js +0 -18
- package/lib/util/spawner-base/run-foreground-sync.js.map +0 -1
- package/lib/util/spawner-base/run-foreground.d.ts +0 -3
- package/lib/util/spawner-base/run-foreground.d.ts.map +0 -1
- package/lib/util/spawner-base/run-foreground.js +0 -49
- package/lib/util/spawner-base/run-foreground.js.map +0 -1
- package/lib/util/spawner-base/run-streaming.d.ts +0 -4
- package/lib/util/spawner-base/run-streaming.d.ts.map +0 -1
- package/lib/util/spawner-base/run-streaming.js +0 -35
- package/lib/util/spawner-base/run-streaming.js.map +0 -1
- package/lib/util/spawner-base/run.d.ts +0 -4
- package/lib/util/spawner-base/run.d.ts.map +0 -1
- package/lib/util/spawner-base/run.js +0 -56
- package/lib/util/spawner-base/run.js.map +0 -1
- package/lib/util/urls.d.ts.map +0 -1
- package/lib/util/urls.js.map +0 -1
- package/lib/web/index.html +0 -229
- package/lib/web/static/Karla.css +0 -18
- package/lib/web/static/bootstrap-4.3.1.min.css +0 -7
- package/lib/web/static/bootstrap-4.3.1.min.js +0 -7
- package/lib/web/static/favicon.ico +0 -0
- package/lib/web/static/jquery-3.3.1.slim.min.js +0 -2
- package/lib/web/static/popper-1.14.7.min.js +0 -5
- package/lib/web/web-interface.d.ts +0 -2
- package/lib/web/web-interface.d.ts.map +0 -1
- package/lib/web/web-interface.js +0 -75
- package/lib/web/web-interface.js.map +0 -1
- package/src/constants.ts +0 -22
- package/src/subcommands/device-control.ts +0 -16
- package/src/util/spawner/gnu-spawner.ts +0 -114
- package/src/util/spawner/js-spawner.ts +0 -110
- package/src/util/spawner/types.ts +0 -28
- package/src/util/spawner-base/index.ts +0 -28
- package/src/util/spawner-base/run-foreground-sync.ts +0 -16
- package/src/util/spawner-base/run-foreground.ts +0 -49
- package/src/util/spawner-base/run-streaming.ts +0 -40
- package/src/util/spawner-base/run.ts +0 -60
- package/src/web/index.html +0 -229
- package/src/web/static/Karla.css +0 -18
- package/src/web/static/bootstrap-4.3.1.min.css +0 -7
- package/src/web/static/bootstrap-4.3.1.min.js +0 -7
- package/src/web/static/favicon.ico +0 -0
- package/src/web/static/jquery-3.3.1.slim.min.js +0 -2
- package/src/web/static/popper-1.14.7.min.js +0 -5
- package/src/web/web-interface.ts +0 -85
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { run } from './run';
|
|
2
|
-
import { runForegroundSync } from './run-foreground-sync';
|
|
3
|
-
import { runForeground } from './run-foreground';
|
|
4
|
-
import { runStreaming } from './run-streaming';
|
|
5
|
-
import { Cmd } from '../spawner/types';
|
|
6
|
-
|
|
7
|
-
export function SpawnerBase(translate: (cmd: Cmd) => Cmd) {
|
|
8
|
-
return {
|
|
9
|
-
run(cmd: Cmd) {
|
|
10
|
-
return run(translate(cmd));
|
|
11
|
-
},
|
|
12
|
-
runForeground(cmd: Cmd) {
|
|
13
|
-
return runForeground(translate(cmd));
|
|
14
|
-
},
|
|
15
|
-
runForegroundSync(cmd: Cmd) {
|
|
16
|
-
return runForegroundSync(translate(cmd));
|
|
17
|
-
},
|
|
18
|
-
runStreaming(cmd: Cmd) {
|
|
19
|
-
return runStreaming(translate(cmd));
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const spawnerBase = {
|
|
25
|
-
run,
|
|
26
|
-
runForegroundSync,
|
|
27
|
-
runStreaming,
|
|
28
|
-
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { spawnSync } from 'child_process';
|
|
2
|
-
const winston = require('winston');
|
|
3
|
-
|
|
4
|
-
import { Cmd } from '../spawner/types';
|
|
5
|
-
|
|
6
|
-
export function runForegroundSync(cmd: Cmd) {
|
|
7
|
-
const optString = cmd.args ? cmd.args.join(' ') : '';
|
|
8
|
-
winston.debug(`${cmd.exe} ${optString}`);
|
|
9
|
-
const out = spawnSync(cmd.exe, cmd.args || [], {
|
|
10
|
-
cwd: cmd.cwd,
|
|
11
|
-
stdio: 'inherit',
|
|
12
|
-
});
|
|
13
|
-
if (out.error) {
|
|
14
|
-
throw out.error;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'child_process';
|
|
2
|
-
import { Cmd } from '../spawner/types';
|
|
3
|
-
import signalExit = require('signal-exit');
|
|
4
|
-
import rKill = require('tree-kill');
|
|
5
|
-
import { CliTerseError } from '@alwaysai/alwayscli';
|
|
6
|
-
import { ALWAYSAI_OS_PLATFORM } from '../../environment';
|
|
7
|
-
|
|
8
|
-
export async function runForeground(cmd: Cmd) {
|
|
9
|
-
const childProcess = spawn(cmd.exe, cmd.args || [], {
|
|
10
|
-
cwd: cmd.cwd,
|
|
11
|
-
stdio: 'inherit',
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
// Kill child when parent exits
|
|
15
|
-
signalExit(() => {
|
|
16
|
-
if (ALWAYSAI_OS_PLATFORM === 'darwin') {
|
|
17
|
-
childProcess.kill('SIGINT');
|
|
18
|
-
// ensures the main process gets killed by the correct signal - this will only activate with a ctrl + c
|
|
19
|
-
// when it hits the siginit it will then activate the on exit signal and finish
|
|
20
|
-
process.on('SIGINT', () => {
|
|
21
|
-
if (childProcess.pid !== undefined) {
|
|
22
|
-
rKill(childProcess.pid, 'SIGINT', (error?: Error | undefined) => {
|
|
23
|
-
if (error) {
|
|
24
|
-
throw new CliTerseError(
|
|
25
|
-
`Failed to kill child process {error.name} {error.message}`,
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
} else {
|
|
32
|
-
childProcess.kill();
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
return await new Promise<number | undefined | void>((resolve, reject) => {
|
|
37
|
-
childProcess.on('error', err => {
|
|
38
|
-
reject(err);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
childProcess.on('exit', code => {
|
|
42
|
-
if (code) {
|
|
43
|
-
resolve(code);
|
|
44
|
-
} else {
|
|
45
|
-
resolve();
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'child_process';
|
|
2
|
-
|
|
3
|
-
import signalExit = require('signal-exit');
|
|
4
|
-
|
|
5
|
-
import { Cmd } from '../spawner/types';
|
|
6
|
-
|
|
7
|
-
export function runStreaming(cmd: Cmd) {
|
|
8
|
-
return new Promise<NodeJS.ReadableStream>((resolve, reject) => {
|
|
9
|
-
const child = spawn(cmd.exe, cmd.args || [], {
|
|
10
|
-
cwd: cmd.cwd,
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
signalExit(() => {
|
|
14
|
-
child.kill();
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
if (cmd.input) {
|
|
18
|
-
cmd.input.pipe(child.stdin);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const errChunks: Buffer[] = [];
|
|
22
|
-
function stderrChunkHandler(chunk: Buffer) {
|
|
23
|
-
errChunks.push(chunk);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
child.stderr.on('data', stderrChunkHandler);
|
|
27
|
-
|
|
28
|
-
child.on('error', (err: any) => {
|
|
29
|
-
if (err && !err.stderr) {
|
|
30
|
-
err.stderr = Buffer.concat(errChunks).toString();
|
|
31
|
-
}
|
|
32
|
-
reject(err);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
child.stdout.once('readable', () => {
|
|
36
|
-
resolve(child.stdout);
|
|
37
|
-
child.stderr.removeListener('data', stderrChunkHandler);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'child_process';
|
|
2
|
-
import signalExit = require('signal-exit');
|
|
3
|
-
|
|
4
|
-
import { CliTerseError } from '@alwaysai/alwayscli';
|
|
5
|
-
|
|
6
|
-
import { Cmd } from '../spawner/types';
|
|
7
|
-
|
|
8
|
-
export const PROCESS_EXITED_WITH_NON_ZERO_STATUS_CODE =
|
|
9
|
-
'Process exited with non-zero status code';
|
|
10
|
-
|
|
11
|
-
export async function run(cmd: Cmd) {
|
|
12
|
-
return new Promise<string>((resolve, reject) => {
|
|
13
|
-
const optString = cmd.args ? cmd.args.join(' ') : '';
|
|
14
|
-
const child = spawn(cmd.exe, cmd.args || [], { cwd: cmd.cwd });
|
|
15
|
-
signalExit(() => {
|
|
16
|
-
child.kill();
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
if (cmd.input) {
|
|
20
|
-
cmd.input.pipe(child.stdin);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// TODO: Limit buffer size
|
|
24
|
-
const outChunks: Buffer[] = [];
|
|
25
|
-
const allChunks: Buffer[] = []; // stderr and stdout
|
|
26
|
-
|
|
27
|
-
child.stdout.on('data', chunk => {
|
|
28
|
-
outChunks.push(chunk);
|
|
29
|
-
allChunks.push(chunk);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
child.stderr.on('data', chunk => {
|
|
33
|
-
allChunks.push(chunk);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
child.on('error', err => {
|
|
37
|
-
reject(err);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
child.on('close', code => {
|
|
41
|
-
if (code === 0) {
|
|
42
|
-
const str = Buffer.concat(outChunks).toString('utf8');
|
|
43
|
-
if (str.endsWith('\n')) {
|
|
44
|
-
resolve(str.slice(0, -1));
|
|
45
|
-
} else {
|
|
46
|
-
resolve(str);
|
|
47
|
-
}
|
|
48
|
-
} else if (code !== null) {
|
|
49
|
-
let message = `${PROCESS_EXITED_WITH_NON_ZERO_STATUS_CODE} ${code.toString()}`;
|
|
50
|
-
message += '\n\n';
|
|
51
|
-
message += `$ ${cmd.exe} ${cmd.args ? cmd.args.join(' ') : ''}`;
|
|
52
|
-
message += '\n\n';
|
|
53
|
-
message += Buffer.concat(allChunks).toString('utf8');
|
|
54
|
-
reject(new CliTerseError(message));
|
|
55
|
-
} else {
|
|
56
|
-
reject(new CliTerseError('Close code is undefined!'));
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
}
|
package/src/web/index.html
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
6
|
-
<meta name="description" content="">
|
|
7
|
-
<meta name="author" content="">
|
|
8
|
-
<link rel="icon" href="static/favicon.ico">
|
|
9
|
-
<title>alwaysAI Device Agent</title>
|
|
10
|
-
|
|
11
|
-
<script src="/socket.io/socket.io.js"></script>
|
|
12
|
-
|
|
13
|
-
<!-- Bootstrap CSS
|
|
14
|
-
================================================== -->
|
|
15
|
-
<script src="static/jquery-3.3.1.slim.min.js"
|
|
16
|
-
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous">
|
|
17
|
-
</script>
|
|
18
|
-
<script src="static/popper-1.14.7.min.js"
|
|
19
|
-
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous">
|
|
20
|
-
</script>
|
|
21
|
-
<link rel="stylesheet" href="static/bootstrap-4.3.1.min.css"
|
|
22
|
-
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
|
23
|
-
<script src="static/bootstrap-4.3.1.min.js"
|
|
24
|
-
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous">
|
|
25
|
-
</script>
|
|
26
|
-
<!--link href="static/bootstrap/css/bootstrap.min.css" rel="stylesheet"-->
|
|
27
|
-
|
|
28
|
-
<!-- Own styles
|
|
29
|
-
================================================== -->
|
|
30
|
-
<link href="static/Karla.css" rel="stylesheet">
|
|
31
|
-
<style>
|
|
32
|
-
body {
|
|
33
|
-
background-color: #f1f2f3;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.container {
|
|
37
|
-
max-width: 1024px;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.navbar-light .navbar-nav .nav-link,
|
|
41
|
-
.navbar-light .navbar-nav .nav-link:hover {
|
|
42
|
-
font-family: Karla;
|
|
43
|
-
font-size: 14px;
|
|
44
|
-
color: #000000;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.navbar-brand img {
|
|
48
|
-
width: 120px
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.dash-sub-title h1 {
|
|
52
|
-
font-size: 16px;
|
|
53
|
-
margin: 24px 0 8px 0;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.dash-sub-title h2 {
|
|
57
|
-
font-size: 14px;
|
|
58
|
-
margin: 8px 0 8px 0;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.card {
|
|
62
|
-
height: 480px;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.card-scroller {
|
|
66
|
-
overflow: scroll;
|
|
67
|
-
height: 420px;
|
|
68
|
-
}
|
|
69
|
-
h5 {
|
|
70
|
-
border-bottom: solid 1px #d2d2d2;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
::-webkit-scrollbar {
|
|
74
|
-
-webkit-appearance: none;
|
|
75
|
-
width: 7px;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
::-webkit-scrollbar-thumb {
|
|
79
|
-
border-radius: 4px;
|
|
80
|
-
background-color: rgba(0, 0, 0, .5);
|
|
81
|
-
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.alwaysai-logos-svg-horizontal-logo-red-black {
|
|
85
|
-
width: 121px;
|
|
86
|
-
height: 33px;
|
|
87
|
-
background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSI5MXB0IiBoZWlnaHQ9IjI1cHQiIHZpZXdCb3g9IjAgMCA5MSAyNSIgdmVyc2lvbj0iMS4xIj48ZyBpZD0ic3VyZmFjZTEiPjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7ZmlsbDpyZ2IoOTQuOTAxOTYxJSwxOC44MjM1MjklLDIyLjc0NTA5OCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSAyMC44MDQ2ODggMTIuNDYwOTM4IEwgMTQuMjMwNDY5IDAuOTY0ODQ0IEwgMS4xMTcxODggMjMuODgyODEyIEwgNi4zMDQ2ODggMjMuODgyODEyIEMgOS40NDE0MDYgMTguMjgxMjUgMTQuNjYwMTU2IDE0LjE3MTg3NSAyMC44MDQ2ODggMTIuNDYwOTM4IE0gOC4xNTYyNSAyMS44MjQyMTkgQyA5LjkzNzUgMjAuNTgyMDMxIDEyLjA2MjUgMTkuOTM3NSAxNC4yMzA0NjkgMTkuOTgwNDY5IEMgMTcuNDQ1MzEyIDE5Ljk4MDQ2OSAyMC42NjQwNjIgMjEuMjgxMjUgMjIuMTUyMzQ0IDIzLjg4MjgxMiBMIDI3LjMzOTg0NCAyMy44ODI4MTIgTCAyNS43ODEyNSAyMS4xNTYyNSBDIDIyLjQyNTc4MSAxNS4yOTI5NjkgMTQuMzAwNzgxIDE0LjcxNDg0NCA4LjE1NjI1IDIxLjgyNDIxOSBaIE0gOC4xNTYyNSAyMS44MjQyMTkgIi8+PHBhdGggc3R5bGU9IiBzdHJva2U6bm9uZTtmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMC45ODAzOTIlLDExLjc2NDcwNiUsMTIuOTQxMTc2JSk7ZmlsbC1vcGFjaXR5OjE7IiBkPSJNIDc1LjcxMDkzOCAxMC40MDYyNSBMIDc1LjA1ODU5NCAxMS4wODk4NDQgQyA3NC42NTIzNDQgMTAuNjIxMDk0IDc0LjA4MjAzMSAxMC4zMzU5MzggNzMuNDcyNjU2IDEwLjI4OTA2MiBDIDczLjE1NjI1IDEwLjI4NTE1NiA3Mi44NTU0NjkgMTAuNDAyMzQ0IDcyLjYyODkwNiAxMC42MTcxODggQyA3Mi40MDYyNSAxMC44MTI1IDcyLjI3NzM0NCAxMS4wOTM3NSA3Mi4yNzczNDQgMTEuMzg2NzE5IEMgNzIuMjgxMjUgMTEuNjYwMTU2IDcyLjM4NjcxOSAxMS45MjE4NzUgNzIuNTY2NDA2IDEyLjEyNSBDIDcyLjkxNzk2OSAxMi40ODA0NjkgNzMuMzI4MTI1IDEyLjc2NTYyNSA3My43ODEyNSAxMi45Njg3NSBDIDc0LjM3MTA5NCAxMy4yMzQzNzUgNzQuODk0NTMxIDEzLjYyMTA5NCA3NS4zMjAzMTIgMTQuMTA5Mzc1IEMgNzUuNTgyMDMxIDE0LjQ2ODc1IDc1LjcyMjY1NiAxNC45MTAxNTYgNzUuNzE4NzUgMTUuMzU5Mzc1IEMgNzUuNzMwNDY5IDE1Ljk4NDM3NSA3NS40ODQzNzUgMTYuNTg1OTM4IDc1LjAzNTE1NiAxNy4wMTk1MzEgQyA3NC41ODU5MzggMTcuNDY4NzUgNzMuOTY4NzUgMTcuNzE0ODQ0IDczLjMzNTkzOCAxNy42OTkyMTkgQyA3Mi44ODI4MTIgMTcuNjk5MjE5IDcyLjQzNzUgMTcuNTk3NjU2IDcyLjAzNTE1NiAxNy4zOTg0MzggQyA3MS42MzI4MTIgMTcuMjA3MDMxIDcxLjI4MTI1IDE2LjkyNTc4MSA3MS4wMDc4MTIgMTYuNTcwMzEyIEwgNzEuNjQ0NTMxIDE1LjgzOTg0NCBDIDcyLjAzOTA2MiAxNi4zNjMyODEgNzIuNjQwNjI1IDE2LjY4NzUgNzMuMjg5MDYyIDE2LjcyMjY1NiBDIDczLjY3MTg3NSAxNi43MzQzNzUgNzQuMDQ2ODc1IDE2LjU5Mzc1IDc0LjMyODEyNSAxNi4zMzIwMzEgQyA3NC41OTc2NTYgMTYuMDk3NjU2IDc0Ljc1MzkwNiAxNS43NTc4MTIgNzQuNzUzOTA2IDE1LjQwMjM0NCBDIDc0Ljc1NzgxMiAxNS4xMTcxODggNzQuNjU2MjUgMTQuODM1OTM4IDc0LjQ3MjY1NiAxNC42MjEwOTQgQyA3NC4wOTc2NTYgMTQuMjY1NjI1IDczLjY2Nzk2OSAxMy45ODA0NjkgNzMuMTk1MzEyIDEzLjc3MzQzOCBDIDcyLjYzNjcxOSAxMy41MTk1MzEgNzIuMTQ0NTMxIDEzLjE0NDUzMSA3MS43NDYwOTQgMTIuNjcxODc1IEMgNzEuNDkyMTg4IDEyLjMxMjUgNzEuMzU1NDY5IDExLjg3ODkwNiA3MS4zNjMyODEgMTEuNDM3NSBDIDcxLjM0NzY1NiAxMC44NzEwOTQgNzEuNTcwMzEyIDEwLjMyNDIxOSA3MS45NzI2NTYgOS45MzM1OTQgQyA3Mi4zOTA2MjUgOS41MzEyNSA3Mi45NDkyMTkgOS4zMTI1IDczLjUyMzQzOCA5LjMzMjAzMSBDIDc0LjM2MzI4MSA5LjM4NjcxOSA3NS4xNTIzNDQgOS43NzM0MzggNzUuNzEwOTM4IDEwLjQwNjI1IE0gNjIuOTQxNDA2IDkuNTM1MTU2IEwgNjQuMDE1NjI1IDkuNTM1MTU2IEwgNjYuNzI2NTYyIDE1LjY2Nzk2OSBMIDY5LjM1NTQ2OSA5LjUzNTE1NiBMIDcwLjQzMzU5NCA5LjUzNTE1NiBMIDY1LjczMDQ2OSAyMC40MDIzNDQgTCA2NC42NjAxNTYgMjAuNDAyMzQ0IEwgNjYuMTc5Njg4IDE2Ljg5NDUzMSBaIE0gNTcuNDQ1MzEyIDEwLjMyMDMxMiBDIDU2LjMyMDMxMiAxMC4zMDg1OTQgNTUuMjgxMjUgMTAuOTI1NzgxIDU0Ljc0MjE4OCAxMS45MjE4NzUgQyA1NC4xNzU3ODEgMTIuOTE3OTY5IDU0LjE3NTc4MSAxNC4xNDQ1MzEgNTQuNzQyMTg4IDE1LjE0MDYyNSBDIDU1LjAxNTYyNSAxNS42MzI4MTIgNTUuNDEwMTU2IDE2LjA0Njg3NSA1NS44OTQ1MzEgMTYuMzM1OTM4IEMgNTYuMzU5Mzc1IDE2LjYxNzE4OCA1Ni44OTQ1MzEgMTYuNzYxNzE5IDU3LjQ0MTQwNiAxNi43NjE3MTkgQyA1Ny45OTIxODggMTYuNzYxNzE5IDU4LjUzOTA2MiAxNi42MTcxODggNTkuMDE5NTMxIDE2LjMzNTkzOCBDIDU5LjUwMzkwNiAxNi4wNzAzMTIgNTkuODk4NDM4IDE1LjY3MTg3NSA2MC4xNjc5NjkgMTUuMTg3NSBDIDYwLjQ0MTQwNiAxNC42OTE0MDYgNjAuNTc4MTI1IDE0LjEyODkwNiA2MC41NzAzMTIgMTMuNTU4NTk0IEMgNjAuNTkzNzUgMTIuNjk1MzEyIDYwLjI2OTUzMSAxMS44NjMyODEgNTkuNjY3OTY5IDExLjI1IEMgNTkuMDg5ODQ0IDEwLjYzNjcxOSA1OC4yODUxNTYgMTAuMzAwNzgxIDU3LjQ0NTMxMiAxMC4zMjAzMTIgWiBNIDYxLjUwNzgxMiA5LjUzNTE1NiBMIDYxLjUwNzgxMiAxNy40OTIxODggTCA2MC41MDc4MTIgMTcuNDkyMTg4IEwgNjAuNTA3ODEyIDE2LjEyNSBDIDYwLjExNzE4OCAxNi42MTcxODggNTkuNjI4OTA2IDE3LjAxOTUzMSA1OS4wNzQyMTkgMTcuMzA0Njg4IEMgNTcuNTIzNDM4IDE4LjA1MDc4MSA1NS42NzU3ODEgMTcuNzE0ODQ0IDU0LjQ4MDQ2OSAxNi40NzI2NTYgQyA1My42OTkyMTkgMTUuNjgzNTk0IDUzLjI3MzQzOCAxNC42MDU0NjkgNTMuMjkyOTY5IDEzLjQ5MjE4OCBDIDUzLjI3NzM0NCAxMi4zODY3MTkgNTMuNzEwOTM4IDExLjMyODEyNSA1NC40OTIxODggMTAuNTU0Njg4IEMgNTUuMjM4MjgxIDkuNzYxNzE5IDU2LjI4MTI1IDkuMzE2NDA2IDU3LjM2NzE4OCA5LjMzMjAzMSBDIDU3Ljk3NjU2MiA5LjMyMDMxMiA1OC41ODIwMzEgOS40NjQ4NDQgNTkuMTI1IDkuNzQ2MDk0IEMgNTkuNjc1NzgxIDEwLjA1MDc4MSA2MC4xNDg0MzggMTAuNDgwNDY5IDYwLjUwNzgxMiAxMSBMIDYwLjUwNzgxMiA5LjUzNTE1NiBaIE0gNDAuMjUgOS41MzUxNTYgTCA0MS4yOTI5NjkgOS41MzUxNTYgTCA0My43MDcwMzEgMTUuMzEyNSBMIDQ2LjIzODI4MSA5LjUzNTE1NiBMIDQ2LjQxNzk2OSA5LjUzNTE1NiBMIDQ4Ljk0MTQwNiAxNS4zMTI1IEwgNTEuMzk0NTMxIDkuNTM1MTU2IEwgNTIuNDUzMTI1IDkuNTM1MTU2IEwgNDkuMDM1MTU2IDE3LjQ5MjE4OCBMIDQ4LjgzOTg0NCAxNy40OTIxODggTCA0Ni4zMzIwMzEgMTEuNzk2ODc1IEwgNDMuODAwNzgxIDE3LjQ5MjE4OCBMIDQzLjYxMzI4MSAxNy40OTIxODggWiBNIDM4LjE5NTMxMiA2LjQ2NDg0NCBMIDM5LjIxMDkzOCA2LjQ2NDg0NCBMIDM5LjIxMDkzOCAxNy40OTIxODggTCAzOC4xOTUzMTIgMTcuNDkyMTg4IFogTSAzMi4wMDM5MDYgMTAuMzIwMzEyIEMgMzAuODc4OTA2IDEwLjMwODU5NCAyOS44MzU5MzggMTAuOTI1NzgxIDI5LjI5Njg3NSAxMS45MjE4NzUgQyAyOC43MzA0NjkgMTIuOTE3OTY5IDI4LjczNDM3NSAxNC4xNDQ1MzEgMjkuMzAwNzgxIDE1LjE0MDYyNSBDIDI5LjU3MDMxMiAxNS42MzI4MTIgMjkuOTY4NzUgMTYuMDQ2ODc1IDMwLjQ0OTIxOSAxNi4zMzU5MzggQyAzMC45MTc5NjkgMTYuNjE3MTg4IDMxLjQ1MzEyNSAxNi43NjE3MTkgMzEuOTk2MDk0IDE2Ljc2MTcxOSBDIDMyLjU1MDc4MSAxNi43NjE3MTkgMzMuMDkzNzUgMTYuNjE3MTg4IDMzLjU3ODEyNSAxNi4zMzU5MzggQyAzNC4wNTg1OTQgMTYuMDcwMzEyIDM0LjQ1NzAzMSAxNS42NzE4NzUgMzQuNzIyNjU2IDE1LjE4NzUgQyAzNC45OTYwOTQgMTQuNjkxNDA2IDM1LjEzNjcxOSAxNC4xMjg5MDYgMzUuMTI4OTA2IDEzLjU1ODU5NCBDIDM1LjE0ODQzOCAxMi42OTUzMTIgMzQuODI0MjE5IDExLjg2MzI4MSAzNC4yMjY1NjIgMTEuMjQ2MDk0IEMgMzMuNjQ0NTMxIDEwLjYzNjcxOSAzMi44Mzk4NDQgMTAuMzAwNzgxIDMyLjAwMzkwNiAxMC4zMjAzMTIgWiBNIDM2LjA2MjUgOS41MzUxNTYgTCAzNi4wNjI1IDE3LjQ5MjE4OCBMIDM1LjA2MjUgMTcuNDkyMTg4IEwgMzUuMDYyNSAxNi4xMjUgQyAzNC42NzU3ODEgMTYuNjE3MTg4IDM0LjE4NzUgMTcuMDE5NTMxIDMzLjYzMjgxMiAxNy4zMDQ2ODggQyAzMi4wODIwMzEgMTguMDUwNzgxIDMwLjIzMDQ2OSAxNy43MTQ4NDQgMjkuMDM1MTU2IDE2LjQ3MjY1NiBDIDI4LjI1NzgxMiAxNS42ODM1OTQgMjcuODI4MTI1IDE0LjYwNTQ2OSAyNy44NTE1NjIgMTMuNDkyMTg4IEMgMjcuODM1OTM4IDEyLjM4NjcxOSAyOC4yNjU2MjUgMTEuMzI4MTI1IDI5LjA0Njg3NSAxMC41NTQ2ODggQyAyOS43OTY4NzUgOS43NjE3MTkgMzAuODM5ODQ0IDkuMzE2NDA2IDMxLjkyNTc4MSA5LjMzMjAzMSBDIDMyLjUzNTE1NiA5LjMyMDMxMiAzMy4xMzY3MTkgOS40NjQ4NDQgMzMuNjc5Njg4IDkuNzQ2MDk0IEMgMzQuMjMwNDY5IDEwLjA1MDc4MSAzNC43MDMxMjUgMTAuNDgwNDY5IDM1LjA2MjUgMTEgTCAzNS4wNjI1IDkuNTM1MTU2IFogTSAzNi4wNjI1IDkuNTM1MTU2ICIvPjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7ZmlsbDpyZ2IoOTQuOTAxOTYxJSwxOC44MjM1MjklLDIyLjc0NTA5OCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSA4My4zMzIwMzEgMTIuNTI3MzQ0IEwgODEuOTU3MDMxIDkuNTcwMzEyIEwgODAuNTY2NDA2IDEyLjUyNzM0NCBaIE0gODQuMDI3MzQ0IDE0LjA0Mjk2OSBMIDc5Ljg2MzI4MSAxNC4wNDI5NjkgTCA3OC4yMzgyODEgMTcuNDkyMTg4IEwgNzYuNTMxMjUgMTcuNDkyMTg4IEwgODEuNjc1NzgxIDYuNTAzOTA2IEwgODIuMjQ2MDk0IDYuNTAzOTA2IEwgODcuMzI0MjE5IDE3LjQ5MjE4OCBMIDg1LjY2MDE1NiAxNy40OTIxODggWiBNIDg0LjAyNzM0NCAxNC4wNDI5NjkgIi8+PHBhdGggc3R5bGU9IiBzdHJva2U6bm9uZTtmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig5NC45MDE5NjElLDE4LjgyMzUyOSUsMjIuNzQ1MDk4JSk7ZmlsbC1vcGFjaXR5OjE7IiBkPSJNIDg4LjE0NDUzMSA2LjUwMzkwNiBMIDg5LjY4MzU5NCA2LjUwMzkwNiBMIDg5LjY4MzU5NCAxNy40OTIxODggTCA4OC4xNDQ1MzEgMTcuNDkyMTg4IFogTSA4OC4xNDQ1MzEgNi41MDM5MDYgIi8+PC9nPjwvc3ZnPg==);
|
|
88
|
-
}
|
|
89
|
-
</style>
|
|
90
|
-
</head>
|
|
91
|
-
|
|
92
|
-
<body class="tos-bg">
|
|
93
|
-
|
|
94
|
-
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
|
95
|
-
<a class="navbar-brand" href="http://alwaysai.co/" target="_blank"><div class="alwaysai-logos-svg-horizontal-logo-red-black"></div>
|
|
96
|
-
</a>
|
|
97
|
-
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText"
|
|
98
|
-
aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
|
|
99
|
-
<span class="navbar-toggler-icon"></span>
|
|
100
|
-
</button>
|
|
101
|
-
<div class="collapse navbar-collapse" id="navbarText">
|
|
102
|
-
<span class="navbar-nav mr-auto"></span>
|
|
103
|
-
|
|
104
|
-
<ul class="navbar-nav ">
|
|
105
|
-
|
|
106
|
-
<li class="nav-item">
|
|
107
|
-
<a class="nav-link" href="https://alwaysai.co/docs/" target="_blank">Documentation</a>
|
|
108
|
-
</li>
|
|
109
|
-
<li class="nav-item">
|
|
110
|
-
<a class="nav-link" href="https://alwaysai.co/support" target="_blank">Support</a>
|
|
111
|
-
</li>
|
|
112
|
-
</ul>
|
|
113
|
-
</div>
|
|
114
|
-
</nav>
|
|
115
|
-
<div class="container" min-width= "1024px" width="100%">
|
|
116
|
-
<div class="card-deck">
|
|
117
|
-
|
|
118
|
-
<div class="card">
|
|
119
|
-
<div class="card-body">
|
|
120
|
-
<h5 class="card-title">Device Status</h5>
|
|
121
|
-
<div class="row" style="justify-content: center; align-items: center;">
|
|
122
|
-
<div class="card col-sm" style="background-color: #add8e6; height: fit-content; align-items: center;">
|
|
123
|
-
<h6 class="card-title">CPU %</h6>
|
|
124
|
-
<p id="cpu_value" style="font-size: 40px;">0%</p>
|
|
125
|
-
</div>
|
|
126
|
-
<div class="card col-sm" style="background-color: #add8e6; height: fit-content; align-items: center;">
|
|
127
|
-
<h6 class="card-title">Memory %</h6>
|
|
128
|
-
<p id="memory_value" style="font-size: 40px;">0%</p></div>
|
|
129
|
-
<div class="card col-sm" style="background-color: #add8e6; height: fit-content; align-items: center;">
|
|
130
|
-
<h6 class="card-title">Disk %</h6>
|
|
131
|
-
<p id="disk_value" style="font-size: 40px;">0%</p></div>
|
|
132
|
-
</div>
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
|
|
136
|
-
<div class="card">
|
|
137
|
-
<div class="card-body">
|
|
138
|
-
<h5 class="card-title">Applications</h5>
|
|
139
|
-
<div class="row">
|
|
140
|
-
<div id="projects"></div>
|
|
141
|
-
</div>
|
|
142
|
-
</div>
|
|
143
|
-
</div>
|
|
144
|
-
|
|
145
|
-
</div>
|
|
146
|
-
</div>
|
|
147
|
-
</html>
|
|
148
|
-
|
|
149
|
-
<script>
|
|
150
|
-
const socket = io();
|
|
151
|
-
function start(projectId) {
|
|
152
|
-
socket.emit('start-app', {projectId});
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
function stop(projectId) {
|
|
156
|
-
socket.emit('stop-app', {projectId});
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function restart(projectId) {
|
|
160
|
-
socket.emit('restart-app', {projectId});
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
document.addEventListener("DOMContentLoaded", function(event) {
|
|
164
|
-
|
|
165
|
-
const device_info_elem = document.getElementById("device-info");
|
|
166
|
-
const apps_info_elem = document.getElementById("apps-info");
|
|
167
|
-
const cpu_value = document.getElementById("cpu_value");
|
|
168
|
-
const memory_value = document.getElementById("memory_value");
|
|
169
|
-
const disk_value = document.getElementById("disk_value");
|
|
170
|
-
const projects = document.getElementById("projects");
|
|
171
|
-
|
|
172
|
-
//const socket = io.connect('http://' + document.domain + ':' + location.port, {
|
|
173
|
-
// reconnection: true,
|
|
174
|
-
// transports: ["websocket"],
|
|
175
|
-
//});
|
|
176
|
-
|
|
177
|
-
socket.on('connect', () => {
|
|
178
|
-
console.log('Connected');
|
|
179
|
-
running = true;
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
socket.on('disconnect', () => {
|
|
183
|
-
console.log('Disconnected');
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
socket.on('connect_error', (error) => {
|
|
187
|
-
console.log('Connect error! ' + error);
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
socket.on('connect_timeout', (error) => {
|
|
191
|
-
console.log('Connect timeout! ' + error);
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
socket.on('error', (error) => {
|
|
195
|
-
console.log('Error! ' + error);
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
socket.on('device-info-rsp', (msg) => {
|
|
199
|
-
console.log('Received device-info-rsp');
|
|
200
|
-
console.log(msg);
|
|
201
|
-
cpu_value.innerHTML = msg.cpuUtil.toFixed(1) + "%"
|
|
202
|
-
memory_value.innerHTML = msg.memUtil.toFixed(1) + "%"
|
|
203
|
-
disk_value.innerHTML = msg.diskUtil.toFixed(1) + "%"
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
socket.on('apps-info-rsp', (msg) => {
|
|
207
|
-
console.log('Received apps-info-rsp');
|
|
208
|
-
console.log(msg);
|
|
209
|
-
projects.innerHTML = msg.apps.map(app => {
|
|
210
|
-
return (
|
|
211
|
-
`<div class="col-sm" style="background-color: #add8e6;">
|
|
212
|
-
<h6>Project Info:</h6>
|
|
213
|
-
<p id="app_id">ID: ${app.projectId}</p>
|
|
214
|
-
<p id="app_status">Status: ${app.status}</p>
|
|
215
|
-
<button onclick=start("${app.projectId}") type="button" class="btn btn-outline-success">Start</button>
|
|
216
|
-
<button onclick=stop("${app.projectId}") type="button" class="btn btn-outline-danger">Stop</button>
|
|
217
|
-
<button onclick=restart("${app.projectId}") type="button" class="btn btn-outline-info">Restart</button>
|
|
218
|
-
</div>`
|
|
219
|
-
)
|
|
220
|
-
})
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
// Update device and app state periodically (5 seconds)
|
|
224
|
-
setInterval(() => {
|
|
225
|
-
socket.emit('device-info-req');
|
|
226
|
-
socket.emit('apps-info-req');
|
|
227
|
-
}, 1000)
|
|
228
|
-
});
|
|
229
|
-
</script>
|
package/src/web/static/Karla.css
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/* latin-ext */
|
|
2
|
-
@font-face {
|
|
3
|
-
font-family: 'Karla';
|
|
4
|
-
font-style: normal;
|
|
5
|
-
font-weight: 400;
|
|
6
|
-
font-display: swap;
|
|
7
|
-
src: local('Karla'), local('Karla-Regular'), url(https://fonts.gstatic.com/s/karla/v8/qkBbXvYC6trAT7RbLtyG5Q.woff2) format('woff2');
|
|
8
|
-
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
|
9
|
-
}
|
|
10
|
-
/* latin */
|
|
11
|
-
@font-face {
|
|
12
|
-
font-family: 'Karla';
|
|
13
|
-
font-style: normal;
|
|
14
|
-
font-weight: 400;
|
|
15
|
-
font-display: swap;
|
|
16
|
-
src: local('Karla'), local('Karla-Regular'), url(https://fonts.gstatic.com/s/karla/v8/qkBbXvYC6trAT7RVLtw.woff2) format('woff2');
|
|
17
|
-
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
18
|
-
}
|