forked from influxdata/telegraf
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
closes influxdata#1542 Generalize event. Add doc. Update default config. Add filestack to the list of plugins. Check that video conversion event returns 400. Update the readme. Update the changelog.
- Loading branch information
1 parent
094eda2
commit 2d3da34
Showing
9 changed files
with
277 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Filestack webhook | ||
|
||
You should configure your Filestack's Webhooks to point at the `webhooks` service. To do this go to `filestack.com/`, select your app and click `Credentials > Webhooks`. In the resulting page, set the `URL` to `http://<my_ip>:1619/filestack`, and click on `Add`. | ||
|
||
## Events | ||
|
||
See the [webhook doc](https://www.filestack.com/docs/webhooks). | ||
|
||
*Limitations*: It stores all events except video conversions events. | ||
|
||
All events for logs the original timestamp, the action and the id. | ||
|
||
**Tags:** | ||
* 'action' = `event.action` string | ||
|
||
**Fields:** | ||
* 'id' = `event.id` string |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package filestack | ||
|
||
import ( | ||
"encoding/json" | ||
"io/ioutil" | ||
"log" | ||
"net/http" | ||
"time" | ||
|
||
"github.com/gorilla/mux" | ||
"github.com/influxdata/telegraf" | ||
) | ||
|
||
type FilestackWebhook struct { | ||
Path string | ||
acc telegraf.Accumulator | ||
} | ||
|
||
func (fs *FilestackWebhook) Register(router *mux.Router, acc telegraf.Accumulator) { | ||
router.HandleFunc(fs.Path, fs.eventHandler).Methods("POST") | ||
|
||
log.Printf("Started the webhooks_filestack on %s\n", fs.Path) | ||
fs.acc = acc | ||
} | ||
|
||
func (fs *FilestackWebhook) eventHandler(w http.ResponseWriter, r *http.Request) { | ||
defer r.Body.Close() | ||
body, err := ioutil.ReadAll(r.Body) | ||
if err != nil { | ||
w.WriteHeader(http.StatusBadRequest) | ||
return | ||
} | ||
|
||
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)) | ||
|
||
w.WriteHeader(http.StatusOK) | ||
} |
21 changes: 21 additions & 0 deletions
21
plugins/inputs/webhooks/filestack/filestack_webhooks_events.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package filestack | ||
|
||
import "strconv" | ||
|
||
type FilestackEvent struct { | ||
Action string `json:"action"` | ||
TimeStamp int64 `json:"timestamp"` | ||
Id int `json:"id"` | ||
} | ||
|
||
func (fe *FilestackEvent) Tags() map[string]string { | ||
return map[string]string{ | ||
"action": fe.Action, | ||
} | ||
} | ||
|
||
func (fe *FilestackEvent) Fields() map[string]interface{} { | ||
return map[string]interface{}{ | ||
"id": strconv.Itoa(fe.Id), | ||
} | ||
} |
110 changes: 110 additions & 0 deletions
110
plugins/inputs/webhooks/filestack/filestack_webhooks_events_json_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
package filestack | ||
|
||
func DialogOpenJSON() string { | ||
return `{ | ||
"action": "fp.dialog", | ||
"timestamp": 1435584646, | ||
"id": 102, | ||
"text": { | ||
"mimetypes": ["*/*"], | ||
"iframe": false, | ||
"language": "en", | ||
"id": "1435584650723", | ||
"mobile": false, | ||
"app":{ | ||
"upsell": "false", | ||
"apikey": "YOUR_API_KEY", | ||
"customization":{ | ||
"saveas_subheader": "Save it down to your local device or onto the Cloud", | ||
"folder_subheader": "Choose a folder to share with this application", | ||
"open_subheader": "Choose from the files on your local device or the ones you have online", | ||
"folder_header": "Select a folder", | ||
"help_text": "", | ||
"saveas_header": "Save your file", | ||
"open_header": "Upload a file" | ||
} | ||
}, | ||
"dialogType": "open", | ||
"auth": false, | ||
"welcome_header": "Upload a file", | ||
"welcome_subheader": "Choose from the files on your local device or the ones you have online", | ||
"help_text": "", | ||
"recent_path": "/", | ||
"extensions": null, | ||
"maxSize": 0, | ||
"signature": null, | ||
"policy": null, | ||
"custom_providers": "imgur,cloudapp", | ||
"intra": false | ||
} | ||
}` | ||
} | ||
|
||
func UploadJSON() string { | ||
return `{ | ||
"action":"fp.upload", | ||
"timestamp":1443444905, | ||
"id":100946, | ||
"text":{ | ||
"url":"https://www.filestackapi.com/api/file/WAunDTTqQfCNWwUUyf6n", | ||
"client":"Facebook", | ||
"type":"image/jpeg", | ||
"filename":"1579337399020824.jpg", | ||
"size":139154 | ||
} | ||
}` | ||
} | ||
|
||
func VideoConversionJSON() string { | ||
return `{ | ||
"status":"completed", | ||
"message":"Done", | ||
"data":{ | ||
"thumb":"https://cdn.filestackcontent.com/f1e8V88QDuxzOvtOAq1W", | ||
"thumb100x100":"https://process.filestackapi.com/AhTgLagciQByzXpFGRI0Az/resize=w:100,h:100,f:crop/output=f:jpg,q:66/https://cdn.filestackcontent.com/f1e8V88QDuxzOvtOAq1W", | ||
"thumb200x200":"https://process.filestackapi.com/AhTgLagciQByzXpFGRI0Az/resize=w:200,h:200,f:crop/output=f:jpg,q:66/https://cdn.filestackcontent.com/f1e8V88QDuxzOvtOAq1W", | ||
"thumb300x300":"https://process.filestackapi.com/AhTgLagciQByzXpFGRI0Az/resize=w:300,h:300,f:crop/output=f:jpg,q:66/https://cdn.filestackcontent.com/f1e8V88QDuxzOvtOAq1W", | ||
"url":"https://cdn.filestackcontent.com/VgvFVdvvTkml0WXPIoGn" | ||
}, | ||
"metadata":{ | ||
"result":{ | ||
"audio_channels":2, | ||
"audio_codec":"vorbis", | ||
"audio_sample_rate":44100, | ||
"created_at":"2015/12/21 20:45:19 +0000", | ||
"duration":10587, | ||
"encoding_progress":100, | ||
"encoding_time":8, | ||
"extname":".webm", | ||
"file_size":293459, | ||
"fps":24, | ||
"height":260, | ||
"mime_type":"video/webm", | ||
"started_encoding_at":"2015/12/21 20:45:22 +0000", | ||
"updated_at":"2015/12/21 20:45:32 +0000", | ||
"video_bitrate":221, | ||
"video_codec":"vp8", | ||
"width":300 | ||
}, | ||
"source":{ | ||
"audio_bitrate":125, | ||
"audio_channels":2, | ||
"audio_codec":"aac", | ||
"audio_sample_rate":44100, | ||
"created_at":"2015/12/21 20:45:19 +0000", | ||
"duration":10564, | ||
"extname":".mp4", | ||
"file_size":875797, | ||
"fps":24, | ||
"height":360, | ||
"mime_type":"video/mp4", | ||
"updated_at":"2015/12/21 20:45:32 +0000", | ||
"video_bitrate":196, | ||
"video_codec":"h264", | ||
"width":480 | ||
} | ||
}, | ||
"timestamp":"1453850583", | ||
"uuid":"638311d89d2bc849563a674a45809b7c" | ||
}` | ||
} |
74 changes: 74 additions & 0 deletions
74
plugins/inputs/webhooks/filestack/filestack_webhooks_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package filestack | ||
|
||
import ( | ||
"github.com/influxdata/telegraf/testutil" | ||
"net/http" | ||
"net/http/httptest" | ||
|
||
"strings" | ||
"testing" | ||
) | ||
|
||
func postWebhooks(md *FilestackWebhook, eventBody string) *httptest.ResponseRecorder { | ||
req, _ := http.NewRequest("POST", "/filestack", strings.NewReader(eventBody)) | ||
w := httptest.NewRecorder() | ||
|
||
md.eventHandler(w, req) | ||
|
||
return w | ||
} | ||
|
||
func TestDialogEvent(t *testing.T) { | ||
var acc testutil.Accumulator | ||
fs := &FilestackWebhook{Path: "/filestack", acc: &acc} | ||
resp := postWebhooks(fs, DialogOpenJSON()) | ||
if resp.Code != http.StatusOK { | ||
t.Errorf("POST returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) | ||
} | ||
|
||
fields := map[string]interface{}{ | ||
"id": "102", | ||
} | ||
|
||
tags := map[string]string{ | ||
"action": "fp.dialog", | ||
} | ||
|
||
acc.AssertContainsTaggedFields(t, "filestack_webhooks", fields, tags) | ||
} | ||
|
||
func TestParseError(t *testing.T) { | ||
fs := &FilestackWebhook{Path: "/filestack"} | ||
resp := postWebhooks(fs, "") | ||
if resp.Code != http.StatusBadRequest { | ||
t.Errorf("POST returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusBadRequest) | ||
} | ||
} | ||
|
||
func TestUploadEvent(t *testing.T) { | ||
var acc testutil.Accumulator | ||
fs := &FilestackWebhook{Path: "/filestack", acc: &acc} | ||
resp := postWebhooks(fs, UploadJSON()) | ||
if resp.Code != http.StatusOK { | ||
t.Errorf("POST returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusOK) | ||
} | ||
|
||
fields := map[string]interface{}{ | ||
"id": "100946", | ||
} | ||
|
||
tags := map[string]string{ | ||
"action": "fp.upload", | ||
} | ||
|
||
acc.AssertContainsTaggedFields(t, "filestack_webhooks", fields, tags) | ||
} | ||
|
||
func TestVideoConversionEvent(t *testing.T) { | ||
var acc testutil.Accumulator | ||
fs := &FilestackWebhook{Path: "/filestack", acc: &acc} | ||
resp := postWebhooks(fs, VideoConversionJSON()) | ||
if resp.Code != http.StatusBadRequest { | ||
t.Errorf("POST returned HTTP status code %v.\nExpected %v", resp.Code, http.StatusBadRequest) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters