sqs-browse: Added dynamo-browse
Added another tool for browsing DynamoDB tables
This commit is contained in:
parent
2c03f5160a
commit
1969504611
14 changed files with 477 additions and 4 deletions
10
internal/dynamo-browse/services/tables/iface.go
Normal file
10
internal/dynamo-browse/services/tables/iface.go
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
package tables
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/lmika/awstools/internal/dynamo-browse/models"
|
||||
)
|
||||
|
||||
type TableProvider interface {
|
||||
ScanItems(ctx context.Context, tableName string) ([]models.Item, error)
|
||||
}
|
||||
52
internal/dynamo-browse/services/tables/service.go
Normal file
52
internal/dynamo-browse/services/tables/service.go
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
package tables
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/lmika/awstools/internal/dynamo-browse/models"
|
||||
"github.com/pkg/errors"
|
||||
"sort"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
provider TableProvider
|
||||
}
|
||||
|
||||
func NewService(provider TableProvider) *Service {
|
||||
return &Service{
|
||||
provider: provider,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) Scan(ctx context.Context, table string) (*models.ResultSet, error) {
|
||||
results, err := s.provider.ScanItems(ctx, table)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to scan table %v", table)
|
||||
}
|
||||
|
||||
// Get the columns
|
||||
// TODO: need to get PKs and SKs from table
|
||||
seenColumns := make(map[string]int)
|
||||
seenColumns["pk"] = 0
|
||||
seenColumns["sk"] = 1
|
||||
|
||||
for _, result := range results {
|
||||
for k := range result {
|
||||
if _, isSeen := seenColumns[k]; !isSeen {
|
||||
seenColumns[k] = len(seenColumns)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
columns := make([]string, 0, len(seenColumns))
|
||||
for k := range seenColumns {
|
||||
columns = append(columns, k)
|
||||
}
|
||||
sort.Slice(columns, func(i, j int) bool {
|
||||
return seenColumns[columns[i]] < seenColumns[columns[j]]
|
||||
})
|
||||
|
||||
return &models.ResultSet{
|
||||
Columns: columns,
|
||||
Items: results,
|
||||
}, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue