534 lines
16 KiB
Go
534 lines
16 KiB
Go
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
|
||
}
|