From df7e833b84eb8b05adca1845174d490075120974 Mon Sep 17 00:00:00 2001 From: ajnart Date: Mon, 20 Jun 2022 09:00:42 +0200 Subject: [PATCH] :construction: Work in progress on docker integration --- package.json | 2 + src/components/Docker/DockerDrawer.tsx | 48 ++++++ src/components/layout/Header.tsx | 2 + src/pages/api/docker/containers.tsx | 27 ++++ yarn.lock | 202 ++++++++++++++++++++++++- 5 files changed, 275 insertions(+), 6 deletions(-) create mode 100644 src/components/Docker/DockerDrawer.tsx create mode 100644 src/pages/api/docker/containers.tsx diff --git a/package.json b/package.json index 3c02b4067..a04acfa24 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "axios": "^0.27.2", "cookies-next": "^2.0.4", "dayjs": "^1.11.3", + "dockerode": "^3.3.2", "framer-motion": "^6.3.1", "js-file-download": "^0.4.12", "next": "12.1.6", @@ -59,6 +60,7 @@ "@next/bundle-analyzer": "^12.1.4", "@next/eslint-plugin-next": "^12.1.4", "@storybook/react": "^6.5.4", + "@types/dockerode": "^3.3.9", "@types/node": "^17.0.23", "@types/react": "17.0.43", "@types/uuid": "^8.3.4", diff --git a/src/components/Docker/DockerDrawer.tsx b/src/components/Docker/DockerDrawer.tsx new file mode 100644 index 000000000..f295e1b02 --- /dev/null +++ b/src/components/Docker/DockerDrawer.tsx @@ -0,0 +1,48 @@ +import { ActionIcon, Drawer, Group, List, Text } from '@mantine/core'; +import { IconBrandDocker } from '@tabler/icons'; +import axios from 'axios'; +import { useEffect, useState } from 'react'; +import Docker from 'dockerode'; + +export default function DockerDrawer(props: any) { + const [opened, setOpened] = useState(false); + const [containers, setContainers] = useState([]); + useEffect(() => { + axios.get('/api/docker/containers').then((res) => { + setContainers(res.data); + }); + }, []); + return ( + <> + setOpened(false)} + title="Register" + padding="xl" + size="full" + > + + {containers.map((container) => ( + + {container.Names[0]} + {container.State} + {container.Status} + {container.Image} + + ))} + + + + setOpened(true)} + > + + + + + ); +} diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx index cbfd807be..119a44cb8 100644 --- a/src/components/layout/Header.tsx +++ b/src/components/layout/Header.tsx @@ -18,6 +18,7 @@ import { AddItemShelfButton } from '../AppShelf/AddAppShelfItem'; import { SettingsMenuButton } from '../Settings/SettingsMenu'; import { ModuleWrapper } from '../modules/moduleWrapper'; import { CalendarModule, TotalDownloadsModule, WeatherModule, DateModule } from '../modules'; +import DockerDrawer from '../Docker/DockerDrawer'; const HEADER_HEIGHT = 60; @@ -47,6 +48,7 @@ export function Header(props: any) { + diff --git a/src/pages/api/docker/containers.tsx b/src/pages/api/docker/containers.tsx new file mode 100644 index 000000000..5849673a2 --- /dev/null +++ b/src/pages/api/docker/containers.tsx @@ -0,0 +1,27 @@ +import axios from 'axios'; +import { NextApiRequest, NextApiResponse } from 'next'; + +import Docker from 'dockerode'; + +const docker = new Docker(); + +async function Get(req: NextApiRequest, res: NextApiResponse) { + const con: Docker.Container = docker.getContainer('hello'); + docker.listContainers({ all: true }, (err, containers) => { + if (err) { + res.status(500).json({ error: err }); + } + res.status(200).json(containers); + }); +} + +export default async (req: NextApiRequest, res: NextApiResponse) => { + // Filter out if the reuqest is a POST or a GET + if (req.method === 'GET') { + return Get(req, res); + } + return res.status(405).json({ + statusCode: 405, + message: 'Method not allowed', + }); +}; diff --git a/yarn.lock b/yarn.lock index 4b950084b..929ce5a86 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3874,6 +3874,26 @@ __metadata: languageName: node linkType: hard +"@types/docker-modem@npm:*": + version: 3.0.2 + resolution: "@types/docker-modem@npm:3.0.2" + dependencies: + "@types/node": "*" + "@types/ssh2": "*" + checksum: 1f23db30e6e9bdd4c6d6e43572fb7ac7251d106a1906a9f3faabac393897712a5a9cd5a471baedc0ac8055dab3f48eda331f41a1e2c7c6bbe3c7f433e039151c + languageName: node + linkType: hard + +"@types/dockerode@npm:^3.3.9": + version: 3.3.9 + resolution: "@types/dockerode@npm:3.3.9" + dependencies: + "@types/docker-modem": "*" + "@types/node": "*" + checksum: 3d03c68addb37c50e9557fff17171d26423aa18e544cb24e4caa81ebcec39ccc1cafed7adbfb8f4220d8ed23028d231717826bb77a786d425885c4f4cc37536d + languageName: node + linkType: hard + "@types/eslint-scope@npm:^3.7.3": version: 3.7.3 resolution: "@types/eslint-scope@npm:3.7.3" @@ -4151,6 +4171,25 @@ __metadata: languageName: node linkType: hard +"@types/ssh2-streams@npm:*": + version: 0.1.9 + resolution: "@types/ssh2-streams@npm:0.1.9" + dependencies: + "@types/node": "*" + checksum: 190f3c235bf19787cd255f366d3ac9233875750095f3c73d15e72a1e67a826aed7e7c389603c5e89cb6420b87ff6dffc566f9174e546ddb7ff8c8dc2e8b00def + languageName: node + linkType: hard + +"@types/ssh2@npm:*": + version: 0.5.52 + resolution: "@types/ssh2@npm:0.5.52" + dependencies: + "@types/node": "*" + "@types/ssh2-streams": "*" + checksum: bc1c76ac727ad73ddd59ba849cf0ea3ed2e930439e7a363aff24f04f29b74f9b1976369b869dc9a018223c9fb8ad041c09a0f07aea8cf46a8c920049188cddae + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.1 resolution: "@types/stack-utils@npm:2.0.1" @@ -5196,6 +5235,15 @@ __metadata: languageName: node linkType: hard +"asn1@npm:^0.2.4": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: ~2.1.0 + checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d + languageName: node + linkType: hard + "assert@npm:^1.1.1": version: 1.5.0 resolution: "assert@npm:1.5.0" @@ -5519,7 +5567,7 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.0.2": +"base64-js@npm:^1.0.2, base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 @@ -5541,6 +5589,15 @@ __metadata: languageName: node linkType: hard +"bcrypt-pbkdf@npm:^1.0.2": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: ^0.14.3 + checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291 + languageName: node + linkType: hard + "better-opn@npm:^2.1.1": version: 2.1.1 resolution: "better-opn@npm:2.1.1" @@ -5587,6 +5644,17 @@ __metadata: languageName: node linkType: hard +"bl@npm:^4.0.3": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + languageName: node + linkType: hard + "bluebird@npm:^3.5.5": version: 3.7.2 resolution: "bluebird@npm:3.7.2" @@ -5842,6 +5910,23 @@ __metadata: languageName: node linkType: hard +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"buildcheck@npm:0.0.3": + version: 0.0.3 + resolution: "buildcheck@npm:0.0.3" + checksum: baf30605c56e80c2ca0502e40e18f2ebc7075bb4a861c941c0b36cd468b27957ed11a62248003ce99b9e5f91a7dfa859b30aad4fa50f0090c77a6f596ba20e6d + languageName: node + linkType: hard + "builtin-status-codes@npm:^3.0.0": version: 3.0.0 resolution: "builtin-status-codes@npm:3.0.0" @@ -6679,6 +6764,17 @@ __metadata: languageName: node linkType: hard +"cpu-features@npm:~0.0.4": + version: 0.0.4 + resolution: "cpu-features@npm:0.0.4" + dependencies: + buildcheck: 0.0.3 + nan: ^2.15.0 + node-gyp: latest + checksum: a20d58e41e63182b34753dfe23bd1d967944ec13d84b70849b5d334fb4a558b7e71e7f955ed86c8e75dd65b5c5b882f1c494174d342cb6d8a062d77f79d39596 + languageName: node + linkType: hard + "cpy@npm:^8.1.2": version: 8.1.2 resolution: "cpy@npm:8.1.2" @@ -7243,6 +7339,28 @@ __metadata: languageName: node linkType: hard +"docker-modem@npm:^3.0.0": + version: 3.0.5 + resolution: "docker-modem@npm:3.0.5" + dependencies: + debug: ^4.1.1 + readable-stream: ^3.5.0 + split-ca: ^1.0.1 + ssh2: ^1.4.0 + checksum: 79027f8e719a77031790af628f9aa1d72607ec3769149de3a4b683930f2e4d113ae0e3a7345b32ff3b2289f886879f4fcf216afb17908178ba00f9661c4e0dd6 + languageName: node + linkType: hard + +"dockerode@npm:^3.3.2": + version: 3.3.2 + resolution: "dockerode@npm:3.3.2" + dependencies: + docker-modem: ^3.0.0 + tar-fs: ~2.0.1 + checksum: 69b60547ed2e6156e6ec1df16fccea9150c935ee0b0517723b4d05a5d840a01d4cd945341390d24b7fa301383be64145d563d9319be56d487a5bcbf9f872ee59 + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -7466,7 +7584,7 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0": +"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: @@ -8716,6 +8834,13 @@ __metadata: languageName: node linkType: hard +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d + languageName: node + linkType: hard + "fs-extra@npm:^10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" @@ -9446,6 +9571,7 @@ __metadata: "@nivo/line": ^0.79.1 "@storybook/react": ^6.5.4 "@tabler/icons": ^1.68.0 + "@types/dockerode": ^3.3.9 "@types/node": ^17.0.23 "@types/react": 17.0.43 "@types/uuid": ^8.3.4 @@ -9454,6 +9580,7 @@ __metadata: axios: ^0.27.2 cookies-next: ^2.0.4 dayjs: ^1.11.3 + dockerode: ^3.3.2 eslint: ^8.11.0 eslint-config-airbnb: ^19.0.4 eslint-config-airbnb-typescript: ^16.1.0 @@ -9704,7 +9831,7 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.4": +"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e @@ -11841,6 +11968,13 @@ __metadata: languageName: node linkType: hard +"mkdirp-classic@npm:^0.5.2": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac + languageName: node + linkType: hard + "mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" @@ -11920,7 +12054,7 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.12.1": +"nan@npm:^2.12.1, nan@npm:^2.15.0, nan@npm:^2.16.0": version: 2.16.0 resolution: "nan@npm:2.16.0" dependencies: @@ -13695,7 +13829,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": version: 3.6.0 resolution: "readable-stream@npm:3.6.0" dependencies: @@ -14178,7 +14312,7 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.1.0": +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 @@ -14659,6 +14793,13 @@ __metadata: languageName: node linkType: hard +"split-ca@npm:^1.0.1": + version: 1.0.1 + resolution: "split-ca@npm:1.0.1" + checksum: 1e7409938a95ee843fe2593156a5735e6ee63772748ee448ea8477a5a3e3abde193c3325b3696e56a5aff07c7dcf6b1f6a2f2a036895b4f3afe96abb366d893f + languageName: node + linkType: hard + "split-string@npm:^3.0.1, split-string@npm:^3.0.2": version: 3.1.0 resolution: "split-string@npm:3.1.0" @@ -14675,6 +14816,23 @@ __metadata: languageName: node linkType: hard +"ssh2@npm:^1.4.0": + version: 1.11.0 + resolution: "ssh2@npm:1.11.0" + dependencies: + asn1: ^0.2.4 + bcrypt-pbkdf: ^1.0.2 + cpu-features: ~0.0.4 + nan: ^2.16.0 + dependenciesMeta: + cpu-features: + optional: true + nan: + optional: true + checksum: e40cb9f171741a807c170dc555078aa8c49dc93dd36fc9c8be026fce1cfd31f0d37078d9b60a0f2cfb11d0e007ed5407376b72f8a0ef9f2cb89574632bbfb824 + languageName: node + linkType: hard + "ssri@npm:^6.0.1": version: 6.0.2 resolution: "ssri@npm:6.0.2" @@ -15125,6 +15283,31 @@ __metadata: languageName: node linkType: hard +"tar-fs@npm:~2.0.1": + version: 2.0.1 + resolution: "tar-fs@npm:2.0.1" + dependencies: + chownr: ^1.1.1 + mkdirp-classic: ^0.5.2 + pump: ^3.0.0 + tar-stream: ^2.0.0 + checksum: 26cd297ed2421bc8038ce1a4ca442296b53739f409847d495d46086e5713d8db27f2c03ba2f461d0f5ddbc790045628188a8544f8ae32cbb6238b279b68d0247 + languageName: node + linkType: hard + +"tar-stream@npm:^2.0.0": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: ^4.0.3 + end-of-stream: ^1.4.1 + fs-constants: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + checksum: 699831a8b97666ef50021c767f84924cfee21c142c2eb0e79c63254e140e6408d6d55a065a2992548e72b06de39237ef2b802b99e3ece93ca3904a37622a66f3 + languageName: node + linkType: hard + "tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.11 resolution: "tar@npm:6.1.11" @@ -15504,6 +15687,13 @@ __metadata: languageName: node linkType: hard +"tweetnacl@npm:^0.14.3": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0"