Logs Genrales Google Shhet

Nombre del Archivo :    ejecutarAccionConLog

---------------------------------

// Configuración general para asignar los valores
var config = {
  hojaNombre: "Logs", // Nombre de la hoja donde se guardarán los datos
  columnas: {
    hora: 1, nombreFuncion: 2, tipoEvento: 3,
    mensaje: 4, estado: 5, usuario: 6, error: 7
  }
};

// Variables globales
var lastSheetNames = [];
var logsSheet = null;

// Función principal para registrar logs de ejecución
function registrarTodaInformacionDeFunciones() {
  try {
    ocultarHojaLogs(); // Ocultar la hoja al inicio
    var sheet = getLogsSheet();
    agregarEncabezado(sheet);
    registrarLog(sheet, "registrarTodaInformacionDeFunciones", "Automático", "Inicio de ejecución del script");
    ejecutarAccionConLog(sheet);
    //ocultarHojaLogs(); // Ocultar la hoja al final
  } catch (e) {
    registrarLog(getLogsSheet(), "registrarTodaInformacionDeFunciones", "Error", "Error en ejecución: " + e.message, e);
  }
}

// Función de ejemplo con log
function ejecutarAccionConLog(sheet) {
  try {
    var resultado = "Proceso completado exitosamente";
    registrarLog(sheet, "ejecutarAccionConLog", "Manual", "Ejecución completada: " + resultado);
  } catch (e) {
    registrarLog(sheet, "ejecutarAccionConLog", "Error", "Error en ejecución", e);
  }
}

// Función para registrar logs en la hoja
function registrarLog(sheet, nombreFuncion, tipoEvento, mensaje, error) {
  try {
    var hora = new Date();
    var estado = error ? "Erróneo" : "Exitoso";
    var usuario = Session.getActiveUser().getEmail();
    var mensajeError = error ? error.message : "";

    sheet.appendRow([hora, nombreFuncion, tipoEvento, mensaje, estado, usuario, mensajeError]);
    Logger.log(`Hora: ${hora} | Función: ${nombreFuncion} | Estado: ${estado} | Usuario: ${usuario}`);
  } catch (e) {
    Logger.log("Error al registrar log: " + e.message);
  }
}

// Función para agregar encabezado si no existe
function agregarEncabezado(sheet) {
  var encabezado = ["Hora de Ejecución", "Nombre de la Función Ejecutada", "Tipo de Evento", "Mensaje de Ejecución", "Estado", "Usuario", "Mensaje de Error"];
  var primeraFila = sheet.getRange(1, 1, 1, encabezado.length).getValues()[0];

  if (primeraFila.join() !== encabezado.join()) {
    sheet.getRange(1, 1, 1, encabezado.length).setValues([encabezado]);
  }
}

// Función para ejecutar Autocrat y registrar logs con verificación de estado
function ejecutarAutocrat() {
  try {
    var job = AutocratApp.getJob('nombre_del_job'); // Asegúrate de usar el nombre correcto del job
    job.run();  // Ejecuta el trabajo
    Utilities.sleep(5000);  // Espera para dar tiempo al trabajo a completarse

    // Verificar el estado de la ejecución del trabajo
    var estadoTrabajo = job.getStatus();

    // Registro de información adicional
    if (estadoTrabajo === 'SUCCESS') {
      registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "El trabajo de Autocrat se completó exitosamente.");
    } else if (estadoTrabajo === 'ERROR') {
      registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Error al ejecutar el trabajo de Autocrat.");
    } else {
      registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "Estado desconocido: " + estadoTrabajo);
    }

    // Obtener el historial y registrarlo
    var historial = job.getHistory();
    registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "Historial: " + JSON.stringify(historial));

  } catch (e) {
    registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Error al ejecutar Autocrat", e);
  }
}

// Obtener la hoja de logs (se obtiene solo una vez)
function getLogsSheet() {
  if (!logsSheet) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    logsSheet = ss.getSheetByName(config.hojaNombre);
    if (!logsSheet) {
      logsSheet = ss.insertSheet(config.hojaNombre);
    }
  }
  return logsSheet;
}

// Evento onEdit para registrar ediciones
function onEdit(e) {
  try {
    var sheet = e.range.getSheet();
    if (sheet.getName() === config.hojaNombre) return;

    var rango = e.range;
    var valorNuevo = e.value || "";
    var valorAntiguo = e.oldValue || "";

    if (valorNuevo === "") return;

    var usuario = Session.getActiveUser().getEmail();
    var hora = new Date();

    registrarLog(getLogsSheet(), "onEdit", "Manual", `Hoja: ${sheet.getName()}, Rango: ${rango.getA1Notation()}, Antiguo: ${valorAntiguo}, Nuevo: ${valorNuevo}`);

  } catch (e) {
    registrarLog(getLogsSheet(), "onEdit", "Error", "Error en edición", e);
  }
}

// Función para revisar cambios en las hojas
function checkSheetChanges() {
  try {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheets = ss.getSheets();
    var currentSheetNames = sheets.map(sheet => sheet.getName());

    // Si es la primera ejecución, inicializar lastSheetNames y salir
    if (lastSheetNames.length === 0) {
      lastSheetNames = currentSheetNames;
      return;
    }

    // Verifica si se ha creado o eliminado una hoja
    if (currentSheetNames.length !== lastSheetNames.length) {
      var cambio = currentSheetNames.length > lastSheetNames.length ? "Creación" : "Eliminación";
      var hojaCambiada = (cambio === "Creación")
        ? currentSheetNames.find(name => !lastSheetNames.includes(name))
        : lastSheetNames.find(name => !currentSheetNames.includes(name));

      logSheetChange(cambio, hojaCambiada);
    }

    // Verifica si hubo un reordenamiento de hojas
    if (!arraysEqual(currentSheetNames, lastSheetNames)) {
      logSheetChange("Reordenamiento", currentSheetNames.join(", "));
    }

    // Actualiza la lista de nombres de hojas
    lastSheetNames = currentSheetNames;

  } catch (e) {
    Logger.log("Error en checkSheetChanges: " + e.message);
  }
}

// Función para registrar cambios en las hojas
function logSheetChange(changeType, sheetName) {
  try {
    var sheet = getLogsSheet();  // Hoja donde se guardan los logs
    var hora = new Date();  // Hora del cambio
    var usuario = Session.getActiveUser().getEmail(); // El usuario que realizó el cambio

    // Registrar el cambio en la hoja de logs
    registrarLog(sheet, "checkSheetChanges", changeType, `Hoja: ${sheetName}`);

    Logger.log(`${changeType}: ${sheetName}`);

  } catch (e) {
    Logger.log("Error en logSheetChange: " + e.message);
  }
}

// Función para comparar si dos arrays son iguales
function arraysEqual(a, b) {
  return a.length === b.length && a.every((val, index) => val === b[index]);
}

function ocultarHojaLogs() {
  try {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var logsSheet = ss.getSheetByName(config.hojaNombre);
    if (logsSheet) {
      Logger.log("Hoja de Logs encontrada: " + logsSheet.getName());
      logsSheet.hideSheet();
      Utilities.sleep(1000); // Pausa de 1 segundo
      Logger.log("Hoja de Logs oculta.");
    } else {
      Logger.log("La hoja de Logs no existe.");
    }
  } catch (e) {
    Logger.log("Error al ocultar la hoja de Logs: " + e.message);
  }
}

function onEdit(e) {
  try {
    var sheet = e.range.getSheet();
    if (sheet.getName() === config.hojaNombre) return;

    var rango = e.range;
    var valorNuevo = e.value || "";
    var valorAntiguo = e.oldValue || "";

    var usuario = Session.getActiveUser().getEmail();
    var hora = new Date();

    Logger.log(`Valor Antiguo: ${valorAntiguo}, Valor Nuevo: ${valorNuevo}`); // Registro adicional

    if (valorAntiguo && !valorNuevo) {
      // Se ha borrado el contenido
      registrarLog(getLogsSheet(), "onEdit", "Manual", `Borrado en Hoja: ${sheet.getName()}, Rango: ${rango.getA1Notation()}, Antiguo: ${valorAntiguo}`);
    } else if (valorNuevo) {
      // Se ha añadido o modificado el contenido
      registrarLog(getLogsSheet(), "onEdit", "Manual", `Edición en Hoja: ${sheet.getName()}, Rango: ${rango.getA1Notation()}, Antiguo: ${valorAntiguo}, Nuevo: ${valorNuevo}`);
    }

  } catch (e) {
    registrarLog(getLogsSheet(), "onEdit", "Error", "Error en edición", e);
  }
}

function ejecutarAutocrat() {
  try {
    var job = AutocratApp.getJob('nombre_del_job'); // Asegúrate de usar el nombre correcto del trabajo

    if (!job) {
      registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Trabajo de Autocrat no encontrado.");
      return; // Salir si el trabajo no se encuentra
    }

    job.run();
    Utilities.sleep(10000); // Espera 10 segundos para dar tiempo al trabajo a completarse

    var estadoTrabajo = job.getStatus();

    if (estadoTrabajo === 'SUCCESS') {
      registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "El trabajo de Autocrat se completó exitosamente.");

      // Verificar si se generaron archivos correctamente
      var historial = job.getHistory();
      if (historial && historial.length > 0) {
        var ultimoHistorial = historial[0];
        if (ultimoHistorial.filesGenerated && ultimoHistorial.filesGenerated.length > 0) {
          registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "Archivos generados: " + JSON.stringify(ultimoHistorial.filesGenerated));
        } else {
          registrarLog(getLogsSheet(), "ejecutarAutocrat", "Advertencia", "No se generaron archivos o no se encontraron registros de archivos generados.");
        }
      } else {
        registrarLog(getLogsSheet(), "ejecutarAutocrat", "Advertencia", "No se encontró historial de ejecución del trabajo.");
      }
    } else if (estadoTrabajo === 'ERROR') {
      registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Error al ejecutar el trabajo de Autocrat.");

      // Registrar mensajes de error detallados si están disponibles
      var historial = job.getHistory();
      if (historial && historial.length > 0) {
        var ultimoHistorial = historial[0];
        if (ultimoHistorial.errorMessage) {
          registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Mensaje de error: " + ultimoHistorial.errorMessage);
        }
      }
    } else {
      registrarLog(getLogsSheet(), "ejecutarAutocrat", "Advertencia", "Estado desconocido: " + estadoTrabajo);
    }

    // Obtener el historial y registrarlo
    var historial = job.getHistory();
    registrarLog(getLogsSheet(), "ejecutarAutocrat", "Automático", "Historial: " + JSON.stringify(historial));

  } catch (e) {
    registrarLog(getLogsSheet(), "ejecutarAutocrat", "Error", "Error al ejecutar Autocrat", e);
  }
}

function crearActivadoresAutomaticos() {
  try {
    Logger.log("Iniciando creación de activadores...");
    Logger.log("Número de activadores existentes: " + ScriptApp.getProjectTriggers().length);

    if (ScriptApp.getProjectTriggers().length > 0) {
      Logger.log("Los activadores ya existen. No se crearán duplicados.");
      return;
    }

    Logger.log("Creando activador para registrarTodaInformacionDeFunciones...");
    var trigger1 = ScriptApp.newTrigger('registrarTodaInformacionDeFunciones')
      .timeBased()
      .everyHours(1);
    Logger.log("Objeto de activador 1: " + trigger1);
    trigger1.create();
    Logger.log("Activador para registrarTodaInformacionDeFunciones creado.");

    Logger.log("Creando activador para checkSheetChanges...");
    var trigger2 = ScriptApp.newTrigger('checkSheetChanges')
      .timeBased()
      .everyHours(1);
    Logger.log("Objeto de activador 2: " + trigger2);
    trigger2.create();
    Logger.log("Activador para checkSheetChanges creado.");

    Logger.log("Creando activador para ejecutarAutocrat...");
    var trigger3 = ScriptApp.newTrigger('ejecutarAutocrat')
      .timeBased()
      .everyHours(1);
    Logger.log("Objeto de activador 3: " + trigger3);
    trigger3.create();
    Logger.log("Activador para ejecutarAutocrat creado.");

  } catch (e) {
    Logger.log("Error al crear activadores: " + e.message);
  }
}

¿Le ha resultado útil este artículo?