go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/provenance/client/client.go (about) 1 // Copyright 2022 The LUCI Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (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 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package client 16 17 import ( 18 "context" 19 "fmt" 20 "net/url" 21 "time" 22 23 "google.golang.org/grpc" 24 "google.golang.org/grpc/credentials/insecure" 25 "google.golang.org/protobuf/types/known/emptypb" 26 27 snooperpb "go.chromium.org/luci/provenance/api/snooperpb/v1" 28 ) 29 30 // Default timeout for RPC calls to Spike 31 var timeout = 10 * time.Second 32 33 var _ snooperpb.SelfReportClient = (*client)(nil) 34 35 type client struct { 36 client snooperpb.SelfReportClient 37 } 38 39 // MakeProvenanceClient creates a client to interact with Self-report server. 40 func MakeProvenanceClient(ctx context.Context, addr string) (*client, error) { 41 parsedAddr, err := url.Parse(addr) 42 if err != nil { 43 return nil, fmt.Errorf("invalid server address, got: %s, err: %v", addr, err) 44 } 45 46 if parsedAddr.Scheme != "http" { 47 return nil, fmt.Errorf("invalid address url, expecting http, got: %v", parsedAddr.Scheme) 48 } 49 50 ctx, cancel := context.WithTimeout(ctx, timeout) 51 defer cancel() 52 53 conn, err := grpc.DialContext(ctx, parsedAddr.Host, grpc.WithTransportCredentials(insecure.NewCredentials())) 54 if err != nil { 55 return nil, fmt.Errorf("failed to open grpc conn: %v", err) 56 } 57 58 return &client{ 59 client: snooperpb.NewSelfReportClient(conn), 60 }, nil 61 } 62 63 // ReportCipd reports cipd package via provenance local server. 64 func (c *client) ReportCipd(ctx context.Context, in *snooperpb.ReportCipdRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { 65 ctx, cancel := context.WithTimeout(ctx, timeout) 66 defer cancel() 67 return c.client.ReportCipd(ctx, in, opts...) 68 } 69 70 // ReportGit reports git checkout via provenance local server. 71 func (c *client) ReportGit(ctx context.Context, in *snooperpb.ReportGitRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { 72 ctx, cancel := context.WithTimeout(ctx, timeout) 73 defer cancel() 74 return c.client.ReportGit(ctx, in, opts...) 75 } 76 77 // ReportGit reports gcs download via provenance local server. 78 func (c *client) ReportGcs(ctx context.Context, in *snooperpb.ReportGcsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { 79 ctx, cancel := context.WithTimeout(ctx, timeout) 80 defer cancel() 81 return c.client.ReportGcs(ctx, in, opts...) 82 } 83 84 // ReportTaskStage reports task stage via provenance local server. 85 func (c *client) ReportTaskStage(ctx context.Context, in *snooperpb.ReportTaskStageRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { 86 ctx, cancel := context.WithTimeout(ctx, timeout) 87 defer cancel() 88 return c.client.ReportTaskStage(ctx, in, opts...) 89 } 90 91 // ReportPID reports task pid via provenance local server. 92 func (c *client) ReportPID(ctx context.Context, in *snooperpb.ReportPIDRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { 93 ctx, cancel := context.WithTimeout(ctx, timeout) 94 defer cancel() 95 return c.client.ReportPID(ctx, in, opts...) 96 } 97 98 // ReportArtifactDigest reports artifact digest via provenance local server. 99 func (c *client) ReportArtifactDigest(ctx context.Context, in *snooperpb.ReportArtifactDigestRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { 100 ctx, cancel := context.WithTimeout(ctx, timeout) 101 defer cancel() 102 return c.client.ReportArtifactDigest(ctx, in, opts...) 103 }