La manutenzione giornaliera dell'ambiente Oracle Enterprise Performance Management Cloud richiede in genere molto meno tempo dell'ora formalmente indicata.
La durata della manutenzione giornaliera effettiva dell'ambiente è registrata come valore della metrica "Manutenzione giornaliera - Durata (minuti)" nella sezione "Metriche operazioni" del report attività. Se non si desidera attendere un'intera ora prima di utilizzare l'ambiente, usare una versione customizzata di questo script per informare gli utenti che la manutenzione giornaliera è completa e che possono riprendere le attività.
Script per Windows
Crearedaily_maintenance_completed.ps1
copiando lo script PowerShell indicato di seguito. Per informazioni sull'aggiornamento dello script da utilizzare, fare riferimento alla sezione Esecuzione dello script .
# 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 Linux/UNIX
Crearedaily_maintenance_completed.sh
copiando lo script indicato di seguito. Per informazioni sull'aggiornamento dello script da utilizzare, fare riferimento alla sezione Esecuzione dello script .
#!/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 lato server
Creare lo script Groovy daily_maintenance_completed
copiando il codice indicato di seguito. Per informazioni sull'aggiornamento dello script da utilizzare, fare riferimento alla sezione Esecuzione dello script .
// 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.")
Esecuzione dello script
Windows e Linux/UNIXdaily_maintenance_completed.ps1
o daily_maintenance_completed.sh
copiando lo script da una sezione precedente.emailaddresses
con un elenco di indirizzi e-mail separati da virgole a cui inviare la notifica al termine della manutenzione giornaliera.epmautomatescript
con la posizione dell'eseguibile di EPM Automate. Esempio: epmautomatescript="/home/utils/EPMAutomate/bin/epmautomate.sh"
javahome
con la directory in cui è installata la versione di JDK utilizzata da EPM Automate. Ad esempio: "/home/user1/jdk1.8.0_191"
emailaddresses
con un elenco di indirizzi e-mail separati da virgole a cui inviare la notifica al termine della manutenzione giornaliera. Ad esempio: jdoe@example.com,jane_doe@example.com
daily_maintenance_completed
../daily_maintenance_completed.ps1 USERNAME PASSWORD URL
./daily_maintenance_completed.sh USERNAME PASSWORD URL
, dove:
USERNAME
è il nome utente di un amministratore del servizioPASSWORD
è la password dell'amministratore del servizioURL
è l'URL dell'ambiente EPM Cloud.daily_maintenance_completed.groovy
copiandolo da una sezione precedente.username
con il nome utente di un Amministratore servizi.password
con la password dell'Amministratore servizi.url
con l'URL dell'ambiente EPM Cloud per il quale effettuare la notifica del completamento della manutenzione giornaliera. Ad esempio: Esempio: https://testExample-idDomain.pbcs.us1.oraclecloud.com
emailaddresses
con un elenco di indirizzi e-mail separati da virgole a cui inviare la notifica al termine della manutenzione giornaliera.