Files
sealos/service/vlogs/request/req.go
T
BearixandCopilot 837dc6ff50 feat(vlogs service): fix stderr handling and improve number logic validation. (#5859)
* fix stderr and number logic.

fix(vlogs service): change time query logic.

fix(vlogs service): change time query logic.

fix(vlogs service): change time query logic.

fix(vlogs service): change time query logic.

fix(vlogs service): change time query logic.

fix(vlogs service): change time query logic.

fix(vlogs service): change time query logic.

fix(vlogs service): change time query logic.

fix(vlogs service): change time query logic.

fix ci lint.

bug fix.

bug fix.

bug fix.

* Update service/vlogs/server/query.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* bug fix.

* bug fix.

* bug fix.

* bug fix.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-16 16:33:14 +08:00

69 lines
1.8 KiB
Go

package request
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
)
type QueryParams struct {
Path string
Username string
Password string
Query string
StartTime string
EndTime string
}
func QueryLogsByParams(query *QueryParams) (io.ReadCloser, error) {
httpClient := http.DefaultClient
req, err := generateReq(query)
if err != nil {
return nil, err
}
resp, err := httpClient.Do(req)
if err != nil {
return nil, fmt.Errorf("HTTP req error: %w", err)
}
if resp.StatusCode != http.StatusOK {
defer resp.Body.Close()
body, readErr := io.ReadAll(resp.Body)
if readErr != nil {
return nil, fmt.Errorf(
"HTTP %d error, unable to read error details: %w",
resp.StatusCode,
readErr,
)
}
log.Printf("=== Victoria Logs Query Failed ===")
log.Printf("Status Code: %d", resp.StatusCode)
log.Printf("Server: %s", resp.Header.Get("X-Server-Hostname"))
log.Printf("Request URL: %s", req.URL.String())
log.Printf("Error Content: %s", string(body))
log.Printf("===================================")
return nil, fmt.Errorf("victoria Logs query failed [%d]: %s", resp.StatusCode, string(body))
}
return resp.Body, nil
}
func generateReq(query *QueryParams) (*http.Request, error) {
parsedURL, err := url.Parse(query.Path)
if err != nil {
return nil, fmt.Errorf("can not parser API URL: %w", err)
}
parsedURL = parsedURL.JoinPath("select/logsql/query")
params := url.Values{}
params.Add("query", query.Query)
params.Add("start", query.StartTime)
params.Add("end", query.EndTime)
parsedURL.RawQuery = params.Encode()
req, err := http.NewRequest(http.MethodGet, parsedURL.String(), nil)
if err != nil {
return nil, fmt.Errorf("create HTTP req error: %w", err)
}
req.SetBasicAuth(query.Username, query.Password)
return req, nil
}