github.com/abayer/test-infra@v0.0.5/velodrome/transform/plugins/event_counter.go (about)

     1  /*
     2  Copyright 2017 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package plugins
    18  
    19  import (
    20  	"github.com/spf13/cobra"
    21  	"k8s.io/test-infra/velodrome/sql"
    22  )
    23  
    24  // EventCounterPlugin counts events
    25  type EventCounterPlugin struct {
    26  	matcher EventMatcher
    27  	desc    string
    28  }
    29  
    30  var _ Plugin = &EventCounterPlugin{}
    31  
    32  // AddFlags adds "event" to the command help
    33  func (e *EventCounterPlugin) AddFlags(cmd *cobra.Command) {
    34  	cmd.Flags().StringVar(&e.desc, "event", "", "Match event (eg: `opened`)")
    35  }
    36  
    37  // CheckFlags is delegated to EventMatcher
    38  func (e *EventCounterPlugin) CheckFlags() error {
    39  	e.matcher = NewEventMatcher(e.desc)
    40  	return nil
    41  }
    42  
    43  // ReceiveIssue is needed to implement a Plugin
    44  func (e *EventCounterPlugin) ReceiveIssue(issue sql.Issue) []Point {
    45  	return nil
    46  }
    47  
    48  // ReceiveIssueEvent adds issue events to InfluxDB
    49  func (e *EventCounterPlugin) ReceiveIssueEvent(event sql.IssueEvent) []Point {
    50  	var label string
    51  	if event.Label != nil {
    52  		label = *event.Label
    53  	}
    54  
    55  	if !e.matcher.Match(event.Event, label) {
    56  		return nil
    57  	}
    58  	return []Point{
    59  		{
    60  			Values: map[string]interface{}{"event": 1},
    61  			Date:   event.EventCreatedAt,
    62  		},
    63  	}
    64  }
    65  
    66  // ReceiveComment is needed to implement a Plugin
    67  func (e *EventCounterPlugin) ReceiveComment(comment sql.Comment) []Point {
    68  	return nil
    69  }