Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/logcli/detected/fields.go

72 lines
1.5 KiB

package detected
import (
"encoding/json"
"fmt"
"log"
"slices"
"strings"
"time"
"github.com/fatih/color"
"github.com/grafana/loki/v3/pkg/logcli/client"
"github.com/grafana/loki/v3/pkg/loghttp"
)
type FieldsQuery struct {
QueryString string
Start time.Time
End time.Time
Limit int
LineLimit int
Step time.Duration
Quiet bool
FieldName string
ColoredOutput bool
}
// DoQuery executes the query and prints out the results
func (q *FieldsQuery) Do(c client.Client, outputMode string) {
var resp *loghttp.DetectedFieldsResponse
var err error
resp, err = c.GetDetectedFields(
q.QueryString,
q.FieldName,
q.Limit,
q.LineLimit,
q.Start,
q.End,
q.Step,
q.Quiet,
)
if err != nil {
log.Fatalf("Error doing request: %+v", err)
}
switch outputMode {
case "raw":
out, err := json.Marshal(resp)
if err != nil {
log.Fatalf("Error marshalling response: %+v", err)
}
fmt.Println(string(out))
default:
var output []string
if len(resp.Fields) > 0 {
output = make([]string, len(resp.Fields))
for i, field := range resp.Fields {
bold := color.New(color.Bold)
output[i] = fmt.Sprintf("label: %s\t\t", bold.Sprintf("%s", field.Label)) +
fmt.Sprintf("type: %s\t\t", bold.Sprintf("%s", field.Type)) +
fmt.Sprintf("cardinality: %s", bold.Sprintf("%d", field.Cardinality))
}
} else if len(resp.Values) > 0 {
output = resp.Values
}
slices.Sort(output)
fmt.Println(strings.Join(output, "\n"))
}
}