Skip to content
Snippets Groups Projects
Select Git revision
  • 26739ba2c975e17b2d534309d9245044151f762d
  • main default protected
  • v1.298.0
  • v1.297.0
  • v1.296.0
  • v1.295.0
  • v1.294.0
  • v1.293.0
  • v1.292.0
  • v1.291.0
  • v1.290.0
  • v1.289.0
  • v1.288.0
  • v1.287.0
  • v1.286.0
  • v1.285.0
  • v1.284.0
  • v1.283.0
  • v1.282.0
  • v1.281.0
  • v1.280.0
  • v1.279.0
22 results

writer.go

Blame
  • writer.go 5.02 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"
    )
    
    type Writer interface {
    	TimeSeries(indexName string, tmpl interface{}) (TimeSeries, error)
    }
    
    func New(config Config) (Writer, error) {
    	if err := config.Validate(); err != nil {
    		return nil, errors.Wrapf(err, "invalid config")
    	}
    	w := &writer{
    		config: config,
    	}
    
    	// Initialize the client with SSL/TLS enabled.
    	var err error
    	w.client, err = opensearch.NewClient(opensearch.Config{
    		Transport: &http.Transport{
    			TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    		},
    		Addresses: config.Addresses,
    		Username:  config.Username,
    		Password:  config.Password,
    	})
    	if err != nil {
    		return nil, errors.Wrapf(err, "cannot initialize opensearch connection")
    	}
    	// Print OpenSearch version information on console.
    	//fmt.Println(client.Info())
    
    	w.api = opensearchapi.New(w.client)
    	return w, nil
    }
    
    //implements audit.Auditor
    type writer struct {
    	config Config
    	client *opensearch.Client
    	api    *opensearchapi.API
    }
    
    func (writer writer) Write(indexName string, doc map[string]interface{}) error {
    	if writer.client == nil {
    		return errors.Errorf("writer closed")
    	}
    	jsonDoc, err := json.Marshal(doc)
    	if err != nil {
    		return errors.Wrapf(err, "failed to JSON encode document")
    	}
    	indexResponse, err := writer.api.Index(
    		indexName,
    		strings.NewReader(string(jsonDoc)),
    	)
    	if err != nil {
    		return errors.Wrapf(err, "failed to index document")
    	}
    	var res IndexResponse
    	if err := json.NewDecoder(indexResponse.Body).Decode(&res); err != nil {