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

Side by Side Diff: milo/buildsource/buildbot/grpc.go

Issue 2977863002: [milo] Refactor all html knowledge out of backends. (Closed)
Patch Set: now with case insensitivity Created 3 years, 5 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 unified diff | Download patch
« no previous file with comments | « milo/buildsource/buildbot/datastore.go ('k') | milo/buildsource/buildbot/html.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The LUCI Authors. 1 // Copyright 2016 The LUCI Authors.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 10 matching lines...) Expand all
21 21
22 "golang.org/x/net/context" 22 "golang.org/x/net/context"
23 "google.golang.org/grpc" 23 "google.golang.org/grpc"
24 "google.golang.org/grpc/codes" 24 "google.golang.org/grpc/codes"
25 25
26 "github.com/golang/protobuf/ptypes/timestamp" 26 "github.com/golang/protobuf/ptypes/timestamp"
27 "github.com/luci/gae/service/datastore" 27 "github.com/luci/gae/service/datastore"
28 "github.com/luci/luci-go/common/iotools" 28 "github.com/luci/luci-go/common/iotools"
29 "github.com/luci/luci-go/common/logging" 29 "github.com/luci/luci-go/common/logging"
30 milo "github.com/luci/luci-go/milo/api/proto" 30 milo "github.com/luci/luci-go/milo/api/proto"
31 "github.com/luci/luci-go/milo/common"
31 "github.com/luci/luci-go/server/auth" 32 "github.com/luci/luci-go/server/auth"
32 ) 33 )
33 34
34 // Service is a service implementation that displays BuildBot builds. 35 // Service is a service implementation that displays BuildBot builds.
35 type Service struct{} 36 type Service struct{}
36 37
37 var errNotFoundGRPC = grpc.Errorf(codes.NotFound, "Master Not Found") 38 var errNotFoundGRPC = grpc.Errorf(codes.NotFound, "Master Not Found")
38 39
39 // GetBuildbotBuildJSON implements milo.BuildbotServer. 40 // GetBuildbotBuildJSON implements milo.BuildbotServer.
40 func (s *Service) GetBuildbotBuildJSON(c context.Context, req *milo.BuildbotBuil dRequest) ( 41 func (s *Service) GetBuildbotBuildJSON(c context.Context, req *milo.BuildbotBuil dRequest) (
41 *milo.BuildbotBuildJSON, error) { 42 *milo.BuildbotBuildJSON, error) {
42 43
43 if req.Master == "" { 44 if req.Master == "" {
44 return nil, grpc.Errorf(codes.InvalidArgument, "No master specif ied") 45 return nil, grpc.Errorf(codes.InvalidArgument, "No master specif ied")
45 } 46 }
46 if req.Builder == "" { 47 if req.Builder == "" {
47 return nil, grpc.Errorf(codes.InvalidArgument, "No builder speci fied") 48 return nil, grpc.Errorf(codes.InvalidArgument, "No builder speci fied")
48 } 49 }
49 50
50 cu := auth.CurrentUser(c) 51 cu := auth.CurrentUser(c)
51 logging.Debugf(c, "%s is requesting %s/%s/%d", 52 logging.Debugf(c, "%s is requesting %s/%s/%d",
52 cu.Identity, req.Master, req.Builder, req.BuildNum) 53 cu.Identity, req.Master, req.Builder, req.BuildNum)
53 54
54 b, err := getBuild(c, req.Master, req.Builder, int(req.BuildNum)) 55 b, err := getBuild(c, req.Master, req.Builder, int(req.BuildNum))
55 » switch { 56 » if err != nil {
56 » case err == errBuildNotFound: 57 » » switch common.ErrorTag.In(err) {
57 » » return nil, grpc.Errorf(codes.NotFound, "Build not found") 58 » » case common.CodeNotFound:
58 » case err == errNotAuth: 59 » » » return nil, grpc.Errorf(codes.NotFound, "Build not found ")
59 » » return nil, grpc.Errorf(codes.Unauthenticated, "Unauthenticated request") 60 » » case common.CodeUnauthorized:
60 » case err != nil: 61 » » » return nil, grpc.Errorf(codes.Unauthenticated, "Unauthen ticated request")
61 » » return nil, err 62 » » default:
63 » » » return nil, err
64 » » }
62 } 65 }
63 66
64 updatePostProcessBuild(b) 67 updatePostProcessBuild(b)
65 bs, err := json.Marshal(b) 68 bs, err := json.Marshal(b)
66 if err != nil { 69 if err != nil {
67 return nil, err 70 return nil, err
68 } 71 }
69 72
70 // Marshal the build back into JSON format. 73 // Marshal the build back into JSON format.
71 return &milo.BuildbotBuildJSON{Data: bs}, nil 74 return &milo.BuildbotBuildJSON{Data: bs}, nil
(...skipping 12 matching lines...) Expand all
84 87
85 limit := req.Limit 88 limit := req.Limit
86 if limit == 0 { 89 if limit == 0 {
87 limit = 20 90 limit = 20
88 } 91 }
89 92
90 cu := auth.CurrentUser(c) 93 cu := auth.CurrentUser(c)
91 logging.Debugf(c, "%s is requesting %s/%s (limit %d, cursor %s)", 94 logging.Debugf(c, "%s is requesting %s/%s (limit %d, cursor %s)",
92 cu.Identity, req.Master, req.Builder, limit, req.Cursor) 95 cu.Identity, req.Master, req.Builder, limit, req.Cursor)
93 96
94 » // Perform an ACL check by fetching the master. 97 » if err := canAccessMaster(c, req.Master); err != nil {
95 » _, err := getMasterEntry(c, req.Master) 98 » » switch common.ErrorTag.In(err) {
96 » switch { 99 » » case common.CodeNotFound:
97 » case err == errMasterNotFound: 100 » » » return nil, grpc.Errorf(codes.NotFound, "Master not foun d")
98 » » return nil, grpc.Errorf(codes.NotFound, "Master not found") 101 » » case common.CodeUnauthorized:
99 » case err == errNotAuth: 102 » » » return nil, grpc.Errorf(codes.Unauthenticated, "Unauthen ticated request")
100 » » return nil, grpc.Errorf(codes.Unauthenticated, "Unauthenticated request") 103 » » default:
101 » case err != nil: 104 » » » return nil, err
102 » » return nil, err 105 » » }
103 } 106 }
104 107
105 q := datastore.NewQuery("buildbotBuild") 108 q := datastore.NewQuery("buildbotBuild")
106 q = q.Eq("master", req.Master). 109 q = q.Eq("master", req.Master).
107 Eq("builder", req.Builder). 110 Eq("builder", req.Builder).
108 Limit(limit). 111 Limit(limit).
109 Order("-number") 112 Order("-number")
110 if req.IncludeCurrent == false { 113 if req.IncludeCurrent == false {
111 q = q.Eq("finished", true) 114 q = q.Eq("finished", true)
112 } 115 }
(...skipping 19 matching lines...) Expand all
132 bs, err := json.Marshal(b) 135 bs, err := json.Marshal(b)
133 if err != nil { 136 if err != nil {
134 return nil, err 137 return nil, err
135 } 138 }
136 results[i] = &milo.BuildbotBuildJSON{Data: bs} 139 results[i] = &milo.BuildbotBuildJSON{Data: bs}
137 } 140 }
138 buildsJSON := &milo.BuildbotBuildsJSON{ 141 buildsJSON := &milo.BuildbotBuildsJSON{
139 Builds: results, 142 Builds: results,
140 } 143 }
141 if nextCursor != nil { 144 if nextCursor != nil {
142 » » buildsJSON.Cursor = (*nextCursor).String() 145 » » buildsJSON.Cursor = nextCursor.String()
143 } 146 }
144 return buildsJSON, nil 147 return buildsJSON, nil
145 } 148 }
146 149
147 // GetCompressedMasterJSON assembles a CompressedMasterJSON object from the 150 // GetCompressedMasterJSON assembles a CompressedMasterJSON object from the
148 // provided MasterRequest. 151 // provided MasterRequest.
149 func (s *Service) GetCompressedMasterJSON(c context.Context, req *milo.MasterReq uest) ( 152 func (s *Service) GetCompressedMasterJSON(c context.Context, req *milo.MasterReq uest) (
150 *milo.CompressedMasterJSON, error) { 153 *milo.CompressedMasterJSON, error) {
151 154
152 if req.Name == "" { 155 if req.Name == "" {
153 return nil, grpc.Errorf(codes.InvalidArgument, "No master specif ied") 156 return nil, grpc.Errorf(codes.InvalidArgument, "No master specif ied")
154 } 157 }
155 158
156 cu := auth.CurrentUser(c) 159 cu := auth.CurrentUser(c)
157 logging.Debugf(c, "%s is making a master request for %s", cu.Identity, r eq.Name) 160 logging.Debugf(c, "%s is making a master request for %s", cu.Identity, r eq.Name)
158 161
159 entry, err := getMasterEntry(c, req.Name) 162 entry, err := getMasterEntry(c, req.Name)
160 » switch { 163 » if err != nil {
161 » case err == errMasterNotFound: 164 » » switch common.ErrorTag.In(err) {
162 » » return nil, errNotFoundGRPC 165 » » case common.CodeNotFound:
163 » case err == errNotAuth: 166 » » » return nil, errNotFoundGRPC
164 » » return nil, grpc.Errorf(codes.Unauthenticated, "Unauthenticated request") 167 » » case common.CodeUnauthorized:
165 » case err != nil: 168 » » » return nil, grpc.Errorf(codes.Unauthenticated, "Unauthen ticated request")
166 » » return nil, err 169 » » default:
170 » » » return nil, err
171 » » }
167 } 172 }
173
168 // Decompress it so we can inject current build information. 174 // Decompress it so we can inject current build information.
169 master := &buildbotMaster{} 175 master := &buildbotMaster{}
170 if err = decodeMasterEntry(c, entry, master); err != nil { 176 if err = decodeMasterEntry(c, entry, master); err != nil {
171 return nil, err 177 return nil, err
172 } 178 }
173 for _, slave := range master.Slaves { 179 for _, slave := range master.Slaves {
174 numBuilds := 0 180 numBuilds := 0
175 for _, builds := range slave.RunningbuildsMap { 181 for _, builds := range slave.RunningbuildsMap {
176 numBuilds += len(builds) 182 numBuilds += len(builds)
177 } 183 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 240
235 return &milo.CompressedMasterJSON{ 241 return &milo.CompressedMasterJSON{
236 Internal: entry.Internal, 242 Internal: entry.Internal,
237 Modified: &timestamp.Timestamp{ 243 Modified: &timestamp.Timestamp{
238 Seconds: entry.Modified.Unix(), 244 Seconds: entry.Modified.Unix(),
239 Nanos: int32(entry.Modified.Nanosecond()), 245 Nanos: int32(entry.Modified.Nanosecond()),
240 }, 246 },
241 Data: gzbs.Bytes(), 247 Data: gzbs.Bytes(),
242 }, nil 248 }, nil
243 } 249 }
OLDNEW
« no previous file with comments | « milo/buildsource/buildbot/datastore.go ('k') | milo/buildsource/buildbot/html.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698