)]}'
{"cloud/apigw/server/server.go":[{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"435ca33e9e8441a8f5d878a401aaa647304fe0cf","unresolved":true,"context_lines":[{"line_number":6,"context_line":"\t\"net\""},{"line_number":7,"context_line":"\t\"net/http\""},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"\t\"github.com/golang/glog\""},{"line_number":10,"context_line":"\t\"github.com/improbable-eng/grpc-web/go/grpcweb\""},{"line_number":11,"context_line":"\t\"google.golang.org/grpc\""},{"line_number":12,"context_line":"\t\"google.golang.org/grpc/codes\""}],"source_content_type":"text/x-go","patch_set":2,"id":"341e993b_288cf8a4","line":9,"range":{"start_line":9,"start_character":2,"end_line":9,"end_character":24},"updated":"2022-09-13 13:32:58.000000000","message":"Having used glog before, I\u0027d be very much in favor of using klogv2 instead: https://github.com/kubernetes/klog","commit_id":"92b64949dbbc9ada9f3972b7d9ee116ea05998a8"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1b5e87e3a807082e924d0b9c6053b3650eec01f4","unresolved":false,"context_lines":[{"line_number":6,"context_line":"\t\"net\""},{"line_number":7,"context_line":"\t\"net/http\""},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"\t\"github.com/golang/glog\""},{"line_number":10,"context_line":"\t\"github.com/improbable-eng/grpc-web/go/grpcweb\""},{"line_number":11,"context_line":"\t\"google.golang.org/grpc\""},{"line_number":12,"context_line":"\t\"google.golang.org/grpc/codes\""}],"source_content_type":"text/x-go","patch_set":2,"id":"9882d89f_6664c73a","line":9,"range":{"start_line":9,"start_character":2,"end_line":9,"end_character":24},"in_reply_to":"341e993b_288cf8a4","updated":"2022-09-14 11:37:15.000000000","message":"Done","commit_id":"92b64949dbbc9ada9f3972b7d9ee116ea05998a8"},{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"435ca33e9e8441a8f5d878a401aaa647304fe0cf","unresolved":true,"context_lines":[{"line_number":26,"context_line":"\tPublicListenAddress string"},{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"// ConfigureFlags configures the server from flags. This must be called exactly"},{"line_number":30,"context_line":"// once before then calling flags.Parse()."},{"line_number":31,"context_line":"func (c *Config) ConfigureFlags() {"},{"line_number":32,"context_line":"\tc.Configuration.ConfigureFlags(\"apigw\")"}],"source_content_type":"text/x-go","patch_set":2,"id":"77d52301_d94d5f18","line":29,"range":{"start_line":29,"start_character":3,"end_line":29,"end_character":50},"updated":"2022-09-13 13:32:58.000000000","message":"nit: it doesn\u0027t really configure the server, or does it? It registers the flags.","commit_id":"92b64949dbbc9ada9f3972b7d9ee116ea05998a8"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1b5e87e3a807082e924d0b9c6053b3650eec01f4","unresolved":false,"context_lines":[{"line_number":26,"context_line":"\tPublicListenAddress string"},{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"// ConfigureFlags configures the server from flags. This must be called exactly"},{"line_number":30,"context_line":"// once before then calling flags.Parse()."},{"line_number":31,"context_line":"func (c *Config) ConfigureFlags() {"},{"line_number":32,"context_line":"\tc.Configuration.ConfigureFlags(\"apigw\")"}],"source_content_type":"text/x-go","patch_set":2,"id":"09d48c9c_52490052","line":29,"range":{"start_line":29,"start_character":3,"end_line":29,"end_character":50},"in_reply_to":"77d52301_d94d5f18","updated":"2022-09-14 11:37:15.000000000","message":"Done","commit_id":"92b64949dbbc9ada9f3972b7d9ee116ea05998a8"},{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"435ca33e9e8441a8f5d878a401aaa647304fe0cf","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\t// ListenGRPC will contain the address at which the internal gRPC server is"},{"line_number":44,"context_line":"\t// listening after .Start() has been called. This can differ from the configured"},{"line_number":45,"context_line":"\t// value if the configuration requests any port (via :0)."},{"line_number":46,"context_line":"\tListenGRPC string"},{"line_number":47,"context_line":"\t// ListenPublic will contain the address at which the public API server is"},{"line_number":48,"context_line":"\t// listening after .Start() has been called. This can differ from the configured"},{"line_number":49,"context_line":"\t// value if the configuration requests any port (via :0)."}],"source_content_type":"text/x-go","patch_set":2,"id":"be9d3fd6_0d3a3982","line":46,"range":{"start_line":46,"start_character":1,"end_line":46,"end_character":11},"updated":"2022-09-13 13:32:58.000000000","message":"nit: ListenGRPC reads like a method to me - I\u0027d go with \"ListenGRPCAddr\". But no strong opinion either way.","commit_id":"92b64949dbbc9ada9f3972b7d9ee116ea05998a8"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0d0355413ae591fede5de043b55a5d506fde8132","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\t// ListenGRPC will contain the address at which the internal gRPC server is"},{"line_number":44,"context_line":"\t// listening after .Start() has been called. This can differ from the configured"},{"line_number":45,"context_line":"\t// value if the configuration requests any port (via :0)."},{"line_number":46,"context_line":"\tListenGRPC string"},{"line_number":47,"context_line":"\t// ListenPublic will contain the address at which the public API server is"},{"line_number":48,"context_line":"\t// listening after .Start() has been called. This can differ from the configured"},{"line_number":49,"context_line":"\t// value if the configuration requests any port (via :0)."}],"source_content_type":"text/x-go","patch_set":2,"id":"23ccedec_0cb5ffa5","line":46,"range":{"start_line":46,"start_character":1,"end_line":46,"end_character":11},"in_reply_to":"be9d3fd6_0d3a3982","updated":"2022-09-14 11:45:06.000000000","message":"I\u0027ll update that in a followup CR.","commit_id":"92b64949dbbc9ada9f3972b7d9ee116ea05998a8"}],"cloud/apigw/server/server_test.go":[{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"435ca33e9e8441a8f5d878a401aaa647304fe0cf","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"\t// Craft a gRPC-Web request from scratch. There doesn\u0027t seem to be a"},{"line_number":36,"context_line":"\t// well-supported library to do this."},{"line_number":37,"context_line":"\t//"},{"line_number":38,"context_line":"\t// TODO(q3k): cobble together a library to do gRPC-Web requests."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"\t// The request is \\0 ++ uint32be(len(req)) ++ req."},{"line_number":41,"context_line":"\tmsgBytes, err :\u003d proto.Marshal(\u0026apb.WhoAmIRequest{})"}],"source_content_type":"text/x-go","patch_set":2,"id":"50bf539e_0a90f324","line":38,"range":{"start_line":37,"start_character":4,"end_line":38,"end_character":66},"updated":"2022-09-13 13:32:58.000000000","message":"I\u0027d argue this simple test is actually fine: it makes sense to test whether gRPC-Web works at all, there wouldn\u0027t be much of a point to test anything beyond that.\n\nPlus, we\u0027ll end up testing the API surface via whatever end-to-end tests will be in place for the frontend.","commit_id":"92b64949dbbc9ada9f3972b7d9ee116ea05998a8"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1b5e87e3a807082e924d0b9c6053b3650eec01f4","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"\t// Craft a gRPC-Web request from scratch. There doesn\u0027t seem to be a"},{"line_number":36,"context_line":"\t// well-supported library to do this."},{"line_number":37,"context_line":"\t//"},{"line_number":38,"context_line":"\t// TODO(q3k): cobble together a library to do gRPC-Web requests."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"\t// The request is \\0 ++ uint32be(len(req)) ++ req."},{"line_number":41,"context_line":"\tmsgBytes, err :\u003d proto.Marshal(\u0026apb.WhoAmIRequest{})"}],"source_content_type":"text/x-go","patch_set":2,"id":"54f3439d_b6bf561f","line":38,"range":{"start_line":37,"start_character":4,"end_line":38,"end_character":66},"in_reply_to":"50bf539e_0a90f324","updated":"2022-09-14 11:37:15.000000000","message":"Yeah, Lorenz also convinced me that we can just fire tests aganst the public non-Web gRPC listener, which i\u0027ll also add soon.","commit_id":"92b64949dbbc9ada9f3972b7d9ee116ea05998a8"}]}
