| Index: scheduler/appengine/apiservers/scheduler.go
|
| diff --git a/scheduler/appengine/apiservers/scheduler.go b/scheduler/appengine/apiservers/scheduler.go
|
| index 114d7cf115f825909c66d9d3fa8f6f5ab756d69a..02e1e9b0ce1224cc538a8f800abafca73de64c10 100644
|
| --- a/scheduler/appengine/apiservers/scheduler.go
|
| +++ b/scheduler/appengine/apiservers/scheduler.go
|
| @@ -8,6 +8,10 @@ import (
|
| "github.com/luci/luci-go/scheduler/api/scheduler/v1"
|
| "github.com/luci/luci-go/scheduler/appengine/catalog"
|
| "github.com/luci/luci-go/scheduler/appengine/engine"
|
| + "github.com/luci/luci-go/scheduler/appengine/presentation"
|
| + "golang.org/x/net/context"
|
| + "google.golang.org/grpc"
|
| + "google.golang.org/grpc/codes"
|
| )
|
|
|
| // SchedulerServer implements scheduler.Scheduler API.
|
| @@ -17,3 +21,34 @@ type SchedulerServer struct {
|
| }
|
|
|
| var _ scheduler.SchedulerServer = (*SchedulerServer)(nil)
|
| +
|
| +// GetJobs fetches all jobs satisfying JobsRequest and visibility ACLs.
|
| +func (s SchedulerServer) GetJobs(ctx context.Context, in *scheduler.JobsRequest) (*scheduler.JobsReply, error) {
|
| + var ejobs []*engine.Job
|
| + var err error
|
| + if in.GetProject() == "" {
|
| + ejobs, err = s.Engine.GetAllJobs(ctx)
|
| + } else {
|
| + ejobs, err = s.Engine.GetProjectJobs(ctx, in.GetProject())
|
| + }
|
| + if err != nil {
|
| + return nil, grpc.Errorf(codes.Internal, "datastore error: %s", err)
|
| + }
|
| +
|
| + jobs := make([]*scheduler.Job, len(ejobs))
|
| + for i, ej := range ejobs {
|
| + traits, err := presentation.GetJobTraits(ctx, s.Catalog, ej)
|
| + if err != nil {
|
| + return nil, grpc.Errorf(codes.Internal, "failed to get traits: %s", err)
|
| + }
|
| + jobs[i] = &scheduler.Job{
|
| + Id: ej.JobID,
|
| + Project: ej.ProjectID,
|
| + Schedule: ej.Schedule,
|
| + State: &scheduler.JobState{
|
| + UiStatus: string(presentation.GetPublicStateKind(ej, traits)),
|
| + },
|
| + }
|
| + }
|
| + return &scheduler.JobsReply{Jobs: jobs}, nil
|
| +}
|
|
|