first
This commit is contained in:
264
DCIManager6/dci6-support-reader/processedFile.go
Normal file
264
DCIManager6/dci6-support-reader/processedFile.go
Normal file
@@ -0,0 +1,264 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user