-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsegment.go
More file actions
156 lines (144 loc) · 3.23 KB
/
Copy pathsegment.go
File metadata and controls
156 lines (144 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package cmds
import (
"fmt"
lytics "github.com/lytics/go-lytics"
"github.com/urfave/cli/v2"
)
func init() {
addCommand(cli.Command{
Name: "segment",
Usage: "Segment Info",
Category: "Management API",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "table",
Usage: "Table to limit list of segments",
Value: "user",
},
},
Subcommands: []*cli.Command{
{
Name: "get",
Usage: "Show details of requested segment",
Action: segmentGet,
},
{
Name: "list",
Usage: "List Segments",
Action: segmentList,
},
{
Name: "listql",
Usage: "List SegmentQL Queries",
Action: segmentQlList,
},
{
Name: "scan",
Usage: "List Entities in a Segment. NOTE, this is new-line delimitted json output.",
ArgsUsage: "[id or slug of Segment]",
Action: segmentScan,
Flags: []cli.Flag{
&cli.Int64Flag{
Name: "limit",
Usage: "Limit to x entities in scan list",
Value: 0,
},
},
},
},
})
}
func segmentGet(c *cli.Context) error {
if c.NArg() == 0 {
return fmt.Errorf("expected one arg (id)")
}
id := c.Args().First()
item, err := client.GetSegment(id)
exitIfErr(err, "could not get segment %q from API", id)
resultWrite(c, &item, fmt.Sprintf("segment_%s", item.Name))
return nil
}
func segmentList(c *cli.Context) error {
items, err := client.GetSegments(c.String("table"))
exitIfErr(err, "could not get segment list")
list := make([]lytics.TableWriter, len(items))
for i, item := range items {
list[i] = item
}
resultWrite(c, list, "segment_list")
return nil
}
func segmentQlList(c *cli.Context) error {
items, err := client.GetSegments(c.String("table"))
exitIfErr(err, "could not get SegmentQL list")
list := make([]lytics.TableWriter, len(items))
for i, item := range items {
list[i] = &segmentQl{item}
}
resultWrite(c, list, "SegmentQL list")
return nil
}
func segmentScan(c *cli.Context) error {
if c.NArg() == 0 {
return fmt.Errorf("expected one arg (id)")
}
id := c.Args().First()
limit := c.Int64("limit")
getEntityScan(id, int(limit), func(e *lytics.Entity) {
fmt.Println(e.PrettyJson())
})
return nil
}
type segmentQl struct {
*lytics.Segment
}
func (m *segmentQl) Headers() []interface{} {
return []interface{}{
"ID", "alias", "ql",
}
}
func (m *segmentQl) Row() []interface{} {
return []interface{}{
m.Id, m.SlugName, m.FilterQL,
}
}
/*
func (c *Cli) getSegmentSizes(segments []string) (interface{}, error) {
if len(segments) == 1 {
segment, err := c.Client.GetSegmentSize(segments[0])
if err != nil {
return nil, err
}
return segment, nil
} else {
segments, err := c.Client.GetSegmentSizes(segments)
if err != nil {
return nil, err
}
return segments, nil
}
}
func (c *Cli) getSegmentAttributions(segments []string, limit int) (interface{}, error) {
attributions, err := c.Client.GetSegmentAttribution(segments)
if err != nil {
return nil, err
}
return attributions, nil
}
*/
func getEntityScan(segmentIDOrQl string, limit int, handler lytics.EntityHandler) {
scan := client.PageSegment(segmentIDOrQl)
ct := 0
// handle processing the entities
for {
e := scan.Next()
if e == nil {
break
}
handler(e)
ct++
if limit > 0 && ct == limit {
return
}
}
}