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