Skip to content

Commit 442801e

Browse files
authored
Merge branch 'master' into dependabot/npm_and_yarn/sass-1.79.3
2 parents 27063e8 + 7100cb3 commit 442801e

40 files changed

+2610
-270
lines changed

frontend/express/public/javascripts/countly/vue/components/date.js

+3
Original file line numberDiff line numberDiff line change
@@ -1138,6 +1138,9 @@
11381138
},
11391139
methods: {
11401140
loadValue: function(value) {
1141+
if (!value) {
1142+
return;
1143+
}
11411144
var changes = this.valueToInputState(value),
11421145
self = this;
11431146
changes.label = getRangeLabel(changes, this.type);

frontend/express/public/javascripts/countly/vue/components/dropdown.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@
529529
template: '<cly-dropdown class="cly-vue-more-options" ref="dropdown" :placement="placement" :disabled="disabled" v-on="$listeners">\
530530
<template v-slot:trigger>\
531531
<slot name="trigger">\
532-
<el-button :data-test-id="testId + \'-more-option-button\'" :size="size" :icon="icon" :type="type">\
532+
<el-button :data-test-id="testId + \'-more-option-button\'" :size="size" :icon="icon" :type="type" :disabled="disabledButton">\
533533
<span :data-test-id="testId + \'-more-option-text\'" v-if="text">{{text}}</span>\
534534
</el-button>\
535535
</slot>\
@@ -560,6 +560,10 @@
560560
type: Boolean,
561561
default: false
562562
},
563+
disabledButton: {
564+
type: Boolean,
565+
default: false,
566+
},
563567
placement: {
564568
type: String,
565569
default: 'bottom-end'

package-lock.json

+92-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"grunt-mocha-test": "0.13.3",
2424
"jsdoc": "^4.0.0",
2525
"mocha": "10.2.0",
26-
"nyc": "17.0.0",
26+
"nyc": "17.1.0",
2727
"should": "13.2.3",
2828
"supertest": "7.0.0"
2929
},

plugins/alerts/api/alertModules/cohorts.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const commonLib = require("../parts/common-lib.js");
99
const { ObjectId } = require('mongodb');
1010

1111
module.exports.check = async function({ alertConfigs: alert, done, scheduledTo: date }) {
12-
const app = await common.db.collection("apps").findOne({ _id: ObjectId(alert.selectedApps[0]) });
12+
const app = await common.readBatcher.getOne("apps", { _id: new ObjectId(alert.selectedApps[0]) });
1313
if (!app) {
1414
log.e(`App ${alert.selectedApps[0]} couldn't be found`);
1515
return done();
@@ -22,7 +22,7 @@ module.exports.check = async function({ alertConfigs: alert, done, scheduledTo:
2222

2323
if (compareType === commonLib.COMPARE_TYPE_ENUM.MORE_THAN) {
2424
if (metricValue > compareValue) {
25-
await commonLib.trigger({ alert, app, metricValue, date });
25+
await commonLib.trigger({ alert, app, metricValue, date }, log);
2626
}
2727
}
2828
else {
@@ -38,7 +38,7 @@ module.exports.check = async function({ alertConfigs: alert, done, scheduledTo:
3838
: change <= -compareValue;
3939

4040
if (shouldTrigger) {
41-
await commonLib.trigger({ alert, app, date, metricValue, metricValueBefore });
41+
await commonLib.trigger({ alert, app, date, metricValue, metricValueBefore }, log);
4242
}
4343
}
4444

plugins/alerts/api/alertModules/dataPoints.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ module.exports.check = async function({ alertConfigs: alert, done, scheduledTo:
1414
const selectedApp = alert.selectedApps[0];
1515
let apps;
1616
if (selectedApp === "all") {
17-
apps = await common.db.collection("apps").find().toArray();
17+
apps = await common.readBatcher.getMany("apps", {});
1818
}
1919
else {
20-
apps = [await common.db.collection("apps").findOne({ _id: ObjectId(selectedApp) })];
20+
apps = [await common.readBatcher.getOne("apps", { _id: new ObjectId(selectedApp) })];
2121
}
2222

2323
for (let app of apps) {
@@ -33,7 +33,7 @@ module.exports.check = async function({ alertConfigs: alert, done, scheduledTo:
3333

3434
if (compareType === commonLib.COMPARE_TYPE_ENUM.MORE_THAN) {
3535
if (metricValue > compareValue) {
36-
await commonLib.trigger({ alert, app, metricValue, date });
36+
await commonLib.trigger({ alert, app, metricValue, date }, log);
3737
}
3838
}
3939
else {
@@ -49,7 +49,7 @@ module.exports.check = async function({ alertConfigs: alert, done, scheduledTo:
4949
: change <= -compareValue;
5050

5151
if (shouldTrigger) {
52-
await commonLib.trigger({ alert, app, date, metricValue, metricValueBefore });
52+
await commonLib.trigger({ alert, app, date, metricValue, metricValueBefore }, log);
5353
}
5454
}
5555
}

plugins/alerts/api/alertModules/events.js

+4-10
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,8 @@ const METRIC_TO_PROPERTY_MAP = {
2121

2222
const AVERAGE_METRICS = ["average sum", "average duration"];
2323

24-
/**
25-
* Alert triggering logic
26-
* @param {Alert} alert - alert document
27-
* @param {function} done - callback function
28-
* @param {Date} date - scheduled date for the alert (job.next)
29-
*/
3024
module.exports.check = async({ alertConfigs: alert, done, scheduledTo: date }) => {
31-
const app = await common.db.collection("apps").findOne({ _id: ObjectId(alert.selectedApps[0]) });
25+
const app = await common.readBatcher.getOne("apps", { _id: new ObjectId(alert.selectedApps[0]) });
3226
if (!app) {
3327
log.e(`App ${alert.selectedApps[0]} couldn't be found`);
3428
return done();
@@ -55,7 +49,7 @@ module.exports.check = async({ alertConfigs: alert, done, scheduledTo: date }) =
5549

5650
if (compareType === commonLib.COMPARE_TYPE_ENUM.MORE_THAN) {
5751
if (metricValue > compareValue) {
58-
await commonLib.trigger({ alert, app, metricValue, date });
52+
await commonLib.trigger({ alert, app, metricValue, date }, log);
5953
}
6054
}
6155
else {
@@ -81,7 +75,7 @@ module.exports.check = async({ alertConfigs: alert, done, scheduledTo: date }) =
8175
: change <= -compareValue;
8276

8377
if (shouldTrigger) {
84-
await commonLib.trigger({ alert, app, date, metricValue, metricValueBefore });
78+
await commonLib.trigger({ alert, app, date, metricValue, metricValueBefore }, log);
8579
}
8680
}
8781
done();
@@ -97,7 +91,7 @@ module.exports.getEventMetricByDate = getEventMetricByDate;
9791
* @param {string} metric - c, s, dur
9892
* @param {Date} date - date of the value you're looking for
9993
* @param {string} period - hourly|daily|monthly
100-
* @param {object} segments - segmentation filter. e.g. {Category:"Electronics"}
94+
* @param {object=} segments - segmentation filter. e.g. {Category:"Electronics"}
10195
* @returns {Promise<number|undefined>} - a promise resolves to metric value or undefined
10296
*/
10397
async function getEventMetricByDate(app, event, metric, date, period, segments) {

plugins/alerts/api/alertModules/nps.js

+22-17
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,9 @@ module.exports.triggerByEvent = triggerByEvent;
1616
*/
1717
async function triggerByEvent(payload) {
1818
const allEvents = payload?.events;
19-
const appKey = payload?.app_key;
20-
if (!Array.isArray(allEvents) || !appKey) {
21-
return;
22-
}
19+
const app = payload?.app;
2320

24-
const app = await common.db.collection("apps").findOne({ key: appKey });
25-
if (!app) {
21+
if (!Array.isArray(allEvents) || !app) {
2622
return;
2723
}
2824

@@ -34,22 +30,28 @@ async function triggerByEvent(payload) {
3430
);
3531

3632
for (let event of validNPSEvents) {
37-
const alert = await common.db.collection("alerts").findOne({
33+
const alerts = await common.readBatcher.getMany("alerts", {
3834
selectedApps: app._id.toString(),
3935
alertDataSubType2: event.segmentation.widget_id,
4036
alertDataType: "nps",
4137
alertDataSubType: commonLib.TRIGGERED_BY_EVENT.nps,
4238
});
43-
if (!alert) {
39+
40+
if (!alerts || !alerts.length) {
4441
continue;
4542
}
4643

47-
await commonLib.trigger({ alert, app, date: new Date }, log);
44+
// trigger all alerts
45+
await Promise.all(alerts.map(alert => commonLib.trigger({
46+
alert,
47+
app,
48+
date: new Date,
49+
}, log)));
4850
}
4951
}
5052

5153
module.exports.check = async function({ alertConfigs: alert, done, scheduledTo: date }) {
52-
const app = await common.db.collection("apps").findOne({ _id: ObjectId(alert.selectedApps[0]) });
54+
const app = await common.readBatcher.getOne("apps", { _id: new ObjectId(alert.selectedApps[0]) });
5355
if (!app) {
5456
log.e(`App ${alert.selectedApps[0]} couldn't be found`);
5557
return done();
@@ -62,7 +64,7 @@ module.exports.check = async function({ alertConfigs: alert, done, scheduledTo:
6264

6365
if (compareType === commonLib.COMPARE_TYPE_ENUM.MORE_THAN) {
6466
if (metricValue > compareValue) {
65-
await commonLib.trigger({ alert, app, metricValue, date });
67+
await commonLib.trigger({ alert, app, metricValue, date }, log);
6668
}
6769
}
6870
else {
@@ -78,7 +80,7 @@ module.exports.check = async function({ alertConfigs: alert, done, scheduledTo:
7880
: change <= -compareValue;
7981

8082
if (shouldTrigger) {
81-
await commonLib.trigger({ alert, app, date, metricValue, metricValueBefore });
83+
await commonLib.trigger({ alert, app, date, metricValue, metricValueBefore }, log);
8284
}
8385
}
8486

@@ -91,7 +93,7 @@ module.exports.check = async function({ alertConfigs: alert, done, scheduledTo:
9193
* @param {string} nps - _id of the from feedback_widgets
9294
* @param {Date} date - date of the value you're looking for
9395
* @param {string} period - hourly|daily|monthly
94-
* @param {string} score - detractor|passive|promoter
96+
* @param {string=} score - detractor|passive|promoter
9597
* @returns {Promise<number|undefined>} - a promise resolves to metric value or undefined
9698
*/
9799
async function getResponsesByDate(app, nps, date, period, score) {
@@ -132,13 +134,16 @@ async function getResponsesByDate(app, nps, date, period, score) {
132134
* Calculates the sum of all valid responses inside a nps{app_id} date record.
133135
* @param {object} scope - object scope: Daily or hourly object from db
134136
* @param {string} nps - feedback_widgets _id
135-
* @param {string} score - detractor|passive|promoter
137+
* @param {string=} score - detractor|passive|promoter
136138
* @returns {number|undefined} - number of valid responses
137139
*/
138140
function sumOfAllResponses(scope, nps, score) {
139141
if (!scope) {
140142
return;
141143
}
144+
if (!score) {
145+
score = "detractor|passive|promoter";
146+
}
142147

143148
const recordKeyReg = new RegExp("\\*\\*\\d{1,2}\\*\\*" + nps + "\\*\\*(" + score + ")$");
144149
let numberOfResponses;
@@ -161,9 +166,9 @@ function sumOfAllResponses(scope, nps, score) {
161166

162167
/*
163168
(async function() {
164-
const app = { _id: ObjectId("65c1f875a12e98a328d5eb9e"), timezone: "Europe/Istanbul" };
165-
const nps = "65c383fcb46a4d172d7c5911";
166-
const date = new Date("2024-02-07T12:00:00.000Z");
169+
const app = {name: "test", _id: new ObjectId("6600901a71159e99a3434253"), timezone: "Europe/Istanbul", plugins: null };
170+
const nps = "6600909ed476e1837317dc52";
171+
const date = new Date("2024-09-16T12:00:00.000Z");
167172
168173
let data = await getResponsesByDate(app, nps, date, "monthly");
169174
console.log("monthly:", data);

0 commit comments

Comments
 (0)