Skip to content

Commit ad9937a

Browse files
committed
Add icecap qtags as a field in sundeck
1 parent 0d50e7e commit ad9937a

File tree

6 files changed

+174
-16
lines changed

6 files changed

+174
-16
lines changed

go/cmd/declarations/declarations.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ func (c *{{.ClassName}}) Merge(other *{{.ClassName}}) {
7575
c.values[k] = v
7676
}
7777
}
78+
79+
func (c *{{.ClassName}}) Values() map[string]any {
80+
return c.values
81+
}
7882
`
7983

8084
// Template for generating methods

go/pkg/qtag/declarations/icecap.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: icecap
2+
site: "https://sundeck.io"
3+
identifier:
4+
fields:
5+
app: icecap
6+
fields:
7+
- name: app
8+
type: APPLICATION
9+
- name: target_size
10+
type: DIMENSION
11+
- name: used
12+
type: DIMENSION
13+
- name: no_route_reason
14+
type: TRACE

go/pkg/qtag/declarations/sundeck.yaml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,5 @@ fields:
6060
type: DIMENSION
6161
- name: auto_routing_uniform_random_warehouse_choice
6262
type: DIMENSION
63-
- name: icecap_target_size
63+
- name: icecap
6464
type: DIMENSION
65-
- name: icecap_used
66-
type: DIMENSION
67-
- name: icecap_no_route_reason
68-
type: TRACE

go/pkg/qtag/generated.go

Lines changed: 84 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ func (c *Dbt) Merge(other *Dbt) {
3838
}
3939
}
4040

41+
func (c *Dbt) Values() map[string]any {
42+
return c.values
43+
}
44+
4145
func (c *Dbt) AddApp(value any) {
4246
c.values["app"] = value
4347
}
@@ -176,6 +180,10 @@ func (c *Hex) Merge(other *Hex) {
176180
}
177181
}
178182

183+
func (c *Hex) Values() map[string]any {
184+
return c.values
185+
}
186+
179187
func (c *Hex) AddCategories(value any) {
180188
c.values["categories"] = value
181189
}
@@ -204,6 +212,60 @@ func (c *Hex) AddUser_email(value any) {
204212
c.values["user_email"] = value
205213
}
206214

215+
type Icecap struct {
216+
Builder
217+
name string
218+
identifier map[string]any
219+
values map[string]any
220+
}
221+
222+
func NewIcecap() *Icecap {
223+
x := Icecap{}
224+
x.init()
225+
return &x
226+
}
227+
228+
func (c *Icecap) init() {
229+
c.name = "icecap"
230+
c.identifier = make(map[string]any)
231+
json.Unmarshal([]byte("{\"fields\":{\"app\":\"icecap\"}}"), &c.identifier)
232+
c.values = make(map[string]any)
233+
}
234+
235+
func (c *Icecap) Format() (string, error) {
236+
return format(c.name, c.identifier, c.values)
237+
}
238+
239+
func (c *Icecap) UnknownValue(name string, value any) {
240+
c.values[name] = value
241+
}
242+
243+
func (c *Icecap) Merge(other *Icecap) {
244+
for k, v := range other.values {
245+
c.values[k] = v
246+
}
247+
}
248+
249+
func (c *Icecap) Values() map[string]any {
250+
return c.values
251+
}
252+
253+
func (c *Icecap) AddApp(value any) {
254+
c.values["app"] = value
255+
}
256+
257+
func (c *Icecap) AddTarget_size(value any) {
258+
c.values["target_size"] = value
259+
}
260+
261+
func (c *Icecap) AddUsed(value any) {
262+
c.values["used"] = value
263+
}
264+
265+
func (c *Icecap) AddNo_route_reason(value any) {
266+
c.values["no_route_reason"] = value
267+
}
268+
207269
type Metabase struct {
208270
Builder
209271
name string
@@ -238,6 +300,10 @@ func (c *Metabase) Merge(other *Metabase) {
238300
}
239301
}
240302

303+
func (c *Metabase) Values() map[string]any {
304+
return c.values
305+
}
306+
241307
func (c *Metabase) AddClient(value any) {
242308
c.values["client"] = value
243309
}
@@ -312,6 +378,10 @@ func (c *Mode) Merge(other *Mode) {
312378
}
313379
}
314380

381+
func (c *Mode) Values() map[string]any {
382+
return c.values
383+
}
384+
315385
func (c *Mode) AddUser(value any) {
316386
c.values["user"] = value
317387
}
@@ -362,6 +432,10 @@ func (c *Sigma) Merge(other *Sigma) {
362432
}
363433
}
364434

435+
func (c *Sigma) Values() map[string]any {
436+
return c.values
437+
}
438+
365439
func (c *Sigma) AddKind(value any) {
366440
c.values["kind"] = value
367441
}
@@ -412,6 +486,10 @@ func (c *Sundeck) Merge(other *Sundeck) {
412486
}
413487
}
414488

489+
func (c *Sundeck) Values() map[string]any {
490+
return c.values
491+
}
492+
415493
func (c *Sundeck) AddApp(value any) {
416494
c.values["app"] = value
417495
}
@@ -524,16 +602,8 @@ func (c *Sundeck) AddAuto_routing_uniform_random_warehouse_choice(value any) {
524602
c.values["auto_routing_uniform_random_warehouse_choice"] = value
525603
}
526604

527-
func (c *Sundeck) AddIcecap_target_size(value any) {
528-
c.values["icecap_target_size"] = value
529-
}
530-
531-
func (c *Sundeck) AddIcecap_used(value any) {
532-
c.values["icecap_used"] = value
533-
}
534-
535-
func (c *Sundeck) AddIcecap_no_route_reason(value any) {
536-
c.values["icecap_no_route_reason"] = value
605+
func (c *Sundeck) AddIcecap(value any) {
606+
c.values["icecap"] = value
537607
}
538608

539609
type Walrusiq struct {
@@ -570,6 +640,10 @@ func (c *Walrusiq) Merge(other *Walrusiq) {
570640
}
571641
}
572642

643+
func (c *Walrusiq) Values() map[string]any {
644+
return c.values
645+
}
646+
573647
func (c *Walrusiq) AddApp(value any) {
574648
c.values["app"] = value
575649
}

go/pkg/qtag/generated_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package qtag
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
func TestSundeck_AddIcecap(t *testing.T) {
10+
i := &Icecap{}
11+
i.init()
12+
i.AddTarget_size("Small")
13+
i.AddNo_route_reason([]string{"MissingScalarFunction", "UnableToResolve"})
14+
i.AddUsed(true)
15+
16+
c := &Sundeck{}
17+
c.init()
18+
c.AddIcecap(i.Values())
19+
tags, err := c.Format()
20+
require.NoError(t, err)
21+
expectedTags := `{"app":"sundeck","icecap":{"no_route_reason":["MissingScalarFunction","UnableToResolve"],"target_size":"Small","used":true}}`
22+
require.Equal(t, expectedTags, tags)
23+
24+
queryText := "select 1; -- " + tags
25+
extractor := NewExtractor()
26+
qtags := extractor.Extract(queryText, false, false)
27+
require.Len(t, qtags, 2)
28+
for _, tag := range qtags {
29+
if tag.Key == "app" {
30+
require.Equal(t, "sundeck", tag.Value)
31+
} else if tag.Key == "icecap" {
32+
icMap, ok := tag.Value.(map[string]interface{})
33+
require.True(t, ok)
34+
require.Equal(t, "Small", icMap["target_size"])
35+
require.Equal(t, []interface{}{"MissingScalarFunction", "UnableToResolve"}, icMap["no_route_reason"])
36+
require.Equal(t, true, icMap["used"])
37+
} else {
38+
require.Fail(t, "unexpected tag")
39+
}
40+
}
41+
}

tests/test.yaml

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
- name: test sundeck tags
120120
query: |
121121
select 1
122-
-- {"app": "sundeck", "warehouse_updated": true, "query_text_updated": true, "flow_name": "DEFAULT", "query_rejected": false, "hooks_applied": ["hook1", "hook2"], "reject_message": "unknown", "workload": "dev", "kind" : "pre_hook"}
122+
-- {"app": "sundeck", "warehouse_updated": true, "query_text_updated": true, "flow_name": "DEFAULT", "query_rejected": false, "hooks_applied": ["hook1", "hook2"], "reject_message": "unknown", "workload": "dev", "kind" : "pre_hook", "icecap" : {"target_size": "Small", "used": true}}
123123
outcome:
124124
- source: sundeck
125125
key: app
@@ -157,6 +157,12 @@
157157
key: kind
158158
value: pre_hook
159159
type: DIMENSION
160+
- source: sundeck
161+
key: icecap
162+
value:
163+
target_size: "Small"
164+
used: true
165+
type: DIMENSION
160166
- name: test sundeck service tags
161167
query: |
162168
select 1
@@ -253,3 +259,26 @@
253259
key: suggested_warehouse_name
254260
value: COMPUTE_WH
255261
type: DIMENSION
262+
- name: test icecap tags
263+
query: |
264+
select 1
265+
-- {"app": "icecap", "target_size": "Small", "used": true, "no_route_reason": ["MissingType", "UnableToTranspile"]}
266+
outcome:
267+
- source: icecap
268+
key: app
269+
value: icecap
270+
type: APPLICATION
271+
- source: icecap
272+
key: target_size
273+
value: Small
274+
type: DIMENSION
275+
- source: icecap
276+
key: used
277+
value: true
278+
type: DIMENSION
279+
- source: icecap
280+
key: no_route_reason
281+
value:
282+
- MissingType
283+
- UnableToTranspile
284+
type: TRACE

0 commit comments

Comments
 (0)