store/queryUtils.go (62 lines of code) (raw):
package store
import (
"errors"
"github.com/jaegertracing/jaeger/storage/spanstore"
)
// taken from https://github.com/logzio/jaeger-logzio/blob/master/store/store.go
var (
// ErrServiceNameNotSet occurs when attempting to query with an empty service name
ErrServiceNameNotSet = errors.New("service Name must be set")
// ErrStartTimeMinGreaterThanMax occurs when start time min is above start time max
ErrStartTimeMinGreaterThanMax = errors.New("start Time Minimum is above Maximum")
// ErrDurationMinGreaterThanMax occurs when duration min is above duration max
ErrDurationMinGreaterThanMax = errors.New("duration Minimum is above Maximum")
// ErrMalformedRequestObject occurs when a request object is nil
ErrMalformedRequestObject = errors.New("malformed request object")
// ErrStartAndEndTimeNotSet occurs when start time and end time are not set
ErrStartAndEndTimeNotSet = errors.New("start and End Time must be set")
)
const (
queryResultsCacheAge = `set query_results_cache_max_age = time(5m);`
getTraceQuery = ` | where TraceID == ParamTraceID | extend Duration=datetime_diff('microsecond',EndTime,StartTime) , ProcessServiceName=tostring(ResourceAttributes.['service.name']) | project-rename Tags=TraceAttributes,Logs=Events,ProcessTags=ResourceAttributes| extend References=iff(isempty(ParentID),todynamic("[]"),pack_array(bag_pack("refType","CHILD_OF","traceID",TraceID,"spanID",ParentID)))`
getServices = `getServices`
getServicesQuery = `| extend ProcessServiceName=tostring(ResourceAttributes.['service.name'])
| where ProcessServiceName!=""
| summarize by ProcessServiceName
| sort by ProcessServiceName asc`
getOpsWithNoParams = `getOpsWithNoParams`
getOpsWithNoParamsQuery = `
| summarize count() by SpanName , SpanKind
| sort by count_
| project OperationName=SpanName,SpanKind`
getOpsWithParamsQuery = ` | extend ProcessServiceName=tostring(ResourceAttributes.['service.name'])
| where ProcessServiceName == ParamProcessServiceName
| summarize count() by SpanName , SpanKind
| sort by count_
| project OperationName=SpanName,SpanKind`
getDependenciesQuery = ` | extend ProcessServiceName=tostring(ResourceAttributes.['service.name'])
| where StartTime < ParamEndTs and StartTime > (ParamEndTs-ParamLookBack)
| project ProcessServiceName, SpanID, ChildOfSpanId = ParentID | join (`
getDependenciesJoinQuery = ` | extend ProcessServiceName=tostring(ResourceAttributes.['service.name'])
| project ChildOfSpanId=SpanID, ParentService=ProcessServiceName) on ChildOfSpanId | where ProcessServiceName != ParentService
| extend Call=pack('Parent', ParentService, 'Child', ProcessServiceName) | summarize CallCount=count() by tostring(Call) | extend Call=parse_json(Call)
| evaluate bag_unpack(Call)`
getTraceIdBaseQuery = ` | extend Duration=datetime_diff('microsecond',EndTime,StartTime) , ProcessServiceName=tostring(ResourceAttributes.['service.name'])`
getTracesBase = `getTracesBase`
getTracesBaseQuery = ` | extend ProcessServiceName=tostring(ResourceAttributes.['service.name']),Duration=datetime_diff('microsecond',EndTime,StartTime)`
)
// taken from https://github.com/logzio/jaeger-logzio/blob/master/store/queryUtils.go
func validateQuery(p *spanstore.TraceQueryParameters) error {
if p == nil {
return ErrMalformedRequestObject
}
if p.ServiceName == "" && len(p.Tags) > 0 {
return ErrServiceNameNotSet
}
if p.StartTimeMin.IsZero() || p.StartTimeMax.IsZero() {
return ErrStartAndEndTimeNotSet
}
if p.StartTimeMax.Before(p.StartTimeMin) {
return ErrStartTimeMinGreaterThanMax
}
if p.DurationMin != 0 && p.DurationMax != 0 && p.DurationMin > p.DurationMax {
return ErrDurationMinGreaterThanMax
}
if p.NumTraces > 500 {
p.NumTraces = 500
}
return nil
}