release.tsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. import type {TimeseriesValue} from './core';
  2. import type {Commit} from './integrations';
  3. import type {PlatformKey} from './project';
  4. import type {User} from './user';
  5. export enum ReleaseStatus {
  6. ACTIVE = 'open',
  7. ARCHIVED = 'archived',
  8. }
  9. export type SourceMapsArchive = {
  10. date: string;
  11. fileCount: number;
  12. id: number;
  13. name: string;
  14. type: 'release';
  15. };
  16. export type Artifact = {
  17. dateCreated: string;
  18. dist: string | null;
  19. headers: {'Content-Type': string} | Record<string, unknown>;
  20. id: string;
  21. name: string;
  22. sha1: string;
  23. size: number;
  24. };
  25. export type Deploy = {
  26. dateFinished: string;
  27. dateStarted: string;
  28. environment: string;
  29. id: string;
  30. name: string;
  31. url: string;
  32. version: string;
  33. };
  34. interface RawVersion {
  35. raw: string;
  36. }
  37. export interface SemverVersion extends RawVersion {
  38. buildCode: string | null;
  39. components: number;
  40. major: number;
  41. minor: number;
  42. patch: number;
  43. pre: string | null;
  44. }
  45. export type VersionInfo = {
  46. buildHash: string | null;
  47. description: string;
  48. package: string | null;
  49. version: RawVersion | SemverVersion;
  50. };
  51. export interface BaseRelease {
  52. dateCreated: string;
  53. dateReleased: string;
  54. id: string;
  55. ref: string;
  56. shortVersion: string;
  57. status: ReleaseStatus;
  58. url: string;
  59. version: string;
  60. }
  61. export interface Release extends BaseRelease, ReleaseData {
  62. projects: ReleaseProject[];
  63. }
  64. export interface ReleaseWithHealth extends BaseRelease, ReleaseData {
  65. projects: Array<Required<ReleaseProject>>;
  66. }
  67. interface ReleaseData {
  68. authors: Array<User | {email: string; name: string}>;
  69. commitCount: number;
  70. currentProjectMeta: {
  71. firstReleaseVersion: string | null;
  72. lastReleaseVersion: string | null;
  73. nextReleaseVersion: string | null;
  74. prevReleaseVersion: string | null;
  75. sessionsLowerBound: string | null;
  76. sessionsUpperBound: string | null;
  77. };
  78. data: Record<string, unknown>;
  79. deployCount: number;
  80. fileCount: number | null;
  81. firstEvent: string;
  82. lastEvent: string;
  83. // TODO(ts)
  84. newGroups: number;
  85. versionInfo: VersionInfo;
  86. adoptionStages?: Record<
  87. string,
  88. {
  89. adopted: string | null;
  90. stage: string | null;
  91. unadopted: string | null;
  92. }
  93. >;
  94. lastCommit?: Commit;
  95. lastDeploy?: Deploy;
  96. owner?: any;
  97. userAgent?: string;
  98. }
  99. export type CurrentRelease = {
  100. environment: string;
  101. firstSeen: string;
  102. lastSeen: string;
  103. release: Release;
  104. stats: {
  105. // 24h/30d is hardcoded in GroupReleaseWithStatsSerializer
  106. '24h': TimeseriesValue[];
  107. '30d': TimeseriesValue[];
  108. };
  109. };
  110. export type ReleaseProject = {
  111. id: number;
  112. name: string;
  113. newGroups: number;
  114. platform: PlatformKey;
  115. platforms: PlatformKey[];
  116. slug: string;
  117. hasHealthData?: boolean;
  118. healthData?: Health;
  119. };
  120. /**
  121. * From the `/releases/stats/` endpoint
  122. */
  123. export type ReleaseMetaBasic = {
  124. date: string;
  125. version: string;
  126. };
  127. export type ReleaseMeta = {
  128. commitCount: number;
  129. commitFilesChanged: number;
  130. deployCount: number;
  131. isArtifactBundle: boolean;
  132. newGroups: number;
  133. projects: ReleaseProject[];
  134. releaseFileCount: number;
  135. released: string;
  136. version: string;
  137. versionInfo: VersionInfo;
  138. };
  139. /**
  140. * Release health
  141. */
  142. export type Health = {
  143. adoption: number | null;
  144. crashFreeSessions: number | null;
  145. crashFreeUsers: number | null;
  146. durationP50: number | null;
  147. durationP90: number | null;
  148. hasHealthData: boolean;
  149. sessionsAdoption: number | null;
  150. sessionsCrashed: number;
  151. sessionsErrored: number;
  152. stats: HealthGraphData;
  153. totalProjectSessions24h: number | null;
  154. totalProjectUsers24h: number | null;
  155. totalSessions: number;
  156. totalSessions24h: number | null;
  157. totalUsers: number;
  158. totalUsers24h: number | null;
  159. };
  160. export type HealthGraphData = Record<string, TimeseriesValue[]>;
  161. export enum ReleaseComparisonChartType {
  162. CRASH_FREE_USERS = 'crashFreeUsers',
  163. HEALTHY_USERS = 'healthyUsers',
  164. ABNORMAL_USERS = 'abnormalUsers',
  165. ERRORED_USERS = 'erroredUsers',
  166. CRASHED_USERS = 'crashedUsers',
  167. CRASH_FREE_SESSIONS = 'crashFreeSessions',
  168. HEALTHY_SESSIONS = 'healthySessions',
  169. ABNORMAL_SESSIONS = 'abnormalSessions',
  170. ERRORED_SESSIONS = 'erroredSessions',
  171. CRASHED_SESSIONS = 'crashedSessions',
  172. SESSION_COUNT = 'sessionCount',
  173. USER_COUNT = 'userCount',
  174. ERROR_COUNT = 'errorCount',
  175. TRANSACTION_COUNT = 'transactionCount',
  176. FAILURE_RATE = 'failureRate',
  177. }
  178. export enum HealthStatsPeriodOption {
  179. AUTO = 'auto',
  180. TWENTY_FOUR_HOURS = '24h',
  181. }
  182. export type CrashFreeTimeBreakdown = Array<{
  183. crashFreeSessions: number | null;
  184. crashFreeUsers: number | null;
  185. date: string;
  186. totalSessions: number;
  187. totalUsers: number;
  188. }>;