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

534 lines
16 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 (
"fmt"
"strconv"
"strings"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func createLocationTab(platform platformStruct) *fyne.Container {
searchEntry := widget.NewEntry()
searchEntry.SetPlaceHolder("Поиск Локаций ...")
filteredEntries := platform.DciLocations
list := widget.NewList(
func() int {
return len(filteredEntries)
},
func() fyne.CanvasObject {
return container.NewVBox(
widget.NewEntry(),
widget.NewEntry(),
widget.NewEntry(),
widget.NewEntry(),
widget.NewEntry(),
widget.NewEntry(),
)
},
func(id widget.ListItemID, obj fyne.CanvasObject) {
box := obj.(*fyne.Container)
e := filteredEntries[id]
entryOne := box.Objects[0].(*widget.Entry)
entryTwo := box.Objects[1].(*widget.Entry)
entryThree := box.Objects[2].(*widget.Entry)
entryFour := box.Objects[3].(*widget.Entry)
entryFive := box.Objects[4].(*widget.Entry)
entrySix := box.Objects[5].(*widget.Entry)
entryOne.AlwaysShowValidationError = true
entryOne.SetText(fmt.Sprintf("%d Имя: %s Главная локация: %d Статус: %s (%s)", e.Id, e.Name, e.IsMain, e.Status, e.StatusInfo))
entryTwo.SetText(fmt.Sprintf("SSH: %s@%s:%d", e.SshUser, e.SshAddress, e.SshPort))
entryThree.SetText(fmt.Sprintf("%s Userspace: %d", e.SetupInfo, e.Userspace))
entryFour.SetText(fmt.Sprintf("Настройки: %s", e.Settings))
entryFive.SetText(fmt.Sprintf("Патч: %s", e.Patch))
entrySix.SetText(fmt.Sprintf("DHCP: %s Redis: %s Nginx: %s Netflow: %s Proxy: %s", e.ParamsDhcp, e.ParamsRedis, e.ParamsNginx, e.ParamsNetflow, e.ProxyParams))
entryOne.TextStyle.Bold = true
},
)
searchEntry.OnChanged = func(text string) {
if text == "" {
filteredEntries = platform.DciLocations
} else {
filtered := []dciLocation{}
lText := strings.ToLower(text)
for _, elem := range platform.DciLocations {
if strings.Contains(strings.ToLower(elem.Name), lText) || strings.Contains(strings.ToLower(elem.SshAddress), lText) {
filtered = append(filtered, elem)
}
}
filteredEntries = filtered
}
list.Refresh()
}
locationsTab := container.NewBorder(
container.NewVBox(
searchEntry,
widget.NewSeparator(),
), nil, nil, nil,
container.NewScroll(list),
)
return locationsTab
}
// func createLocationComposeTab(platform platformStruct) *fyne.Container {
// // строка поиска
// searchEntry := widget.NewEntry()
// searchEntry.SetPlaceHolder("Поиск ...")
// // переменная с которой будем работать дальше при фильтрации, с пустым условием фильтрации равна всему списку
// filteredEntries := platform.DciLocationDockerComposes
// // создаём список, котрый будет отображаться в табе
// list := widget.NewList(
// // состоит из трёх функций, которые постоянно дургаются, когда скролишь список
// // первая возвращает длину списка, что даёт возможность получить id элемента
// func() int {
// return len(filteredEntries)
// },
// // вторая работает шаблоном показывая из каких элементов список будет состоять
// func() fyne.CanvasObject {
// return container.NewVBox(
// widget.NewLabel("имя"),
// widget.NewMultiLineEntry(),
// )
// },
// // третья функция формирует собственно список с данными
// func(id widget.ListItemID, obj fyne.CanvasObject) {
// box := obj.(*fyne.Container)
// e := filteredEntries[id]
// nameLabel := box.Objects[0].(*widget.Label)
// composeEntry := box.Objects[1].(*widget.Entry)
// nameLabel.SetText(fmt.Sprintf("%d %s", e.Id, e.Name))
// nameLabel.TextStyle.Bold = true
// composeEntry.SetText(e.DockerCompose)
// },
// )
// // дальше формируем поисковую логику, которая вызывается при изменении строки
// searchEntry.OnChanged = func(text string) {
// if text == "" {
// filteredEntries = platform.DciLocationDockerComposes
// } else {
// filtered := []dciLocationDockerCompose{}
// lText := strings.ToLower(text)
// for _, elem := range platform.DciLocationDockerComposes {
// if strings.Contains(strings.ToLower(elem.Name), lText) || strings.Contains(strings.ToLower(elem.DockerCompose), lText) {
// filtered = append(filtered, elem)
// }
// }
// filteredEntries = filtered
// }
// list.Refresh()
// }
// locationsTab := container.NewBorder(
// container.NewVBox(
// searchEntry,
// widget.NewSeparator(),
// ), nil, nil, nil,
// container.NewScroll(list),
// )
// return locationsTab
// }
func createTaskManagerFailedTab(platform platformStruct) *fyne.Container {
searchEntry := widget.NewEntry()
searchEntry.SetPlaceHolder("Поиск задач ...")
filteredEntries := platform.TaskManagerTask
list := widget.NewList(
func() int {
return len(filteredEntries)
},
func() fyne.CanvasObject {
return container.NewVBox(
widget.NewLabel("id name status"),
widget.NewLabel("time"),
widget.NewEntry(),
widget.NewLabel("output"),
)
},
func(id widget.ListItemID, obj fyne.CanvasObject) {
box := obj.(*fyne.Container)
e := filteredEntries[id]
idLabel := box.Objects[0].(*widget.Label)
nameLabel := box.Objects[1].(*widget.Label)
statusLabel := box.Objects[2].(*widget.Entry)
timeLabel := box.Objects[3].(*widget.Label)
idLabel.SetText(fmt.Sprintf("%d %s %s", e.Id, e.Name, e.Status))
idLabel.TextStyle.Bold = true
nameLabel.SetText(e.RegistrationTime)
statusLabel.SetText(e.RequestInfo)
timeLabel.SetText(e.Output)
},
)
searchEntry.OnChanged = func(text string) {
if text == "" {
filteredEntries = platform.TaskManagerTask
} else {
filtered := []taskManagerTask{}
lText := strings.ToLower(text)
for _, elem := range platform.TaskManagerTask {
if strings.Contains(strings.ToLower(elem.Name), lText) || strings.Contains(strings.ToLower(elem.Status), lText) {
filtered = append(filtered, elem)
}
}
filteredEntries = filtered
}
list.Refresh()
}
taskFailedTab := container.NewBorder(
container.NewVBox(
searchEntry,
widget.NewSeparator(),
), nil, nil, nil,
container.NewScroll(list),
)
return taskFailedTab
}
func createHwByLocationsTab(platform platformStruct) *fyne.Container {
searchEntry := widget.NewEntry()
searchEntry.SetPlaceHolder("Поиск по локациям ...")
filteredEntries := platform.HwByLocations
list := widget.NewList(
func() int {
return len(filteredEntries)
},
func() fyne.CanvasObject {
return container.NewHBox(
widget.NewLabel("loc"),
widget.NewLabel("serv"),
widget.NewLabel("switch"),
widget.NewLabel("pdu"),
widget.NewLabel("ups"),
)
},
func(id widget.ListItemID, obj fyne.CanvasObject) {
box := obj.(*fyne.Container)
e := filteredEntries[id]
loc := box.Objects[0].(*widget.Label)
serv := box.Objects[1].(*widget.Label)
sw := box.Objects[2].(*widget.Label)
pdu := box.Objects[3].(*widget.Label)
ups := box.Objects[4].(*widget.Label)
loc.SetText(fmt.Sprintf("Локация: %d", e.Location))
loc.TextStyle.Bold = true
serv.SetText(fmt.Sprintf("Серверов: %d", e.Server))
sw.SetText(fmt.Sprintf("Коммутаторов: %d", e.Switch))
pdu.SetText(fmt.Sprintf("PDU: %d", e.Pdu))
ups.SetText(fmt.Sprintf("UPS: %d", e.Ups))
},
)
searchEntry.OnChanged = func(text string) {
if text == "" {
filteredEntries = platform.HwByLocations
} else {
filtered := []hwByLocation{}
lText := strings.ToLower(text)
for _, elem := range platform.HwByLocations {
if strings.Contains(strconv.Itoa(elem.Location), lText) {
filtered = append(filtered, elem)
}
}
filteredEntries = filtered
}
list.Refresh()
}
tab := container.NewBorder(
container.NewVBox(
searchEntry,
widget.NewSeparator(),
), nil, nil, nil,
container.NewScroll(list),
)
return tab
}
func createInstalledPluginTab(platform platformStruct) *fyne.Container {
list := widget.NewList(
func() int {
return len(platform.InstalledPlugin)
},
func() fyne.CanvasObject {
return container.NewHBox(
widget.NewLabel("name"),
widget.NewLabel("status"),
widget.NewLabel("version"),
widget.NewLabel("Curver"),
)
},
func(id widget.ListItemID, obj fyne.CanvasObject) {
box := obj.(*fyne.Container)
e := platform.InstalledPlugin[id]
nameLabel := box.Objects[0].(*widget.Label)
statLabel := box.Objects[1].(*widget.Label)
verLabel := box.Objects[2].(*widget.Label)
curverLabel := box.Objects[3].(*widget.Label)
nameLabel.SetText(e.Name)
nameLabel.TextStyle.Bold = true
statLabel.SetText(e.Status)
verLabel.SetText(e.Version)
curverLabel.SetText(e.CurrentVersion)
},
)
list.Refresh()
tab := container.NewBorder(
container.NewVBox(
widget.NewSeparator(),
), nil, nil, nil,
container.NewScroll(list),
)
return tab
}
func createLdapTab(platform platformStruct) *fyne.Container {
list := widget.NewList(
func() int {
return len(platform.Ldaps)
},
// Id int `json:"id"`
// Name string `json:"name"`
// LastSync string `json:"last_sync"`
func() fyne.CanvasObject {
return container.NewHBox(
widget.NewLabel("ldap"),
)
},
func(id widget.ListItemID, obj fyne.CanvasObject) {
box := obj.(*fyne.Container)
e := platform.Ldaps[id]
ldapLabel := box.Objects[0].(*widget.Label)
ldapLabel.SetText(fmt.Sprintf("%d %s Синхронизация: %s", e.Id, e.Name, e.LastSync))
},
)
list.Refresh()
tab := container.NewBorder(
container.NewVBox(
widget.NewSeparator(),
), nil, nil, nil,
container.NewScroll(list),
)
return tab
}
func createRepoTab(platform platformStruct) *fyne.Container {
list := widget.NewList(
func() int {
return len(platform.Repos)
},
// Id int `json:"id"`
// Name string `json:"name"`
// Url string `json:"url"`
func() fyne.CanvasObject {
return container.NewHBox(
widget.NewLabel("id"),
widget.NewLabel("name"),
widget.NewLabel("url"),
)
},
func(id widget.ListItemID, obj fyne.CanvasObject) {
box := obj.(*fyne.Container)
e := platform.Repos[id]
idLabel := box.Objects[0].(*widget.Label)
nameLabel := box.Objects[1].(*widget.Label)
urlLabel := box.Objects[2].(*widget.Label)
idLabel.SetText(fmt.Sprintf("%d", e.Id))
nameLabel.SetText(e.Name)
urlLabel.SetText(e.Url)
},
)
list.Refresh()
tab := container.NewBorder(
container.NewVBox(
widget.NewSeparator(),
), nil, nil, nil,
container.NewScroll(list),
)
return tab
}
func createOsTemplateTab(platform platformStruct) *fyne.Container {
searchEntry := widget.NewEntry()
searchEntry.SetPlaceHolder("Поиск ...")
filteredEntries := platform.OsTemplates
list := widget.NewList(
func() int {
return len(filteredEntries)
},
// Id int `json:"id"`
// Name string `json:"name"`
// Filename string `json:"filename"`
// Macro string `json:"macro"`
// Metainfo string `json:"metainfo"`
// DirectoryName string `json:"directory_name"`
// Repository int `json:"repository"`
// Size int `json:"size"`
func() fyne.CanvasObject {
return container.NewVBox(
widget.NewLabel("id-name-filename-directoryname-size"),
widget.NewLabel("macro-metainfo-reposiztory"),
)
},
func(id widget.ListItemID, obj fyne.CanvasObject) {
box := obj.(*fyne.Container)
e := filteredEntries[id]
labelFirst := box.Objects[0].(*widget.Label)
labelSecond := box.Objects[1].(*widget.Label)
labelFirst.SetText(fmt.Sprintf("%d %s %s %s размер: %d", e.Id, e.Name, e.Filename, e.DirectoryName, e.Size))
labelFirst.Selectable = true
labelSecond.SetText(fmt.Sprintf("макросы: %s мета: %s репозиторий: %d", e.Macro, e.Metainfo, e.Repository))
labelSecond.Selectable = true
},
)
searchEntry.OnChanged = func(textRaw string) {
if textRaw == "" {
filteredEntries = platform.OsTemplates
} else {
filtered := []osTemplate{}
text := strings.ToLower(textRaw)
for _, elem := range platform.OsTemplates {
if strings.Contains(strings.ToLower(elem.Name), text) || strings.Contains(strings.ToLower(elem.Filename), text) || strings.Contains(strings.ToLower(elem.Metainfo), text) || strings.Contains(strings.ToLower(elem.DirectoryName), text) {
filtered = append(filtered, elem)
}
}
filteredEntries = filtered
}
list.Refresh()
}
osTemplTab := container.NewBorder(
container.NewVBox(
searchEntry,
widget.NewSeparator(),
), nil, nil, nil,
container.NewScroll(list),
)
return osTemplTab
}
func createBackupTasksTab(platform platformStruct) *fyne.Container {
// Id int `json:"id"`
// Enabled int `json:"enabled"`
// CronExpression string `json:"cron_expression"`
// LimitCount int `json:"limit_count"`
// LimitSizeMib int `json:"limit_size_mib"`
list := widget.NewList(
func() int {
return len(platform.BackupTasks)
},
func() fyne.CanvasObject {
return container.NewHBox(
widget.NewLabel("id"),
widget.NewLabel("enabled"),
widget.NewLabel("cron"),
widget.NewLabel("count"),
widget.NewLabel("size"),
)
},
func(id widget.ListItemID, obj fyne.CanvasObject) {
box := obj.(*fyne.Container)
e := platform.BackupTasks[id]
label0 := box.Objects[0].(*widget.Label)
label1 := box.Objects[1].(*widget.Label)
label2 := box.Objects[2].(*widget.Label)
label3 := box.Objects[3].(*widget.Label)
label4 := box.Objects[4].(*widget.Label)
label0.SetText(strconv.Itoa(e.Id))
label1.SetText(fmt.Sprintf("включено: %d", e.Enabled))
label2.SetText(e.CronExpression)
label3.SetText(fmt.Sprintf("количество копий: %d", e.LimitCount))
label4.SetText(fmt.Sprintf("размер: %d", e.LimitSizeMib))
},
)
list.Refresh()
tab := container.NewBorder(
container.NewVBox(
widget.NewSeparator(),
), nil, nil, nil,
container.NewScroll(list),
)
return tab
}
func createCopiedFileListTab(platform platformStruct) *fyne.Container {
searchEntry := widget.NewEntry()
searchEntry.SetPlaceHolder("Поиск ...")
filteredEntries := platform.CopiedFiles.FileNames
list := widget.NewList(
func() int {
return len(filteredEntries)
},
func() fyne.CanvasObject {
return container.NewVBox(
widget.NewLabel("fileName"),
)
},
func(id widget.ListItemID, obj fyne.CanvasObject) {
box := obj.(*fyne.Container)
e := filteredEntries[id]
fileName := box.Objects[0].(*widget.Label)
fileName.SetText(e)
fileName.Selectable = true
},
)
searchEntry.OnChanged = func(text string) {
if text == "" {
filteredEntries = platform.CopiedFiles.FileNames
} else {
var filtered []string
lText := strings.ToLower(text)
for _, elem := range platform.CopiedFiles.FileNames {
if strings.Contains(strings.ToLower(elem), lText) {
filtered = append(filtered, elem)
}
}
filteredEntries = filtered
}
list.Refresh()
}
tab := container.NewBorder(
container.NewVBox(
searchEntry,
widget.NewSeparator(),
), nil, nil, nil,
container.NewScroll(list),
)
return tab
}
func createLicenseTab(platform platformStruct) *fyne.Container {
licCheck := widget.NewMultiLineEntry()
licCheck.SetText(platform.License.LicenseCheck)
licInfo := widget.NewMultiLineEntry()
licInfo.SetText(platform.License.LicenseInfo)
licInfo.MultiLine = true
licInfo.SetMinRowsVisible(20)
tab := container.NewBorder(
container.NewVBox(
licCheck,
licInfo,
), nil, nil, nil,
)
return tab
}