You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AnalyticsEvents.js 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. /**
  2. * Note that an event's own properties and its permanent properties are
  3. * are merged in one object. Because of this an event should never use
  4. * properties with names that are already used by permanent properties
  5. * (unless the intention is to override a permanent property). Here is a
  6. * (non-exhaustive) list of currently know permanent properties:
  7. *
  8. * abtestSuspendVideo
  9. * browserName
  10. * callstatsname
  11. * crossRegion
  12. * forceJvb121
  13. * region
  14. * roomName
  15. * shard
  16. * size
  17. * userAgent
  18. * userRegion
  19. *
  20. * The naming convention for the constants below uses "_" as a prefix or
  21. * suffix to indicate that known usage of the constant prepends or appends
  22. * a string to the name of the event.
  23. */
  24. /**
  25. * Properties: value
  26. *
  27. * TODO: document, reformat
  28. *
  29. * Full event names (uncertain):
  30. * conference.muc.joined (???)
  31. * conference.sharingDesktop.start (???)
  32. * conference.sharingDesktop.stop (???)
  33. * xmpp.attached (???)
  34. * xmpp.attaching (???)
  35. * xmpp.connected (???)
  36. * xmpp.connecting (???)
  37. * xmpp.session-initiate (???)
  38. */
  39. export const _CONNECTION_TIMES_ = '';
  40. /**
  41. * TODO: document, reformat (group together with other ICE events)
  42. *
  43. * Known full event names:
  44. * ice.initiator.checksDuration
  45. * ice.responder.checksDuration
  46. * p2p.ice.initiator.checksDuration
  47. * p2p.ice.responder.checksDuration
  48. *
  49. * Properties: value
  50. */
  51. export const _ICE_CHECKING_DURATION = 'checksDuration';
  52. /**
  53. * TODO: document, reformat
  54. *
  55. * Known full event names:
  56. * ice.checking
  57. * ice.closed
  58. * ice.completed
  59. * ice.connected
  60. * ice.disconnected
  61. * ice.failed
  62. * p2p.ice.checking
  63. * p2p.ice.closed
  64. * p2p.ice.completed
  65. * p2p.ice.connected
  66. * p2p.ice.disconnected
  67. * p2p.ice.failed
  68. *
  69. * Properties: value
  70. */
  71. export const _ICE_CONNECTION_STATE_ = 'ice';
  72. /**
  73. * TODO: document, reformat (group together with other ICE events)
  74. *
  75. * Known full event names:
  76. * ice.initiator.establishmentDuration
  77. * ice.responder.establishmentDuration
  78. * p2p.ice.initiator.establishmentDuration
  79. * p2p.ice.responder.establishmentDuration
  80. *
  81. * Properties: value
  82. */
  83. export const _ICE_ESTABLISHMENT_DURATION = 'establishmentDuration';
  84. /**
  85. * TODO: document, reformat
  86. *
  87. * Known full event names:
  88. * ice.initiator.gatheringDuration
  89. * ice.responder.gatheringDuration
  90. * p2p.ice.initiator.gatheringDuration
  91. * p2p.ice.responder.gatheringDuration
  92. *
  93. * Properties: value
  94. */
  95. export const _ICE_GATHERING_DURATION = 'gatheringDuration';
  96. /**
  97. * TODO: document, reformat
  98. *
  99. * Known full event names:
  100. * audio.no_data_from_source
  101. * video.no_data_from_source
  102. */
  103. export const _NO_DATA_FROM_SOURCE = 'no_data_from_source';
  104. /**
  105. * TODO: document, reformat
  106. *
  107. * Known full event names:
  108. * audio.track_unmute
  109. * video.track_unmute
  110. */
  111. export const _TRACK_UNMUTE = 'track_unmute';
  112. /**
  113. * TODO: document, reformat
  114. *
  115. * TTMF: Time To First Media
  116. *
  117. * Known full event names:
  118. * audio.ttfm
  119. * video.ttfm
  120. * audio.ttfm.muted
  121. * video.ttfm.muted
  122. */
  123. export const _TTFM_ = 'ttfm';
  124. /**
  125. * All average RTP stats are currently reported under 1 event name, but with
  126. * different properties that allows to distinguish between a P2P call, a
  127. * call relayed through TURN or the JVB, and multiparty vs 1:1.
  128. * Example structure of an "avg.rtp.stats" analytics event:
  129. *
  130. * {
  131. * p2p: true,
  132. * conferenceSize: 2,
  133. * localCandidateType: "relay",
  134. * remoteCandidateType: "relay",
  135. * transportType: "udp",
  136. *
  137. * "stat_avg_rtt": {
  138. * value: 200,
  139. * samples: [ 100, 200, 300 ]
  140. * },
  141. * "stat_avg_packetloss_total": {
  142. * value: 10,
  143. * samples: [ 5, 10, 15]
  144. * }
  145. * }
  146. *
  147. * Note that the samples array is currently emitted for debug purposes only
  148. * and can be removed anytime soon from the structure.
  149. *
  150. * Also not all values are always present in "avg.rtp.stats", some of the
  151. * values are obtained and calculated as part of different process/event
  152. * pipe. For example {@link ConnectionAvgStats} instances are doing the
  153. * reports for each {@link TraceablePeerConnection} and work independently
  154. * from the main stats pipe.
  155. */
  156. export const AVG_RTP_STATS = 'avg.rtp.stats';
  157. /**
  158. * Properties: none
  159. *
  160. * TODO: document, deprecate?
  161. */
  162. export const BRIDGE_DOWN = 'conference.bridgeDown';
  163. /**
  164. * Properties: none
  165. *
  166. * Known full event names:
  167. * conference.error.p2pSessionAcceptTimeout
  168. * conference.error.sessionAcceptTimeout
  169. *
  170. * TODO: document, reformat
  171. */
  172. export const CONFERENCE_ERROR_ = 'conference.error';
  173. /**
  174. * Properties: none
  175. *
  176. * TODO: document
  177. */
  178. export const CONNECTION_INTERRUPTED = 'connection.interrupted';
  179. /**
  180. * Properties: none
  181. *
  182. * Known full event names: NONE
  183. *
  184. * TODO: document, reformat?, deprecate?
  185. */
  186. export const CONNECTION_DISCONNECTED_ = 'connection.disconnected';
  187. /**
  188. * Properties: label
  189. *
  190. * Known full event names:
  191. * connection.failed.connection.droppedError
  192. * connection.failed.connection.otherError
  193. * connection.failed.connection.passwordRequired
  194. *
  195. * TODO: document, reformat
  196. */
  197. export const CONNECTION_FAILED_ = 'connection.failed';
  198. /**
  199. * Properties: none
  200. *
  201. * TODO: document
  202. */
  203. export const CONNECTION_RESTORED = 'connection.restored';
  204. /**
  205. * Properties: value
  206. *
  207. * TODO: document, deprecate (is it the same as the one which is part of
  208. * CONNECTION_TIMES?)
  209. */
  210. export const DATA_CHANNEL_OPEN = 'conference.dataChannel.open';
  211. /**
  212. * TODO: document, reformat
  213. */
  214. export const DEVICE_LIST = 'devices.deviceList';
  215. /**
  216. * User feedback event.
  217. * Properties: value, detailed
  218. *
  219. * TODO: document
  220. */
  221. export const FEEDBACK = 'feedback.rating';
  222. /**
  223. * Properties: none
  224. *
  225. * TODO: document
  226. */
  227. export const FOCUS_LEFT = 'conference.focusLeft';
  228. /**
  229. * Properties: none
  230. *
  231. * Known full event names:
  232. * getUserMedia.deviceNotFound.audio
  233. * getUserMedia.deviceNotFound.audio.video
  234. * getUserMedia.deviceNotFound.video
  235. * getUserMedia.deviceNotFound.screen
  236. *
  237. * TODO: document, reformat, merge with GET_USER_MEDIA_FAILED?
  238. */
  239. export const GET_USER_MEDIA_DEVICE_NOT_FOUND_
  240. = 'getUserMedia.deviceNotFound';
  241. /**
  242. * Properties: none
  243. *
  244. * Known full event names:
  245. * getUserMedia.fail.resolution.180
  246. * getUserMedia.fail.resolution.360
  247. * getUserMedia.fail.resolution.640
  248. * getUserMedia.fail.resolution.720
  249. * getUserMedia.fail.resolution.960
  250. *
  251. * TODO: reformat, merge with GET_USER_MEDIA_FAILED
  252. */
  253. export const GET_USER_MEDIA_FAIL_ = 'getUserMedia.fail';
  254. /**
  255. * Properties: value
  256. *
  257. * Known full event names:
  258. * getUserMedia.failed.Error
  259. * getUserMedia.failed.TypeError
  260. * getUserMedia.failed.audio.TypeError
  261. * getUserMedia.failed.audio.gum.general
  262. * getUserMedia.failed.audio.gum.permission_denied
  263. * getUserMedia.failed.audio.track.no_data_from_source
  264. * getUserMedia.failed.audio.video.180.gum.general
  265. * getUserMedia.failed.audio.video.360.gum.general
  266. * getUserMedia.failed.audio.video.360.gum.permission_denied
  267. * getUserMedia.failed.audio.video.360.track.no_data_from_source
  268. * getUserMedia.failed.audio.video.720.TypeError
  269. * getUserMedia.failed.audio.video.720.gum.constraint_failed
  270. * getUserMedia.failed.audio.video.720.gum.general
  271. * getUserMedia.failed.audio.video.720.gum.permission_denied
  272. * getUserMedia.failed.audio.video.720.track.no_data_from_source
  273. * getUserMedia.failed.audio.video.960.gum.permission_denied
  274. * getUserMedia.failed.audio.video.undefined.gum.general
  275. * getUserMedia.failed.desktop.TypeError
  276. * getUserMedia.failed.desktop.gum.chrome_extension_generic_error
  277. * getUserMedia.failed.desktop.gum.chrome_extension_installation_error
  278. * getUserMedia.failed.desktop.gum.chrome_extension_user_gesture_required
  279. * getUserMedia.failed.desktop.gum.general
  280. * getUserMedia.failed.desktop.track.no_data_from_source
  281. * getUserMedia.failed.gum.chrome_extension_generic_error
  282. * getUserMedia.failed.gum.chrome_extension_installation_error
  283. * getUserMedia.failed.gum.constraint_failed
  284. * getUserMedia.failed.gum.firefox_extension_needed
  285. * getUserMedia.failed.gum.general
  286. * getUserMedia.failed.gum.permission_denied
  287. * getUserMedia.failed.undefined
  288. * getUserMedia.failed.video.360.gum.permission_denied
  289. * getUserMedia.failed.video.720.TypeError
  290. * getUserMedia.failed.video.720.gum.constraint_failed
  291. * getUserMedia.failed.video.720.gum.general
  292. * getUserMedia.failed.video.720.gum.permission_denied
  293. * getUserMedia.failed.video.720.track.no_data_from_source
  294. * getUserMedia.failed.video.undefined.TypeError
  295. * getUserMedia.failed.video.undefined.gum.general
  296. * getUserMedia.failed.video.undefined.track.no_data_from_source
  297. *
  298. * TODO: reformat
  299. */
  300. export const GET_USER_MEDIA_FAILED_ = 'getUserMedia.failed';
  301. /**
  302. * Properties: value
  303. *
  304. * Known full event names:
  305. * getUserMedia.success
  306. * getUserMedia.success.audio
  307. * getUserMedia.success.audio.video.180
  308. * getUserMedia.success.audio.video.300
  309. * getUserMedia.success.audio.video.360
  310. * getUserMedia.success.audio.video.720
  311. * getUserMedia.success.audio.video.960
  312. * getUserMedia.success.audio.video.undefined
  313. * getUserMedia.success.desktop
  314. * getUserMedia.success.video.180
  315. * getUserMedia.success.video.360
  316. * getUserMedia.success.video.720
  317. * getUserMedia.success.video.960
  318. * getUserMedia.success.video.undefined
  319. *
  320. * TODO: document, reformat
  321. */
  322. export const GET_USER_MEDIA_SUCCESS_ = 'getUserMedia.success';
  323. /**
  324. * Properties: none
  325. *
  326. * Known full event names:
  327. * getUserMedia.userCancel.extensionInstall
  328. *
  329. * TODO: document, reformat
  330. */
  331. export const GET_USER_MEDIA_USER_CANCEL_ = 'getUserMedia.userCancel';
  332. /**
  333. * Properties: value
  334. *
  335. * The "value" property contains the difference in milliseconds between
  336. * the ICE establishment time for the P2P and JVB connections (e.g. a value
  337. * of 10 would indicate that the P2P was 10ms slower than JVB).
  338. */
  339. export const ICE_ESTABLISHMENT_DURATION_DIFF
  340. = 'ice.establishmentDurationDiff';
  341. /**
  342. * Properties: none
  343. *
  344. * TODO: document
  345. * TODO: do we need this in addition to _ICE_CONNECTION_STATE?
  346. */
  347. export const ICE_FAILED = 'connection.ice_failed';
  348. /**
  349. * Properties: none
  350. *
  351. * TODO: document
  352. */
  353. export const P2P_ESTABLISHED = 'p2p.established';
  354. /**
  355. * Properties: none
  356. *
  357. * TODO: document
  358. */
  359. export const P2P_FAILED = 'p2p.failed';
  360. /**
  361. * Properties: none
  362. *
  363. * TODO: document
  364. */
  365. export const P2P_SWITCH_TO_JVB = 'p2p.switch_to_jvb';
  366. /**
  367. * Properties: none
  368. *
  369. * TODO: document
  370. */
  371. export const REMOTELY_MUTED = 'conference.remotelyMuted';
  372. /**
  373. * Properties: value
  374. *
  375. * TODO: document
  376. *
  377. * The "value" property contains the delay in milliseconds between joining
  378. * the MUC and receiving a Jingle session-initiate from Jicofo (but not
  379. * P2P).
  380. */
  381. export const SESSION_INITIATE = 'session.initiate';
  382. /**
  383. * Properties: value
  384. *
  385. * TODO: document
  386. */
  387. export const SESSION_INITIATE_RECEIVED = 'xmpp.session-initiate';
  388. /**
  389. * Properties: none
  390. *
  391. * TODO: document
  392. */
  393. export const SESSION_TERMINATE = 'session.terminate';
  394. /**
  395. * Properties: none
  396. *
  397. * TODO: document
  398. */
  399. export const SESSION_RESTART = 'session.restart';
  400. /**
  401. * Properties: value
  402. *
  403. * TODO: document
  404. */
  405. export const TRANSPORT_REPLACE_START = 'xmpp.transport-replace.start';
  406. /**
  407. * Properties: value
  408. *
  409. * TODO: document
  410. */
  411. export const TRANSPORT_REPLACE_SUCCESS = 'xmpp.transport-replace.success';