in store/reader.go [130:179]
func (r *kustoSpanReader) GetOperations(ctx context.Context, query spanstore.OperationQueryParameters) ([]spanstore.Operation, error) {
type Operation struct {
OperationName string `kusto:"OperationName"`
SpanKind string `kusto:"SpanKind"`
}
clientRequestId := GetClientId()
var iter *kusto.RowIterator
var err error
if query.ServiceName == "" && query.SpanKind == "" {
kustoStmt := kql.New(queryResultsCacheAge).AddTable(r.tableName).AddLiteral(getOpsWithNoParamsQuery)
iter, err = r.client.Query(ctx, r.database, kustoStmt, append(r.defaultReadOptions, kusto.ClientRequestID(clientRequestId))...)
}
if query.ServiceName != "" && query.SpanKind == "" {
kustoStmt := kql.New(queryResultsCacheAge).AddTable(r.tableName).AddLiteral(getOpsWithParamsQuery)
kustoStmtParams := kql.NewParameters().AddString("ParamProcessServiceName", query.ServiceName)
iter, err = r.client.Query(ctx, r.database, kustoStmt, append(r.defaultReadOptions, kusto.ClientRequestID(clientRequestId), kusto.QueryParameters(kustoStmtParams))...)
}
if err != nil {
r.logger.Error("Failed running GetOperations query. ClientRequestId : %s", clientRequestId)
return nil, err
}
defer iter.Stop()
operations := []spanstore.Operation{}
err = iter.DoOnRowOrError(
func(row *table.Row, e *errors.Error) error {
if e != nil {
return e
}
operation := Operation{}
if err := row.ToStruct(&operation); err != nil {
return err
}
operations = append(operations, spanstore.Operation{
Name: operation.OperationName,
SpanKind: operation.SpanKind,
})
return nil
},
)
if err != nil {
return nil, err
}
return operations, err
}