@@ -42,6 +42,7 @@ type Signer interface {
4242
4343type MetricsRecorder interface {
4444 RecordCountMetrics (ctx context.Context , MetricType string )
45+ RecordErrorMetric (ctx context.Context , errType string )
4546}
4647
4748type ObjectSigner struct {
@@ -114,8 +115,8 @@ func getSignableTypes(ctx context.Context, obj objects.TektonObject) ([]artifact
114115 return types , nil
115116}
116117
117- // Signs TaskRun and PipelineRun objects, as well as generates attesations for each
118- // Follows process of extract payload, sign payload, store payload and signature
118+ // Signs TaskRun and PipelineRun objects, as well as generates attestations for each.
119+ // Follows process of extract payload, sign payload, store payload and signature.
119120func (o * ObjectSigner ) Sign (ctx context.Context , tektonObj objects.TektonObject ) error {
120121 cfg := * config .FromContext (ctx )
121122 logger := logging .FromContext (ctx )
@@ -150,6 +151,9 @@ func (o *ObjectSigner) Sign(ctx context.Context, tektonObj objects.TektonObject)
150151 payload , err := payloader .CreatePayload (ctx , obj )
151152 if err != nil {
152153 logger .Error (err )
154+ if (signableType .Type () == "TaskRunArtifact" || signableType .Type () == "PipelineRunArtifact" ) && o .Recorder != nil {
155+ o .Recorder .RecordErrorMetric (ctx , "payload_creation" )
156+ }
153157 continue
154158 }
155159 logger .Infof ("Created payload of type %s for %s %s/%s" , string (payloadFormat ), tektonObj .GetGVK (), tektonObj .GetNamespace (), tektonObj .GetName ())
@@ -174,13 +178,19 @@ func (o *ObjectSigner) Sign(ctx context.Context, tektonObj objects.TektonObject)
174178 logger .Infof ("Signing object with %s" , signerType )
175179 rawPayload , err := getRawPayload (payload )
176180 if err != nil {
177- logger .Warnf ("Unable to marshal payload: %v" , signerType , obj )
181+ logger .Warnf ("Unable to marshal payload for %s: %v" , signerType , err )
182+ if (signableType .Type () == "TaskRunArtifact" || signableType .Type () == "PipelineRunArtifact" ) && o .Recorder != nil {
183+ o .Recorder .RecordErrorMetric (ctx , "marshal_payload" )
184+ }
178185 continue
179186 }
180187
181188 signature , err := signer .SignMessage (bytes .NewReader (rawPayload ))
182189 if err != nil {
183190 logger .Error (err )
191+ if (signableType .Type () == "TaskRunArtifact" || signableType .Type () == "PipelineRunArtifact" ) && o .Recorder != nil {
192+ o .Recorder .RecordErrorMetric (ctx , "signing" )
193+ }
184194 continue
185195 }
186196 measureMetrics (ctx , SignedMessagesCount , o .Recorder )
@@ -191,6 +201,9 @@ func (o *ObjectSigner) Sign(ctx context.Context, tektonObj objects.TektonObject)
191201 if ! ok {
192202 backendErr := fmt .Errorf ("could not find backend '%s' in configured backends (%v) while trying sign: %s/%s" , backend , maps .Keys (o .Backends ), tektonObj .GetKindName (), tektonObj .GetName ())
193203 logger .Error (backendErr )
204+ if (signableType .Type () == "TaskRunArtifact" || signableType .Type () == "PipelineRunArtifact" ) && o .Recorder != nil {
205+ o .Recorder .RecordErrorMetric (ctx , "storage" )
206+ }
194207 merr = multierror .Append (merr , backendErr )
195208 continue
196209 }
@@ -204,6 +217,9 @@ func (o *ObjectSigner) Sign(ctx context.Context, tektonObj objects.TektonObject)
204217 }
205218 if err := b .StorePayload (ctx , tektonObj , rawPayload , string (signature ), storageOpts ); err != nil {
206219 logger .Error (err )
220+ if (signableType .Type () == "TaskRunArtifact" || signableType .Type () == "PipelineRunArtifact" ) && o .Recorder != nil {
221+ o .Recorder .RecordErrorMetric (ctx , "storage" )
222+ }
207223 merr = multierror .Append (merr , err )
208224 } else {
209225 measureMetrics (ctx , SignsStoredCount , o .Recorder )
@@ -219,6 +235,9 @@ func (o *ObjectSigner) Sign(ctx context.Context, tektonObj objects.TektonObject)
219235 entry , err := rekorClient .UploadTlog (ctx , signer , signature , rawPayload , signer .Cert (), string (payloadFormat ))
220236 if err != nil {
221237 logger .Warnf ("error uploading entry to tlog: %v" , err )
238+ if (signableType .Type () == "TaskRunArtifact" || signableType .Type () == "PipelineRunArtifact" ) && o .Recorder != nil {
239+ o .Recorder .RecordErrorMetric (ctx , "tlog" )
240+ }
222241 merr = multierror .Append (merr , err )
223242 } else {
224243 logger .Infof ("Uploaded entry to %s with index %d" , cfg .Transparency .URL , * entry .LogIndex )
@@ -249,7 +268,6 @@ func measureMetrics(ctx context.Context, metrictype string, mtr MetricsRecorder)
249268 if mtr != nil {
250269 mtr .RecordCountMetrics (ctx , metrictype )
251270 }
252-
253271}
254272
255273func HandleRetry (ctx context.Context , obj objects.TektonObject , ps versioned.Interface , annotations map [string ]string ) error {
0 commit comments