Select Git revision
-
Jan Semmelink authoredJan Semmelink authored
writer.go 4.54 KiB
package search
import (
"context"
"crypto/tls"
"encoding/json"
"net/http"
"strings"
opensearch "github.com/opensearch-project/opensearch-go"
opensearchapi "github.com/opensearch-project/opensearch-go/opensearchapi"
"gitlab.com/uafrica/go-utils/errors"
"gitlab.com/uafrica/go-utils/logger"
)
type Writer interface {
TimeSeries(name string, tmpl interface{}) (TimeSeries, error) //tmpl must embed TimeSeriesHeader as first unanymous field
DelOldTimeSeries(name string, olderThanDays int) ([]string, error)
}
func New(config Config) (Writer, error) {
if err := config.Validate(); err != nil {
return nil, errors.Wrapf(err, "invalid config")
}
w := &writer{
config: config,
timeSeriesByName: map[string]TimeSeries{},
}
searchConfig := opensearch.Config{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
},
Addresses: config.Addresses,
Username: config.Username,
Password: config.Password,
}
// Initialize the client with SSL/TLS enabled.
var err error
w.client, err = opensearch.NewClient(searchConfig)
if err != nil {
return nil, errors.Wrapf(err, "cannot initialize opensearch connection")
}
// Print OpenSearch version information on console.
logger.Debugf("Search client created with config: %+v", searchConfig)
w.api = opensearchapi.New(w.client)
return w, nil
}
//implements audit.Auditor
type writer struct {
config Config
client *opensearch.Client
api *opensearchapi.API
timeSeriesByName map[string]TimeSeries
}
func (writer writer) Write(indexName string, doc interface{}) error {
if writer.client == nil {
return errors.Errorf("writer closed")
}
jsonDocStr, ok := doc.(string)
if !ok {
jsonDoc, err := json.Marshal(doc)
if err != nil {
return errors.Wrapf(err, "failed to JSON encode document")
}
jsonDocStr = string(jsonDoc)
}