func()

in pkg/plugin/plugin.go [143:223]


func (d *CloudLoggingDatasource) 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 the following:
	//`/gceDefaultProject`
	//`/projects`
	//`/logBuckets`
	//`/logViews`
	resource := strings.ToLower(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 resource == "projects" {
		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`),
			})
		}
	} else if resource == "logbuckets" {
		reqUrl, _ := url.Parse(req.URL)
		params, _ := url.ParseQuery(reqUrl.RawQuery)

		bucketNames, err := d.client.ListProjectBuckets(ctx, params.Get("ProjectId"))
		if err != nil {
			log.DefaultLogger.Warn("problem listing log buckets", "error", err)
		}

		body, err = json.Marshal(bucketNames)
		if err != nil {
			return sender.Send(&backend.CallResourceResponse{
				Status: http.StatusInternalServerError,
				Body:   []byte(`Unable to create response`),
			})
		}
	} else if resource == "logviews" {
		reqUrl, _ := url.Parse(req.URL)
		params, _ := url.ParseQuery(reqUrl.RawQuery)

		views, err := d.client.ListProjectBucketViews(ctx, params.Get("ProjectId"), params.Get("BucketId"))
		if err != nil {
			log.DefaultLogger.Warn("problem listing log views", "error", err)
		}

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

}