Skip to content

Commit

Permalink
add list volumes
Browse files Browse the repository at this point in the history
  • Loading branch information
ernesto27 committed Jul 3, 2023
1 parent 029e6ff commit 30ebc21
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 0 deletions.
12 changes: 12 additions & 0 deletions docker/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/image"
"github.com/docker/docker/api/types/volume"
"github.com/docker/docker/client"
)

Expand Down Expand Up @@ -392,6 +393,17 @@ func (d *Docker) GetNetworkByName(name string) (MyNetwork, error) {
return MyNetwork{}, fmt.Errorf("network %s not found", name)
}

func (d *Docker) VolumeList() ([]*volume.Volume, error) {
options := volume.ListOptions{}
volumes, err := d.cli.VolumeList(d.ctx, options)
if err != nil {
return []*volume.Volume{}, err
}

return volumes.Volumes, nil

}

func (d *Docker) Events() {
go func() {
eventStream, err := d.cli.Events(d.ctx, types.EventsOptions{})
Expand Down
16 changes: 16 additions & 0 deletions models/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ const (
MNetworkSearch
MNetworkDetail
MNetworkOptions

MVolumeList
)

type model struct {
Expand All @@ -54,6 +56,7 @@ type model struct {
networkSearch NetworkSearch
networkDetail viewport.Model
networkOptions NetworkOptions
volumeList VolumeList
ready bool
currentModel currentModel
ContainerID string
Expand Down Expand Up @@ -122,6 +125,14 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.setContainerList()
return m, tea.ClearScreen

case "ctrl+v":
volumes, err := m.dockerClient.VolumeList()
if err != nil {
fmt.Println(err)
}
m.volumeList = NewVolumeList(volumes, "")
m.currentModel = MVolumeList

}

case attachExited:
Expand Down Expand Up @@ -162,6 +173,8 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.networkSearch, _ = m.networkSearch.Update(msg, &m)
m.networkOptions, _ = m.networkOptions.Update(msg, &m)

m.volumeList.table, _ = m.volumeList.Update(msg, &m)

cmds = append(cmds, cmd)
return m, tea.Batch(cmds...)
}
Expand Down Expand Up @@ -217,6 +230,9 @@ func (m model) View() string {
case MNetworkOptions:
return m.networkOptions.View()

case MVolumeList:
return m.volumeList.View(commands, m.dockerVersion)

default:
return ""

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

import (
"strings"

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

type VolumeList struct {
table table.Model
}

func NewVolumeList(volumeList []*volume.Volume, query string) VolumeList {
columns := []table.Column{
{Title: "Name", Width: 30},
{Title: "Stack", Width: 20},
{Title: "Driver", Width: 20},
{Title: "Created", Width: 30},
}

rows := GetVolumeRows(volumeList, query)

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 VolumeList{table: t}
}

func (vl VolumeList) View(commands string, dockerVersion string) string {
return baseStyle.Render(vl.table.View()) + helpStyle("\n DockerVersion: "+dockerVersion+" \n"+commands)
}

func (vl VolumeList) Update(msg tea.Msg, m *model) (table.Model, tea.Cmd) {
if m.currentModel != MVolumeList {
return vl.table, nil
}

vl.table, _ = vl.table.Update(msg)

switch msg := msg.(type) {
case tea.KeyMsg:
switch msg.String() {
case "enter":
}
}

return vl.table, nil
}

func GetVolumeRows(volumeList []*volume.Volume, query string) []table.Row {
var filtered []*volume.Volume
if query == "" {
filtered = volumeList
} else {
for _, v := range volumeList {
if strings.Contains(strings.ToLower(v.Name), strings.ToLower(query)) {
filtered = append(filtered, v)
}
}
}

var rows []table.Row
for _, v := range filtered {

rows = append(rows, table.Row{
v.Name,
"",
v.Driver,
v.CreatedAt,
})
}

return rows
}

0 comments on commit 30ebc21

Please sign in to comment.