Geralmente, a manutenção diária de ambientes do Oracle Enterprise Performance Management Cloud acontece em um tempo muito mais curto do que na uma hora prevista.
A duração real da manutenção diária do ambiente é registrada como o valor da métrica "Duração da Manutenção Diária em Minutos" na seção "Métricas de Operações" do Relatório de Atividade. Caso não queira esperar uma hora para usar o ambiente, utilize uma versão personalizada desse script para informar os usuários que a manutenção diária foi concluída para que eles possam retomar as atividades.
Script do Windows
Criedaily_maintenance_completed.ps1
copiando o script do PowerShell a seguir. Consulte Execução do Script para obter informações sobre como atualizar o script para seu uso.
# 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
Criedaily_maintenance_completed.sh
copiando o script a seguir. Consulte Execução do Script para obter informações sobre como atualizar o script para seu uso.
#!/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 Groovy no servidor
Crie o script Groovy daily_maintenance_completed
copiando o código a seguir. Consulte Execução do Script para obter informações sobre como atualizar o script para seu uso.
// 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.")
Execução do Script
Windows e Linux/UNIXdaily_maintenance_completed.ps1
ou daily_maintenance_completed.sh
copiando o script de uma seção anterior.emailaddresses
com uma lista de endereços de e-mail separados por vírgulas que devem ser notificados quando a manutenção diária for concluída.epmautomatescript
com o local do executável do EPM Automate. Exemplo: epmautomatescript="/home/utils/EPMAutomate/bin/epmautomate.sh"
javahome
com o diretório onde o JDK usado pelo EPM Automate está instalado. Por exemplo: "/home/user1/jdk1.8.0_191"
emailaddresses
com uma lista de endereços de e-mail separados por vírgulas que devem ser notificados quando a manutenção diária for concluída. Por exemplo: jdoe@example.com,jane_doe@example.com
daily_maintenance_completed
está armazenado../daily_maintenance_completed.ps1 USERNAME PASSWORD URL
./daily_maintenance_completed.sh USERNAME PASSWORD URL
, em que:
USERNAME
é o nome de usuário do Administrador do ServiçoPASSWORD
é a senha do Administrador do ServiçoURL
é o URL do ambiente do EPM Clouddaily_maintenance_completed.groovy
copiando-o de uma seção anterior.username
com o nome de usuário de um Administrador de Serviço.password
com a senha do Administrador de Serviçourl
com o URL do ambiente do EPM Cloud para o qual a notificação de conclusão da manutenção diária precisa ser feita. Por exemplo: Exemplo: https://testExample-idDomain.pbcs.us1.oraclecloud.com
emailaddresses
com uma lista de endereços de e-mail separados por vírgulas que devem ser notificados quando a manutenção diária for concluída.