func()

in pkg/plugin/plugin.go [144:188]


func (d *CloudTraceDatasource) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error {
	// log.DefaultLogger.Info("CallResource called")

	var body []byte

	// Right now we only support calls to `gceDefaultProject` and `/projects`
	resource := req.Path

	if resource == "gceDefaultProject" {
		proj, err := utils.GCEDefaultProject(ctx, "")
		if err != nil {
			log.DefaultLogger.Warn("problem getting GCE default project", "error", err)
		}
		body, err = json.Marshal(proj)
		if err != nil {
			return sender.Send(&backend.CallResourceResponse{
				Status: http.StatusInternalServerError,
				Body:   []byte(`Unable to create response`),
			})
		}
	} else if strings.ToLower(resource) != "projects" {
		return sender.Send(&backend.CallResourceResponse{
			Status: http.StatusNotFound,
			Body:   []byte(`No such path`),
		})
	} else {
		projects, err := d.client.ListProjects(ctx)
		if err != nil {
			log.DefaultLogger.Warn("problem listing projects", "error", err)
		}

		body, err = json.Marshal(projects)
		if err != nil {
			return sender.Send(&backend.CallResourceResponse{
				Status: http.StatusInternalServerError,
				Body:   []byte(`Unable to create response`),
			})
		}
	}

	return sender.Send(&backend.CallResourceResponse{
		Status: http.StatusOK,
		Body:   body,
	})
}