Skip to content

Commit b6f1e66

Browse files
authored
show message on stderr when results have been truncated (#56)
1 parent d686eac commit b6f1e66

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

cmd/main.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ var (
9494
func main() {
9595

9696
log.SetOutput(os.Stderr)
97+
log.SetPrefix("NOTE: ")
98+
log.SetFlags(log.Flags() &^ (log.Ldate | log.Ltime))
9799

98100
shortUsage := "A tool to filter EC2 Instance Types based on various resource criteria"
99101
longUsage := binName + ` is a CLI tool to filter EC2 instance types based on resource criteria.
@@ -232,7 +234,7 @@ Full docs can be found at github.com/aws/amazon-` + binName
232234
outputFlag := cli.StringMe(flags[output])
233235
outputFn := getOutputFn(outputFlag, selector.InstanceTypesOutputFn(resultsOutputFn))
234236

235-
instanceTypes, err := instanceSelector.FilterWithOutput(filters, outputFn)
237+
instanceTypes, itemsTruncated, err := instanceSelector.FilterWithOutput(filters, outputFn)
236238
if err != nil {
237239
fmt.Printf("An error occurred when filtering instance types: %v", err)
238240
os.Exit(1)
@@ -245,6 +247,10 @@ Full docs can be found at github.com/aws/amazon-` + binName
245247
for _, instanceType := range instanceTypes {
246248
fmt.Println(instanceType)
247249
}
250+
251+
if itemsTruncated > 0 {
252+
log.Printf("%d entries were truncated, increase --%s to see more", itemsTruncated, maxResults)
253+
}
248254
}
249255

250256
func getOutputFn(outputFlag *string, currentFn selector.InstanceTypesOutputFn) selector.InstanceTypesOutputFn {

pkg/selector/selector.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ func New(sess *session.Session) *Selector {
8181
// matching the criteria within Filters and returns a simple list of instance type strings
8282
func (itf Selector) Filter(filters Filters) ([]string, error) {
8383
outputFn := InstanceTypesOutputFn(outputs.SimpleInstanceTypeOutput)
84-
return itf.FilterWithOutput(filters, outputFn)
84+
output, _, err := itf.FilterWithOutput(filters, outputFn)
85+
return output, err
8586
}
8687

8788
// FilterVerbose accepts a Filters struct which is used to select the available instance types
@@ -91,31 +92,31 @@ func (itf Selector) FilterVerbose(filters Filters) ([]*ec2.InstanceTypeInfo, err
9192
if err != nil {
9293
return nil, err
9394
}
94-
instanceTypeInfoSlice = itf.truncateResults(filters.MaxResults, instanceTypeInfoSlice)
95+
instanceTypeInfoSlice, _ = itf.truncateResults(filters.MaxResults, instanceTypeInfoSlice)
9596
return instanceTypeInfoSlice, nil
9697
}
9798

9899
// FilterWithOutput accepts a Filters struct which is used to select the available instance types
99100
// matching the criteria within Filters and returns a list of strings based on the custom outputFn
100-
func (itf Selector) FilterWithOutput(filters Filters, outputFn InstanceTypesOutput) ([]string, error) {
101+
func (itf Selector) FilterWithOutput(filters Filters, outputFn InstanceTypesOutput) ([]string, int, error) {
101102
instanceTypeInfoSlice, err := itf.rawFilter(filters)
102103
if err != nil {
103-
return nil, err
104+
return nil, 0, err
104105
}
105-
instanceTypeInfoSlice = itf.truncateResults(filters.MaxResults, instanceTypeInfoSlice)
106+
instanceTypeInfoSlice, numOfItemsTruncated := itf.truncateResults(filters.MaxResults, instanceTypeInfoSlice)
106107
output := outputFn.Output(instanceTypeInfoSlice)
107-
return output, nil
108+
return output, numOfItemsTruncated, nil
108109
}
109110

110-
func (itf Selector) truncateResults(maxResults *int, instanceTypeInfoSlice []*ec2.InstanceTypeInfo) []*ec2.InstanceTypeInfo {
111+
func (itf Selector) truncateResults(maxResults *int, instanceTypeInfoSlice []*ec2.InstanceTypeInfo) ([]*ec2.InstanceTypeInfo, int) {
111112
if maxResults == nil {
112-
return instanceTypeInfoSlice
113+
return instanceTypeInfoSlice, 0
113114
}
114115
upperIndex := *maxResults
115116
if *maxResults > len(instanceTypeInfoSlice) {
116117
upperIndex = len(instanceTypeInfoSlice)
117118
}
118-
return instanceTypeInfoSlice[0:upperIndex]
119+
return instanceTypeInfoSlice[0:upperIndex], len(instanceTypeInfoSlice) - upperIndex
119120
}
120121

121122
// AggregateFilterTransform takes higher level filters which are used to affect multiple raw filters in an opinionated way.

0 commit comments

Comments
 (0)