Skip to content

Instantly share code, notes, and snippets.

@judell
Last active November 22, 2022 04:16
Show Gist options
  • Save judell/1b969744a7b0a0c15d393e3c081647c3 to your computer and use it in GitHub Desktop.
Save judell/1b969744a7b0a0c15d393e3c081647c3 to your computer and use it in GitHub Desktop.
deployment-table

new method

func listDeployment(ctx context.Context, d *plugin.QueryData, _ *plugin.HydrateData) (interface{}, error) {
	conn, err := connect(ctx, d)
	if err != nil {
		plugin.Logger(ctx).Error("vercel_deployment.listDeployment", "connection_error", err)
		return nil, err
	}

	req := deployment.ListDeploymentsRequest{Limit: 10}  // how many results per api gulp
	postgresLimit := d.QueryContext.GetLimit()            // the SQL limit
	req.Until = time.Now().UnixMilli()

	if d.Quals["created_at"] != nil {
		for _, q := range d.Quals["created_at"].Quals {

			postgresTimestamp := q.Value.GetTimestampValue().Seconds * 1000
			q.Value.Value = &proto.QualValue_TimestampValue{TimestampValue: &timestamppb.Timestamp{Seconds: postgresTimestamp}}

			switch q.Operator {
			case ">":
				req.Since = postgresTimestamp
			case ">=":
				req.Since = postgresTimestamp
			case "=":
				req.Since = postgresTimestamp
			case "<":
				req.Until = postgresTimestamp
			case "<=":
				req.Until = postgresTimestamp
			}
		}
	}

	total := 0
	for {
		res, err := conn.Deployment.List(req)
		plugin.Logger(ctx).Debug("vercel_deployment.listDeployment outer loop", "prev", res.Pagination.Prev, "next", res.Pagination.Next, "postgresLimit", postgresLimit)
		if err != nil {
			plugin.Logger(ctx).Error("vercel_domain.listDeployment", "query_error", err)
			return nil, err
		}
		for _, i := range res.Deployments {
			d.StreamListItem(ctx, i)
			total += 1
			plugin.Logger(ctx).Debug("vercel_deployment.listDeployment inner loop", "total", total)
			if int64(total) == postgresLimit {
				plugin.Logger(ctx).Debug("vercel_deployment.listDeployment inner loop at postgresLimit, setting res.Pagination.Next to zero")
				res.Pagination.Next = 0
			}
		}
		if res.Pagination.Next == 0 {
			plugin.Logger(ctx).Debug("vercel_deployment.listDeployment outer loop, res.Pagination.Next is zero, breaking out")
			break
		}
		plugin.Logger(ctx).Debug("vercel_deployment.listDeployment outer loop, setting req.Until to res.Pagination.Next and continuing")
		req.Until = res.Pagination.Next
	}

	return nil, nil
}

new method trace

select * from vercel_deployment limit 23

vercel.connect: config="{f12KpUJeoZ67LHiP0dmdXi2F  turbot}"
vercel_deployment.listDeployment outer loop: prev=1669086565685 next=1669048997844 postgresLimit=23
vercel_deployment.listDeployment inner loop: total=1
vercel_deployment.listDeployment inner loop: total=2
vercel_deployment.listDeployment inner loop: total=3
vercel_deployment.listDeployment inner loop: total=4
vercel_deployment.listDeployment inner loop: total=5
vercel_deployment.listDeployment inner loop: total=6
vercel_deployment.listDeployment inner loop: total=7
vercel_deployment.listDeployment inner loop: total=8
vercel_deployment.listDeployment inner loop: total=9
vercel_deployment.listDeployment inner loop: total=10
vercel_deployment.listDeployment outer loop, setting req.Until to res.Pagination.Next and continuing
vercel_deployment.listDeployment outer loop: prev=1669044783703 next=1669019699058 postgresLimit=23
vercel_deployment.listDeployment inner loop: total=11
vercel_deployment.listDeployment inner loop: total=12
vercel_deployment.listDeployment inner loop: total=13
vercel_deployment.listDeployment inner loop: total=14
vercel_deployment.listDeployment inner loop: total=15
vercel_deployment.listDeployment inner loop: total=16
vercel_deployment.listDeployment inner loop: total=17
vercel_deployment.listDeployment inner loop: total=18
vercel_deployment.listDeployment inner loop: total=19
vercel_deployment.listDeployment inner loop: total=20
vercel_deployment.listDeployment outer loop, setting req.Until to res.Pagination.Next and continuing
vercel_deployment.listDeployment outer loop: prev=1669012502845 next=1668789242175 postgresLimit=23
vercel_deployment.listDeployment inner loop: total=21
vercel_deployment.listDeployment inner loop: total=22
vercel_deployment.listDeployment inner loop: total=23
vercel_deployment.listDeployment inner loop at postgresLimit, setting res.Pagination.Next to zero
Plugin Execute complete (1669089358311)
vercel_deployment.listDeployment inner loop: total=24
vercel_deployment.listDeployment inner loop: total=25
vercel_deployment.listDeployment inner loop: total=26
vercel_deployment.listDeployment inner loop: total=27
vercel_deployment.listDeployment inner loop: total=28
vercel_deployment.listDeployment inner loop: total=29
vercel_deployment.listDeployment inner loop: total=30
vercel_deployment.listDeployment outer loop, res.Pagination.Next is zero, breaking out

original method

func listDeployment(ctx context.Context, d *plugin.QueryData, _ *plugin.HydrateData) (interface{}, error) {
	conn, err := connect(ctx, d)
	if err != nil {
		plugin.Logger(ctx).Error("vercel_deployment.listDeployment", "connection_error", err)
		return nil, err
	}

	req := deployment.ListDeploymentsRequest{Limit: 10}  // how many results per api gulp
	//postgresLimit := d.QueryContext.GetLimit()            // the SQL limit
	req.Until = time.Now().UnixMilli()

	if d.Quals["created_at"] != nil {
		for _, q := range d.Quals["created_at"].Quals {

			postgresTimestamp := q.Value.GetTimestampValue().Seconds * 1000
			q.Value.Value = &proto.QualValue_TimestampValue{TimestampValue: &timestamppb.Timestamp{Seconds: postgresTimestamp}}

			switch q.Operator {
			case ">":
				req.Since = postgresTimestamp
			case ">=":
				req.Since = postgresTimestamp
			case "=":
				req.Since = postgresTimestamp
			case "<":
				req.Until = postgresTimestamp
			case "<=":
				req.Until = postgresTimestamp
			}
		}
	}

	count := 0
	for {
		res, err := conn.Deployment.List(req)
		plugin.Logger(ctx).Debug("vercel_project.listProject outer loop", "pagination", res.Pagination)
		if err != nil {
			plugin.Logger(ctx).Error("vercel_domain.listDeployment", "query_error", err)
			return nil, err
		}
		for _, i := range res.Deployments {
			d.StreamListItem(ctx, i)
			count++
			plugin.Logger(ctx).Debug("vercel_list_deployment inner loop", "count", count)
		}
		if res.Pagination.Next == 0 {
			plugin.Logger(ctx).Debug("vercel_project.listProject outer loop res.Pagination.Next is zero, breaking out")
			break
		}
		plugin.Logger(ctx).Debug("vercel_project.listProject outer loop setting req.Until to res.Pagination.Next and continuing")
		req.Until = res.Pagination.Next
	}

	return nil, nil
}

original method trace

select * from vercel_deployment limit 23

vercel_project.listProject outer loop: pagination="{10 1669048997844 1669086565685}"
vercel_list_deployment inner loop: count=1
vercel_list_deployment inner loop: count=2
vercel_list_deployment inner loop: count=3
vercel_list_deployment inner loop: count=4
vercel_list_deployment inner loop: count=5
vercel_list_deployment inner loop: count=6
vercel_list_deployment inner loop: count=7
vercel_list_deployment inner loop: count=8
vercel_list_deployment inner loop: count=9
vercel_list_deployment inner loop: count=10
vercel_project.listProject outer loop setting req.Until to res.Pagination.Next and continuing
vercel_project.listProject outer loop: pagination="{10 1669019699058 1669044783703}"
vercel_list_deployment inner loop: count=11
vercel_list_deployment inner loop: count=12
vercel_list_deployment inner loop: count=13
vercel_list_deployment inner loop: count=14
vercel_list_deployment inner loop: count=15
vercel_list_deployment inner loop: count=16
vercel_list_deployment inner loop: count=17
vercel_list_deployment inner loop: count=18
vercel_list_deployment inner loop: count=19
vercel_list_deployment inner loop: count=20
vercel_project.listProject outer loop setting req.Until to res.Pagination.Next and continuing
vercel_project.listProject outer loop: pagination="{10 1668789242175 1669012502845}"
vercel_list_deployment inner loop: count=21
vercel_list_deployment inner loop: count=22
vercel_list_deployment inner loop: count=23
Plugin Execute complete (1669088751882)
vercel_list_deployment inner loop: count=24
vercel_list_deployment inner loop: count=25
vercel_list_deployment inner loop: count=26
vercel_list_deployment inner loop: count=27
vercel_list_deployment inner loop: count=28
vercel_list_deployment inner loop: count=29
vercel_list_deployment inner loop: count=30
vercel_project.listProject outer loop setting req.Until to res.Pagination.Next and continuing

...

vercel_project.listProject outer loop setting req.Until to res.Pagination.Next and continuing
vercel_project.listProject outer loop: pagination="{10 1617955905229 1617977412320}"
vercel_list_deployment inner loop: count=12471
vercel_list_deployment inner loop: count=12472
vercel_list_deployment inner loop: count=12473
vercel_list_deployment inner loop: count=12474
vercel_list_deployment inner loop: count=12475
vercel_list_deployment inner loop: count=12476
vercel_list_deployment inner loop: count=12477
vercel_list_deployment inner loop: count=12478
vercel_list_deployment inner loop: count=12479
vercel_list_deployment inner loop: count=12480
vercel_project.listProject outer loop setting req.Until to res.Pagination.Next and continuing

It ends here without ever reporting "res.Pagination.Next is zero, breaking out" -- because it never is zero. I don't understand why it stops at all.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment