cdd-cli 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/.github/workflows/ci.yml +29 -0
  2. package/CHANGELOG.md +27 -0
  3. package/CODE_OF_CONDUCT.md +12 -0
  4. package/CONTRIBUTING.md +22 -0
  5. package/LICENSE +23 -0
  6. package/README.md +73 -161
  7. package/SECURITY.md +5 -0
  8. package/babel.config.cjs +6 -0
  9. package/dist/App.js +38 -24
  10. package/dist/cdd.bundle.js +8 -0
  11. package/dist/components/ContainerCreationPrompt.js +48 -0
  12. package/dist/components/ContainerCreator.js +81 -0
  13. package/dist/components/ContainerList.js +24 -4
  14. package/dist/components/ContainerRow.js +66 -13
  15. package/dist/components/ContainerSection.js +14 -0
  16. package/dist/components/Footer.js +10 -0
  17. package/dist/components/PromptField.js +20 -0
  18. package/dist/components/UsageMenu.js +8 -0
  19. package/dist/helpers/actionHelpers.js +0 -1
  20. package/dist/helpers/dockerActions.js +13 -0
  21. package/dist/helpers/dockerService/dockerService.js +5 -0
  22. package/dist/helpers/dockerService/serviceComponents/containerActions.js +163 -0
  23. package/dist/helpers/dockerService/serviceComponents/containerList.js +57 -0
  24. package/dist/helpers/dockerService/serviceComponents/containerLogs.js +24 -0
  25. package/dist/helpers/dockerService/serviceComponents/containerStats.js +50 -0
  26. package/dist/helpers/dockerService/serviceComponents/imageUtils.js +52 -0
  27. package/dist/helpers/dockerService.js +111 -0
  28. package/dist/helpers/validationHelpers.js +26 -0
  29. package/dist/hooks/creation/useContainerActions.js +171 -0
  30. package/dist/hooks/creation/useContainerCreation.js +141 -0
  31. package/dist/hooks/creation/useLogsViewer.js +62 -0
  32. package/dist/hooks/useContainers.js +11 -1
  33. package/dist/hooks/useControls.js +298 -78
  34. package/dist/hooks/useLogsStream.js +1 -1
  35. package/dist/index.js +11 -0
  36. package/esbuild.config.cjs +11 -0
  37. package/jest.config.cjs +6 -0
  38. package/package.json +10 -6
  39. package/src/App.jsx +43 -26
  40. package/src/components/ContainerCreationPrompt.jsx +37 -0
  41. package/src/components/ContainerList.jsx +23 -6
  42. package/src/components/ContainerRow.jsx +36 -19
  43. package/src/components/ContainerSection.jsx +10 -0
  44. package/src/components/Footer.jsx +10 -0
  45. package/src/components/PromptField.jsx +18 -0
  46. package/src/components/UsageMenu.jsx +17 -0
  47. package/src/helpers/actionHelpers.js +0 -1
  48. package/src/helpers/dockerService/dockerService.js +3 -0
  49. package/src/helpers/dockerService/serviceComponents/containerActions.js +52 -0
  50. package/src/helpers/dockerService/serviceComponents/containerList.js +26 -0
  51. package/src/helpers/dockerService/serviceComponents/containerLogs.js +19 -0
  52. package/src/helpers/dockerService/serviceComponents/containerStats.js +34 -0
  53. package/src/helpers/dockerService/serviceComponents/imageUtils.js +21 -0
  54. package/src/helpers/validationHelpers.js +16 -0
  55. package/src/hooks/creation/useContainerActions.js +68 -0
  56. package/src/hooks/creation/useContainerCreation.js +104 -0
  57. package/src/hooks/creation/useLogsViewer.js +50 -0
  58. package/src/hooks/useContainers.js +11 -1
  59. package/src/hooks/useControls.js +176 -55
  60. package/src/hooks/useLogsStream.js +1 -1
  61. package/src/index.js +13 -0
  62. package/test/validationHelpers.test.js +28 -0
  63. package/PLAN_KEYBINDINGS_Y_REALTIME.md +0 -260
  64. package/src/components/StatsViewer.jsx +0 -0
  65. package/src/helpers/dockerActions.js +0 -39
  66. package/src/helpers/dockerService.js +0 -88
@@ -1,88 +0,0 @@
1
-
2
- import Docker from "dockerode";
3
- const docker = new Docker({ socketPath: "/var/run/docker.sock" });
4
-
5
- export function getLogsStream(containerId, onData, onEnd, onError) {
6
- const container = docker.getContainer(containerId);
7
- container.logs({
8
- follow: true,
9
- stdout: true,
10
- stderr: true,
11
- tail: 100
12
- }, (err, stream) => {
13
- if (err) {
14
- onError?.(err);
15
- return;
16
- }
17
- stream.on('data', chunk => onData?.(chunk.toString()));
18
- stream.on('end', () => onEnd?.());
19
- stream.on('error', err => onError?.(err));
20
- });
21
- }
22
-
23
- export async function startContainer(containerId) {
24
- const container = docker.getContainer(containerId);
25
- await container.start();
26
- }
27
-
28
- export async function stopContainer(containerId) {
29
- const container = docker.getContainer(containerId);
30
- await container.stop();
31
- }
32
-
33
- export async function restartContainer(containerId) {
34
- const container = docker.getContainer(containerId);
35
- await container.restart();
36
- }
37
-
38
- export async function getContainers() {
39
- const containers = await docker.listContainers({ all: true });
40
- return containers.map((container) => ({
41
- id: container.Id,
42
- name: container.Names[0].replace("/", ""),
43
- image: container.Image,
44
- state: container.State,
45
- status: container.Status,
46
- ports:
47
- [
48
- ...new Set(
49
- container.Ports.filter((port) => port.PublicPort).map(
50
- (port) => `${port.PublicPort}:${port.PrivatePort}`
51
- )
52
- ),
53
- ]
54
- }));
55
- }
56
-
57
- export async function getStats(containerId) {
58
- const container = docker.getContainer(containerId);
59
- const stream = await container.stats({ stream: false });
60
-
61
- const cpuDelta =
62
- stream.cpu_stats.cpu_usage.total_usage -
63
- stream.precpu_stats.cpu_usage.total_usage;
64
- const systemDelta =
65
- stream.cpu_stats.system_cpu_usage - stream.precpu_stats.system_cpu_usage;
66
- const cpuPercent = systemDelta > 0 ? (cpuDelta / systemDelta) * 100 : 0;
67
-
68
- const memUsage = stream.memory_stats.usage || 0;
69
- const memLimit = stream.memory_stats.limit || 1;
70
- const memPercent = (memUsage / memLimit) * 100;
71
-
72
- const rx = stream.networks
73
- ? Object.values(stream.networks)
74
- .map((n) => n.rx_bytes)
75
- .reduce((a, b) => a + b, 0)
76
- : 0;
77
- const tx = stream.networks
78
- ? Object.values(stream.networks)
79
- .map((n) => n.tx_bytes)
80
- .reduce((a, b) => a + b, 0)
81
- : 0;
82
-
83
- return {
84
- cpuPercent: cpuPercent.toFixed(1),
85
- memPercent: memPercent.toFixed(1),
86
- netIO: { rx, tx },
87
- };
88
- }