@webex/internal-plugin-metrics 1.157.0 → 1.159.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/metrics.js CHANGED
@@ -24,8 +24,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
24
24
 
25
25
  var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
26
26
 
27
- var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
28
-
29
27
  var _webexCore = require("@webex/webex-core");
30
28
 
31
29
  var _common = require("@webex/common");
@@ -102,7 +100,6 @@ var Metrics = _webexCore.WebexPlugin.extend({
102
100
  };
103
101
  payload.tags = _objectSpread(_objectSpread({}, props.tags), {}, {
104
102
  browser: getBrowserName(),
105
- org_id: this.webex.credentials.getOrgId(),
106
103
  os: getOSName(),
107
104
  // Node does not like this so we need to check if it exists or not
108
105
  // eslint-disable-next-line no-undef
@@ -111,6 +108,13 @@ var Metrics = _webexCore.WebexPlugin.extend({
111
108
  client_id: this.webex.credentials.config.client_id,
112
109
  user_id: this.webex.internal.device.userId
113
110
  });
111
+
112
+ try {
113
+ payload.tags.org_id = this.webex.credentials.getOrgId();
114
+ } catch (_unused) {
115
+ this.logger.info('metrics: unable to get orgId');
116
+ }
117
+
114
118
  payload.fields = _objectSpread(_objectSpread({}, props.fields), {}, {
115
119
  browser_version: getBrowserVersion(),
116
120
  os_version: getOSVersion(),
@@ -132,9 +136,11 @@ var Metrics = _webexCore.WebexPlugin.extend({
132
136
 
133
137
  if (props.eventPayload) {
134
138
  payload.eventPayload = props.eventPayload;
135
- }
139
+ } // Mocking the time in tests when running in node
140
+ // is impossible so unable to use Date.now()
141
+
136
142
 
137
- payload.timestamp = (0, _now.default)();
143
+ payload.timestamp = new Date().valueOf();
138
144
 
139
145
  if (preLoginId) {
140
146
  var _payload = {
@@ -191,7 +197,7 @@ var Metrics = _webexCore.WebexPlugin.extend({
191
197
  };
192
198
  return this.callDiagnosticEventsBatcher.request(event);
193
199
  },
194
- version: "1.157.0"
200
+ version: "1.159.0"
195
201
  });
196
202
 
197
203
  var _default = Metrics;
@@ -1 +1 @@
1
- {"version":3,"sources":["metrics.js"],"names":["getOSName","getOSVersion","getBrowserName","getBrowserVersion","getSparkUserAgent","webex","config","appName","appVersion","appPlatform","sparkUserAgent","CLIENT_NAME","Metrics","WebexPlugin","extend","children","batcher","Batcher","clientMetricsBatcher","ClientMetricsBatcher","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","namespace","submit","key","value","request","submitClientMetrics","eventName","props","preLoginId","Error","payload","metricName","tags","browser","org_id","credentials","getOrgId","os","domain","window","location","hostname","client_id","user_id","internal","device","userId","fields","browser_version","os_version","sdk_version","version","platform","spark_user_agent","type","metrics","context","app","locale","name","eventPayload","timestamp","_payload","postPreLoginMetric","aliasUser","method","api","resource","headers","body","qs","alias","getClientToken","then","token","authorization","toString","submitCallDiagnosticEvents","event"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAEA,wBAKI,+BALJ;AAAA,IACEA,SADF,qBACEA,SADF;AAAA,IAEEC,YAFF,qBAEEA,YAFF;AAAA,IAGEC,cAHF,qBAGEA,cAHF;AAAA,IAIEC,iBAJF,qBAIEA,iBAJF;;AAOA,SAASC,iBAAT,CAA2BC,KAA3B,EAAkC;AAAA;;AAChC,8BAIIA,KAJJ,aAIIA,KAJJ,uBAIIA,KAAK,CAAEC,MAJX,yDAIqB,EAJrB;AAAA,MACEC,OADF,QACEA,OADF;AAAA,MAEEC,UAFF,QAEEA,UAFF;AAAA,MAGEC,WAHF,QAGEA,WAHF;;AAMA,MAAIC,cAAc,GAAGC,mBAArB;;AAEA,MAAIJ,OAAJ,EAAa;AACXG,IAAAA,cAAc,eAAQH,OAAR,cAAmBC,UAAnB,aAAmBA,UAAnB,cAAmBA,UAAnB,GAAiC,KAAjC,CAAd;AACD;;AAED,MAAIC,WAAJ,EAAiB;AACfC,IAAAA,cAAc,eAAQD,WAAR,CAAd;AACD;;AAED,SAAOC,cAAP;AACD;;AAGD,IAAME,OAAO,GAAGC,uBAAYC,MAAZ,CAAmB;AACjCC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,OAAO,EAAEC,gBADD;AAERC,IAAAA,oBAAoB,EAAEC,6BAFd;AAGRC,IAAAA,2BAA2B,EAAEC;AAHrB,GADuB;AAOjCC,EAAAA,SAAS,EAAE,SAPsB;AASjCC,EAAAA,MATiC,kBAS1BC,GAT0B,EASrBC,KATqB,EASd;AACjB,WAAO,KAAKT,OAAL,CAAaU,OAAb,CAAqB,qBAAc;AAACF,MAAAA,GAAG,EAAHA;AAAD,KAAd,EAAqBC,KAArB,CAArB,CAAP;AACD,GAXgC;;AAcjC;AACF;AACA;AACA;AACA;AACA;AACA;AACEE,EAAAA,mBArBiC,+BAqBbC,SArBa,EAqBsB;AAAA,QAAxBC,KAAwB,uEAAhB,EAAgB;AAAA,QAAZC,UAAY;;AACrD,QAAI,CAACF,SAAL,EAAgB;AACd,YAAMG,KAAK,CAAC,oDAAD,CAAX;AACD;;AACD,QAAMC,OAAO,GAAG;AAACC,MAAAA,UAAU,EAAEL;AAAb,KAAhB;AAEAI,IAAAA,OAAO,CAACE,IAAR,mCACKL,KAAK,CAACK,IADX;AAEEC,MAAAA,OAAO,EAAEjC,cAAc,EAFzB;AAGEkC,MAAAA,MAAM,EAAE,KAAK/B,KAAL,CAAWgC,WAAX,CAAuBC,QAAvB,EAHV;AAIEC,MAAAA,EAAE,EAAEvC,SAAS,EAJf;AAME;AACA;AACAwC,MAAAA,MAAM,EAAE,OAAOC,MAAP,KAAkB,WAAlB,GAAgCA,MAAM,CAACC,QAAP,CAAgBC,QAAhB,IAA4B,aAA5D,GAA4E,aARtF;AAQqG;AACnGC,MAAAA,SAAS,EAAE,KAAKvC,KAAL,CAAWgC,WAAX,CAAuB/B,MAAvB,CAA8BsC,SAT3C;AAUEC,MAAAA,OAAO,EAAE,KAAKxC,KAAL,CAAWyC,QAAX,CAAoBC,MAApB,CAA2BC;AAVtC;AAcAhB,IAAAA,OAAO,CAACiB,MAAR,mCACKpB,KAAK,CAACoB,MADX;AAEEC,MAAAA,eAAe,EAAE/C,iBAAiB,EAFpC;AAGEgD,MAAAA,UAAU,EAAElD,YAAY,EAH1B;AAIEmD,MAAAA,WAAW,EAAE,KAAK/C,KAAL,CAAWgD,OAJ1B;AAKEC,MAAAA,QAAQ,EAAE,KALZ;AAMEC,MAAAA,gBAAgB,EAAEnD,iBAAiB,CAAC,KAAKC,KAAN;AANrC;AAUA2B,IAAAA,OAAO,CAACwB,IAAR,GAAe3B,KAAK,CAAC2B,IAAN,IAAc,KAAKnD,KAAL,CAAWC,MAAX,CAAkBmD,OAAlB,CAA0BD,IAAvD;AAGAxB,IAAAA,OAAO,CAAC0B,OAAR,mCACK7B,KAAK,CAAC6B,OADX;AAEEC,MAAAA,GAAG,EAAE;AACHN,QAAAA,OAAO,EAAE,KAAKhD,KAAL,CAAWgD;AADjB,OAFP;AAKEO,MAAAA,MAAM,EAAE,OALV;AAMErB,MAAAA,EAAE,EAAE;AACFsB,QAAAA,IAAI,EAAE7D,SAAS,EADb;AAEFqD,QAAAA,OAAO,EAAEpD,YAAY;AAFnB;AANN;;AAaA,QAAI4B,KAAK,CAACiC,YAAV,EAAwB;AACtB9B,MAAAA,OAAO,CAAC8B,YAAR,GAAuBjC,KAAK,CAACiC,YAA7B;AACD;;AAED9B,IAAAA,OAAO,CAAC+B,SAAR,GAAoB,mBAApB;;AAEA,QAAIjC,UAAJ,EAAgB;AACd,UAAMkC,QAAQ,GAAG;AACfP,QAAAA,OAAO,EAAE,CAACzB,OAAD;AADM,OAAjB,CADc,CAKd;AACA;AACA;;AACA,aAAO,KAAKiC,kBAAL,CAAwBD,QAAxB,EAAkClC,UAAlC,CAAP;AACD;;AAED,WAAO,KAAKZ,oBAAL,CAA0BQ,OAA1B,CAAkCM,OAAlC,CAAP;AACD,GArFgC;;AAuFjC;AACF;AACA;AACA;AACA;AACEkC,EAAAA,SA5FiC,qBA4FvBpC,UA5FuB,EA4FX;AACpB,WAAO,KAAKJ,OAAL,CAAa;AAClByC,MAAAA,MAAM,EAAE,MADU;AAElBC,MAAAA,GAAG,EAAE,SAFa;AAGlBC,MAAAA,QAAQ,EAAE,eAHQ;AAIlBC,MAAAA,OAAO,EAAE;AACP,6BAAqBxC;AADd,OAJS;AAOlByC,MAAAA,IAAI,EAAE,EAPY;AAQlBC,MAAAA,EAAE,EAAE;AACFC,QAAAA,KAAK,EAAE;AADL;AARc,KAAb,CAAP;AAYD,GAzGgC;AA2GjCR,EAAAA,kBA3GiC,8BA2GdjC,OA3Gc,EA2GLF,UA3GK,EA2GO;AAAA;;AACtC,WAAO,KAAKzB,KAAL,CAAWgC,WAAX,CAAuBqC,cAAvB,GAAwCC,IAAxC,CAA6C,UAACC,KAAD;AAAA,aAClD,KAAI,CAAClD,OAAL,CAAa;AACXyC,QAAAA,MAAM,EAAE,MADG;AAEXC,QAAAA,GAAG,EAAE,SAFM;AAGXC,QAAAA,QAAQ,EAAE,wBAHC;AAIXC,QAAAA,OAAO,EAAE;AACPO,UAAAA,aAAa,EAAED,KAAK,CAACE,QAAN,EADR;AAEP,+BAAqBhD;AAFd,SAJE;AAQXyC,QAAAA,IAAI,EAAEvC;AARK,OAAb,CADkD;AAAA,KAA7C,CAAP;AAWD,GAvHgC;AAyHjC+C,EAAAA,0BAzHiC,sCAyHN/C,OAzHM,EAyHG;AAClC,QAAMgD,KAAK,GAAG;AACZxB,MAAAA,IAAI,EAAE,kBADM;AAEZM,MAAAA,YAAY,EAAE9B;AAFF,KAAd;AAKA,WAAO,KAAKZ,2BAAL,CAAiCM,OAAjC,CAAyCsD,KAAzC,CAAP;AACD,GAhIgC;AAAA;AAAA,CAAnB,CAAhB;;eAmIepE,O","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {BrowserDetection} from '@webex/common';\n\nimport {CLIENT_NAME} from './config';\nimport Batcher from './batcher';\nimport ClientMetricsBatcher from './client-metrics-batcher';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-events-batcher';\n\nconst {\n getOSName,\n getOSVersion,\n getBrowserName,\n getBrowserVersion\n} = BrowserDetection();\n\nfunction getSparkUserAgent(webex) {\n const {\n appName,\n appVersion,\n appPlatform\n } = webex?.config ?? {};\n\n let sparkUserAgent = CLIENT_NAME;\n\n if (appName) {\n sparkUserAgent += ` ${appName}/${appVersion ?? '0.0'}`;\n }\n\n if (appPlatform) {\n sparkUserAgent += ` ${appPlatform}`;\n }\n\n return sparkUserAgent;\n}\n\n\nconst Metrics = WebexPlugin.extend({\n children: {\n batcher: Batcher,\n clientMetricsBatcher: ClientMetricsBatcher,\n callDiagnosticEventsBatcher: CallDiagnosticEventsBatcher\n },\n\n namespace: 'Metrics',\n\n submit(key, value) {\n return this.batcher.request(Object.assign({key}, value));\n },\n\n\n /**\n * This corresponds to #sendSemiStructured() in the deprecated metrics handler\n * @param {string} eventName\n * @param {Object} props\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n submitClientMetrics(eventName, props = {}, preLoginId) {\n if (!eventName) {\n throw Error('Missing behavioral metric name. Please provide one');\n }\n const payload = {metricName: eventName};\n\n payload.tags = {\n ...props.tags,\n browser: getBrowserName(),\n org_id: this.webex.credentials.getOrgId(),\n os: getOSName(),\n\n // Node does not like this so we need to check if it exists or not\n // eslint-disable-next-line no-undef\n domain: typeof window !== 'undefined' ? window.location.hostname || 'non-browser' : 'non-browser', // Check what else we could measure\n client_id: this.webex.credentials.config.client_id,\n user_id: this.webex.internal.device.userId\n };\n\n\n payload.fields = {\n ...props.fields,\n browser_version: getBrowserVersion(),\n os_version: getOSVersion(),\n sdk_version: this.webex.version,\n platform: 'Web',\n spark_user_agent: getSparkUserAgent(this.webex)\n };\n\n\n payload.type = props.type || this.webex.config.metrics.type;\n\n\n payload.context = {\n ...props.context,\n app: {\n version: this.webex.version\n },\n locale: 'en-US',\n os: {\n name: getOSName(),\n version: getOSVersion()\n }\n };\n\n\n if (props.eventPayload) {\n payload.eventPayload = props.eventPayload;\n }\n\n payload.timestamp = Date.now();\n\n if (preLoginId) {\n const _payload = {\n metrics: [payload]\n };\n\n // Do not batch these because pre-login events occur during onboarding, so we will be partially blind\n // to users' progress through the reg flow if we wait to persist pre-login metrics for people who drop off because\n // their metrics will not post from a queue flush in time\n return this.postPreLoginMetric(_payload, preLoginId);\n }\n\n return this.clientMetricsBatcher.request(payload);\n },\n\n /**\n * Issue request to alias a user's pre-login ID with their CI UUID\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n aliasUser(preLoginId) {\n return this.request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics',\n headers: {\n 'x-prelogin-userid': preLoginId\n },\n body: {},\n qs: {\n alias: true\n }\n });\n },\n\n postPreLoginMetric(payload, preLoginId) {\n return this.webex.credentials.getClientToken().then((token) =>\n this.request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics-prelogin',\n headers: {\n authorization: token.toString(),\n 'x-prelogin-userid': preLoginId\n },\n body: payload\n }));\n },\n\n submitCallDiagnosticEvents(payload) {\n const event = {\n type: 'diagnostic-event',\n eventPayload: payload\n };\n\n return this.callDiagnosticEventsBatcher.request(event);\n }\n});\n\nexport default Metrics;\n"]}
1
+ {"version":3,"sources":["metrics.js"],"names":["getOSName","getOSVersion","getBrowserName","getBrowserVersion","getSparkUserAgent","webex","config","appName","appVersion","appPlatform","sparkUserAgent","CLIENT_NAME","Metrics","WebexPlugin","extend","children","batcher","Batcher","clientMetricsBatcher","ClientMetricsBatcher","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","namespace","submit","key","value","request","submitClientMetrics","eventName","props","preLoginId","Error","payload","metricName","tags","browser","os","domain","window","location","hostname","client_id","credentials","user_id","internal","device","userId","org_id","getOrgId","logger","info","fields","browser_version","os_version","sdk_version","version","platform","spark_user_agent","type","metrics","context","app","locale","name","eventPayload","timestamp","Date","valueOf","_payload","postPreLoginMetric","aliasUser","method","api","resource","headers","body","qs","alias","getClientToken","then","token","authorization","toString","submitCallDiagnosticEvents","event"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {BrowserDetection} from '@webex/common';\n\nimport {CLIENT_NAME} from './config';\nimport Batcher from './batcher';\nimport ClientMetricsBatcher from './client-metrics-batcher';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-events-batcher';\n\nconst {\n getOSName,\n getOSVersion,\n getBrowserName,\n getBrowserVersion\n} = BrowserDetection();\n\nfunction getSparkUserAgent(webex) {\n const {\n appName,\n appVersion,\n appPlatform\n } = webex?.config ?? {};\n\n let sparkUserAgent = CLIENT_NAME;\n\n if (appName) {\n sparkUserAgent += ` ${appName}/${appVersion ?? '0.0'}`;\n }\n\n if (appPlatform) {\n sparkUserAgent += ` ${appPlatform}`;\n }\n\n return sparkUserAgent;\n}\n\n\nconst Metrics = WebexPlugin.extend({\n children: {\n batcher: Batcher,\n clientMetricsBatcher: ClientMetricsBatcher,\n callDiagnosticEventsBatcher: CallDiagnosticEventsBatcher\n },\n\n namespace: 'Metrics',\n\n submit(key, value) {\n return this.batcher.request(Object.assign({key}, value));\n },\n\n\n /**\n * This corresponds to #sendSemiStructured() in the deprecated metrics handler\n * @param {string} eventName\n * @param {Object} props\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n submitClientMetrics(eventName, props = {}, preLoginId) {\n if (!eventName) {\n throw Error('Missing behavioral metric name. Please provide one');\n }\n const payload = {metricName: eventName};\n\n payload.tags = {\n ...props.tags,\n browser: getBrowserName(),\n os: getOSName(),\n\n // Node does not like this so we need to check if it exists or not\n // eslint-disable-next-line no-undef\n domain: typeof window !== 'undefined' ? window.location.hostname || 'non-browser' : 'non-browser', // Check what else we could measure\n client_id: this.webex.credentials.config.client_id,\n user_id: this.webex.internal.device.userId\n };\n\n try {\n payload.tags.org_id = this.webex.credentials.getOrgId();\n }\n catch {\n this.logger.info('metrics: unable to get orgId');\n }\n\n\n payload.fields = {\n ...props.fields,\n browser_version: getBrowserVersion(),\n os_version: getOSVersion(),\n sdk_version: this.webex.version,\n platform: 'Web',\n spark_user_agent: getSparkUserAgent(this.webex)\n };\n\n\n payload.type = props.type || this.webex.config.metrics.type;\n\n\n payload.context = {\n ...props.context,\n app: {\n version: this.webex.version\n },\n locale: 'en-US',\n os: {\n name: getOSName(),\n version: getOSVersion()\n }\n };\n\n\n if (props.eventPayload) {\n payload.eventPayload = props.eventPayload;\n }\n\n // Mocking the time in tests when running in node\n // is impossible so unable to use Date.now()\n payload.timestamp = new Date().valueOf();\n\n if (preLoginId) {\n const _payload = {\n metrics: [payload]\n };\n\n // Do not batch these because pre-login events occur during onboarding, so we will be partially blind\n // to users' progress through the reg flow if we wait to persist pre-login metrics for people who drop off because\n // their metrics will not post from a queue flush in time\n return this.postPreLoginMetric(_payload, preLoginId);\n }\n\n return this.clientMetricsBatcher.request(payload);\n },\n\n /**\n * Issue request to alias a user's pre-login ID with their CI UUID\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n aliasUser(preLoginId) {\n return this.request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics',\n headers: {\n 'x-prelogin-userid': preLoginId\n },\n body: {},\n qs: {\n alias: true\n }\n });\n },\n\n postPreLoginMetric(payload, preLoginId) {\n return this.webex.credentials.getClientToken().then((token) =>\n this.request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics-prelogin',\n headers: {\n authorization: token.toString(),\n 'x-prelogin-userid': preLoginId\n },\n body: payload\n }));\n },\n\n submitCallDiagnosticEvents(payload) {\n const event = {\n type: 'diagnostic-event',\n eventPayload: payload\n };\n\n return this.callDiagnosticEventsBatcher.request(event);\n }\n});\n\nexport default Metrics;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-plugin-metrics",
3
- "version": "1.157.0",
3
+ "version": "1.159.0",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "author": "Ian W. Remmel <iremmel@cisco.com>",
@@ -17,10 +17,10 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@babel/runtime-corejs2": "^7.14.8",
20
- "@webex/internal-plugin-device": "1.157.0",
21
- "@webex/webex-core": "1.157.0",
22
- "@webex/common": "1.157.0",
23
- "@webex/common-timers": "1.157.0",
20
+ "@webex/internal-plugin-device": "1.159.0",
21
+ "@webex/webex-core": "1.159.0",
22
+ "@webex/common": "1.159.0",
23
+ "@webex/common-timers": "1.159.0",
24
24
  "envify": "^4.1.0"
25
25
  }
26
26
  }
package/src/metrics.js CHANGED
@@ -68,7 +68,6 @@ const Metrics = WebexPlugin.extend({
68
68
  payload.tags = {
69
69
  ...props.tags,
70
70
  browser: getBrowserName(),
71
- org_id: this.webex.credentials.getOrgId(),
72
71
  os: getOSName(),
73
72
 
74
73
  // Node does not like this so we need to check if it exists or not
@@ -78,6 +77,13 @@ const Metrics = WebexPlugin.extend({
78
77
  user_id: this.webex.internal.device.userId
79
78
  };
80
79
 
80
+ try {
81
+ payload.tags.org_id = this.webex.credentials.getOrgId();
82
+ }
83
+ catch {
84
+ this.logger.info('metrics: unable to get orgId');
85
+ }
86
+
81
87
 
82
88
  payload.fields = {
83
89
  ...props.fields,
@@ -109,7 +115,9 @@ const Metrics = WebexPlugin.extend({
109
115
  payload.eventPayload = props.eventPayload;
110
116
  }
111
117
 
112
- payload.timestamp = Date.now();
118
+ // Mocking the time in tests when running in node
119
+ // is impossible so unable to use Date.now()
120
+ payload.timestamp = new Date().valueOf();
113
121
 
114
122
  if (preLoginId) {
115
123
  const _payload = {
@@ -3,10 +3,11 @@
3
3
  */
4
4
 
5
5
  import {assert} from '@webex/test-helper-chai';
6
- import Metrics, {config} from '@webex/internal-plugin-metrics';
7
6
  import MockWebex from '@webex/test-helper-mock-webex';
7
+ import {Token, Credentials} from '@webex/webex-core';
8
8
  import FakeTimers from '@sinonjs/fake-timers';
9
9
  import sinon from 'sinon';
10
+ import Metrics, {config} from '@webex/internal-plugin-metrics';
10
11
 
11
12
  function promiseTick(count) {
12
13
  let promise = Promise.resolve();
@@ -60,7 +61,7 @@ describe('plugin-metrics', () => {
60
61
  };
61
62
 
62
63
  beforeEach(() => {
63
- clock = FakeTimers.install({now: Date.now()});
64
+ clock = FakeTimers.install({now: 0});
64
65
  });
65
66
 
66
67
  afterEach(() => {
@@ -85,13 +86,9 @@ describe('plugin-metrics', () => {
85
86
  });
86
87
  };
87
88
 
88
- webex.credentials = {
89
- ...webex.credentials,
90
- getOrgId: sinon.stub().returns('orgId'),
91
- config: {
92
- client_id: 'client_id'
93
- }
94
- };
89
+ webex.credentials = new Credentials(undefined, {parent: webex});
90
+ sinon.stub(webex.credentials, 'getClientToken').returns(Promise.resolve('token'));
91
+
95
92
  webex.internal = {...webex.internal, device: {userId: 'userId'}};
96
93
  webex.config = {
97
94
  ...webex.config,
@@ -138,7 +135,7 @@ describe('plugin-metrics', () => {
138
135
  describe('#submitClientMetrics()', () => {
139
136
  describe('before login', () => {
140
137
  it('posts pre-login metric', () => {
141
- const date = Date.now();
138
+ const date = clock.now;
142
139
  const promise = metrics.submitClientMetrics(eventName, mockPayload, preLoginId);
143
140
 
144
141
  return promiseTick(50)
@@ -157,6 +154,7 @@ describe('plugin-metrics', () => {
157
154
  assert.property(metric, 'timestamp');
158
155
  assert.property(metric, 'type');
159
156
  assert.property(metric, 'eventPayload');
157
+ assert.notProperty(metric.tags, 'org_id');
160
158
 
161
159
  assert.equal(metric.timestamp, date);
162
160
  assert.equal(metric.metricName, 'test_event');
@@ -169,13 +167,18 @@ describe('plugin-metrics', () => {
169
167
  });
170
168
  describe('after login', () => {
171
169
  it('submits a metric to clientmetrics', () => {
170
+ webex.credentials.supertoken = new Token({
171
+ access_token: 'a_b_orgid'
172
+ }, {parent: webex});
173
+
172
174
  const testPayload = {
173
175
  tags: {success: true},
174
176
  fields: {perceivedDurationInMillis: 314},
175
177
  context: {},
176
178
  eventPayload: {value: 'splunk business metric payload'}
177
179
  };
178
- const date = Date.now();
180
+ const date = clock.now;
181
+
179
182
  const promise = metrics.submitClientMetrics('test', testPayload);
180
183
 
181
184
  return promiseTick(50)
@@ -218,6 +221,13 @@ describe('plugin-metrics', () => {
218
221
  assert.equal(metric.eventPayload.value, 'splunk business metric payload');
219
222
  });
220
223
  });
224
+
225
+ it('throws error if no metric name is given', () => {
226
+ assert.throws(
227
+ () => metrics.submitClientMetrics(),
228
+ 'Missing behavioral metric name. Please provide one'
229
+ );
230
+ });
221
231
  });
222
232
  });
223
233