Add `access` format support for Elasticsearch notification target (#4006)
This change adds `access` format support for notifications to a
Elasticsearch server, and it refactors `namespace` format support.
In the case of `access` format, for each event in Minio, a JSON
document is inserted into Elasticsearch with its timestamp set to the
event's timestamp, and with the ID generated automatically by
elasticsearch. No events are modified or deleted in this mode.
In the case of `namespace` format, for each event in Minio, a JSON
document is keyed together by the bucket and object name is updated in
Elasticsearch. In the case of an object being created or over-written
in Minio, a new document or an existing document is inserted into the
Elasticsearch index. If an object is deleted in Minio, the
corresponding document is deleted from the Elasticsearch index.
Additionally, this change upgrades Elasticsearch support to the 5.x
series. This is a breaking change, and users of previous elasticsearch
versions should upgrade.
Also updates documentation on Elasticsearch notification target usage
and has a link to an elasticsearch upgrade guide.
This is the last patch that finally resolves #3928.
2017-03-31 17:11:27 -04:00
|
|
|
// Copyright 2012-present Oliver Eilhard. All rights reserved.
|
2016-07-24 01:51:12 -04:00
|
|
|
// Use of this source code is governed by a MIT-license.
|
|
|
|
// See http://olivere.mit-license.org/license.txt for details.
|
|
|
|
|
|
|
|
/*
|
|
|
|
Package elastic provides an interface to the Elasticsearch server
|
Add `access` format support for Elasticsearch notification target (#4006)
This change adds `access` format support for notifications to a
Elasticsearch server, and it refactors `namespace` format support.
In the case of `access` format, for each event in Minio, a JSON
document is inserted into Elasticsearch with its timestamp set to the
event's timestamp, and with the ID generated automatically by
elasticsearch. No events are modified or deleted in this mode.
In the case of `namespace` format, for each event in Minio, a JSON
document is keyed together by the bucket and object name is updated in
Elasticsearch. In the case of an object being created or over-written
in Minio, a new document or an existing document is inserted into the
Elasticsearch index. If an object is deleted in Minio, the
corresponding document is deleted from the Elasticsearch index.
Additionally, this change upgrades Elasticsearch support to the 5.x
series. This is a breaking change, and users of previous elasticsearch
versions should upgrade.
Also updates documentation on Elasticsearch notification target usage
and has a link to an elasticsearch upgrade guide.
This is the last patch that finally resolves #3928.
2017-03-31 17:11:27 -04:00
|
|
|
(https://www.elastic.co/products/elasticsearch).
|
2016-07-24 01:51:12 -04:00
|
|
|
|
|
|
|
The first thing you do is to create a Client. If you have Elasticsearch
|
|
|
|
installed and running with its default settings
|
|
|
|
(i.e. available at http://127.0.0.1:9200), all you need to do is:
|
|
|
|
|
|
|
|
client, err := elastic.NewClient()
|
|
|
|
if err != nil {
|
|
|
|
// Handle error
|
|
|
|
}
|
|
|
|
|
|
|
|
If your Elasticsearch server is running on a different IP and/or port,
|
|
|
|
just provide a URL to NewClient:
|
|
|
|
|
|
|
|
// Create a client and connect to http://192.168.2.10:9201
|
|
|
|
client, err := elastic.NewClient(elastic.SetURL("http://192.168.2.10:9201"))
|
|
|
|
if err != nil {
|
|
|
|
// Handle error
|
|
|
|
}
|
|
|
|
|
|
|
|
You can pass many more configuration parameters to NewClient. Review the
|
|
|
|
documentation of NewClient for more information.
|
|
|
|
|
|
|
|
If no Elasticsearch server is available, services will fail when creating
|
|
|
|
a new request and will return ErrNoClient.
|
|
|
|
|
|
|
|
A Client provides services. The services usually come with a variety of
|
|
|
|
methods to prepare the query and a Do function to execute it against the
|
|
|
|
Elasticsearch REST interface and return a response. Here is an example
|
|
|
|
of the IndexExists service that checks if a given index already exists.
|
|
|
|
|
Add `access` format support for Elasticsearch notification target (#4006)
This change adds `access` format support for notifications to a
Elasticsearch server, and it refactors `namespace` format support.
In the case of `access` format, for each event in Minio, a JSON
document is inserted into Elasticsearch with its timestamp set to the
event's timestamp, and with the ID generated automatically by
elasticsearch. No events are modified or deleted in this mode.
In the case of `namespace` format, for each event in Minio, a JSON
document is keyed together by the bucket and object name is updated in
Elasticsearch. In the case of an object being created or over-written
in Minio, a new document or an existing document is inserted into the
Elasticsearch index. If an object is deleted in Minio, the
corresponding document is deleted from the Elasticsearch index.
Additionally, this change upgrades Elasticsearch support to the 5.x
series. This is a breaking change, and users of previous elasticsearch
versions should upgrade.
Also updates documentation on Elasticsearch notification target usage
and has a link to an elasticsearch upgrade guide.
This is the last patch that finally resolves #3928.
2017-03-31 17:11:27 -04:00
|
|
|
exists, err := client.IndexExists("twitter").Do(context.Background())
|
2016-07-24 01:51:12 -04:00
|
|
|
if err != nil {
|
|
|
|
// Handle error
|
|
|
|
}
|
|
|
|
if !exists {
|
|
|
|
// Index does not exist yet.
|
|
|
|
}
|
|
|
|
|
|
|
|
Look up the documentation for Client to get an idea of the services provided
|
|
|
|
and what kinds of responses you get when executing the Do function of a service.
|
|
|
|
Also see the wiki on Github for more details.
|
|
|
|
|
|
|
|
*/
|
|
|
|
package elastic
|