k9s/internal/view/table_helper.go

63 lines
1.3 KiB
Go

package view
import (
"encoding/csv"
"fmt"
"os"
"path/filepath"
"time"
"github.com/derailed/k9s/internal/config"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/ui"
"github.com/rs/zerolog/log"
)
func trimCellRelative(t *Table, row, col int) string {
return ui.TrimCell(t.SelectTable, row, t.NameColIndex()+col)
}
func saveTable(cluster, name string, data resource.TableData) (string, error) {
dir := filepath.Join(config.K9sDumpDir, cluster)
if err := ensureDir(dir); err != nil {
return "", err
}
ns, now := data.Namespace, time.Now().UnixNano()
if ns == resource.AllNamespaces {
ns = resource.AllNamespace
}
fName := fmt.Sprintf(ui.FullFmat, name, ns, now)
if ns == resource.NotNamespaced {
fName = fmt.Sprintf(ui.NoNSFmat, name, now)
}
path := filepath.Join(dir, fName)
mod := os.O_CREATE | os.O_WRONLY
file, err := os.OpenFile(path, mod, 0600)
if err != nil {
return "", err
}
defer func() {
if err := file.Close(); err != nil {
log.Error().Err(err).Msg("Closing file")
}
}()
w := csv.NewWriter(file)
if err := w.Write(data.Header); err != nil {
return "", err
}
for _, r := range data.Rows {
if err := w.Write(r.Fields); err != nil {
return "", err
}
}
w.Flush()
if err := w.Error(); err != nil {
return "", err
}
return path, nil
}