First commit for ghwebhooks service plugin

This commit is contained in:
Jack Zampolin 2016-01-19 23:14:11 -08:00
parent d3a5cca1bc
commit 8bdcd6d576
2 changed files with 1122 additions and 0 deletions

View File

@ -0,0 +1,369 @@
package ghwebhooks
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
"sync"
"time"
log "github.com/Sirupsen/logrus"
"github.com/gorilla/mux"
mod "github.com/influxdata/support-tools/ghWebhooks/models"
"github.com/influxdata/telegraf/plugins/inputs"
)
func init() {
log.Info("Starting ghWebhook server...")
logFile, err := os.Create("server.log")
if err != nil {
log.WithFields(log.Fields{
"time": time.Now(),
"error": err,
}).Warn("Error in creating log file")
}
log.SetLevel(log.InfoLevel)
log.SetOutput(logFile)
inputs.Add("ghwebhooks", func() inputs.Input { return &GHWebhooks{} })
}
type GHWebhooks struct {
ServiceAddress string
MeasurementName string
sync.Mutex
// Channel for all incoming events from github
in chan mod.Event
done chan struct{}
}
func (gh *GHWebhooks) SampleConfig() string {
return `
# Address and port to host Webhook listener on
service_address = ":1618"
# Measurement name
measurement_name = "ghWebhooks"
`
}
func (gh *GHWebhooks) Description() string {
return "Github Webhook Event collector"
}
// Writes the points from <-gh.in to the Accumulator
func (gh *GHWebhooks) Gather(acc inputs.Accumulator) error {
gh.Lock()
defer gh.Unlock()
for {
select {
case <-gh.done:
return nil
case e := <-gh.in:
p := e.NewPoint()
acc.Add(gh.MeasurementName, p.Fields(), p.Tags(), p.Time())
}
}
return nil
}
func (gh *GHWebhooks) Start() error {
gh.Lock()
defer gh.Unlock()
for {
select {
case <-gh.done:
return nil
default:
r := mux.NewRouter()
r.HandleFunc("/webhooks", gh.webhookHandler).Methods("POST")
http.ListenAndServe(fmt.Sprintf(":%s", gh.ServiceAddress), r)
}
}
}
func (gh *GHWebhooks) Stop() {
gh.Lock()
defer gh.Unlock()
log.Println("Stopping the ghWebhooks service")
close(gh.done)
close(gh.in)
}
// Handles the /webhooks route
func (gh *GHWebhooks) webhookHandler(w http.ResponseWriter, r *http.Request) {
eventType := r.Header["X-Github-Event"][0]
data, err := ioutil.ReadAll(r.Body)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": eventType, "error": err}
log.WithFields(fields).Fatal("Error reading Github payload")
}
// Send event down chan to GHWebhooks
e := NewEvent(data, eventType)
gh.in <- e
fmt.Printf("%v\n", e.NewPoint())
w.WriteHeader(http.StatusOK)
}
func newCommitComment(data []byte) mod.Event {
commitCommentStruct := mod.CommitCommentEvent{}
err := json.Unmarshal(data, &commitCommentStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "CommitCommentEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return commitCommentStruct
}
func newCreate(data []byte) mod.Event {
createStruct := mod.CreateEvent{}
err := json.Unmarshal(data, &createStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "CreateEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return createStruct
}
func newDelete(data []byte) mod.Event {
deleteStruct := mod.DeleteEvent{}
err := json.Unmarshal(data, &deleteStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "DeleteEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return deleteStruct
}
func newDeployment(data []byte) mod.Event {
deploymentStruct := mod.DeploymentEvent{}
err := json.Unmarshal(data, &deploymentStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "DeploymentEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return deploymentStruct
}
func newDeploymentStatus(data []byte) mod.Event {
deploymentStatusStruct := mod.DeploymentStatusEvent{}
err := json.Unmarshal(data, &deploymentStatusStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "DeploymentStatusEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return deploymentStatusStruct
}
func newFork(data []byte) mod.Event {
forkStruct := mod.ForkEvent{}
err := json.Unmarshal(data, &forkStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "ForkEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return forkStruct
}
func newGollum(data []byte) mod.Event {
gollumStruct := mod.GollumEvent{}
err := json.Unmarshal(data, &gollumStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "GollumEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return gollumStruct
}
func newIssueComment(data []byte) mod.Event {
issueCommentStruct := mod.IssueCommentEvent{}
err := json.Unmarshal(data, &issueCommentStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "IssueCommentEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return issueCommentStruct
}
func newIssues(data []byte) mod.Event {
issuesStruct := mod.IssuesEvent{}
err := json.Unmarshal(data, &issuesStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "IssuesEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return issuesStruct
}
func newMember(data []byte) mod.Event {
memberStruct := mod.MemberEvent{}
err := json.Unmarshal(data, &memberStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "MemberEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return memberStruct
}
func newMembership(data []byte) mod.Event {
membershipStruct := mod.MembershipEvent{}
err := json.Unmarshal(data, &membershipStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "MembershipEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return membershipStruct
}
func newPageBuild(data []byte) mod.Event {
pageBuildEvent := mod.PageBuildEvent{}
err := json.Unmarshal(data, &pageBuildEvent)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "PageBuildEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return pageBuildEvent
}
func newPublic(data []byte) mod.Event {
publicEvent := mod.PublicEvent{}
err := json.Unmarshal(data, &publicEvent)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "PublicEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return publicEvent
}
func newPullRequest(data []byte) mod.Event {
pullRequestStruct := mod.PullRequestEvent{}
err := json.Unmarshal(data, &pullRequestStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "PullRequestEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return pullRequestStruct
}
func newPullRequestReviewComment(data []byte) mod.Event {
pullRequestReviewCommentStruct := mod.PullRequestReviewCommentEvent{}
err := json.Unmarshal(data, &pullRequestReviewCommentStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "PullRequestReviewCommentEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return pullRequestReviewCommentStruct
}
func newPush(data []byte) mod.Event {
pushStruct := mod.PushEvent{}
err := json.Unmarshal(data, &pushStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "PushEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return pushStruct
}
func newRelease(data []byte) mod.Event {
releaseStruct := mod.ReleaseEvent{}
err := json.Unmarshal(data, &releaseStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "ReleaseEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return releaseStruct
}
func newRepository(data []byte) mod.Event {
repositoryStruct := mod.RepositoryEvent{}
err := json.Unmarshal(data, &repositoryStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "RepositoryEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return repositoryStruct
}
func newStatus(data []byte) mod.Event {
statusStruct := mod.StatusEvent{}
err := json.Unmarshal(data, &statusStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "StatusEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return statusStruct
}
func newTeamAdd(data []byte) mod.Event {
teamAddStruct := mod.TeamAddEvent{}
err := json.Unmarshal(data, &teamAddStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "TeamAddEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return teamAddStruct
}
func newWatch(data []byte) mod.Event {
watchStruct := mod.WatchEvent{}
err := json.Unmarshal(data, &watchStruct)
if err != nil {
fields := log.Fields{"time": time.Now(), "event": "WatchEvent", "error": err}
log.WithFields(fields).Fatalf("Error in unmarshaling JSON")
}
return watchStruct
}
func NewEvent(r []byte, t string) mod.Event {
log.WithFields(log.Fields{"event": t, "time": time.Now()}).Info("Event Recieved")
switch t {
case "commit_comment":
return newCommitComment(r)
case "create":
return newCreate(r)
case "delete":
return newDelete(r)
case "deployment":
return newDeployment(r)
case "deployment_status":
return newDeploymentStatus(r)
case "fork":
return newFork(r)
case "gollum":
return newGollum(r)
case "issue_comment":
return newIssueComment(r)
case "issues":
return newIssues(r)
case "member":
return newMember(r)
case "membership":
return newMembership(r)
case "page_build":
return newPageBuild(r)
case "public":
return newPublic(r)
case "pull_request":
return newPullRequest(r)
case "pull_request_review_comment":
return newPullRequestReviewComment(r)
case "push":
return newPush(r)
case "release":
return newRelease(r)
case "repository":
return newRepository(r)
case "status":
return newStatus(r)
case "team_add":
return newTeamAdd(r)
case "watch":
return newWatch(r)
}
return nil
}

View File

@ -0,0 +1,753 @@
package models
import (
"fmt"
"time"
log "github.com/Sirupsen/logrus"
"github.com/influxdata/influxdb/client/v2"
)
const Measurement = "ghWebhooks"
type Event interface {
NewPoint() *client.Point
}
type Repository struct {
Repository string `json:"full_name"`
Private bool `json:"private"`
Stars int `json:"stargazers_count"`
Forks int `json:"forks_count"`
Issues int `json:"open_issues_count"`
}
type Sender struct {
User string `json:"login"`
Admin bool `json:"site_admin"`
}
type CommitComment struct {
Commit string `json:"commit_id"`
Body string `json:"body"`
}
type Deployment struct {
Commit string `json:"sha"`
Task string `json:"task"`
Environment string `json:"environment"`
Description string `json:"description"`
}
type Page struct {
Name string `json:"page_name"`
Title string `json:"title"`
Action string `json:"action"`
}
type Issue struct {
Number int `json:"number"`
Title string `json:"title"`
Comments int `json:"comments"`
}
type IssueComment struct {
Body string `json:"body"`
}
type Team struct {
Name string `json:"name"`
}
type PullRequest struct {
Number int `json:"number"`
State string `json:"state"`
Title string `json:"title"`
Comments int `json:"comments"`
Commits int `json:"commits"`
Additions int `json:"additions"`
Deletions int `json:"deletions"`
ChangedFiles int `json:"changed_files"`
}
type PullRequestReviewComment struct {
File string `json:"path"`
Comment string `json:"body"`
}
type Release struct {
TagName string `json:"tag_name"`
}
type DeploymentStatus struct {
State string `json:"state"`
Description string `json:"description"`
}
type CommitCommentEvent struct {
Comment CommitComment `json:"comment"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s CommitCommentEvent) NewPoint() *client.Point {
event := "commit_comment"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"commit": s.Comment.Commit,
"comment": s.Comment.Body,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type CreateEvent struct {
Ref string `json:"ref"`
RefType string `json:"ref_type"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s CreateEvent) NewPoint() *client.Point {
event := "create"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"ref": s.Ref,
"refType": s.RefType,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type DeleteEvent struct {
Ref string `json:"ref"`
RefType string `json:"ref_type"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s DeleteEvent) NewPoint() *client.Point {
event := "delete"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"ref": s.Ref,
"refType": s.RefType,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type DeploymentEvent struct {
Deployment Deployment `json:"deployment"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s DeploymentEvent) NewPoint() *client.Point {
event := "deployment"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"commit": s.Deployment.Commit,
"task": s.Deployment.Task,
"environment": s.Deployment.Environment,
"description": s.Deployment.Description,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type DeploymentStatusEvent struct {
Deployment Deployment `json:"deployment"`
DeploymentStatus DeploymentStatus `json:"deployment_status"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s DeploymentStatusEvent) NewPoint() *client.Point {
event := "delete"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"commit": s.Deployment.Commit,
"task": s.Deployment.Task,
"environment": s.Deployment.Environment,
"description": s.Deployment.Description,
"depState": s.DeploymentStatus.State,
"depDescription": s.DeploymentStatus.Description,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type ForkEvent struct {
Forkee Repository `json:"forkee"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s ForkEvent) NewPoint() *client.Point {
event := "fork"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"fork": s.Forkee.Repository,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type GollumEvent struct {
Pages []Page `json:"pages"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
// REVIEW: Going to be lazy and not deal with the pages.
func (s GollumEvent) NewPoint() *client.Point {
event := "gollum"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type IssueCommentEvent struct {
Issue Issue `json:"issue"`
Comment IssueComment `json:"comment"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s IssueCommentEvent) NewPoint() *client.Point {
event := "issue_comment"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
"issue": fmt.Sprintf("%v", s.Issue.Number),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"title": s.Issue.Title,
"comments": s.Issue.Comments,
"body": s.Comment.Body,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type IssuesEvent struct {
Action string `json:"action"`
Issue Issue `json:"issue"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s IssuesEvent) NewPoint() *client.Point {
event := "issue"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
"issue": fmt.Sprintf("%v", s.Issue.Number),
"action": s.Action,
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"title": s.Issue.Title,
"comments": s.Issue.Comments,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type MemberEvent struct {
Member Sender `json:"member"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s MemberEvent) NewPoint() *client.Point {
event := "member"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"newMember": s.Member.User,
"newMemberStatus": s.Member.Admin,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type MembershipEvent struct {
Action string `json:"action"`
Member Sender `json:"member"`
Sender Sender `json:"sender"`
Team Team `json:"team"`
}
func (s MembershipEvent) NewPoint() *client.Point {
event := "membership"
t := map[string]string{
"event": event,
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
"action": s.Action,
}
f := map[string]interface{}{
"newMember": s.Member.User,
"newMemberStatus": s.Member.Admin,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type PageBuildEvent struct {
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s PageBuildEvent) NewPoint() *client.Point {
event := "page_build"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type PublicEvent struct {
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s PublicEvent) NewPoint() *client.Point {
event := "public"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type PullRequestEvent struct {
Action string `json:"action"`
PullRequest PullRequest `json:"pull_request"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s PullRequestEvent) NewPoint() *client.Point {
event := "pull_request"
t := map[string]string{
"event": event,
"action": s.Action,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
"prNumber": fmt.Sprintf("%v", s.PullRequest.Number),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"state": s.PullRequest.State,
"title": s.PullRequest.Title,
"comments": s.PullRequest.Comments,
"commits": s.PullRequest.Commits,
"additions": s.PullRequest.Additions,
"deletions": s.PullRequest.Deletions,
"changedFiles": s.PullRequest.ChangedFiles,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type PullRequestReviewCommentEvent struct {
Comment PullRequestReviewComment `json:"comment"`
PullRequest PullRequest `json:"pull_request"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s PullRequestReviewCommentEvent) NewPoint() *client.Point {
event := "pull_request_review_comment"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
"prNumber": fmt.Sprintf("%v", s.PullRequest.Number),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"state": s.PullRequest.State,
"title": s.PullRequest.Title,
"comments": s.PullRequest.Comments,
"commits": s.PullRequest.Commits,
"additions": s.PullRequest.Additions,
"deletions": s.PullRequest.Deletions,
"changedFiles": s.PullRequest.ChangedFiles,
"commentFile": s.Comment.File,
"comment": s.Comment.Comment,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type PushEvent struct {
Ref string `json:"ref"`
Before string `json:"before"`
After string `json:"after"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s PushEvent) NewPoint() *client.Point {
event := "push"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"Ref": s.Ref,
"Before": s.Before,
"After": s.After,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type ReleaseEvent struct {
Release Release `json:"release"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s ReleaseEvent) NewPoint() *client.Point {
event := "release"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"tagName": s.Release.TagName,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type RepositoryEvent struct {
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s RepositoryEvent) NewPoint() *client.Point {
event := "repository"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type StatusEvent struct {
Commit string `json:"sha"`
State string `json:"state"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s StatusEvent) NewPoint() *client.Point {
event := "status"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"commit": s.Commit,
"state": s.State,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type TeamAddEvent struct {
Team Team `json:"team"`
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s TeamAddEvent) NewPoint() *client.Point {
event := "team_add"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
"teamName": s.Team.Name,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}
type WatchEvent struct {
Repository Repository `json:"repository"`
Sender Sender `json:"sender"`
}
func (s WatchEvent) NewPoint() *client.Point {
event := "delete"
t := map[string]string{
"event": event,
"repository": s.Repository.Repository,
"private": fmt.Sprintf("%v", s.Repository.Private),
"user": s.Sender.User,
"admin": fmt.Sprintf("%v", s.Sender.Admin),
}
f := map[string]interface{}{
"stars": s.Repository.Stars,
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
}
time := time.Now()
p, err := client.NewPoint(Measurement, t, f, time)
if err != nil {
i := log.Fields{"event": event, "error": err}
log.WithFields(i).Fatal("Error creating new point...")
}
return p
}