mirror of
https://github.com/crazy-max/diun.git
synced 2025-12-21 13:23:09 +01:00
notif(elasticsearch): switch to address field and validate
This commit is contained in:
@@ -95,9 +95,7 @@ func TestLoadFile(t *testing.T) {
|
||||
TemplateBody: model.NotifDefaultTemplateBody,
|
||||
},
|
||||
Elasticsearch: &model.NotifElasticsearch{
|
||||
Scheme: "https",
|
||||
Host: "localhost",
|
||||
Port: 9200,
|
||||
Address: "https://elastic.foo.com",
|
||||
Username: "elastic",
|
||||
Password: "password",
|
||||
Client: "diun",
|
||||
|
||||
@@ -40,9 +40,7 @@ notif:
|
||||
renderFields: true
|
||||
timeout: 10s
|
||||
elasticsearch:
|
||||
scheme: https
|
||||
host: localhost
|
||||
port: 9200
|
||||
address: https://elastic.foo.com
|
||||
username: elastic
|
||||
password: password
|
||||
client: diun
|
||||
|
||||
@@ -29,9 +29,7 @@ notif:
|
||||
renderFields: true
|
||||
timeout: 10s
|
||||
elasticsearch:
|
||||
scheme: https
|
||||
host: localhost
|
||||
port: 9200
|
||||
address: https://elastic.foo.com
|
||||
username: elastic
|
||||
password: password
|
||||
client: diun
|
||||
|
||||
@@ -7,9 +7,7 @@ import (
|
||||
)
|
||||
|
||||
type NotifElasticsearch struct {
|
||||
Scheme string `yaml:"scheme,omitempty" json:"scheme,omitempty" validate:"required,oneof=http https"`
|
||||
Host string `yaml:"host,omitempty" json:"host,omitempty" validate:"required"`
|
||||
Port int `yaml:"port,omitempty" json:"port,omitempty" validate:"required,min=1"`
|
||||
Address string `yaml:"address,omitempty" json:"address,omitempty" validate:"required"`
|
||||
Username string `yaml:"username,omitempty" json:"username,omitempty" validate:"omitempty"`
|
||||
UsernameFile string `yaml:"usernameFile,omitempty" json:"usernameFile,omitempty" validate:"omitempty,file"`
|
||||
Password string `yaml:"password,omitempty" json:"password,omitempty" validate:"omitempty"`
|
||||
@@ -29,9 +27,7 @@ func (s *NotifElasticsearch) GetDefaults() *NotifElasticsearch {
|
||||
|
||||
// SetDefaults sets the default values
|
||||
func (s *NotifElasticsearch) SetDefaults() {
|
||||
s.Scheme = "http"
|
||||
s.Host = "localhost"
|
||||
s.Port = 9200
|
||||
s.Address = "http://localhost:9200"
|
||||
s.Client = "diun"
|
||||
s.Index = "diun-notifications"
|
||||
s.Timeout = utl.NewDuration(10 * time.Second)
|
||||
|
||||
@@ -5,8 +5,9 @@ import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"path"
|
||||
"time"
|
||||
|
||||
"github.com/crazy-max/diun/v4/internal/model"
|
||||
@@ -85,7 +86,11 @@ func (c *Client) Send(entry model.NotifEntry) error {
|
||||
// Build the Elasticsearch indexing URL
|
||||
// This uses the Index API (POST /{index}/_doc) to create a document with an auto-generated _id:
|
||||
// https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-create
|
||||
url := fmt.Sprintf("%s://%s:%d/%s/_doc", c.cfg.Scheme, c.cfg.Host, c.cfg.Port, c.cfg.Index)
|
||||
u, err := url.Parse(c.cfg.Address)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
u.Path = path.Join(u.Path, c.cfg.Index, "_doc")
|
||||
|
||||
cancelCtx, cancel := context.WithCancelCause(context.Background())
|
||||
timeoutCtx, _ := context.WithTimeoutCause(cancelCtx, *c.cfg.Timeout, errors.WithStack(context.DeadlineExceeded)) //nolint:govet // no need to manually cancel this context as we already rely on parent
|
||||
@@ -99,7 +104,7 @@ func (c *Client) Send(entry model.NotifEntry) error {
|
||||
},
|
||||
}
|
||||
|
||||
req, err := http.NewRequestWithContext(timeoutCtx, "POST", url, bytes.NewBuffer(body))
|
||||
req, err := http.NewRequestWithContext(timeoutCtx, "POST", u.String(), bytes.NewBuffer(body))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user