formatYAxisDuration.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import {
  2. DURATION_UNIT_LABELS,
  3. DURATION_UNIT_MULTIPLIERS,
  4. DurationUnit,
  5. } from 'sentry/utils/discover/fields';
  6. /**
  7. * Format the duration value for a chart Y axis. Automatically chooses the appropriate unit, and formats for the current locale.
  8. *
  9. * @param milliseconds The duration in milliseconds
  10. */
  11. export function formatYAxisDuration(milliseconds: number): string {
  12. const unit = getScaleUnitForDuration(milliseconds);
  13. return `${(milliseconds / DURATION_UNIT_MULTIPLIERS[unit]).toLocaleString()}${DURATION_UNIT_LABELS[unit]}`;
  14. }
  15. function getScaleUnitForDuration(milliseconds: number) {
  16. const absoluteMilliseconds = Math.abs(milliseconds);
  17. let unit: DurationUnit;
  18. if (absoluteMilliseconds >= DURATION_UNIT_MULTIPLIERS[DurationUnit.YEAR]) {
  19. unit = DurationUnit.YEAR;
  20. } else if (absoluteMilliseconds >= DURATION_UNIT_MULTIPLIERS[DurationUnit.MONTH]) {
  21. unit = DurationUnit.MONTH;
  22. } else if (absoluteMilliseconds >= DURATION_UNIT_MULTIPLIERS[DurationUnit.WEEK]) {
  23. unit = DurationUnit.WEEK;
  24. } else if (absoluteMilliseconds >= DURATION_UNIT_MULTIPLIERS[DurationUnit.DAY]) {
  25. unit = DurationUnit.DAY;
  26. } else if (absoluteMilliseconds >= DURATION_UNIT_MULTIPLIERS[DurationUnit.HOUR]) {
  27. unit = DurationUnit.HOUR;
  28. } else if (absoluteMilliseconds >= DURATION_UNIT_MULTIPLIERS[DurationUnit.MINUTE]) {
  29. unit = DurationUnit.MINUTE;
  30. } else if (absoluteMilliseconds >= DURATION_UNIT_MULTIPLIERS[DurationUnit.SECOND]) {
  31. unit = DurationUnit.SECOND;
  32. } else if (
  33. absoluteMilliseconds >= DURATION_UNIT_MULTIPLIERS[DurationUnit.MILLISECOND]
  34. ) {
  35. unit = DurationUnit.MILLISECOND;
  36. } else if (
  37. absoluteMilliseconds >= DURATION_UNIT_MULTIPLIERS[DurationUnit.MICROSECOND]
  38. ) {
  39. unit = DurationUnit.MICROSECOND;
  40. } else {
  41. unit = DurationUnit.NANOSECOND;
  42. }
  43. return unit;
  44. }