* Added command line history to the command, query and filter prompts. * Added query planning debugging to the log. * Fixed bug in query expression which was not treating true and false as boolean literals. * Fixed a bug in the query planning logic which was incorrectly determine that an expression of the form sort_key ^= "string", with no partition key, could be executed as a query instead of a scan.
97 lines
2 KiB
Go
97 lines
2 KiB
Go
package controllers
|
|
|
|
import (
|
|
"context"
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
"github.com/lmika/audax/internal/common/ui/events"
|
|
"github.com/lmika/audax/internal/ssm-browse/models"
|
|
"github.com/lmika/audax/internal/ssm-browse/services/ssmparameters"
|
|
"sync"
|
|
)
|
|
|
|
type SSMController struct {
|
|
service *ssmparameters.Service
|
|
|
|
// state
|
|
mutex *sync.Mutex
|
|
prefix string
|
|
}
|
|
|
|
func New(service *ssmparameters.Service) *SSMController {
|
|
return &SSMController{
|
|
service: service,
|
|
prefix: "/",
|
|
mutex: new(sync.Mutex),
|
|
}
|
|
}
|
|
|
|
func (c *SSMController) Fetch() tea.Cmd {
|
|
return func() tea.Msg {
|
|
res, err := c.service.List(context.Background(), c.prefix)
|
|
if err != nil {
|
|
return events.Error(err)
|
|
}
|
|
|
|
return NewParameterListMsg{
|
|
Prefix: c.prefix,
|
|
Parameters: res,
|
|
}
|
|
}
|
|
}
|
|
|
|
func (c *SSMController) ChangePrefix(newPrefix string) tea.Msg {
|
|
res, err := c.service.List(context.Background(), newPrefix)
|
|
if err != nil {
|
|
return events.Error(err)
|
|
}
|
|
|
|
c.mutex.Lock()
|
|
defer c.mutex.Unlock()
|
|
c.prefix = newPrefix
|
|
|
|
return NewParameterListMsg{
|
|
Prefix: c.prefix,
|
|
Parameters: res,
|
|
}
|
|
}
|
|
|
|
func (c *SSMController) Clone(param models.SSMParameter) tea.Msg {
|
|
return events.PromptForInput("New key: ", nil, func(value string) tea.Msg {
|
|
return func() tea.Msg {
|
|
ctx := context.Background()
|
|
if err := c.service.Clone(ctx, param, value); err != nil {
|
|
return events.Error(err)
|
|
}
|
|
|
|
res, err := c.service.List(context.Background(), c.prefix)
|
|
if err != nil {
|
|
return events.Error(err)
|
|
}
|
|
|
|
return NewParameterListMsg{
|
|
Prefix: c.prefix,
|
|
Parameters: res,
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
func (c *SSMController) DeleteParameter(param models.SSMParameter) tea.Msg {
|
|
return events.ConfirmYes("delete parameter? ", func() tea.Msg {
|
|
ctx := context.Background()
|
|
if err := c.service.Delete(ctx, param); err != nil {
|
|
return events.Error(err)
|
|
}
|
|
|
|
res, err := c.service.List(context.Background(), c.prefix)
|
|
if err != nil {
|
|
return events.Error(err)
|
|
}
|
|
|
|
return NewParameterListMsg{
|
|
Prefix: c.prefix,
|
|
Parameters: res,
|
|
}
|
|
})
|
|
}
|