Skip to content
Snippets Groups Projects
Select Git revision
  • d98ac562356f074dad24b2c58e5ae20a28f26821
  • dev default protected
  • prod protected
  • 1.0.58
  • 1.0.57
  • 1.0.52
  • 1.0.56
  • 1.0.51
  • 1.0.50
  • 1.0.33
  • 1.0.32
  • 1.0.31
  • 1.0.30
  • 1.0.29
  • 1.0.28
  • 1.0.27
  • 1.0.26
  • 1.0.25
  • 1.0.24
  • 1.0.23
  • 1.0.22
  • 1.0.21
  • 1.0.20
23 results

vcs.xml

Blame
  • writer.go 4.92 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)
    	DocumentStore(name string, tmpl interface{}) (DocumentStore, 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{},
    		documentStoreByName: map[string]DocumentStore{},
    	}
    
    	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
    	documentStoreByName map[string]DocumentStore
    }
    
    func (writer writer) Write(indexName string, id string, doc interface{}) (*IndexResponse, error) {
    	if writer.client == nil {
    		return nil, errors.Errorf("writer closed")
    	}
    	jsonDocStr, ok := doc.(string)
    	if !ok {
    		jsonDoc, err := json.Marshal(doc)
    		if err != nil {
    			return nil, errors.Wrapf(err, "failed to JSON encode document")