Skip to content

Commit

Permalink
WIP - add detail network
Browse files Browse the repository at this point in the history
  • Loading branch information
ernestopigma committed Jun 28, 2023
1 parent 040f33d commit a06e8ff
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 20 deletions.
38 changes: 33 additions & 5 deletions docker/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@ type Docker struct {

Containers []MyContainer
Images []MyImage
Networks []types.NetworkResource
Networks []MyNetwork
}

type MyNetwork struct {
Name string
IPAddress string
Gateway string
Subnet string
Resource types.NetworkResource
}

type MyContainer struct {
Expand Down Expand Up @@ -317,14 +319,40 @@ func (d *Docker) ContainerLogs(containerId string) (string, error) {
return logs, nil
}

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

d.Networks = networks
return networks, nil
for _, n := range networks {
subnet := ""
gateway := ""
if len(n.IPAM.Config) > 0 {
subnet = n.IPAM.Config[0].Subnet
gateway = n.IPAM.Config[0].Gateway
}

myNetwork = append(myNetwork, MyNetwork{
Resource: n,
Gateway: gateway,
Subnet: subnet,
})
}

d.Networks = myNetwork

return myNetwork, nil
}

func (d *Docker) GetNetworkByName(name string) (MyNetwork, error) {
for _, n := range d.Networks {
if n.Resource.Name == name {
return n, nil
}
}
return MyNetwork{}, fmt.Errorf("network %s not found", name)
}

func (d *Docker) Events() {
Expand Down
17 changes: 17 additions & 0 deletions models/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const (

NetworkList
NetworkSearch
NetworkDetail
)

type LogsView struct {
Expand All @@ -53,6 +54,7 @@ type model struct {
imageOptions Options
networkList table.Model
networkSearch textinput.Model
networkDetail viewport.Model
ready bool
currentView currentView
ContainerID string
Expand Down Expand Up @@ -208,6 +210,19 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
networks := NewNetworkList(GetNetworkRows(m.dockerClient.Networks, value))
m.networkList = networks
m.currentView = NetworkList
case NetworkList:
network, err := m.dockerClient.GetNetworkByName(m.networkList.SelectedRow()[1])
if err != nil {
fmt.Println(err)
}

nd, err := NewNetworkDetail(network, utils.CreateTable)
if err != nil {
fmt.Println(err)
}
m.networkDetail = nd
m.currentView = NetworkDetail

}

case "ctrl+f":
Expand Down Expand Up @@ -404,6 +419,8 @@ func (m model) View() string {
m.networkSearch.View(),
"(esc to back)",
) + "\n"
case NetworkDetail:
return m.networkDetail.View()

default:
return ""
Expand Down
80 changes: 80 additions & 0 deletions models/network_detail.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package models

import (
"dockerniceui/docker"
"dockerniceui/utils"

"github.com/charmbracelet/bubbles/viewport"
"github.com/charmbracelet/glamour"
"github.com/charmbracelet/lipgloss"
)

func NewNetworkDetail(network docker.MyNetwork, createTable utils.CreateTableFunc) (viewport.Model, error) {
// content := `
// # Network status

// | Type | Value |
// | ---- | ----- |
// | ID | 1234567890 |
// | Name | my-network |
// | Driver | bridge |
// | Scope | local |
// | Enable IPv6 | false |
// | Internal | false |
// | Attachable | false |

// # Containers

// | ID | Name | IPv4 Address | IPv6 Address |
// | -- | ---- | ------------ | ------------ |
// | 1234567890 | my-container |
// | 1234567890 | my-container |

//`
content := getContentNetwork(network)
const width = 120

vp := viewport.New(width, 30)
vp.Style = lipgloss.NewStyle().
BorderStyle(lipgloss.RoundedBorder()).
BorderForeground(lipgloss.Color("62")).
PaddingRight(2)

renderer, err := glamour.NewTermRenderer(
glamour.WithAutoStyle(),
glamour.WithWordWrap(width),
)
if err != nil {
return viewport.Model{}, err
}

str, err := renderer.Render(content)
if err != nil {
return viewport.Model{}, err
}

vp.SetContent(str)

return vp, nil
}

func getContentNetwork(network docker.MyNetwork) string {
response := ""

attachable := "false"
if network.Resource.Attachable {
attachable = "true"
}

response += utils.CreateTable("# Network status", []string{"Type", "Value"},
[][]string{
{"ID", network.Resource.ID},
{"Name", network.Resource.Name},
{"Driver", network.Resource.Driver},
{"Attachable", attachable},
{"Subnet", network.Subnet},
{"Gateway", network.Gateway},
})

return response
}
24 changes: 9 additions & 15 deletions models/network_list.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package models

import (
"dockerniceui/docker"
"strings"

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

func NewNetworkList(rows []table.Row) table.Model {
Expand Down Expand Up @@ -40,33 +40,27 @@ func NewNetworkList(rows []table.Row) table.Model {
return t
}

func GetNetworkRows(networkList []types.NetworkResource, query string) []table.Row {
var filtered []types.NetworkResource
func GetNetworkRows(networkList []docker.MyNetwork, query string) []table.Row {
var filtered []docker.MyNetwork
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)) {
if strings.Contains(strings.ToLower(network.Resource.Name), strings.ToLower(query)) {
filtered = append(filtered, network)
}
}
}

var rows []table.Row
for _, network := range filtered {
subnet := ""
gateway := ""
if len(network.IPAM.Config) > 0 {
subnet = network.IPAM.Config[0].Subnet
gateway = network.IPAM.Config[0].Gateway
}

rows = append(rows, table.Row{
network.ID,
network.Name,
network.Driver,
subnet,
gateway,
network.Resource.ID,
network.Resource.Name,
network.Resource.Driver,
network.Subnet,
network.Gateway,
})
}

Expand Down

0 comments on commit a06e8ff

Please sign in to comment.