Files
techsuppgetinfo/DCIManager6/dci6-support-reader/processedFile.go
2026-04-04 00:09:02 +08:00

265 lines
10 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"os"
"path/filepath"
"time"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/storage"
"fyne.io/fyne/v2/widget"
)
// Очистка вкладок server
func (a *App) clearServerTabs() {
// Удаляем все вкладки, кроме первой (если она нужна)
items := a.serverTab.Items
if len(items) > 0 {
// Удаляем все вкладки после первой (если первая - это какая-то базовая)
// Или удаляем все, если нужно полностью очистить
for i := len(items) - 1; i >= 0; i-- {
a.serverTab.RemoveIndex(i)
}
}
}
// Очистка вкладок platform
func (a *App) clearPlatformTabs() {
items := a.platformTab.Items
if len(items) > 0 {
for i := len(items) - 1; i >= 0; i-- {
a.platformTab.RemoveIndex(i)
}
}
}
// Обновление UI после загрузки
func (a *App) updateUIAfterUpload(uiFunc string) {
// Обновляем статус
a.statusLabel.SetText("✅ Файл загружен")
a.statusLabel.TextStyle = fyne.TextStyle{Bold: true, Italic: true}
a.statusLabel.Refresh()
// Обновляем информацию о файле
fileInfoText := fmt.Sprintf("📄 %s | 📦 %s | 🕒 %s",
a.fileName,
formatFileSize(a.fileSize),
time.Now().Format("15:04:05"))
a.fileInfo.SetText(fileInfoText)
if uiFunc == "server" {
a.updateServer()
}
if uiFunc == "platform" {
a.updatePlatform()
}
}
// Обновление содержимого server
func (a *App) updateServer() {
a.clearServerTabs()
var server outputStruct
err := json.Unmarshal(a.serverContent, &server)
if err != nil {
log.Printf("Unmarshall server: %s", err)
}
a.serverTab.Append(container.NewTabItem("БИОС", widget.NewLabel(server.BiosInfo.Name)))
if server.OperatingSystem.AstraLicense == "" || server.OperatingSystem.AstraVersion == "" {
a.serverTab.Append(container.NewTabItem("ОС", widget.NewLabel(server.OperatingSystem.OsRelease)))
} else {
a.serverTab.Append(container.NewTabItem("ОС", widget.NewLabel(fmt.Sprintf("Версия: %s, Версия ALSE: %s, Уровень защиты ALSE: %s", server.OperatingSystem.OsRelease, server.OperatingSystem.AstraLicense, server.OperatingSystem.AstraVersion))))
}
installedPkgsTab := createInstalledPkgsTab(server)
a.serverTab.Append(container.NewTabItem("Пакеты", installedPkgsTab))
fsInfoTab := createFsInfoTab(server)
a.serverTab.Append(container.NewTabItem("ФС", fsInfoTab))
a.serverTab.Append(container.NewTabItem("LA", widget.NewLabel(fmt.Sprintf("Средняя загрузка: 15м %s\n, \t5м %s\n, \t1м %s\n, Процессы %s", server.LoadAverage.FifteenMin, server.LoadAverage.FiveMin, server.LoadAverage.OneMin, server.LoadAverage.Processes))))
cpuTab := createCpuTab(server)
a.serverTab.Append(container.NewTabItem("ЦП", cpuTab))
a.serverTab.Append(container.NewTabItem("ОЗУ", widget.NewLabel(fmt.Sprintf("Доступно: %s\nСвободно: %s\nВсего: %s", server.Ram.MemAvailable, server.Ram.MemFree, server.Ram.MemTotal))))
a.serverTab.Append(container.NewTabItem("Uptime", widget.NewLabel(server.Uptime.WorkSeconds)))
a.serverTab.Append(container.NewTabItem("Фаерволы", createFirewallTab(server)))
a.serverTab.Append(container.NewTabItem("Время", widget.NewLabel(fmt.Sprintf("Служба времени\t\t\t%s, \nВремя синхронизировано\t%s", server.TimeService.TimeService, server.TimeService.TimeSync))))
a.serverTab.Append(container.NewTabItem("Сеть", createNetworkTab(server)))
// a.serverTab.Append(container.NewTabItem("Интеренет", widget.NewLabel(fmt.Sprintf("docker-registry.ispsystem.com :: %d\ndownload.ispsystem.com :: %d\nlicense6.ispsystem.com :: %d\nmetricreport.ispsystem.net :: %d\ndownload.docker.com :: %d", server.InternetRequired.IspRegistry, server.InternetRequired.IspDownload, server.InternetRequired.IspLicense, server.InternetRequired.IspMetric, server.InternetRequired.DockerDownload))))
a.serverTab.Append(container.NewTabItem("Интернет", createInternetRequiredTab(server)))
a.serverTab.Append(container.NewTabItem("Сесюрити", createSecSetTab(server)))
a.serverTab.Append(container.NewTabItem("Docker", createDockerTab(server)))
a.serverTab.Append(container.NewTabItem("Jrnlctl", createJournalTab(server)))
a.serverTab.Append(container.NewTabItem("root history", createRootHistoryTab(server)))
}
func (a *App) updatePlatform() {
a.clearPlatformTabs()
var platform platformStruct
err := json.Unmarshal(a.platformContent, &platform)
if err != nil {
log.Printf("Unmarshall platform: %s", err)
}
a.platformTab.Append(container.NewTabItem("Лицензия", createLicenseTab(platform)))
a.platformTab.Append(container.NewTabItem("Локации", createLocationTab(platform)))
// a.platformTab.Append(container.NewTabItem("Compose Локация", createLocationComposeTab(platform)))
a.platformTab.Append(container.NewTabItem("Имена файлов", createCopiedFileListTab(platform)))
a.platformTab.Append(container.NewTabItem("Taskmgr", createTaskManagerFailedTab(platform)))
a.platformTab.Append(container.NewTabItem("Оборудование", createHwByLocationsTab(platform)))
a.platformTab.Append(container.NewTabItem("Плагины", createInstalledPluginTab(platform)))
a.platformTab.Append(container.NewTabItem("Пользователи", widget.NewLabel(fmt.Sprintf("Количество пользователей: %d", platform.Users.Count))))
a.platformTab.Append(container.NewTabItem("LDAP", createLdapTab(platform)))
a.platformTab.Append(container.NewTabItem("Репозитории", createRepoTab(platform)))
a.platformTab.Append(container.NewTabItem("Шаблоны ОС", createOsTemplateTab(platform)))
a.platformTab.Append(container.NewTabItem("Real ip", widget.NewLabel(fmt.Sprintf("%s : %s", platform.RealIP.Name, platform.RealIP.Value))))
a.platformTab.Append(container.NewTabItem("Бэкап", createBackupTasksTab(platform)))
}
func (a *App) onUploadServer() {
a.statusLabel.SetText("Выбор файла...")
// Фильтр json файлов
jsonFilter := storage.NewExtensionFileFilter([]string{".json"})
// Создаем диалог выбора файла
fileDialog := dialog.NewFileOpen(func(reader fyne.URIReadCloser, err error) {
if err != nil {
a.showError("Ошибка", fmt.Sprintf("Не удалось открыть диалог: %v", err))
return
}
if reader == nil {
a.statusLabel.SetText("Отменено")
return
}
defer reader.Close()
// Получаем информацию о файле
fileURI := reader.URI()
a.filePath = fileURI.Path()
a.fileName = fileURI.Name()
// Читаем файл
content, err := io.ReadAll(reader)
if err != nil {
a.showError("Ошибка чтения", fmt.Sprintf("Не удалось прочитать файл: %v", err))
a.progressBar.Hide()
return
}
// Сохраняем данные
a.serverContent = content
a.fileSize = int64(len(content))
// Завершаем прогресс
a.progressBar.SetValue(1.0)
time.Sleep(300 * time.Millisecond)
a.progressBar.Hide()
// Обновляем UI
a.updateUIAfterUpload("server")
// Показываем уведомление
a.showSuccess("Файл загружен",
fmt.Sprintf("Файл '%s' успешно загружен", a.fileName))
}, a.window)
fileDialog.SetFilter(jsonFilter)
// Альтернативный способ установки начальной директории
// Используем домашнюю директорию пользователя
homeDir, err := os.UserHomeDir()
if err == nil {
// Пытаемся использовать Downloads
downloadsPath := filepath.Join(homeDir, "Downloads")
if _, err := os.Stat(downloadsPath); err == nil {
// Создаем URI из пути
uri := storage.NewFileURI(downloadsPath)
listableURI, err := storage.ListerForURI(uri)
if err == nil {
fileDialog.SetLocation(listableURI)
}
}
}
// Показываем диалог
fileDialog.Show()
}
func (a *App) onUploadPlatform() {
a.statusLabel.SetText("Выбор файла...")
// Фильтр json файлов
jsonFilter := storage.NewExtensionFileFilter([]string{".json"})
// Создаем диалог выбора файла
fileDialog := dialog.NewFileOpen(func(reader fyne.URIReadCloser, err error) {
if err != nil {
a.showError("Ошибка", fmt.Sprintf("Не удалось открыть диалог: %v", err))
return
}
if reader == nil {
a.statusLabel.SetText("Отменено")
return
}
defer reader.Close()
// Получаем информацию о файле
fileURI := reader.URI()
a.filePath = fileURI.Path()
a.fileName = fileURI.Name()
// Читаем файл
content, err := io.ReadAll(reader)
if err != nil {
a.showError("Ошибка чтения", fmt.Sprintf("Не удалось прочитать файл: %v", err))
a.progressBar.Hide()
return
}
// Сохраняем данные
a.platformContent = content
a.fileSize = int64(len(content))
// Завершаем прогресс
a.progressBar.SetValue(1.0)
time.Sleep(300 * time.Millisecond)
a.progressBar.Hide()
// Обновляем UI
a.updateUIAfterUpload("platform")
// Показываем уведомление
a.showSuccess("Файл загружен",
fmt.Sprintf("Файл '%s' успешно загружен", a.fileName))
}, a.window)
fileDialog.SetFilter(jsonFilter)
// Альтернативный способ установки начальной директории
// Используем домашнюю директорию пользователя
homeDir, err := os.UserHomeDir()
if err == nil {
// Пытаемся использовать Downloads
downloadsPath := filepath.Join(homeDir, "Downloads")
if _, err := os.Stat(downloadsPath); err == nil {
// Создаем URI из пути
uri := storage.NewFileURI(downloadsPath)
listableURI, err := storage.ListerForURI(uri)
if err == nil {
fileDialog.SetLocation(listableURI)
}
}
}
// Показываем диалог
fileDialog.Show()
}