MCPcopy Index your code
hub / github.com/rilldata/rill / CreateReport

Method CreateReport

admin/server/reports.go:175–233  ·  view source on GitHub ↗
(ctx context.Context, req *adminv1.CreateReportRequest)

Source from the content-addressed store, hash-verified

173}
174
175func (s *Server) CreateReport(ctx context.Context, req *adminv1.CreateReportRequest) (*adminv1.CreateReportResponse, error) {
176 observability.AddRequestAttributes(ctx,
177 attribute.String("args.organization", req.Org),
178 attribute.String("args.project", req.Project),
179 )
180
181 proj, err := s.admin.DB.FindProjectByName(ctx, req.Org, req.Project)
182 if err != nil {
183 return nil, err
184 }
185
186 claims := auth.GetClaims(ctx)
187 permissions := claims.ProjectPermissions(ctx, proj.OrganizationID, proj.ID)
188 if !permissions.CreateReports {
189 return nil, status.Error(codes.PermissionDenied, "does not have permission to read project repo")
190 }
191
192 if claims.OwnerType() != auth.OwnerTypeUser {
193 return nil, status.Error(codes.PermissionDenied, "only users can create reports")
194 }
195
196 if proj.PrimaryDeploymentID == nil {
197 return nil, status.Error(codes.FailedPrecondition, "project does not have a production deployment")
198 }
199
200 depl, err := s.admin.DB.FindDeployment(ctx, *proj.PrimaryDeploymentID)
201 if err != nil {
202 return nil, err
203 }
204
205 name, err := s.generateReportName(ctx, depl, req.Options.DisplayName)
206 if err != nil {
207 return nil, err
208 }
209
210 data, err := s.yamlForManagedReport(req.Options, claims.OwnerID())
211 if err != nil {
212 return nil, status.Errorf(codes.InvalidArgument, "failed to generate report YAML: %s", err.Error())
213 }
214
215 err = s.admin.DB.UpsertVirtualFile(ctx, &database.InsertVirtualFileOptions{
216 ProjectID: proj.ID,
217 Environment: "prod",
218 Path: virtualFilePathForManagedReport(name),
219 Data: data,
220 })
221 if err != nil {
222 return nil, fmt.Errorf("failed to insert virtual file: %w", err)
223 }
224
225 err = s.admin.TriggerParserAndAwaitResource(ctx, depl, name, runtime.ResourceKindReport)
226 if err != nil {
227 return nil, fmt.Errorf("failed to reconcile report: %w", err)
228 }
229
230 return &adminv1.CreateReportResponse{
231 Name: name,
232 }, nil

Callers

nothing calls this directly

Calls 15

generateReportNameMethod · 0.95
yamlForManagedReportMethod · 0.95
AddRequestAttributesFunction · 0.92
GetClaimsFunction · 0.92
StringMethod · 0.65
FindProjectByNameMethod · 0.65
ProjectPermissionsMethod · 0.65
OwnerTypeMethod · 0.65
FindDeploymentMethod · 0.65
OwnerIDMethod · 0.65

Tested by

no test coverage detected