utils.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import type {DeviceContext} from 'sentry/types/event';
  2. import {DeviceContextKey} from 'sentry/types/event';
  3. import {defined} from 'sentry/utils';
  4. import {formatBytesBase2} from 'sentry/utils/bytes/formatBytesBase2';
  5. export function formatMemory(
  6. memory_size: number,
  7. free_memory: number,
  8. usable_memory: number
  9. ) {
  10. if (
  11. !Number.isInteger(memory_size) ||
  12. memory_size <= 0 ||
  13. !Number.isInteger(free_memory) ||
  14. free_memory <= 0
  15. ) {
  16. return null;
  17. }
  18. let memory = `Total: ${formatBytesBase2(memory_size)} / Free: ${formatBytesBase2(
  19. free_memory
  20. )}`;
  21. if (Number.isInteger(usable_memory) && usable_memory > 0) {
  22. memory = `${memory} / Usable: ${formatBytesBase2(usable_memory)}`;
  23. }
  24. return memory;
  25. }
  26. export function formatStorage(
  27. storage_size: number,
  28. free_storage: number,
  29. external_storage_size: number,
  30. external_free_storage: number
  31. ) {
  32. if (!Number.isInteger(storage_size) || storage_size <= 0) {
  33. return null;
  34. }
  35. let storage = `Total: ${formatBytesBase2(storage_size)}`;
  36. if (Number.isInteger(free_storage) && free_storage > 0) {
  37. storage = `${storage} / Free: ${formatBytesBase2(free_storage)}`;
  38. }
  39. if (
  40. Number.isInteger(external_storage_size) &&
  41. external_storage_size > 0 &&
  42. Number.isInteger(external_free_storage) &&
  43. external_free_storage > 0
  44. ) {
  45. storage = `${storage} (External Total: ${formatBytesBase2(
  46. external_storage_size
  47. )} / Free: ${formatBytesBase2(external_free_storage)})`;
  48. }
  49. return storage;
  50. }
  51. // List of common display resolutions taken from the source: https://en.wikipedia.org/wiki/Display_resolution#Common_display_resolutions
  52. export const commonDisplayResolutions = {
  53. '640x360': 'nHD',
  54. '800x600': 'SVGA',
  55. '1024x768': 'XGA',
  56. '1280x720': 'WXGA',
  57. '1280x800': 'WXGA',
  58. '1280x1024': 'SXGA',
  59. '1360x768': 'HD',
  60. '1366x768': 'HD',
  61. '1440x900': 'WXGA+',
  62. '1536x864': 'NA',
  63. '1600x900': 'HD+',
  64. '1680x1050': 'WSXGA+',
  65. '1920x1080': 'FHD',
  66. '1920x1200': 'WUXGA',
  67. '2048x1152': 'QWXGA',
  68. '2560x1080': 'N/A',
  69. '2560x1440': 'QHD',
  70. '3440x1440': 'N/A',
  71. '3840x2160': '4K UHD',
  72. };
  73. export function getInferredData(data: DeviceContext) {
  74. const screenResolution = data[DeviceContextKey.SCREEN_RESOLUTION];
  75. const screenWidth = data[DeviceContextKey.SCREEN_WIDTH_PIXELS];
  76. const screenHeight = data[DeviceContextKey.SCREEN_HEIGHT_PIXELS];
  77. if (screenResolution) {
  78. const displayResolutionDescription = commonDisplayResolutions[screenResolution];
  79. const commonData = {
  80. ...data,
  81. [DeviceContextKey.SCREEN_RESOLUTION]: displayResolutionDescription
  82. ? `${screenResolution} (${displayResolutionDescription})`
  83. : screenResolution,
  84. };
  85. if (!defined(screenWidth) && !defined(screenHeight)) {
  86. const [width, height] = screenResolution.split('x');
  87. if (width && height) {
  88. return {
  89. ...commonData,
  90. [DeviceContextKey.SCREEN_WIDTH_PIXELS]: Number(width),
  91. [DeviceContextKey.SCREEN_HEIGHT_PIXELS]: Number(height),
  92. };
  93. }
  94. }
  95. return commonData;
  96. }
  97. if (defined(screenWidth) && defined(screenHeight)) {
  98. const displayResolution = `${screenWidth}x${screenHeight}`;
  99. const displayResolutionDescription = commonDisplayResolutions[displayResolution];
  100. return {
  101. ...data,
  102. [DeviceContextKey.SCREEN_RESOLUTION]: displayResolutionDescription
  103. ? `${displayResolution} (${displayResolutionDescription})`
  104. : displayResolution,
  105. };
  106. }
  107. return data;
  108. }