hunk.code_window:                 .cache();
           Mono<Set<String>> executablesInCreatorContextMono = allExecutablesByCreatorIdFlux
                   .map(Executable::getValidName)
                   .collect(Collectors.toSet())
                   .cache();
           Set<EntityDependencyNode> executableBindingsInDslRef = new HashSet<>();
  
hunk.labels: keep keep keep replace keep keep keep keep
hunk.after_edit:                 .map(Executable::getExecutableName)
  
hunk.file_path: app/server/appsmith-server/src/main/java/com/appsmith/server/onload/internal/OnLoadExecutablesUtilCEImpl.java
hunk.type: replace
file: const nodemailer = require('nodemailer');
  const shell = require('shelljs');
  
  
  const Constants = require('./constants');
  const utils = require('./utils');
  const logger = require('./logger');
  
  const mailEnabled = process.env.APPSMITH_MAIL_ENABLED;
  const mailFrom = process.env.APPSMITH_MAIL_FROM;
  const mailHost = process.env.APPSMITH_MAIL_HOST;
  const mailPort = process.env.APPSMITH_MAIL_PORT;
  const mailUser = process.env.APPSMITH_MAIL_USERNAME;
  const mailPass = process.env.APPSMITH_MAIL_PASSWORD;
  const mailTo = process.env.APPSMITH_ADMIN_EMAILS;
  
  async function sendBackupErrorToAdmins(err, backupTimestamp) {
    console.log('Sending Error mail to admins.');
    try {
      if (!mailEnabled || !mailFrom || !mailHost || !mailPort || !mailUser || !mailPass) {
        throw new Error('Failed to send error mail. Email provider is not configured, please refer to https://docs.appsmith.com/setup/instance-configuration/email to configure it.');
      }
      else if (!mailTo) {
        throw new Error('Failed to send error mail. Admin email(s) not configured, please refer to https://docs.appsmith.com/setup/instance-configuration/disable-user-signup#administrator-emails to configure it.');
      }
      else if (!mailEnabled) {
        throw new Error('Mail not sent! APPSMITH_MAIL_ENABLED env val is disabled, please refer to https://docs.appsmith.com/setup/instance-configuration/email to enable it.');
      }
      else {
        const backupFiles = await utils.listLocalBackupFiles();
        const lastBackupfile = backupFiles.pop();
        const lastBackupTimestamp = lastBackupfile.match(/appsmith-backup-(.*)\.tar.gz/)[1];
        const lastBackupPath = Constants.BACKUP_PATH + '/' + lastBackupfile;
  
        const domainName = process.env.APPSMITH_CUSTOM_DOMAIN;
        const instanceName = process.env.APPSMITH_INSTANCE_NAME;
  
        let text = 'Appsmith backup did not complete successfully.\n\n ' +
          'Backup timestamp: ' + backupTimestamp + '\n\n' +
          'Last Successful Backup timestamp: ' + lastBackupTimestamp + '\n' +
          'Last Successful Backup location: ' + lastBackupPath + '\n\n';
  
        if (instanceName) {
          text = text + 'Appsmith instance name: ' + instanceName + '\n';
        }
        if (domainName) {
          text = text + 'Link to Appsmith admin settings: ' + 'http://' + domainName + '/settings/general' + '\n';
        }
        text = text + '\n' + err.stack;
  
        const transporter = nodemailer.createTransport({
          host: mailHost,
          port: mailPort,
          auth: {
            user: mailUser,
            pass: mailPass
          }
        });
  
        await transporter.sendMail({
          from: mailFrom,
          to: mailTo,
          subject: '[Appsmith] ERROR: Backup Failed',
          text: text
        });
      }
    } catch (err) {
      await logger.backup_error(err.stack);
      return;
    }
  }
  
  module.exports = {
    sendBackupErrorToAdmins,
  };