El mantenimiento diario de los entornos de Oracle Enterprise Performance Management Cloud normalmente tarda mucho menos tiempo que la hora que tiene destinada.
La duración del mantenimiento diario real se registra como valor de la métrica "Duración del mantenimiento diario en minutos" en la sección "Métricas de operaciones" del informe de actividad. Si no desea esperar la hora completa para utilizar el entorno, use una versión actualizada de este script para informar a los usuarios de que el mantenimiento diario se ha completado para que puedan reanudar las actividades.
Script de Windows
Creedaily_maintenance_completed.ps1
copiando el siguiente script de PowerShell. Consulte Ejecución del script para obtener información sobre la actualización del script para utilizarlo.
# Daily Maintenance Completed Notification script # # Update the following parameters # ------------------------------- $emailaddresses=user1@oracle.com,user2@oracle.com # ------------------------------- $username=$args[0] $password=$args[1] $url=$args[2] if ($($args.count) -ne 3) { echo "Usage: ./daily_maintenance_completed.ps1 <USERNAME> <PASSWORD> <URL>" exit 1 } $amw_time="" function getDailyMaintenanceStartTime { $amwstring=$(epmautomate.bat getDailyMaintenanceStartTime) $elements=$amwstring.split(' ') $amwtime=$elements[0] return $amwtime } function goToSleep ($amw_time){ $current_mdy=Get-Date -AsUTC -UFormat "%m/%d/%Y" $current_date_time=Get-Date -AsUTC -UFormat "%m/%d/%Y %H:%M:%S" $current_epoch=Get-Date -Date $current_date_time -UFormat "%s" $target_date_time=[DateTime]"${current_mdy} ${amw_time}" $target_epoch=Get-Date -Date $target_date_time -UFormat "%s" $sleep_seconds=$target_epoch - $current_epoch # Today's AMW start time has already passed, so add 24 hours to sleep_seconds if ($sleep_seconds -lt 0) { $sleep_seconds=$sleep_seconds + 86400 } $sleep_ts=New-TimeSpan -Seconds ${sleep_seconds} $sleep_hms="${sleep_ts}" -replace '^\d+?\.' echo "Current time is ${current_date_time}. Sleeping for ${sleep_hms}, until daily maintenance start time of ${amw_time}." Start-Sleep -Seconds $sleep_seconds } function attemptLogin { $serverdown=$False while ($true) { epmautomate.bat login ${username} ${password} ${url} if ($?) { # login succeeded if ($serverdown) { # server has been brought down echo "Daily maintenance processing has completed ..." break } else { # server has not yet been brought down echo "Daily maintenance processing has not yet started. Sleeping for 2 minutes before the next check ..." Start-Sleep -Seconds 120 } } else { # login failed if ($serverdown) { # server has been brought down echo "Waiting for daily maintenance processing to complete. Sleeping for 2 minutes before the next check ..." Start-Sleep -Seconds 120 } else { # server has not yet been brought down echo "Daily maintenance processing is now beginning. Sleeping for 2 minutes before the next check ..." Start-Sleep -Seconds 120 $serverdown=$True } } } } function sendNotification { $servername=$url.split("/")[2]; $subject="Daily maintenance processing has completed" $formattedmessage="Daily maintenance processing has completed for server ${servername}" $emailaddresses=${emailaddresses}.replace(',',';') echo "Mailing report" epmautomate.bat sendmail "${emailaddresses}" "${subject}" Body="${formattedmessage}" } echo "Beginning daily maintenance completion notification script." echo "Logging into server ..." epmautomate.bat login ${username} ${password} ${url} $amwtime=getDailyMaintenanceStartTime goToSleep ($amwtime) attemptLogin sendNotification echo "Logging out of server ..." epmautomate.bat logout echo "Script processing has completed."
Script de Linux/UNIX
Creedaily_maintenance_completed.sh
copiando el siguiente script. Consulte Ejecución del script para obtener información sobre la actualización del script para utilizarlo.
#!/bin/bash # Update the following parameters # ------------------------------- epmautomatescript="LOCATION_EPM_AUTOMATE_EXECUTABLE" javahome="LOCATION_JAVA_HOME" emailaddresses=EMAIL_ADDRESS_1,EMAIL_ADDRESS_2,EMAIL_ADDRESS_N # ------------------------------- username="$1" password="$2" url="$3" export JAVA_HOME=${javahome} if [ "$#" -ne 3 ]; then echo "Usage: ./daily_maintenance_completed.sh <USERNAME> <PASSWORD> <URL>" exit 1 fi amw_time="" getDailyMaintenanceStartTime() { amw_time=$(${epmautomatescript} getDailyMaintenanceStartTime | cut -d' ' -f1) } goToSleep() { current_mdy=$(date -u +%m/%d/%Y) current_date_time=$(date -u) current_epoch=$(date +%s) target_epoch=$(date -d "${current_mdy} ${amw_time}" +%s) sleep_seconds=$(($target_epoch - $current_epoch)) # Today's AMW start time has already passed, so add 24 hours to sleep_seconds if [[ ${sleep_seconds} -lt 0 ]] then sleep_seconds=$((sleep_seconds + 86400)) fi sleep_hms=$(date -d@${sleep_seconds} -u +%H:%M:%S) echo "Current time is ${current_date_time}. Sleeping for ${sleep_hms}, until daily maintenance start time of ${amw_time}." sleep $sleep_seconds } attemptLogin() { local serverdown=1 while true do ${epmautomatescript} login ${username} ${password} ${url} if [[ $? -eq 0 ]] # login succeeded then if [[ ${serverdown} -eq 0 ]] # server has been brought down then echo "Daily maintenance processing has completed" break else # server has not yet been brought down echo "Daily maintenance processing has not yet started. Sleeping for 2 minutes before the next check ..." sleep 120 fi else # login failed if [[ ${serverdown} -eq 0 ]] # server has been brought down then echo "Waiting for daily maintenance processing to complete. Sleeping for 2 minutes before the next check ..." sleep 120 else # server has not yet been brought down echo "Daily maintenance processing is now beginning. Sleeping for 2 minutes before the next check ..." sleep 120 serverdown=0 fi fi done } sendNotification() { local servername=$(echo "${url}" | cut -d '/' -f3- | rev | cut -d':' -f2- | rev) local subject="Daily maintenance processing has completed" local formattedmessage="Daily maintenance processing has completed for server ${servername}" local emailaddresses=$(echo ${emailaddresses} | sed "s/,/;/g") echo "Mailing report" ${epmautomatescript} sendmail "${emailaddresses}" "${subject}" Body="${formattedmessage}" } echo "Beginning daily maintenance completion notification script." echo "Logging into server ..." ${epmautomatescript} login ${username} ${password} ${url} getDailyMaintenanceStartTime goToSleep attemptLogin sendNotification echo "Logging out of server ..." ${epmautomatescript} logout echo "Script processing has completed."
Script de Groovy del servidor
Cree el script de Groovy daily_maintenance_completed
copiando el siguiente código. Consulte Ejecución del script para obtener información sobre la actualización del script para utilizarlo.
// Daily Maintenance Completed Notification script // Update the following parameters // ------------------------------- String username="USERNAME" String password="PASSWORD" String url="URL OF THE ENVIRONMENT" String emailaddresses="EMAIL_ADDRESS_1,EMAIL_ADDRESS_2,EMAIL_ADDRESS_N" // ------------------------------- def LogMessage(String message) { def date = new Date() def sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") println('[' + sdf.format(date) + '] ' + message); } def LogOperationStatus(EpmAutomateStatus opstatus) { def returncode = opstatus.getStatus() if (returncode != 0){ LogMessage(opstatus.getOutput()) } LogMessage('return code: ' + returncode) } def getDailyMaintenanceStartTime(EpmAutomate automate) { LogMessage("Operation: getDailyMaintenanceStartTime") EpmAutomateStatus amwtimestatus = automate.execute('getDailyMaintenanceStartTime') LogOperationStatus(amwtimestatus) def amwstring=(amwtimestatus.getOutput()) def elements=amwstring.split(' ') def amwtime=elements[0] return amwtime } def goToSleep(String amw_time){ def date = new Date() def current_mdy = new SimpleDateFormat("MM/dd/yyyy") def current_date_time = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") float current_epoch = date.getTime() / 1000 def pattern = "MM/dd/yyyy HH:mm:ss" def input = current_mdy.format(date) + " " + amw_time + ":00" def target_date_time = Date.parse(pattern, input) float target_epoch = target_date_time.getTime() / 1000 int sleep_seconds = Math.round(target_epoch - current_epoch) //Today's AMW start time has already passed, so add 24 hours to sleep_seconds if (sleep_seconds < 0) { sleep_seconds = sleep_seconds + 86400 } def sleep_milliseconds = sleep_seconds * 1000 LogMessage("Current time is " + current_date_time.format(date) + ". Sleeping until daily maintenance start time of " + amw_time + ":00.") sleep(sleep_milliseconds) } def attemptLogin(EpmAutomate automate, String username, String password, String url) { def serverdown=1 while (true) { LogMessage("Operation: login " + username + " " + password + " " + url) EpmAutomateStatus status = automate.execute('login',username,password,url) def returncode = status.getStatus() if (returncode == 0) { if (serverdown == 0){ LogMessage("Daily maintenance processing has completed ...") break } else { LogMessage("Daily maintenance processing has not yet started. Sleeping for 2 minutes before the next check ...") sleep(120000) } } else { if (serverdown == 0){ LogMessage("Waiting for daily maintenance processing to complete. Sleeping for 2 minutes before the next check ...") sleep(120000) } else { LogMessage("Daily maintenance processing is now beginning. Sleeping for 2 minutes before the next check ...") sleep(120000) serverdown=0 } } } } def sendNotification(EpmAutomate automate, String url, String emailaddresses) { def servername=url.tokenize("/")[-1]; def subject="Daily maintenance processing has completed" def formattedmessage="Daily maintenance processing has completed for server " + servername def emailaddressesformatted = emailaddresses.replaceAll(',',';') LogMessage("Operation: sendmail " + emailaddressesformatted + " " + subject + " Body=" + formattedmessage) EpmAutomateStatus status = automate.execute('sendmail',emailaddressesformatted,subject,'Body=' + formattedmessage) LogOperationStatus(status) } LogMessage("Beginning daily maintenance completion notification script.") EpmAutomate automate = getEpmAutomate() LogMessage("Operation: login " + username + " " + password + " " + url) EpmAutomateStatus status = automate.execute('login',username,password,url) LogOperationStatus(status) String amwtime = getDailyMaintenanceStartTime(automate) goToSleep (amwtime) attemptLogin(automate,username,password,url) sendNotification(automate,url,emailaddresses) LogMessage("Operation: logout ") status = automate.execute('logout') LogOperationStatus(status) LogMessage ("Script processing has completed.")
Ejecución del script
Windows y Linux/UNIXdaily_maintenance_completed.ps1
o daily_maintenance_completed.sh
copiando el script de una sección anterior.emailaddresses
con una lista separada por comas de direcciones de correo electrónico a las que se debe enviar una notificación cuando se complete el mantenimiento diario.epmautomatescript
con la ubicación del ejecutable de EPM Automate. Ejemplo: epmautomatescript="/home/utils/EPMAutomate/bin/epmautomate.sh"
javahome
con el directorio donde se instalar el JDK que utiliza EPM Automate. Por ejemplo: "/home/user1/jdk1.8.0_191"
emailaddresses
con una lista separada por comas de direcciones de correo electrónico a las que se debe enviar una notificación cuando se complete el mantenimiento diario. Por ejemplo: jdoe@example.com,jane_doe@example.com
daily_maintenance_completed
../daily_maintenance_completed.ps1 USERNAME PASSWORD URL
./daily_maintenance_completed.sh USERNAME PASSWORD URL
, donde:
USUARIO
es el nombre de usuario de un administrador de servicioCONTRASEÑA
es la contraseña del administrador de servicioURL
es la URL del entorno de EPM Clouddaily_maintenance_completed.groovy
copiándolo de una sección anterior.username
con el nombre de usuario de un administrador del servicio.password
con la contraseña del administrador del serviciourl
con la URL del entorno de EPM Cloud para el que se debe realizar la notificación de finalización del mantenimiento diario. Por ejemplo: . Ejemplo: https://testExample-idDomain.pbcs.us1.oraclecloud.com
emailaddresses
con una lista separada por comas de direcciones de correo electrónico a las que se debe enviar una notificación cuando se complete el mantenimiento diario.