|
|
|
// Copyright 2023 ROC. All rights reserved.
|
|
|
|
// Use of this source code is governed by a MIT style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
// package obx contain some help function for OpenObserve.
|
|
|
|
package obx
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
hx "github.com/rocboss/paopao-ce/pkg/http"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
_ OpenObserveClient = (*obxClient)(nil)
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
_userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
|
|
|
|
)
|
|
|
|
|
|
|
|
// OpenObserveClient OpenObserve client interface
|
|
|
|
type OpenObserveClient interface {
|
|
|
|
LogJson(data []byte)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Config confiugre used for create a OpenObserveClient instance
|
|
|
|
type Config struct {
|
|
|
|
Host string
|
|
|
|
User string
|
|
|
|
Password string
|
|
|
|
Organization string
|
|
|
|
Stream string
|
|
|
|
UserAgent string
|
|
|
|
Secure bool
|
|
|
|
}
|
|
|
|
|
|
|
|
type obxClient struct {
|
|
|
|
endpoint string
|
|
|
|
user string
|
|
|
|
password string
|
|
|
|
userAgent string
|
|
|
|
respFn hx.ResponseFn
|
|
|
|
client hx.AsyncClient
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Config) Endpoint() string {
|
|
|
|
schema := "http"
|
|
|
|
if c.Secure {
|
|
|
|
schema = "https"
|
|
|
|
}
|
|
|
|
return schema + "://" + c.Host + "/api/" + c.Organization + "/" + c.Stream + "/_json"
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *obxClient) LogJson(data []byte) {
|
|
|
|
req, err := http.NewRequest("POST", s.endpoint, bytes.NewReader(data))
|
|
|
|
if err != nil {
|
|
|
|
s.respFn(nil, nil, err)
|
|
|
|
}
|
|
|
|
req.SetBasicAuth(s.user, s.password)
|
|
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
req.Header.Set("User-Agent", s.userAgent)
|
|
|
|
s.client.Do(req, s.respFn)
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewClient create OpenObserve client instance
|
|
|
|
func NewClient(conf *Config, acc *hx.AsyncClientConf, fn hx.ResponseFn) OpenObserveClient {
|
|
|
|
userAgent := _userAgent
|
|
|
|
if conf.UserAgent != "" {
|
|
|
|
userAgent = conf.UserAgent
|
|
|
|
}
|
|
|
|
return &obxClient{
|
|
|
|
endpoint: conf.Endpoint(),
|
|
|
|
user: conf.User,
|
|
|
|
password: conf.Password,
|
|
|
|
userAgent: userAgent,
|
|
|
|
respFn: fn,
|
|
|
|
client: hx.NewAsyncClient(http.DefaultClient, acc),
|
|
|
|
}
|
|
|
|
}
|