getDeviceKnownDataDetails.tsx 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. import {DeviceName} from 'sentry/components/deviceName';
  2. import FileSize from 'sentry/components/fileSize';
  3. import {t} from 'sentry/locale';
  4. import type {DeviceContext, Event} from 'sentry/types/event';
  5. import {DeviceContextKey} from 'sentry/types/event';
  6. import {defined} from 'sentry/utils';
  7. import {getRelativeTimeFromEventDateCreated, type KnownDataDetails} from '../utils';
  8. import {formatMemory, formatStorage} from './utils';
  9. export const deviceKnownDataValues = [
  10. ...Object.values(DeviceContextKey),
  11. // Added two general keys here to namespace the values
  12. // tracks memory_size, free_memory, usable_memory
  13. 'memory',
  14. // tracks storage_size, free_storage, external_storage_size, external_free_storage
  15. 'storage',
  16. ];
  17. type Props = {
  18. data: DeviceContext;
  19. event: Event;
  20. type: (typeof deviceKnownDataValues)[number];
  21. };
  22. export function getDeviceKnownDataDetails({data, event, type}: Props): KnownDataDetails {
  23. switch (type) {
  24. case DeviceContextKey.NAME:
  25. return {
  26. subject: t('Name'),
  27. value: data.name,
  28. };
  29. case DeviceContextKey.FAMILY:
  30. return {
  31. subject: t('Family'),
  32. value: data.family,
  33. };
  34. case DeviceContextKey.MODEL_ID:
  35. return {
  36. subject: t('Model Id'),
  37. value: data.model_id,
  38. };
  39. case DeviceContextKey.MODEL:
  40. return {
  41. subject: t('Model'),
  42. value:
  43. typeof data.model === 'string' ? (
  44. <DeviceName
  45. value={`${data.model} ${data?.model_id ? `(${data.model_id})` : ''}`}
  46. />
  47. ) : undefined,
  48. };
  49. case DeviceContextKey.CPU_DESCRIPTION:
  50. return {
  51. subject: t('CPU Description'),
  52. value: data.cpu_description,
  53. };
  54. case DeviceContextKey.ARCH:
  55. return {
  56. subject: t('Architecture'),
  57. value: data.arch,
  58. };
  59. case DeviceContextKey.BATTERY_LEVEL:
  60. return {
  61. subject: t('Battery Level'),
  62. value: defined(data.battery_level) ? `${data.battery_level}%` : undefined,
  63. };
  64. case DeviceContextKey.BATTERY_STATUS:
  65. return {
  66. subject: t('Battery Status'),
  67. value: data.battery_status,
  68. };
  69. case DeviceContextKey.ORIENTATION:
  70. return {
  71. subject: t('Orientation'),
  72. value: data.orientation,
  73. };
  74. case 'memory':
  75. const {memory_size, free_memory, usable_memory} = data;
  76. return {
  77. subject: t('Memory'),
  78. value:
  79. memory_size && free_memory && usable_memory
  80. ? formatMemory(memory_size, free_memory, usable_memory)
  81. : undefined,
  82. };
  83. case 'storage':
  84. const {storage_size, free_storage, external_storage_size, external_free_storage} =
  85. data;
  86. return {
  87. subject: t('Capacity'),
  88. value:
  89. storage_size && free_storage && external_storage_size && external_free_storage
  90. ? formatStorage(
  91. storage_size,
  92. free_storage,
  93. external_storage_size,
  94. external_free_storage
  95. )
  96. : undefined,
  97. };
  98. case DeviceContextKey.FREE_STORAGE: {
  99. return {
  100. subject: t('Free Storage'),
  101. value: data.free_storage ? <FileSize bytes={data.free_storage} /> : undefined,
  102. };
  103. }
  104. case DeviceContextKey.STORAGE_SIZE: {
  105. return {
  106. subject: t('Storage Size'),
  107. value: data.storage_size ? <FileSize bytes={data.storage_size} /> : undefined,
  108. };
  109. }
  110. case DeviceContextKey.EXTERNAL_STORAGE_SIZE: {
  111. return {
  112. subject: t('External Storage Size'),
  113. value: data.external_storage_size ? (
  114. <FileSize bytes={data.external_storage_size} />
  115. ) : undefined,
  116. };
  117. }
  118. case DeviceContextKey.EXTERNAL_FREE_STORAGE: {
  119. return {
  120. subject: t('External Free Storage'),
  121. value: data.external_free_storage ? (
  122. <FileSize bytes={data.external_free_storage} />
  123. ) : undefined,
  124. };
  125. }
  126. case DeviceContextKey.SIMULATOR:
  127. return {
  128. subject: t('Simulator'),
  129. value: data.simulator,
  130. };
  131. case DeviceContextKey.BOOT_TIME:
  132. return {
  133. subject: t('Boot Time'),
  134. value: getRelativeTimeFromEventDateCreated(
  135. event.dateCreated ? event.dateCreated : event.dateReceived,
  136. data.boot_time
  137. ),
  138. };
  139. case DeviceContextKey.DEVICE_TYPE:
  140. return {
  141. subject: t('Device Type'),
  142. value: data.device_type,
  143. };
  144. case DeviceContextKey.BRAND:
  145. return {
  146. subject: t('Brand'),
  147. value: data.brand,
  148. };
  149. case DeviceContextKey.CHARGING:
  150. return {
  151. subject: t('Charging'),
  152. value: data.charging,
  153. };
  154. case DeviceContextKey.LOW_MEMORY:
  155. return {
  156. subject: t('Low Memory'),
  157. value: data.low_memory,
  158. };
  159. case DeviceContextKey.FREE_MEMORY:
  160. return {
  161. subject: t('Free Memory'),
  162. value: data.free_memory ? <FileSize bytes={data.free_memory} /> : undefined,
  163. };
  164. case DeviceContextKey.MEMORY_SIZE:
  165. return {
  166. subject: t('Memory Size'),
  167. value: data.memory_size ? <FileSize bytes={data.memory_size} /> : undefined,
  168. };
  169. case DeviceContextKey.USABLE_MEMORY:
  170. return {
  171. subject: t('Usable Memory'),
  172. value: data.usable_memory ? <FileSize bytes={data.usable_memory} /> : undefined,
  173. };
  174. case DeviceContextKey.MANUFACTURER:
  175. return {
  176. subject: t('Manufacturer'),
  177. value: data.manufacturer,
  178. };
  179. case DeviceContextKey.ONLINE:
  180. return {
  181. subject: t('Online'),
  182. value: data.online,
  183. };
  184. case DeviceContextKey.SCREEN_DENSITY:
  185. return {
  186. subject: t('Screen Density'),
  187. value: data.screen_density,
  188. };
  189. case DeviceContextKey.SCREEN_DPI:
  190. return {
  191. subject: t('Screen DPI'),
  192. value: data.screen_dpi,
  193. };
  194. case DeviceContextKey.SCREEN_HEIGHT_PIXELS:
  195. return {
  196. subject: t('Screen Height Pixels'),
  197. value: data.screen_height_pixels,
  198. };
  199. case DeviceContextKey.SCREEN_RESOLUTION:
  200. return {
  201. subject: t('Screen Resolution'),
  202. value: data.screen_resolution,
  203. };
  204. case DeviceContextKey.SCREEN_WIDTH_PIXELS:
  205. return {
  206. subject: t('Screen Width Pixels'),
  207. value: data.screen_width_pixels,
  208. };
  209. default:
  210. return undefined;
  211. }
  212. }