Skip to content

Commit

Permalink
WIP - show network list
Browse files Browse the repository at this point in the history
  • Loading branch information
ernesto27 committed Jun 27, 2023
1 parent cb34429 commit cbec219
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 0 deletions.
9 changes: 9 additions & 0 deletions docker/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,15 @@ func (d *Docker) ContainerLogs(containerId string) (string, error) {
return logs, nil
}

func (d *Docker) NetworkList() ([]types.NetworkResource, error) {
networks, err := d.cli.NetworkList(d.ctx, types.NetworkListOptions{})
if err != nil {
return networks, err
}

return networks, nil
}

func (d *Docker) Events() {
go func() {
eventStream, err := d.cli.Events(d.ctx, types.EventsOptions{})
Expand Down
27 changes: 27 additions & 0 deletions models/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,13 @@ const (
ContainerSearch
ContainerLogs
ContainerOptions

ImageList
ImageDetail
ImageSearch
ImageOptions

NetworkList
)

type LogsView struct {
Expand All @@ -47,6 +50,7 @@ type model struct {
imageDetail viewport.Model
imageSearch textinput.Model
imageOptions Options
networkList table.Model
ready bool
currentView currentView
ContainerID string
Expand All @@ -65,6 +69,14 @@ func NewModel(dockerClient *docker.Docker, version string) *model {
dockerVersion: version,
}
m.setContainerList()

rows := []table.Row{
{"ID", "Name", "Driver", "IP Subnet", "IP Gateway"},
{"ID", "Name", "Driver", "IP Subnet", "IP Gateway"},
}

m.networkList = NewNetworkList(rows)

return m
}

Expand Down Expand Up @@ -270,6 +282,16 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.currentView = ImageList
return m, tea.ClearScreen

case "ctrl+n":
networks, err := m.dockerClient.NetworkList()
if err != nil {
fmt.Println(err)
}

m.networkList = NewNetworkList(GetNetworkRows(networks, ""))
m.currentView = NetworkList
return m, tea.ClearScreen

case "ctrl+r":
m.setContainerList()
return m, tea.ClearScreen
Expand Down Expand Up @@ -305,7 +327,9 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.containerLogs.pager, _ = m.containerLogs.pager.Update(msg)
m.imageList, _ = m.imageList.Update(msg)
m.imageDetail, _ = m.imageDetail.Update(msg)
m.networkList, _ = m.networkList.Update(msg)
m.imageSearch, cmd = m.imageSearch.Update(msg)

cmds = append(cmds, cmd)
return m, tea.Batch(cmds...)
}
Expand Down Expand Up @@ -365,6 +389,9 @@ func (m model) View() string {
m.imageSearch.View(),
"(esc to back)",
) + "\n"

case NetworkList:
return baseStyle.Render(m.networkList.View()) + helpStyle("\n DockerVersion: "+m.dockerVersion+" \n"+commands)
default:
return ""

Expand Down
67 changes: 67 additions & 0 deletions models/network_list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package models

import (
"strings"

"github.com/charmbracelet/bubbles/table"
"github.com/charmbracelet/lipgloss"
"github.com/docker/docker/api/types"
)

func NewNetworkList(rows []table.Row) table.Model {
columns := []table.Column{
{Title: "ID", Width: 20},
{Title: "Name", Width: 40},
{Title: "Driver", Width: 20},
{Title: "IP Subnet", Width: 20},
{Title: "IP Gateway", Width: 20},
}

t := table.New(
table.WithColumns(columns),
table.WithRows(rows),
table.WithFocused(true),
table.WithWidth(180),
table.WithHeight(15),
)

s := table.DefaultStyles()
s.Header = s.Header.
BorderStyle(lipgloss.NormalBorder()).
BorderForeground(lipgloss.Color("240")).
BorderBottom(true).
Bold(false)
s.Selected = s.Selected.
Foreground(lipgloss.Color("229")).
Background(lipgloss.Color("57")).
Bold(false)
t.SetStyles(s)

return t
}

func GetNetworkRows(networkList []types.NetworkResource, query string) []table.Row {
var filtered []types.NetworkResource
if query == "" {
filtered = networkList
} else {
for _, network := range networkList {
if strings.Contains(strings.ToLower(network.Name), strings.ToLower(query)) || strings.Contains(strings.ToLower(network.Driver), strings.ToLower(query)) {
filtered = append(filtered, network)
}
}
}

var rows []table.Row
for _, network := range filtered {
rows = append(rows, table.Row{
network.ID,
network.Name,
network.Driver,
"",
"",
})
}

return rows
}

0 comments on commit cbec219

Please sign in to comment.