Skip to content

Commit 8f60fdc

Browse files
authored
feat(googleanalytics): Update to sdk V4 (#11979)
Closes #11980
1 parent 9d4a538 commit 8f60fdc

File tree

11 files changed

+120
-63
lines changed

11 files changed

+120
-63
lines changed

plugins/source/googleanalytics/client/client.go

Lines changed: 81 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,31 @@ package client
22

33
import (
44
"context"
5-
6-
"github.com/cloudquery/plugin-pb-go/specs"
7-
"github.com/cloudquery/plugin-sdk/v3/backend"
8-
"github.com/cloudquery/plugin-sdk/v3/plugins/source"
9-
"github.com/cloudquery/plugin-sdk/v3/schema"
5+
"encoding/json"
6+
"fmt"
7+
8+
"github.com/cloudquery/plugin-sdk/v4/message"
9+
"github.com/cloudquery/plugin-sdk/v4/plugin"
10+
"github.com/cloudquery/plugin-sdk/v4/scheduler"
11+
"github.com/cloudquery/plugin-sdk/v4/schema"
12+
"github.com/cloudquery/plugin-sdk/v4/state"
1013
"github.com/rs/zerolog"
1114
analyticsdata "google.golang.org/api/analyticsdata/v1beta"
1215
"google.golang.org/api/option"
16+
"google.golang.org/grpc"
17+
"google.golang.org/grpc/credentials/insecure"
18+
)
19+
20+
const (
21+
maxMsgSize = 100 * 1024 * 1024 // 100 MiB
1322
)
1423

1524
type Client struct {
16-
service *analyticsdata.Service
17-
backend backend.Backend
25+
plugin.UnimplementedDestination
26+
scheduler *scheduler.Scheduler
27+
options plugin.NewClientOptions
28+
service *analyticsdata.Service
29+
backend state.Client
1830

1931
reports []*Report
2032

@@ -34,9 +46,67 @@ func (c *Client) ID() string {
3446
return "googleanalytics:property-id:{" + c.PropertyID + "}"
3547
}
3648

37-
func Configure(ctx context.Context, logger zerolog.Logger, srcSpec specs.Source, options source.Options) (schema.ClientMeta, error) {
49+
func (*Client) Close(ctx context.Context) error {
50+
return nil
51+
}
52+
53+
func (c *Client) Tables(ctx context.Context, options plugin.TableOptions) (schema.Tables, error) {
54+
tables := make(schema.Tables, len(c.reports))
55+
for i, r := range c.reports {
56+
tables[i] = r.table(c.PropertyID)
57+
}
58+
tables, err := tables.FilterDfs(options.Tables, options.SkipTables, options.SkipDependentTables)
59+
if err != nil {
60+
return nil, err
61+
}
62+
return tables, nil
63+
}
64+
65+
func (c *Client) Sync(ctx context.Context, options plugin.SyncOptions, res chan<- message.SyncMessage) error {
66+
if c.options.NoConnection {
67+
return fmt.Errorf("no connection")
68+
}
69+
70+
var stateClient state.Client
71+
if options.BackendOptions == nil {
72+
c.logger.Info().Msg("No backend options provided, using no state backend")
73+
stateClient = &state.NoOpClient{}
74+
} else {
75+
conn, err := grpc.DialContext(ctx, options.BackendOptions.Connection,
76+
grpc.WithTransportCredentials(insecure.NewCredentials()),
77+
grpc.WithDefaultCallOptions(
78+
grpc.MaxCallRecvMsgSize(maxMsgSize),
79+
grpc.MaxCallSendMsgSize(maxMsgSize),
80+
),
81+
)
82+
if err != nil {
83+
return fmt.Errorf("failed to dial grpc source plugin at %s: %w", options.BackendOptions.Connection, err)
84+
}
85+
stateClient, err = state.NewClient(ctx, conn, options.BackendOptions.TableName)
86+
if err != nil {
87+
return fmt.Errorf("failed to create state client: %w", err)
88+
}
89+
c.logger.Info().Str("table_name", options.BackendOptions.TableName).Msg("Connected to state backend")
90+
}
91+
c.backend = stateClient
92+
93+
tables, err := c.Tables(ctx, plugin.TableOptions{
94+
Tables: options.Tables,
95+
SkipTables: options.SkipTables,
96+
SkipDependentTables: options.SkipDependentTables,
97+
})
98+
if err != nil {
99+
return err
100+
}
101+
if err := c.scheduler.Sync(ctx, c, tables, res, scheduler.WithSyncDeterministicCQID(options.DeterministicCQID)); err != nil {
102+
return fmt.Errorf("failed to sync: %w", err)
103+
}
104+
return nil
105+
}
106+
107+
func Configure(ctx context.Context, logger zerolog.Logger, specBytes []byte, options plugin.NewClientOptions) (plugin.Client, error) {
38108
spec := new(Spec)
39-
if err := srcSpec.UnmarshalSpec(&spec); err != nil {
109+
if err := json.Unmarshal(specBytes, spec); err != nil {
40110
return nil, err
41111
}
42112

@@ -65,11 +135,10 @@ func Configure(ctx context.Context, logger zerolog.Logger, srcSpec specs.Source,
65135
return nil, err
66136
}
67137

68-
svc.UserAgent = "cloudquery:source-googleanalytics/" + srcSpec.Version
138+
svc.UserAgent = "cloudquery:source-googleanalytics"
69139

70140
c := &Client{
71141
service: svc,
72-
backend: options.Backend,
73142
StartDate: spec.StartDate,
74143
PropertyID: spec.PropertyID,
75144
reports: spec.Reports,
@@ -78,6 +147,6 @@ func Configure(ctx context.Context, logger zerolog.Logger, srcSpec specs.Source,
78147
Str("property_id", spec.PropertyID).
79148
Logger(),
80149
}
81-
150+
c.scheduler = scheduler.NewScheduler(scheduler.WithConcurrency(spec.Concurrency))
82151
return c, nil
83152
}

plugins/source/googleanalytics/client/columns.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55

66
"github.com/apache/arrow/go/v13/arrow"
7-
"github.com/cloudquery/plugin-sdk/v3/schema"
7+
"github.com/cloudquery/plugin-sdk/v4/schema"
88
)
99

1010
var PropertyIDColumn = schema.Column{

plugins/source/googleanalytics/client/fetch.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package client
33
import (
44
"context"
55

6-
"github.com/cloudquery/plugin-sdk/v3/schema"
6+
"github.com/cloudquery/plugin-sdk/v4/schema"
77
analyticsdata "google.golang.org/api/analyticsdata/v1beta"
88
)
99

@@ -50,7 +50,7 @@ func fetch(tableName string, request *analyticsdata.RunReportRequest) schema.Tab
5050

5151
// We save current date here, even with data loss (as the report should be edited to get all the data)
5252
// Data loss refers to the `(other)` value, see https://support.google.com/analytics/answer/1333168.
53-
if err := c.backend.Set(ctx, tableName, c.ID(), dateStr); err != nil {
53+
if err := c.backend.SetKey(ctx, tableName+c.ID(), dateStr); err != nil {
5454
logger.Err(err).Msg("failed to save state")
5555
return err
5656
}

plugins/source/googleanalytics/client/report.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import (
44
"fmt"
55
"strings"
66

7-
"github.com/cloudquery/plugin-sdk/v3/caser"
8-
"github.com/cloudquery/plugin-sdk/v3/schema"
9-
"github.com/cloudquery/plugin-sdk/v3/transformers"
7+
"github.com/cloudquery/plugin-sdk/v4/caser"
8+
"github.com/cloudquery/plugin-sdk/v4/schema"
9+
"github.com/cloudquery/plugin-sdk/v4/transformers"
1010
analyticsdata "google.golang.org/api/analyticsdata/v1beta"
1111
)
1212

plugins/source/googleanalytics/client/spec.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,24 @@ import (
77
)
88

99
type Spec struct {
10-
PropertyID string `json:"property_id,omitempty"`
11-
StartDate string `json:"start_date,omitempty"`
12-
OAuth *oauthSpec `json:"oauth,omitempty"`
13-
Reports []*Report `json:"reports,omitempty"`
10+
PropertyID string `json:"property_id,omitempty"`
11+
StartDate string `json:"start_date,omitempty"`
12+
OAuth *oauthSpec `json:"oauth,omitempty"`
13+
Reports []*Report `json:"reports,omitempty"`
14+
Concurrency uint64 `json:"concurrency,omitempty"`
1415
}
1516

1617
const layout = "2006-01-02"
18+
const defaultConcurrency = 10000
1719

1820
func (s *Spec) setDefaults() {
1921
if len(s.StartDate) == 0 {
2022
// date 7 days prior
2123
s.StartDate = time.Now().UTC().Add(-7 * 24 * time.Hour).Format(layout)
2224
}
25+
if s.Concurrency == 0 {
26+
s.Concurrency = defaultConcurrency
27+
}
2328
}
2429

2530
func (s *Spec) validate() error {

plugins/source/googleanalytics/client/tables.go

Lines changed: 0 additions & 21 deletions
This file was deleted.

plugins/source/googleanalytics/client/time.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
)
77

88
func genDates(ctx context.Context, c *Client, table string) (<-chan time.Time, error) {
9-
res, err := c.backend.Get(ctx, table, c.ID())
9+
res, err := c.backend.GetKey(ctx, table+c.ID())
1010
if err != nil {
1111
return nil, err
1212
}

plugins/source/googleanalytics/go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ go 1.19
44

55
require (
66
github.com/apache/arrow/go/v13 v13.0.0-20230630125530-5a06b2ec2a8e
7-
github.com/cloudquery/plugin-pb-go v1.6.0
8-
github.com/cloudquery/plugin-sdk/v3 v3.10.6
7+
github.com/cloudquery/plugin-sdk/v4 v4.7.1-rc1
98
github.com/rs/zerolog v1.29.1
109
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df
1110
golang.org/x/oauth2 v0.6.0
1211
google.golang.org/api v0.114.0
12+
google.golang.org/grpc v1.55.0
1313
)
1414

1515
// TODO: remove once all updates are merged
@@ -18,6 +18,7 @@ replace github.com/apache/arrow/go/v13 => github.com/cloudquery/arrow/go/v13 v13
1818
require (
1919
cloud.google.com/go/compute v1.19.0 // indirect
2020
cloud.google.com/go/compute/metadata v0.2.3 // indirect
21+
github.com/cloudquery/plugin-pb-go v1.6.0 // indirect
2122
github.com/cloudquery/plugin-sdk/v2 v2.7.0 // indirect
2223
github.com/davecgh/go-spew v1.1.1 // indirect
2324
github.com/getsentry/sentry-go v0.20.0 // indirect
@@ -32,13 +33,13 @@ require (
3233
github.com/grpc-ecosystem/go-grpc-middleware/providers/zerolog/v2 v2.0.0-rc.3 // indirect
3334
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.3 // indirect
3435
github.com/inconshreveable/mousetrap v1.1.0 // indirect
35-
github.com/klauspost/compress v1.16.0 // indirect
36+
github.com/klauspost/compress v1.16.6 // indirect
3637
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
38+
github.com/kr/pretty v0.3.0 // indirect
3739
github.com/mattn/go-colorable v0.1.13 // indirect
3840
github.com/mattn/go-isatty v0.0.19 // indirect
3941
github.com/pierrec/lz4/v4 v4.1.17 // indirect
4042
github.com/pmezard/go-difflib v1.0.0 // indirect
41-
github.com/spf13/cast v1.5.0 // indirect
4243
github.com/spf13/cobra v1.6.1 // indirect
4344
github.com/spf13/pflag v1.0.5 // indirect
4445
github.com/stretchr/testify v1.8.4 // indirect
@@ -56,7 +57,6 @@ require (
5657
google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect
5758
google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e // indirect
5859
google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529 // indirect
59-
google.golang.org/grpc v1.55.0 // indirect
6060
google.golang.org/protobuf v1.30.0 // indirect
6161
gopkg.in/yaml.v2 v2.4.0 // indirect
6262
gopkg.in/yaml.v3 v3.0.1 // indirect

plugins/source/googleanalytics/go.sum

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,14 @@ github.com/cloudquery/plugin-pb-go v1.6.0 h1:4g+tPhRAQUWpGyQBMcj6D3yVwKqwEN3nynv
5151
github.com/cloudquery/plugin-pb-go v1.6.0/go.mod h1:R0Wse6NbJDZIHcRQjJ1sZGYDo3mrIDm4k3El1YUrvGA=
5252
github.com/cloudquery/plugin-sdk/v2 v2.7.0 h1:hRXsdEiaOxJtsn/wZMFQC9/jPfU1MeMK3KF+gPGqm7U=
5353
github.com/cloudquery/plugin-sdk/v2 v2.7.0/go.mod h1:pAX6ojIW99b/Vg4CkhnsGkRIzNaVEceYMR+Bdit73ug=
54-
github.com/cloudquery/plugin-sdk/v3 v3.10.6 h1:KqTsLZ6OA1h8BUMeMcU6BAD6TBW6ojgQaC4zDZMgvu0=
55-
github.com/cloudquery/plugin-sdk/v3 v3.10.6/go.mod h1:QhBaVgiNyQ3P6uAzJWOYpYykHXL+WDZffwg1riTwv60=
54+
github.com/cloudquery/plugin-sdk/v4 v4.7.1-rc1 h1:de3TwdcKEO+bjfPjOvmNfaOBfrIkEOiK8TeS54yj86I=
55+
github.com/cloudquery/plugin-sdk/v4 v4.7.1-rc1/go.mod h1:Y5HzxesZrpmSTUrbvR8EmGCK5wXDAhqSqzNEXC2ouvI=
5656
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
5757
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
5858
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
5959
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
6060
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
61+
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
6162
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
6263
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
6364
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -66,7 +67,6 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
6667
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
6768
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
6869
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
69-
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
7070
github.com/getsentry/sentry-go v0.20.0 h1:bwXW98iMRIWxn+4FgPW7vMrjmbym6HblXALmhjHmQaQ=
7171
github.com/getsentry/sentry-go v0.20.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
7272
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
@@ -158,15 +158,17 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1
158158
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
159159
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
160160
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
161-
github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4=
162-
github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
161+
github.com/klauspost/compress v1.16.6 h1:91SKEy4K37vkp255cJ8QesJhjyRO0hn9i9G0GoUwLsk=
162+
github.com/klauspost/compress v1.16.6/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
163163
github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
164164
github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
165165
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
166166
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
167+
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
167168
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
168169
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
169170
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
171+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
170172
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
171173
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
172174
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
@@ -185,15 +187,14 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
185187
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
186188
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
187189
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
190+
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
188191
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
189192
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
190193
github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
191194
github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo=
192195
github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc=
193196
github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU=
194197
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
195-
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
196-
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
197198
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
198199
github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
199200
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package main
22

33
import (
4+
"context"
5+
"log"
6+
47
"github.com/cloudquery/cloudquery/plugins/source/googleanalytics/resources/plugin"
5-
"github.com/cloudquery/plugin-sdk/v3/serve"
8+
"github.com/cloudquery/plugin-sdk/v4/serve"
69
)
710

811
const sentryDSN = "https://[email protected]/4504792343379968"
912

1013
func main() {
11-
serve.Source(plugin.Plugin(), serve.WithSourceSentryDSN(sentryDSN))
14+
if err := serve.Plugin(plugin.Plugin(), serve.WithPluginSentryDSN(sentryDSN)).Serve(context.Background()); err != nil {
15+
log.Fatal(err)
16+
}
1217
}

0 commit comments

Comments
 (0)