Skip to content

Added one layer of optimization on jobs by removing unneccessary back… #2469

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ public void run() {
backwardCompatibility = new BackwardCompatibility();
BackwardCompatibilityDao.instance.insertOne(backwardCompatibility);
}
InitializerListener.setBackwardCompatibilities(backwardCompatibility);
InitializerListener.setBackwardCompatibilities(backwardCompatibility, true);
loggerMaker.debugAndAddToDb("start create indices", LogDb.DASHBOARD);
DaoInit.createIndices();

Expand Down Expand Up @@ -385,7 +385,7 @@ public void run() {
public String goToAccount() {
if (getSUser().getAccounts().containsKey(newAccountId+"")) {
getSession().put("accountId", newAccountId);

AccountsDao.instance.updateLastActiveAccount(newAccountId);
Context.accountId.set(newAccountId);
return SUCCESS.toUpperCase();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public static void executeMeta1(Utility utility, User user, HttpServletRequest r
} else {
logger.debug("setting session: " + sessionAccId);
request.getSession().setAttribute("accountId", sessionAccId);
AccountsDao.instance.updateLastActiveAccount(sessionAccId);
Context.accountId.set(sessionAccId);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -941,6 +941,8 @@ private void createUserAndRedirect(String userEmail, String username, SignupInfo

servletRequest.getSession().setAttribute("user", user);
servletRequest.getSession().setAttribute("accountId", accountId);
// set active account here
AccountsDao.instance.updateLastActiveAccount(accountId);
LoginAction.loginUser(user, servletResponse, true, servletRequest);
servletRequest.setAttribute("username", userEmail);
servletResponse.sendRedirect("/dashboard/onboarding");
Expand Down
415 changes: 44 additions & 371 deletions apps/dashboard/src/main/java/com/akto/listener/InitializerListener.java

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions libs/dao/src/main/java/com/akto/dao/AccountsDao.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.akto.dao;

import com.akto.dao.context.Context;
import com.akto.dto.Account;
import com.akto.util.Constants;
import com.mongodb.BasicDBObject;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;

import java.util.List;

Expand All @@ -16,6 +20,13 @@ public void createIndexIfAbsent() {

}

public void updateLastActiveAccount(int accountId){
instance.updateOneNoUpsert(
Filters.eq(Constants.ID, accountId),
Updates.set(Account.LAST_ACTIVE_TS, Context.now())
);
}

@Override
public String getCollName() {
return "accounts";
Expand Down
11 changes: 11 additions & 0 deletions libs/dao/src/main/java/com/akto/dto/Account.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ public class Account {
public static final String HYBRID_TESTING_ENABLED = "hybridTestingEnabled";
private boolean hybridTestingEnabled;

public static final String LAST_ACTIVE_TS = "lastActiveTimestamp";
private int lastActiveTimestamp;

public Account() {}

public Account(int id, String name) {
Expand Down Expand Up @@ -105,4 +108,12 @@ public boolean getHybridTestingEnabled() {
public void setHybridTestingEnabled(boolean hybridTestingEnabled) {
this.hybridTestingEnabled = hybridTestingEnabled;
}

public int getLastActiveTimestamp() {
return lastActiveTimestamp;
}

public void setLastActiveTimestamp(int lastActiveTimestamp) {
this.lastActiveTimestamp = lastActiveTimestamp;
}
}
30 changes: 29 additions & 1 deletion libs/dao/src/main/java/com/akto/util/AccountTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@
import java.util.function.Consumer;

import com.akto.dao.AccountsDao;
import com.akto.dao.UsersDao;
import com.akto.dao.context.Context;
import com.akto.dto.Account;
import com.akto.dto.User;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Projections;

import org.bson.conversions.Bson;
import org.slf4j.Logger;
Expand Down Expand Up @@ -263,7 +266,7 @@ public void executeTaskForNonHybridAccounts(Consumer<Account> consumeAccount, St

List<Account> activeAccounts = AccountsDao.instance.findAll(Filters.and(activeFilter, nonHybridAccountsFilter));
for(Account account: activeAccounts) {
if (inactiveAccountsSet.contains(account.getId())) {
if (inactiveAccountsSet.contains(account.getId()) || !shouldRunJobsOnAccount(account)) {
continue;
}
try {
Expand All @@ -275,4 +278,29 @@ public void executeTaskForNonHybridAccounts(Consumer<Account> consumeAccount, St
}
}
}

private boolean shouldRunJobsOnAccount(Account account){
if(account == null){
return false;
}

if(Context.now() - account.getLastActiveTimestamp() > Constants.ONE_MONTH_TIMESTAMP){
// get all users and check their lastLoginTs just to verify if that account is active
int accountId = account.getId();
List<User> users = UsersDao.instance.findAll(Filters.eq(Filters.exists("accounts."+accountId)), Projections.include(User.LAST_LOGIN_TS));
if(users == null || users.isEmpty()){
return false;
}
int maxLoginTs = 0;
for(User user: users){
if(user.getLastLoginTs() > maxLoginTs){
maxLoginTs = user.getLastLoginTs();
}
}
if(Context.now() - maxLoginTs > Constants.ONE_MONTH_TIMESTAMP){
return false;
}
}
return true;
}
}
Loading