|
109 | 109 |
|
110 | 110 | ["total", "prev-total"].forEach(function(prop) {
|
111 | 111 | dashboard["cr-session"][prop] = (dashboard.cr_s[prop] === 0) ? 0 : (Math.round(Math.min(dashboard.cr[prop] / dashboard.cr_s[prop], 1) * 100) / 100);
|
112 |
| - dashboard.crau[prop] = Math.max(0, dashboard.crauf[prop] + dashboard.craunf[prop] - dashboard.cr_u[prop]); |
113 |
| - dashboard.crses[prop] = Math.max(0, dashboard.crfses[prop] + dashboard.crnfses[prop] - dashboard.cr_s[prop]); |
114 |
| - dashboard.crtf[prop] = Math.round(Math.min(dashboard.crf[prop] / dashboard.cr_s[prop], 1) * 100) / 100; |
115 |
| - dashboard.crtnf[prop] = Math.round(Math.min(dashboard.crnf[prop] / dashboard.cr_s[prop], 1) * 100) / 100; |
| 112 | + dashboard.crau[prop] = Math.max(0, dashboard.crauf[prop] + dashboard.craunf[prop]); |
| 113 | + dashboard.crses[prop] = Math.max(0, dashboard.crfses[prop] + dashboard.crnfses[prop]); |
| 114 | + dashboard.crtf[prop] = (dashboard.cr_s[prop] === 0) ? 0 : (Math.round(Math.min(dashboard.crf[prop] / dashboard.cr_s[prop], 1) * 100) / 100); |
| 115 | + dashboard.crtnf[prop] = (dashboard.cr_s[prop] === 0) ? 0 : (Math.round(Math.min(dashboard.crnf[prop] / dashboard.cr_s[prop], 1) * 100) / 100); |
116 | 116 |
|
117 | 117 | });
|
118 | 118 |
|
|
122 | 122 |
|
123 | 123 | ["crau", "craunf", "crauf"].forEach(function(name) {
|
124 | 124 | ["total", "prev-total"].forEach(function(prop) {
|
125 |
| - dashboard[name][prop] = Math.min(100, (dashboard.cr_u[prop] === 0) ? 100 : (dashboard[name][prop] / dashboard.cr_u[prop] * 100)); |
| 125 | + dashboard[name][prop] = Math.min(100, (dashboard.cr_u[prop] === 0 || dashboard[name][prop] === 0) ? 100 : ((dashboard[name][prop] - dashboard.cr_u[prop]) / dashboard.cr_u[prop] * 100)); |
126 | 126 | });
|
127 | 127 | populateMetric(name, true);
|
128 | 128 | });
|
129 | 129 |
|
130 | 130 | ["crses", "crnfses", "crfses"].forEach(function(name) {
|
131 | 131 | ["total", "prev-total"].forEach(function(prop) {
|
132 |
| - dashboard[name][prop] = Math.min(100, (dashboard.cr_s[prop] === 0) ? 100 : (dashboard[name][prop] / dashboard.cr_s[prop] * 100)); |
| 132 | + dashboard[name][prop] = Math.min(100, (dashboard.cr_s[prop] === 0 || dashboard[name][prop] === 0) ? 100 : ((dashboard[name][prop] - dashboard.cr_s[prop]) / dashboard.cr_s[prop] * 100)); |
133 | 133 | });
|
134 | 134 | populateMetric(name, true);
|
135 | 135 | });
|
|
193 | 193 | return (obj.cr_s === 0) ? 0 : Math.round(Math.min((obj.crf + obj.crnf) / obj.cr_s, 1) * 100) / 100;
|
194 | 194 | },
|
195 | 195 | "^crses$": function(obj) {
|
196 |
| - return (obj.cr_s === 0) ? 100 : Math.round(Math.min(Math.max((obj.crfses + obj.crnfses - obj.cr_s) / obj.cr_s, 0), 1) * 10000) / 100; |
| 196 | + return (obj.cr_s === 0 || obj.crfses + obj.crnfses === 0) ? 100 : Math.round(Math.min(Math.max((obj.crfses + obj.crnfses - obj.cr_s) / obj.cr_s, 0), 1) * 10000) / 100; |
197 | 197 | },
|
198 | 198 | "^crau$": function(obj) {
|
199 |
| - return (obj.cr_u === 0) ? 100 : Math.round(Math.min(Math.max((obj.crauf + obj.craunf - obj.cr_u) / obj.cr_u, 0), 1) * 10000) / 100; |
| 199 | + return (obj.cr_u === 0 || obj.crauf + obj.craunf === 0) ? 100 : Math.round(Math.min(Math.max((obj.crauf + obj.craunf - obj.cr_u) / obj.cr_u, 0), 1) * 10000) / 100; |
200 | 200 | },
|
201 | 201 | "^cr$": function(obj) {
|
202 | 202 | return obj.crf + obj.crnf;
|
|
208 | 208 | return (obj.cr_s === 0) ? 0 : Math.round(Math.min(obj[state.activeFilter.fatality === "fatal" ? "crf" : "crnf"] / obj.cr_s, 1) * 100) / 100;
|
209 | 209 | },
|
210 | 210 | "^crn?fses$": function(obj) {
|
211 |
| - return (obj.cr_s === 0) ? 100 : Math.round(Math.min(obj[name] / obj.cr_s, 1) * 10000) / 100; |
| 211 | + return (obj.cr_s === 0 || obj[name] === 0) ? 100 : Math.round(Math.min(obj[name] / obj.cr_s, 1) * 10000) / 100; |
212 | 212 | },
|
213 | 213 | "^craun?f$": function(obj) {
|
214 |
| - return (obj.cr_s === 0) ? 100 : Math.round(Math.min(obj[name] / obj.cr_u, 1) * 10000) / 100; |
| 214 | + return (obj.cr_s === 0 || obj[name] === 0) ? 100 : Math.round(Math.min(obj[name] / obj.cr_u, 1) * 10000) / 100; |
215 | 215 | }
|
216 | 216 | };
|
217 | 217 |
|
|
264 | 264 | statistics.users = {
|
265 | 265 | affected: {
|
266 | 266 | total: state.rawData.users.affected,
|
267 |
| - totalPercent: parseFloat(((state.rawData.users.affected / state.rawData.users.total) * 100).toFixed(2)), |
| 267 | + totalPercent: parseFloat((((state.rawData.users.total === 0) ? 0 : (state.rawData.users.affected / state.rawData.users.total)) * 100).toFixed(2)), |
268 | 268 | fatal: state.rawData.users.fatal,
|
269 |
| - fatalPercent: parseFloat(((state.rawData.users.fatal / state.rawData.users.total) * 100).toFixed(2)), |
| 269 | + fatalPercent: parseFloat((((state.rawData.users.total === 0) ? 0 : (state.rawData.users.fatal / state.rawData.users.total)) * 100).toFixed(2)), |
270 | 270 | nonFatal: (state.rawData.users.affected - state.rawData.users.fatal),
|
271 |
| - nonFatalPercent: parseFloat((((state.rawData.users.affected - state.rawData.users.fatal) / state.rawData.users.total) * 100).toFixed(2)), |
| 271 | + nonFatalPercent: parseFloat((((state.rawData.users.total === 0) ? 0 : ((state.rawData.users.affected - state.rawData.users.fatal) / state.rawData.users.total)) * 100).toFixed(2)), |
272 | 272 | },
|
273 | 273 | notAffected: {
|
274 | 274 | total: state.rawData.users.affected,
|
|
281 | 281 | statistics.crashes = {
|
282 | 282 | total: state.rawData.crashes.total,
|
283 | 283 | fatal: state.rawData.crashes.fatal,
|
284 |
| - fatalPercent: (state.rawData.crashes.fatal / state.rawData.crashes.total) * 100, |
| 284 | + fatalPercent: ((state.rawData.crashes.total === 0) ? 0 : (state.rawData.crashes.fatal / state.rawData.crashes.total)) * 100, |
285 | 285 | nonFatal: state.rawData.crashes.nonfatal,
|
286 |
| - nonFatalPercent: (state.rawData.crashes.nonfatal / state.rawData.crashes.total) * 100, |
| 286 | + nonFatalPercent: ((state.rawData.crashes.total === 0) ? 0 : (state.rawData.crashes.nonfatal / state.rawData.crashes.total)) * 100, |
287 | 287 | new: state.rawData.crashes.news,
|
288 |
| - newPercent: (state.rawData.crashes.news / state.rawData.crashes.total) * 100, |
| 288 | + newPercent: ((state.rawData.crashes.total === 0) ? 0 : (state.rawData.crashes.news / state.rawData.crashes.total)) * 100, |
289 | 289 | resolved: state.rawData.crashes.resolved,
|
290 |
| - resolvedPercent: parseFloat(((state.rawData.crashes.resolved / state.rawData.crashes.total) * 100).toFixed(2)), |
| 290 | + resolvedPercent: parseFloat((((state.rawData.crashes.total === 0) ? 0 : (state.rawData.crashes.resolved / state.rawData.crashes.total)) * 100).toFixed(2)), |
291 | 291 | unresolved: (state.rawData.crashes.total - state.rawData.crashes.resolved),
|
292 |
| - unresolvedPercent: parseFloat((((state.rawData.crashes.total - state.rawData.crashes.resolved) / state.rawData.crashes.total) * 100).toFixed(2)), |
| 292 | + unresolvedPercent: parseFloat(((((state.rawData.crashes.total === 0) ? 0 : (state.rawData.crashes.total - state.rawData.crashes.resolved) / state.rawData.crashes.total)) * 100).toFixed(2)), |
293 | 293 | reoccured: state.rawData.crashes.renewed
|
294 | 294 | };
|
295 | 295 |
|
|
299 | 299 | Object.keys(state.rawData.crashes.os).forEach(function(platform) {
|
300 | 300 | statistics.topPlatforms[platform] = {
|
301 | 301 | count: countlyCommon.getShortNumber(state.rawData.crashes.os[platform]),
|
302 |
| - percent: (state.rawData.crashes.os[platform] / statistics.crashes.total) * 100 |
| 302 | + percent: ((statistics.crashes.total === 0) ? 0 : (state.rawData.crashes.os[platform] / statistics.crashes.total)) * 100 |
303 | 303 | };
|
304 | 304 | });
|
305 | 305 |
|
|
0 commit comments