Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(686)

Unified Diff: scheduler/appengine/apiservers/scheduler.go

Issue 2945843002: scheduler WIP: add GetAllJobs api. (Closed)
Patch Set: update test Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: scheduler/appengine/apiservers/scheduler.go
diff --git a/scheduler/appengine/apiservers/scheduler.go b/scheduler/appengine/apiservers/scheduler.go
index 114d7cf115f825909c66d9d3fa8f6f5ab756d69a..97b58efd34ee22e7000ec9149509538016cd2bc7 100644
--- a/scheduler/appengine/apiservers/scheduler.go
+++ b/scheduler/appengine/apiservers/scheduler.go
@@ -5,9 +5,15 @@
package apiservers
import (
+ "github.com/luci/luci-go/common/logging"
"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"
+ "github.com/luci/luci-go/scheduler/appengine/task"
+ "golang.org/x/net/context"
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/codes"
)
// SchedulerServer implements scheduler.Scheduler API.
@@ -17,3 +23,46 @@ 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 {
+ jobs[i] = &scheduler.Job{
+ Id: ej.JobID,
+ Project: ej.ProjectID,
+ Schedule: ej.Schedule,
+ State: &scheduler.JobState{
+ UiStatus: string(presentation.GetPublicStateKind(ej, s.getTaskTraits(ctx, ej))),
+ },
+ }
+ }
+ return &scheduler.JobsReply{Jobs: jobs}, nil
+}
+
+////
+
+func (s SchedulerServer) getTaskTraits(ctx context.Context, j *engine.Job) task.Traits {
Vadim Sh. 2017/06/20 17:48:54 I think this should be moved somewhere else, so it
tandrii(chromium) 2017/06/20 19:48:36 Done.
+ var manager task.Manager
+ taskDef, err := s.Catalog.UnmarshalTask(j.Task)
+ if err != nil {
+ logging.WithError(err).Warningf(ctx, "Failed to unmarshal task proto for %s", j.JobID)
+ } else {
+ manager = s.Catalog.GetTaskManager(taskDef)
+ }
+ if manager != nil {
+ return manager.Traits()
+ }
+ return task.Traits{}
+}

Powered by Google App Engine
This is Rietveld 408576698