Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
1f504d9
Removed unused push settings from ui tests
Dec 15, 2025
dcafef7
Merge branch 'feature/ingestion' of https://github.com/Countly/countl…
Dec 15, 2025
f1addb1
Merge branch 'newarchitecture' into feature/ingestion
Cookiezaurs Dec 15, 2025
5574fb4
fx
Dec 15, 2025
e368cd5
Updated jobs datatable column name
can-angun Dec 15, 2025
cb6ae9a
Merge branch 'feature/ingestion' of https://github.com/Countly/countl…
Dec 15, 2025
7f5ef67
Merge branch 'feature/ingestion' of github.com:Countly/countly-server…
can-angun Dec 15, 2025
5983fe1
Merge branch 'feature/ingestion' of github.com:Countly/countly-server…
can-angun Dec 15, 2025
af7c7b6
Removed unused push settings again from ui tests
can-angun Dec 15, 2025
4fdee38
Added comment out to db viewer countly database empty control
can-angun Dec 15, 2025
c0eac0f
Better populated data for hc.
Dec 16, 2025
52206f2
Merge branch 'feature/ingestion' of https://github.com/Countly/countl…
Dec 16, 2025
6840bee
Merge branch 'newarchitecture' into feature/ingestion
Cookiezaurs Dec 16, 2025
5cc2cd9
Fixed last login value
can-angun Dec 16, 2025
d3231bf
Merge branch 'feature/ingestion' of github.com:Countly/countly-server…
can-angun Dec 16, 2025
55f409b
Merge branch 'newarchitecture' into feature/ingestion
Cookiezaurs Dec 16, 2025
4fe88a5
Fixed health check echart legend ids
can-angun Dec 16, 2025
549b93c
Updated db data name
can-angun Dec 16, 2025
087f165
Fixed selected item title text
can-angun Dec 16, 2025
b8ddaa5
Removed empty page control
can-angun Dec 16, 2025
75d0836
Added wait to verfiy log datatable
can-angun Dec 16, 2025
4a745a3
Added comment to wait
can-angun Dec 16, 2025
e3ce8b6
fx
Dec 16, 2025
bda8a3c
Merge branch 'feature/ingestion' of https://github.com/Countly/countl…
Dec 16, 2025
85bf473
Merge branch 'newarchitecture' into feature/ingestion
Cookiezaurs Dec 16, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion api/aggregator/processing.js
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ var crypto = require('crypto');

//Processing event meta
plugins.register("/aggregator", async function() {
var drillMetaCache = new Cacher(common.drillDb);
var drillMetaCache = new Cacher(common.drillDb, {configs_db: common.db}); //Used for Apps info
const eventSource = new UnifiedEventSource('drill-meta', {
mongo: {
db: common.drillDb,
Expand Down
2 changes: 1 addition & 1 deletion api/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ plugins.connectToAllDatabases().then(function() {

common.drillQueryRunner = granuralQueries;
if (common.drillDb) {
common.drillReadBatcher = new ReadBatcher(common.drillDb);
common.drillReadBatcher = new ReadBatcher(common.drillDb, {configs_db: common.db});
console.log('✓ Drill database components initialized');
}

Expand Down
2 changes: 1 addition & 1 deletion api/ingestor.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ plugins.connectToAllDatabases(true).then(function() {
common.readBatcher = new Cacher(common.db);
//common.insertBatcher = new InsertBatcher(common.db);
if (common.drillDb) {
common.drillReadBatcher = new Cacher(common.drillDb);
common.drillReadBatcher = new Cacher(common.drillDb, {configs_db: common.db});
}
/**
* Set Max Sockets
Expand Down
6 changes: 4 additions & 2 deletions api/parts/data/batcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -422,12 +422,14 @@ class ReadBatcher {
/**
* Create batcher instance
* @param {Db} db - database object
* @param {object} options - options for the batcher(Optional)
*/
constructor(db) {
constructor(db, options) {
this.db = db;
this.data = {};
this.promises = {};
plugins.loadConfigs(db, () => {
this.options = options || {};
plugins.loadConfigs((this.options.configs_db || db), () => {
this.loadConfig();
this.schedule();
});
Expand Down
3 changes: 2 additions & 1 deletion api/parts/data/cacher.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ class Cacher {
this.options = options || {};

this.transformationFunctions = {};
plugins.loadConfigs(db, () => {
var configs_db = (this.options.configs_db || this.db);
plugins.loadConfigs(configs_db, () => {
this.loadConfig(options);
this.schedule();
});
Expand Down
2 changes: 1 addition & 1 deletion jobServer/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ if (require.main === module) {

// Initialize drill-specific batchers if drillDb is available
if (drillDb) {
common.drillReadBatcher = new ReadBatcher(drillDb);
common.drillReadBatcher = new ReadBatcher(drillDb, {configs_db: countlyDb});
common.drillQueryRunner = new MongoDbQueryRunner(common.drillDb);
console.log('✓ Drill database components initialized');
}
Expand Down
2 changes: 1 addition & 1 deletion plugins/logger/api/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ Object.freeze(RequestLoggerStateEnum);
}
catch (ex) {
console.log("Failed fetching logs collection info: ", ex);
common.returnOutput(parameters, {capped: MAX_NUMBER_OF_LOG_ENTRIES, count: MAX_NUMBER_OF_LOG_ENTRIES, max: MAX_NUMBER_OF_LOG_ENTRIES, status: "error"});
common.returnOutput(parameters, {capped: MAX_NUMBER_OF_LOG_ENTRIES || 1000, count: MAX_NUMBER_OF_LOG_ENTRIES || 1000, max: MAX_NUMBER_OF_LOG_ENTRIES || 1000, status: "error"});
}
});
return true;
Expand Down
24 changes: 19 additions & 5 deletions plugins/populator/frontend/public/javascripts/countly.models.js
Original file line number Diff line number Diff line change
Expand Up @@ -1347,12 +1347,26 @@
params.sdk_version = getVersion(params.timestamp);
if (Math.random() > 0.9) {
//Add hc
var sc = -1;
var em = "";
var is_good = true;
if (Math.random() > 0.9) {
is_good = false;
}
var error_messages = ["Some error", "Some other error", "Critical error", "Minor error", "Major error", "Fatal error", "Non-fatal error"];

if (!is_good) {
sc = 502;
em = error_messages[getRandomInt(0, error_messages.length - 1)];
}


params.hc = JSON.stringify({
"hc": Math.random() * 10,
"el": Math.random() * 10,
"sc": Math.random() * 10,
"wl": Math.random() * 10,
"em": Math.random() * 10
"hc": parseInt(Math.random() * 30, 10),
"el": parseInt(Math.random() * 20, 10),
"sc": sc,
"wl": parseInt(Math.random() * 10, 10),
"em": em
});
}
bulk.push(params);
Expand Down
2 changes: 1 addition & 1 deletion plugins/views/api/aggregator.js
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ const crypto = require('crypto');
}
}
}
await common.manualWriteBatcher.flush("countly", "app_viewsdata");
await common.manualWriteBatcher.flush("countly", "app_viewdata");
await common.manualWriteBatcher.flush("countly", "app_viewsmeta");

}
Expand Down
2 changes: 1 addition & 1 deletion ui-tests/cypress/e2e/onboarding/onboarding.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ describe('Complete Onboarding', () => {
navigationHelpers.goToHooksPage();
hooksPageHelpers.verifyEmptyPageElements();
navigationHelpers.goToDbViewerPage();
dbCountlyPageHelpers.verifyEmptyPageElements();
//dbCountlyPageHelpers.verifyEmptyPageElements();
dbCountlyPageHelpers.clickCountlyOutDatabaseTab();
dbCountlyOutPageHelpers.verifyEmptyPageElements();
dbCountlyOutPageHelpers.clickCountlyFileSystemDatabaseTab();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1297,207 +1297,6 @@ const verifyPageElements = () => {

cy.scrollPageToTop();

//cy.verifyElement({ //TODO: push notifications feature is not visible on newarchitecture branch for now, check this
// labelElement: configurationsListBoxElements({ feature: FEATURE_TYPE.PUSH_NOTIFICATIONS }).LIST_BOX_ITEM,
// labelText: "Push Notifications",
// });

// cy.clickElement(configurationsListBoxElements({ feature: FEATURE_TYPE.PUSH_NOTIFICATIONS }).LIST_BOX_ITEM),

// cy.verifyElement({
// labelElement: configurationsListBoxElements({ feature: FEATURE_TYPE.PUSH_NOTIFICATIONS }).SELECTED_FEATURE_NAME,
// labelText: "Push Notifications",
// });

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.CONNECTION_FACTOR }).SELECTED_SUBFEATURE_TITLE,
labelText: "Time factor for exponential backoff between retries",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.CONNECTION_FACTOR }).SELECTED_SUBFEATURE_INPUT_NUMBER,
attr: "aria-valuenow",
attrText: "1000"
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.CONNECTION_RETRIES }).SELECTED_SUBFEATURE_TITLE,
labelText: "Number of connection retries",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.CONNECTION_RETRIES }).SELECTED_SUBFEATURE_INPUT_NUMBER,
attr: "aria-valuenow",
attrText: "3"
});

//TODO: there is no option on ci cd, check this
// cy.verifyElement({
// labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.NO_DUPLICATE }).SELECTED_SUBFEATURE_TITLE,
// labelText: "Ensure no duplicate notifications sent when scheduling messages",
// });

// cy.verifyElement({
// element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.NO_DUPLICATE }).SELECTED_SUBFEATURE_CHECKBOX,
// isChecked: false
// });

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.DEFAULT_CONTENT_AVAILABLE }).SELECTED_SUBFEATURE_TITLE,
labelText: "Set content-available to 1 by default for IOS",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.DEFAULT_CONTENT_AVAILABLE }).SELECTED_SUBFEATURE_CHECKBOX,
isChecked: false
});

//TODO: there is no option on ci cd, check this
// cy.verifyElement({
// labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.MESSAGE_TIMEOUT }).SELECTED_SUBFEATURE_TITLE,
// labelText: "Timeout of a message to be send (in milliseconds)",
// });

// cy.verifyElement({
// element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.MESSAGE_TIMEOUT }).SELECTED_SUBFEATURE_INPUT_NUMBER,
// attr: "aria-valuenow",
// attrText: "3600000"
// });

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.POOL_BYTES }).SELECTED_SUBFEATURE_TITLE,
labelText: "Bytes in binary stream batches",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.POOL_BYTES }).SELECTED_SUBFEATURE_INPUT_NUMBER,
attr: "aria-valuenow",
attrText: "10000"
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.POOL_CONCURRENCY }).SELECTED_SUBFEATURE_TITLE,
labelText: "Maximum number of same type connections",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.POOL_CONCURRENCY }).SELECTED_SUBFEATURE_INPUT_NUMBER,
attr: "aria-valuenow",
attrText: "5"
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.POOL_POOLS }).SELECTED_SUBFEATURE_TITLE,
labelText: "Maximum number of connections in total",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.POOL_POOLS }).SELECTED_SUBFEATURE_INPUT_NUMBER,
attr: "aria-valuenow",
attrText: "10"
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.POOL_PUSHES }).SELECTED_SUBFEATURE_TITLE,
labelText: "Number of notifications in stream batches",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.POOL_PUSHES }).SELECTED_SUBFEATURE_INPUT_NUMBER,
attr: "aria-valuenow",
attrText: "400"
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_HOST }).SELECTED_SUBFEATURE_TITLE,
labelText: "push-notification.proxy-host",
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_HOST }).SELECTED_SUBFEATURE_DESCRIPTION,
labelText: "Hostname or IP address of HTTP CONNECT proxy server to use for communication with APN & FCM when sending push notifications.",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_HOST }).SELECTED_SUBFEATURE_INPUT,
value: ""
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_PASS }).SELECTED_SUBFEATURE_TITLE,
labelText: "push-notification.proxy-password",
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_PASS }).SELECTED_SUBFEATURE_DESCRIPTION,
labelText: "(if needed) Password for proxy server HTTP Basic authentication",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_PASS }).SELECTED_SUBFEATURE_INPUT,
value: ""
});

cy.scrollPageToBottom();

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_PORT }).SELECTED_SUBFEATURE_TITLE,
labelText: "push-notification.proxy-port",
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_PORT }).SELECTED_SUBFEATURE_DESCRIPTION,
labelText: "Port number of the proxy server",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_PORT }).SELECTED_SUBFEATURE_INPUT,
value: ""
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_UNAUTHORIZED }).SELECTED_SUBFEATURE_TITLE,
labelText: "Do NOT check proxy HTTPS certificate",
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_UNAUTHORIZED }).SELECTED_SUBFEATURE_DESCRIPTION,
labelText: "(if needed) Allow self signed certificates without CA installed",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_UNAUTHORIZED }).SELECTED_SUBFEATURE_CHECKBOX,
isChecked: false
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_USER }).SELECTED_SUBFEATURE_TITLE,
labelText: "push-notification.proxy-user",
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_USER }).SELECTED_SUBFEATURE_DESCRIPTION,
labelText: "(if needed) Username for proxy server HTTP Basic authentication",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.PROXY_USER }).SELECTED_SUBFEATURE_INPUT,
value: ""
});

cy.verifyElement({
labelElement: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.SEND_A_HEAD }).SELECTED_SUBFEATURE_TITLE,
labelText: "Send notifications scheduled up to this many ms into the future",
});

cy.verifyElement({
element: configurationsListBoxElements({ subFeature: SETTINGS.PUSH_NOTIFICATIONS.SEND_A_HEAD }).SELECTED_SUBFEATURE_INPUT_NUMBER,
attr: "aria-valuenow",
attrText: "60000"
});

cy.scrollPageToTop();

cy.verifyElement({
labelElement: configurationsListBoxElements({ feature: FEATURE_TYPE.REMOTE_CONFIG }).LIST_BOX_ITEM,
labelText: "Remote Config",
Expand Down Expand Up @@ -1835,4 +1634,4 @@ const verifyPageElements = () => {

module.exports = {
verifyPageElements
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ const verifyFullDataPageElements = () => {

cy.verifyElement({
labelElement: dbCountlyPageElements.COLLECTION_AND_APP_NAME_LABEL,
labelText: "apps"
labelText: "app_crashgroups(Demo App)"
});

cy.shouldNotExist(dbCountlyPageElements.EMPTY_TABLE_ICON);
Expand Down
6 changes: 3 additions & 3 deletions ui-tests/cypress/lib/dashboard/manage/jobs/jobs.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ const verifyStaticElementsOfPage = () => {
});

cy.verifyElement({
labelElement: jobsDataTableElements().COLUMN_NAME_TOTAL_LABEL,
labelText: "Total",
element: jobsDataTableElements().COLUMN_NAME_TOTAL_SORTABLE_ICON,
labelElement: jobsDataTableElements().COLUMN_NAME_TOTAL_RUNS_LABEL,
labelText: "Total Runs",
element: jobsDataTableElements().COLUMN_NAME_TOTAL_RUNS_SORTABLE_ICON,
});
};

Expand Down
20 changes: 5 additions & 15 deletions ui-tests/cypress/lib/dashboard/manage/logger/logger.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,21 +96,11 @@ const verifyFullDataPageElements = () => {

cy.checkPaceActive();

cy
.elementExists(logsDataTableElements().EMPTY_TABLE_ICON) //Data comes sometimes
.then((isExists) => {
if (isExists) {
verifyLogsDataTable({
isEmpty: true
});
}
else {
verifyLogsDataTable({
isEmpty: false,
shouldNotEqual: true,
});
}
});
cy.wait(15000); //TODO: SER-2733 need to fix for removing static wait
verifyLogsDataTable({
isEmpty: false,
shouldNotEqual: true,
});
};

const verifyLogsDataTable = ({
Expand Down
2 changes: 1 addition & 1 deletion ui-tests/cypress/lib/dashboard/manage/users/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ const verifyPageElements = () => {
user: user.username,
role: USER_TYPE.GLOBAL_USER,
email: user.email,
lastLogin: "2 minutes ago"
lastLogin: "3 minutes ago"
});
};

Expand Down
Loading
Loading