fluentbit: initial commit
Showing
config.cnf
0 → 100644
out_http.go
0 → 100644
package main | |||
import "github.com/fluent/fluent-bit-go/output" | |||
import ( | |||
"fmt" | |||
"unsafe" | |||
"C" | |||
"net/http" | |||
"bytes" | |||
|
|||
) | |||
// configuration parameters | |||
var user string | |||
var password string | |||
var uri string | |||
var reference string | |||
//export FLBPluginRegister | |||
func FLBPluginRegister(ctx unsafe.Pointer) int { | |||
return output.FLBPluginRegister(ctx, "wendelin_out", "Wendelin Out GO!") | |||
} | |||
/* | |||
* export FLBPluginInit | |||
* fluentbit will call this | |||
* ctx (context) pointer to fluentbit context (state/ c code) | |||
*/ | |||
func FLBPluginInit(ctx unsafe.Pointer) int { | |||
// Retrieve the configuration parameters | |||
user = output.FLBPluginConfigKey(ctx, "User") | |||
password = output.FLBPluginConfigKey(ctx, "Password") | |||
uri = output.FLBPluginConfigKey(ctx, "Uri") | |||
reference = output.FLBPluginConfigKey(ctx, "Reference") | |||
fmt.Printf("[flb-go user] plugin parameter = '%s'\n", user) | |||
fmt.Printf("[flb-go password] plugin parameter = '%s'\n", password) | |||
fmt.Printf("[flb-go uri] plugin parameter = '%s'\n", uri) | |||
fmt.Printf("[flb-go reference] plugin parameter = '%s'\n", reference) | |||
return output.FLB_OK | |||
} | |||
//export FLBPluginFlush | |||
func FLBPluginFlush(data unsafe.Pointer, length C.int, tag *C.char) int { | |||
request_string := uri + "/ingest?reference=" + reference | |||
var byte_data []byte | |||
byte_data = C.GoBytes(data, C.int(length)) | |||
hc := http.Client{} | |||
req, err := http.NewRequest("POST", request_string, bytes.NewBuffer(byte_data)) | |||
if err != nil { | |||
return output.FLB_ERROR | |||
} | |||
req.Header.Set("Content-Type", "application/octet-stream") | |||
req.SetBasicAuth(user, password) | |||
resp, err := hc.Do(req) | |||
if err != nil { | |||
return output.FLB_ERROR | |||
} | |||
/* | |||
* Only allow the following HTTP status: | |||
* | |||
* - 200: OK | |||
* - 201: Created | |||
* - 202: Accepted | |||
* - 203: no authorative resp | |||
* - 204: No Content | |||
* - 205: Reset content | |||
*/ | |||
if resp.Status < 200 && resp.Status > 205 { | |||
return output.FLB_RETRY | |||
} | |||
fmt.Println(resp.Status) | |||
fmt.Println(err) | |||
defer resp.Body.Close() | |||
/* | |||
* Return options: | |||
* | |||
* - output.FLB_OK = data have been processed. | |||
* - output.FLB_ERROR = unrecoverable error, do not try this again. | |||
* - output.FLB_RETRY = retry to flush later. | |||
*/ | |||
return output.FLB_OK | |||
} | |||
//export FLBPluginExit | |||
func FLBPluginExit() int { | |||
return output.FLB_OK | |||
} | |||
func main() { | |||
} |