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,
})
}