Add content-length as part of event notification structure (#6341)

Fixes #6321
master
kannappanr 6 years ago committed by GitHub
parent dafa5073cb
commit add57a6938
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      cmd/handler-utils.go
  2. 27
      cmd/notification.go
  3. 30
      cmd/object-handlers.go

@ -189,6 +189,15 @@ func extractReqParams(r *http.Request) map[string]string {
} }
} }
// Extract response elements to be sent with event notifiation.
func extractRespElements(w http.ResponseWriter) map[string]string {
return map[string]string{
"content-length": w.Header().Get("Content-Length"),
// Add more fields here.
}
}
// Trims away `aws-chunked` from the content-encoding header if present. // Trims away `aws-chunked` from the content-encoding header if present.
// Streaming signature clients can have custom content-encoding such as // Streaming signature clients can have custom content-encoding such as
// `aws-chunked,gzip` here we need to only save `gzip`. // `aws-chunked,gzip` here we need to only save `gzip`.

@ -449,13 +449,14 @@ func NewNotificationSys(config *serverConfig, endpoints EndpointList) *Notificat
} }
type eventArgs struct { type eventArgs struct {
EventName event.Name EventName event.Name
BucketName string BucketName string
Object ObjectInfo Object ObjectInfo
ReqParams map[string]string ReqParams map[string]string
Host string RespElements map[string]string
Port string Host string
UserAgent string Port string
UserAgent string
} }
// ToEvent - converts to notification event. // ToEvent - converts to notification event.
@ -474,6 +475,13 @@ func (args eventArgs) ToEvent() event.Event {
eventTime := UTCNow() eventTime := UTCNow()
uniqueID := fmt.Sprintf("%X", eventTime.UnixNano()) uniqueID := fmt.Sprintf("%X", eventTime.UnixNano())
respElements := map[string]string{
"x-amz-request-id": uniqueID,
"x-minio-origin-endpoint": getOriginEndpoint(), // Minio specific custom elements.
}
if args.RespElements["content-length"] != "" {
respElements["content-length"] = args.RespElements["content-length"]
}
newEvent := event.Event{ newEvent := event.Event{
EventVersion: "2.0", EventVersion: "2.0",
EventSource: "minio:s3", EventSource: "minio:s3",
@ -482,10 +490,7 @@ func (args eventArgs) ToEvent() event.Event {
EventName: args.EventName, EventName: args.EventName,
UserIdentity: event.Identity{creds.AccessKey}, UserIdentity: event.Identity{creds.AccessKey},
RequestParameters: args.ReqParams, RequestParameters: args.ReqParams,
ResponseElements: map[string]string{ ResponseElements: respElements,
"x-amz-request-id": uniqueID,
"x-minio-origin-endpoint": getOriginEndpoint(), // Minio specific custom elements.
},
S3: event.Metadata{ S3: event.Metadata{
SchemaVersion: "1.0", SchemaVersion: "1.0",
ConfigurationID: "Config", ConfigurationID: "Config",

@ -405,13 +405,14 @@ func (api objectAPIHandlers) GetObjectHandler(w http.ResponseWriter, r *http.Req
// Notify object accessed via a GET request. // Notify object accessed via a GET request.
sendEvent(eventArgs{ sendEvent(eventArgs{
EventName: event.ObjectAccessedGet, EventName: event.ObjectAccessedGet,
BucketName: bucket, BucketName: bucket,
Object: objInfo, Object: objInfo,
ReqParams: extractReqParams(r), ReqParams: extractReqParams(r),
UserAgent: r.UserAgent(), RespElements: extractRespElements(w),
Host: host, UserAgent: r.UserAgent(),
Port: port, Host: host,
Port: port,
}) })
} }
@ -509,13 +510,14 @@ func (api objectAPIHandlers) HeadObjectHandler(w http.ResponseWriter, r *http.Re
// Notify object accessed via a HEAD request. // Notify object accessed via a HEAD request.
sendEvent(eventArgs{ sendEvent(eventArgs{
EventName: event.ObjectAccessedHead, EventName: event.ObjectAccessedHead,
BucketName: bucket, BucketName: bucket,
Object: objInfo, Object: objInfo,
ReqParams: extractReqParams(r), ReqParams: extractReqParams(r),
UserAgent: r.UserAgent(), RespElements: extractRespElements(w),
Host: host, UserAgent: r.UserAgent(),
Port: port, Host: host,
Port: port,
}) })
} }

Loading…
Cancel
Save