utils.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import type {TraceResult} from './hooks/useTraces';
  2. import type {SpanResult} from './hooks/useTraceSpans';
  3. import type {Field} from './data';
  4. export function normalizeTraces(traces: TraceResult[] | undefined) {
  5. if (!traces) {
  6. return traces;
  7. }
  8. return traces.sort(
  9. // Only sort name == null to the end, the rest leave in the original order.
  10. (t1, t2) => (t1.name ? '0' : '1').localeCompare(t2.name ? '0' : '1')
  11. );
  12. }
  13. export function getStylingSliceName(
  14. sliceName: string | null,
  15. sliceSecondaryName: string | null
  16. ) {
  17. if (sliceSecondaryName) {
  18. // Our color picking relies on the first 4 letters. Since we want to differentiate sdknames and project names we have to include part of the sdk name.
  19. return (sliceName ?? '').slice(0, 1) + sliceSecondaryName.slice(-4);
  20. }
  21. return sliceName;
  22. }
  23. export function areQueriesEmpty(queries: string[]): boolean {
  24. if (queries.length > 1) {
  25. return false;
  26. }
  27. if (queries.length === 0) {
  28. return true;
  29. }
  30. if (queries.length === 1) {
  31. return queries[0]!.length === 0;
  32. }
  33. return false;
  34. }
  35. export function getSecondaryNameFromSpan(span: SpanResult<Field>) {
  36. return span['sdk.name'];
  37. }
  38. export function getShortenedSdkName(sdkName: string | null) {
  39. if (!sdkName) {
  40. return '';
  41. }
  42. const sdkNameParts = sdkName.split('.');
  43. if (sdkNameParts.length <= 1) {
  44. return sdkName;
  45. }
  46. return sdkNameParts[sdkNameParts.length - 1];
  47. }