some updates
This commit is contained in:
26
package-lock.json
generated
26
package-lock.json
generated
@@ -8,6 +8,7 @@
|
|||||||
"name": "hackaton-form",
|
"name": "hackaton-form",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@flaticon/flaticon-uicons": "^3.3.1",
|
||||||
"@headlessui/react": "^2.2.2",
|
"@headlessui/react": "^2.2.2",
|
||||||
"@heroicons/react": "^2.2.0",
|
"@heroicons/react": "^2.2.0",
|
||||||
"@testing-library/dom": "^10.4.0",
|
"@testing-library/dom": "^10.4.0",
|
||||||
@@ -2487,6 +2488,15 @@
|
|||||||
"npm": ">=9.0.0"
|
"npm": ">=9.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@flaticon/flaticon-uicons": {
|
||||||
|
"version": "3.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@flaticon/flaticon-uicons/-/flaticon-uicons-3.3.1.tgz",
|
||||||
|
"integrity": "sha512-WN2zuECCdjuGBQrjzN0kpeSygzC5fgF8Q7pDR+FUuGtYWczSdIhIwoD+/fKBEfwqKfNIMZ1WouidevGQ4OJORg==",
|
||||||
|
"license": "SEE LICENSE IN LICENSE",
|
||||||
|
"optionalDependencies": {
|
||||||
|
"esbuild-linux-64": "^0.14.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@floating-ui/core": {
|
"node_modules/@floating-ui/core": {
|
||||||
"version": "1.7.0",
|
"version": "1.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz",
|
||||||
@@ -7437,6 +7447,22 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/esbuild-linux-64": {
|
||||||
|
"version": "0.14.54",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
|
||||||
|
"integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/escalade": {
|
"node_modules/escalade": {
|
||||||
"version": "3.2.0",
|
"version": "3.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@flaticon/flaticon-uicons": "^3.3.1",
|
||||||
"@headlessui/react": "^2.2.2",
|
"@headlessui/react": "^2.2.2",
|
||||||
"@heroicons/react": "^2.2.0",
|
"@heroicons/react": "^2.2.0",
|
||||||
"@testing-library/dom": "^10.4.0",
|
"@testing-library/dom": "^10.4.0",
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
|
import { ArrowDownTrayIcon, ArrowUpTrayIcon } from "@heroicons/react/24/outline";
|
||||||
|
|
||||||
export default function NetworkMonitor(args) {
|
export default function NetworkMonitor(args) {
|
||||||
const [selectedTab, setSelectedTab] = useState("interfaces");
|
const [selectedTab, setSelectedTab] = useState("interfaces");
|
||||||
@@ -9,6 +10,37 @@ export default function NetworkMonitor(args) {
|
|||||||
const handleTabClick = (tabId) => {
|
const handleTabClick = (tabId) => {
|
||||||
setSelectedTab(tabId);
|
setSelectedTab(tabId);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const [NetIfaces, setNetIfaces] = useState(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
name: "Ethernet 6",
|
||||||
|
wireless: false,
|
||||||
|
mac: "FF-FF-FF-FF-FF-FF",
|
||||||
|
ip: "192.168.2.5",
|
||||||
|
mask: "255.255.255.0",
|
||||||
|
mtu: 1500,
|
||||||
|
speed_mbit: 2500,
|
||||||
|
status: true,
|
||||||
|
trafic_down_mb: 100,
|
||||||
|
trafic_up_mb: 1000,
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Wireles Adapter 1",
|
||||||
|
wireless: true,
|
||||||
|
mac: "F1-FF-0F-FF-1F-F0",
|
||||||
|
ip: "192.168.1.5",
|
||||||
|
mask: "255.255.255.0",
|
||||||
|
mtu: 1500,
|
||||||
|
speed_mbit: 0,
|
||||||
|
status: false,
|
||||||
|
trafic_down_mb: 35,
|
||||||
|
trafic_up_mb: 2,
|
||||||
|
|
||||||
|
}
|
||||||
|
]
|
||||||
|
);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="flex justify-center md:justify-start">
|
<div className="flex justify-center md:justify-start">
|
||||||
@@ -18,8 +50,8 @@ export default function NetworkMonitor(args) {
|
|||||||
<button
|
<button
|
||||||
key={tab.id}
|
key={tab.id}
|
||||||
onClick={() => handleTabClick(tab.id)}
|
onClick={() => handleTabClick(tab.id)}
|
||||||
className={`rounded-lg px-4 py-2 text-gray-900 dark:text-gray-100 ${selectedTab === tab.id
|
className={`rounded-lg px-4 py-2 text-gray-900 dark:text-gray-100 font-semibold ${selectedTab === tab.id
|
||||||
? "bg-gray-200 dark:bg-gray-800 text-orange-600 font-semibold"
|
? "bg-gray-200 dark:bg-gray-800 text-orange-600"
|
||||||
: "hover:bg-gray-200 dark:hover:bg-gray-800 hover:text-orange-600 duration-300"
|
: "hover:bg-gray-200 dark:hover:bg-gray-800 hover:text-orange-600 duration-300"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
@@ -29,7 +61,50 @@ export default function NetworkMonitor(args) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-6">
|
<div className="mt-6">
|
||||||
|
{selectedTab === "interfaces" && (
|
||||||
|
|
||||||
|
<>
|
||||||
|
<div className="flex flex-wrap gap-2 flex-col anim-pop">
|
||||||
|
{NetIfaces.map((iface, index) => (
|
||||||
|
<div className="max-w-full md:max-w-[420px] min-h-[150px] border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm flex flex-col" key={"iface" + index}>
|
||||||
|
<div className="flex gap-3">
|
||||||
|
{!iface.wireless &&
|
||||||
|
<i className="fi fi-rr-ethernet text-2xl dark:text-gray-200"></i>
|
||||||
|
}
|
||||||
|
{iface.wireless &&
|
||||||
|
<i className="fi fi-rr-wifi text-2xl dark:text-gray-200"></i>
|
||||||
|
}
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div className="flex gap-3 items-center">
|
||||||
|
<span className="block text-lg font-bold text-gray-800 dark:text-gray-200">{iface.name}</span>
|
||||||
|
|
||||||
|
<span className={"h-3 w-3 " + (iface.status ? "bg-green-500" : "bg-red-500") + " rounded-full shadow-lg " + (iface.status ? "shadow-green-500/50" : "shadow-red-500/50") + " animate-pulse"} />
|
||||||
|
</div>
|
||||||
|
<span className="block text-sm font-normal text-gray-800 dark:text-gray-200"><span className="font-semibold">{iface.ip}</span> • <span className="text-gray-600 dark:text-gray-300">{iface.mac}</span></span>
|
||||||
|
|
||||||
|
<div className="flex gap-5 items-center mt-3">
|
||||||
|
<span className="flex gap-2 items-center">
|
||||||
|
<ArrowDownTrayIcon className="h-5 text-gray-700 dark:text-gray-300" />
|
||||||
|
<span className="text-gray-700 dark:text-gray-300">{iface.trafic_down_mb} МБ</span>
|
||||||
|
</span>
|
||||||
|
<span className="flex gap-2 items-center">
|
||||||
|
<ArrowUpTrayIcon className="h-5 text-gray-700 dark:text-gray-300" />
|
||||||
|
<span className="text-gray-700 dark:text-gray-300">{iface.trafic_up_mb} МБ</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<span className="flex gap-2 items-center mt-1">
|
||||||
|
<span className="text-gray-700 dark:text-gray-300">{iface.speed_mbit} Мбит/c</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import Gauge from "../misc/Gauge";
|
import Gauge from "../misc/Gauge";
|
||||||
import { InformationCircleIcon, ComputerDesktopIcon, CodeBracketIcon, CpuChipIcon, ClockIcon, ChevronDoubleRightIcon } from "@heroicons/react/24/outline";
|
import { InformationCircleIcon, ComputerDesktopIcon, CodeBracketIcon, CpuChipIcon, ClockIcon, ChevronDoubleRightIcon, } from "@heroicons/react/24/outline";
|
||||||
import CpuChart from "../misc/CpuChart";
|
import CpuChart from "../misc/CpuChart";
|
||||||
|
|
||||||
|
|
||||||
const SystemMonitor = () => {
|
const SystemMonitor = () => {
|
||||||
// Состояние для отслеживания выбранной вкладки
|
// Состояние для отслеживания выбранной вкладки
|
||||||
const [selectedTab, setSelectedTab] = useState("system");
|
const [selectedTab, setSelectedTab] = useState("system");
|
||||||
@@ -43,15 +42,68 @@ const SystemMonitor = () => {
|
|||||||
memory_gb: 32,
|
memory_gb: 32,
|
||||||
cpu_chart:
|
cpu_chart:
|
||||||
{
|
{
|
||||||
"10:00":40,
|
"1": 20,
|
||||||
"11:00":34,
|
"2": 14,
|
||||||
"12:00":56,
|
"3": 6,
|
||||||
"13:00":60,
|
"4": 5,
|
||||||
"14:00":80
|
"5": 10,
|
||||||
|
"6": 10,
|
||||||
|
"7": 0,
|
||||||
|
"8": 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
const [Devices, setDevices] = useState({
|
||||||
|
cpu: [{
|
||||||
|
vendor: "AMD",
|
||||||
|
name: "AMD Ryzen 7 5700X 8-Core Processor",
|
||||||
|
desc: "AMD64 Ryzen Processor",
|
||||||
|
arch: "9",
|
||||||
|
freq: 3400,
|
||||||
|
max_freq: 3400,
|
||||||
|
cores: 8,
|
||||||
|
threads: 16,
|
||||||
|
status: "OK"
|
||||||
|
}],
|
||||||
|
graphics: [{
|
||||||
|
name: "AMD Radeon RX 6700 XT",
|
||||||
|
desc: "AMD Radeon RX 6700 XT",
|
||||||
|
driver: "1.1.4",
|
||||||
|
status: "OK"
|
||||||
|
}],
|
||||||
|
drives: [{
|
||||||
|
name: "INTEL SSD",
|
||||||
|
desc: "INTEL SSD ABCDEFGH123457",
|
||||||
|
serial: "ABCDEFGH123457",
|
||||||
|
interface: "IDE",
|
||||||
|
size_gb: 238,
|
||||||
|
status: "OK"
|
||||||
|
}],
|
||||||
|
motherboard: [{
|
||||||
|
name: "B550M PG Riptide",
|
||||||
|
vendor: "ASRock",
|
||||||
|
model: "B550M PG Riptide",
|
||||||
|
serial: "ABCDEFGH123457"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "BIOS",
|
||||||
|
vendor: "American Megatrends LLC",
|
||||||
|
version: "1.1.5",
|
||||||
|
date: "20240111"
|
||||||
|
}],
|
||||||
|
usb: [{
|
||||||
|
name: "AMD USB 3.10 - 1.10 xxxxx",
|
||||||
|
vendor: "AMD",
|
||||||
|
id: "PCI/VEN_1022&....",
|
||||||
|
status: "OK"
|
||||||
|
}],
|
||||||
|
audio: [{
|
||||||
|
name: "AMD Audio device",
|
||||||
|
vendor: "AMD",
|
||||||
|
status: "OK"
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
|
||||||
// Функция для обработки клика по вкладке
|
// Функция для обработки клика по вкладке
|
||||||
const handleTabClick = (tabId) => {
|
const handleTabClick = (tabId) => {
|
||||||
@@ -67,8 +119,8 @@ const SystemMonitor = () => {
|
|||||||
<button
|
<button
|
||||||
key={tab.id}
|
key={tab.id}
|
||||||
onClick={() => handleTabClick(tab.id)}
|
onClick={() => handleTabClick(tab.id)}
|
||||||
className={`rounded-lg px-4 py-2 text-gray-900 dark:text-gray-100 ${selectedTab === tab.id
|
className={`rounded-lg px-4 py-2 text-gray-900 dark:text-gray-100 font-semibold ${selectedTab === tab.id
|
||||||
? "bg-gray-200 dark:bg-gray-800 text-orange-600 font-semibold"
|
? "bg-gray-200 dark:bg-gray-800 text-orange-600"
|
||||||
: "hover:bg-gray-200 dark:hover:bg-gray-800 hover:text-orange-600 duration-300"
|
: "hover:bg-gray-200 dark:hover:bg-gray-800 hover:text-orange-600 duration-300"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
@@ -79,8 +131,8 @@ const SystemMonitor = () => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="mt-6">
|
<div className="mt-6">
|
||||||
{selectedTab === "system" && (
|
{selectedTab === "system" && (
|
||||||
<div className="flex gap-3 flex-wrap flex-col md:flex-row dark:text-gray-100">
|
<div className="flex gap-3 flex-wrap flex-col md:flex-row dark:text-gray-100 anim-pop">
|
||||||
<div className="md:basis-3/6 w-full border border-gray-300 dark:border-gray-700 p-4 rounded-lg shadow-sm">
|
<div className="md:basis-3/6 w-full border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm">
|
||||||
<h1 className="text-lg font-semibold">Информация о системе</h1>
|
<h1 className="text-lg font-semibold">Информация о системе</h1>
|
||||||
<div className="flex flex-col gap-2 mt-3">
|
<div className="flex flex-col gap-2 mt-3">
|
||||||
<div className="flex items-start gap-2">
|
<div className="flex items-start gap-2">
|
||||||
@@ -120,20 +172,20 @@ const SystemMonitor = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="md:basis-1/6 border border-gray-300 dark:border-gray-700 p-4 rounded-lg shadow-sm">
|
<div className="md:basis-1/6 border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm">
|
||||||
<h1 className="text-lg font-semibold dark:text-gray-100">Загрузка CPU</h1>
|
<h1 className="text-lg font-semibold dark:text-gray-100">Загрузка CPU</h1>
|
||||||
<div className=" flex flex-col items-center">
|
<div className=" flex flex-col items-center">
|
||||||
<Gauge value={SystemInfo.cpu_load} title="%" color={PercentColor(SystemInfo.cpu_load)} className="mt-3" />
|
<Gauge value={SystemInfo.cpu_load} title="%" color={PercentColor(SystemInfo.cpu_load)} className="mt-3" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="md:basis-1/6 border border-gray-300 dark:border-gray-700 p-4 rounded-lg shadow-sm">
|
<div className="md:basis-1/6 border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm">
|
||||||
<h1 className="text-lg font-semibold dark:text-gray-100">Занято ОЗУ</h1>
|
<h1 className="text-lg font-semibold dark:text-gray-100">Занято ОЗУ</h1>
|
||||||
<div className=" flex flex-col items-center">
|
<div className=" flex flex-col items-center">
|
||||||
<Gauge value={SystemInfo.mem_load} title="%" color={PercentColor(SystemInfo.mem_load)} className="mt-3" />
|
<Gauge value={SystemInfo.mem_load} title="%" color={PercentColor(SystemInfo.mem_load)} className="mt-3" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="md:basis-3/6 w-full border border-gray-300 dark:border-gray-700 p-4 rounded-lg shadow-sm">
|
<div className="md:basis-3/6 w-full border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm">
|
||||||
<h1 className="text-lg font-semibold">Аппаратное обеспечение</h1>
|
<h1 className="text-lg font-semibold">Аппаратное обеспечение</h1>
|
||||||
<div className="flex flex-col gap-2 mt-3">
|
<div className="flex flex-col gap-2 mt-3">
|
||||||
<div className="flex items-start gap-2">
|
<div className="flex items-start gap-2">
|
||||||
@@ -169,8 +221,8 @@ const SystemMonitor = () => {
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="md:basis-[34.3%] w-full border border-gray-300 dark:border-gray-700 p-4 rounded-lg shadow-sm">
|
<div className="md:basis-[34.3%] w-full border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm">
|
||||||
<h1 className="text-lg font-semibold">График загрузки CPU</h1>
|
<h1 className="text-lg font-semibold">Загрузка ядер CPU, %</h1>
|
||||||
<div className="flex flex-col gap-2 mt-3">
|
<div className="flex flex-col gap-2 mt-3">
|
||||||
<CpuChart chart_dataset={SystemInfo.cpu_chart} />
|
<CpuChart chart_dataset={SystemInfo.cpu_chart} />
|
||||||
</div>
|
</div>
|
||||||
@@ -178,7 +230,123 @@ const SystemMonitor = () => {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{selectedTab === "deviceManager" && (
|
{selectedTab === "deviceManager" && (
|
||||||
<p>Вот содержимое вкладки "Диспетчер устройств"</p>
|
<div className="flex flex-col gap-8 text-orange-500 anim-pop">
|
||||||
|
<div>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<i className="fi fi-rr-microchip text-2xl text-orange-500"></i>
|
||||||
|
<h1 className="text-lg font-semibold">Процессоры</h1>
|
||||||
|
</div>
|
||||||
|
<div className="md:ml-8 flex flex-wrap gap-2 flex-col md:flex-row mt-2">
|
||||||
|
{Devices.cpu.map((cpu, index) => (
|
||||||
|
<div className="min-w-full md:min-w-[420px] min-h-[150px] border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm flex flex-col" key={"cpu" + index}>
|
||||||
|
<span className="text-lg font-bold text-gray-800 dark:text-gray-200">{cpu.name}</span>
|
||||||
|
<span className="text-sm font-normal text-gray-800 dark:text-gray-200">{cpu.desc}</span>
|
||||||
|
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200 mt-3"><span className="font-bold">Архитектура:</span> {cpu.arch}</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200"><span className="font-bold">Частота:</span> {cpu.freq} Mhz</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200"><span className="font-bold">Ядра:</span> {cpu.cores}</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200"><span className="font-bold">Потоки:</span> {cpu.threads}</span>
|
||||||
|
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200 mt-3"><span className="font-bold">Статус:</span> {cpu.status}</span>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<i className="fi fi-rr-screen text-2xl text-orange-500"></i>
|
||||||
|
<h1 className="text-lg font-semibold">Графика</h1>
|
||||||
|
</div>
|
||||||
|
<div className="md:ml-8 flex flex-wrap gap-2 flex-col md:flex-row mt-2">
|
||||||
|
{Devices.graphics.map((cpu, index) => (
|
||||||
|
<div className="min-w-full md:min-w-[420px] min-h-[150px] border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm flex flex-col" key={"graphics" + index}>
|
||||||
|
<span className="text-lg font-bold text-gray-800 dark:text-gray-200">{cpu.name}</span>
|
||||||
|
<span className="text-sm font-normal text-gray-800 dark:text-gray-200">{cpu.desc}</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200 mt-3"><span className="font-bold">Драйвер:</span> {cpu.driver}</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200 mt-3"><span className="font-bold">Статус:</span> {cpu.status}</span>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<i className="fi fi-rr-hdd text-2xl text-orange-500"></i>
|
||||||
|
<h1 className="text-lg font-semibold">Диски</h1>
|
||||||
|
</div>
|
||||||
|
<div className="md:ml-8 flex flex-wrap gap-2 flex-col md:flex-row mt-2">
|
||||||
|
{Devices.drives.map((cpu, index) => (
|
||||||
|
<div className="min-w-full md:min-w-[420px] min-h-[150px] border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm flex flex-col" key={"drives" + index}>
|
||||||
|
<span className="text-lg font-bold text-gray-800 dark:text-gray-200">{cpu.name}</span>
|
||||||
|
<span className="text-sm font-normal text-gray-800 dark:text-gray-200">{cpu.desc}</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200 mt-3"><span className="font-bold">Сер. номер:</span> {cpu.serial}</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200"><span className="font-bold">Интерфейс:</span> {cpu.interface}</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200"><span className="font-bold">Объем:</span> {cpu.size_gb} ГБ</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200 mt-3"><span className="font-bold">Статус:</span> {cpu.status}</span>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<i className="fi fi-rr-category-alt text-2xl text-orange-500"></i>
|
||||||
|
<h1 className="text-lg font-semibold">Материнская плата</h1>
|
||||||
|
</div>
|
||||||
|
<div className="md:ml-8 flex flex-wrap gap-2 flex-col md:flex-row mt-2">
|
||||||
|
{Devices.motherboard.map((cpu, index) => (
|
||||||
|
<div className="min-w-full md:min-w-[420px] min-h-[150px] border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm flex flex-col" key={"motherboard" + index}>
|
||||||
|
<span className="text-lg font-bold text-gray-800 dark:text-gray-200">{cpu.name}</span>
|
||||||
|
<span className="text-sm font-normal text-gray-800 dark:text-gray-200">{cpu.vendor}</span>
|
||||||
|
{cpu.version &&
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200 mt-3"><span className="font-bold">Версия:</span> {cpu.version}</span>
|
||||||
|
}
|
||||||
|
{cpu.model &&
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200 mt-3"><span className="font-bold">Модель:</span> {cpu.model}</span>
|
||||||
|
}
|
||||||
|
{cpu.date &&
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200"><span className="font-bold">Дата:</span> {cpu.date}</span>
|
||||||
|
}
|
||||||
|
{cpu.serial &&
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200"><span className="font-bold">Сер. номер:</span> {cpu.serial}</span>
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<i className="fi fi-rr-usb-pendrive text-2xl text-orange-500"></i>
|
||||||
|
<h1 className="text-lg font-semibold">USB</h1>
|
||||||
|
</div>
|
||||||
|
<div className="md:ml-8 flex flex-wrap gap-2 flex-col md:flex-row mt-2">
|
||||||
|
{Devices.usb.map((cpu, index) => (
|
||||||
|
<div className="min-w-full md:min-w-[420px] min-h-[150px] border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm flex flex-col" key={"drives" + index}>
|
||||||
|
<span className="text-lg font-bold text-gray-800 dark:text-gray-200">{cpu.name}</span>
|
||||||
|
<span className="text-sm font-normal text-gray-800 dark:text-gray-200">{cpu.vendor}</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200 mt-3"><span className="font-bold">ID:</span> {cpu.id}</span>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<i className="fi fi-rr-volume text-2xl text-orange-500"></i>
|
||||||
|
<h1 className="text-lg font-semibold">Звук</h1>
|
||||||
|
</div>
|
||||||
|
<div className="md:ml-8 flex flex-wrap gap-2 flex-col md:flex-row mt-2">
|
||||||
|
{Devices.audio.map((cpu, index) => (
|
||||||
|
<div className="min-w-full md:min-w-[420px] min-h-[150px] border bg-gray-100 border-gray-100 dark:border-gray-900 dark:bg-gray-900 p-4 rounded-lg shadow-sm flex flex-col" key={"drives" + index}>
|
||||||
|
<span className="text-lg font-bold text-gray-800 dark:text-gray-200">{cpu.name}</span>
|
||||||
|
<span className="text-sm font-normal text-gray-800 dark:text-gray-200">{cpu.name}</span>
|
||||||
|
<span className="text-md font-normal text-gray-800 dark:text-gray-200 mt-3"><span className="font-bold">Статус:</span> {cpu.status}</span>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
BIN
src/img/icon.ico
Normal file
BIN
src/img/icon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -1,6 +1,7 @@
|
|||||||
@tailwind base;
|
@tailwind base;
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
@import "~@flaticon/flaticon-uicons/css/all/all";
|
||||||
|
|
||||||
body,html, #root{
|
body,html, #root{
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@@ -18,5 +19,5 @@ body,html, #root{
|
|||||||
}
|
}
|
||||||
|
|
||||||
.anim-pop {
|
.anim-pop {
|
||||||
animation: anim-pop .3s ease-out;
|
animation: anim-pop .2s ease-in;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,18 +4,18 @@ import {
|
|||||||
CategoryScale,
|
CategoryScale,
|
||||||
LinearScale,
|
LinearScale,
|
||||||
PointElement,
|
PointElement,
|
||||||
LineElement,
|
BarElement,
|
||||||
Title,
|
Title,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
Legend,
|
Legend,
|
||||||
} from 'chart.js';
|
} from 'chart.js';
|
||||||
import { Line } from 'react-chartjs-2';
|
import { Bar } from 'react-chartjs-2';
|
||||||
|
|
||||||
ChartJS.register(
|
ChartJS.register(
|
||||||
CategoryScale,
|
CategoryScale,
|
||||||
LinearScale,
|
LinearScale,
|
||||||
PointElement,
|
PointElement,
|
||||||
LineElement,
|
BarElement,
|
||||||
Title,
|
Title,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
Legend
|
Legend
|
||||||
@@ -45,10 +45,10 @@ export default function CpuChart({chart_dataset}) {
|
|||||||
label: 'Загрузка CPU',
|
label: 'Загрузка CPU',
|
||||||
data: Object.values(chart_dataset),
|
data: Object.values(chart_dataset),
|
||||||
borderColor: '#ff9f43',
|
borderColor: '#ff9f43',
|
||||||
backgroundColor: 'rgba(255, 99, 132, 0.5)',
|
backgroundColor: '#ff9f43',
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
return <Line options={options} data={data} />;
|
return <Bar options={options} data={data} />;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import SystemMonitor from "../dashboard/SystemMonitor"
|
|||||||
|
|
||||||
import NetworkMonitor from "../dashboard/NetworkMonitor"
|
import NetworkMonitor from "../dashboard/NetworkMonitor"
|
||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
|
import Logo from "../img/icon.ico";
|
||||||
|
|
||||||
const user = {
|
const user = {
|
||||||
name: 'Administrator',
|
name: 'Administrator',
|
||||||
@@ -60,13 +61,13 @@ export default function Dashboard(args) {
|
|||||||
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||||
<div className="flex h-16 items-center justify-between">
|
<div className="flex h-16 items-center justify-between">
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<div className="shrink-0">
|
<Link className="shrink-0 bg-gray-100 rounded-lg h-[40px]" to="/dashboard">
|
||||||
<img
|
<img
|
||||||
alt="Your Company"
|
alt="Your Company"
|
||||||
src="https://tailwindcss.com/plus-assets/img/logos/mark.svg?color=indigo&shade=500"
|
src={Logo}
|
||||||
className="size-8"
|
className="h-full"
|
||||||
/>
|
/>
|
||||||
</div>
|
</Link>
|
||||||
<div className="hidden md:block">
|
<div className="hidden md:block">
|
||||||
<div className="ml-10 flex items-baseline space-x-4">
|
<div className="ml-10 flex items-baseline space-x-4">
|
||||||
{navigation.map((item) => (
|
{navigation.map((item) => (
|
||||||
|
|||||||
Reference in New Issue
Block a user