diff --git a/PAS/Management/OEManager/ABL/conf/oemanager.xml b/PAS/Management/OEManager/ABL/conf/oemanager.xml index 22b4455..22a1042 100644 --- a/PAS/Management/OEManager/ABL/conf/oemanager.xml +++ b/PAS/Management/OEManager/ABL/conf/oemanager.xml @@ -39,22 +39,25 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -712,7 +715,8 @@ - + + @@ -782,6 +786,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PAS/Management/OEManager/ABL/release.txt b/PAS/Management/OEManager/ABL/release.txt index b3c865b..3f21cdd 100644 --- a/PAS/Management/OEManager/ABL/release.txt +++ b/PAS/Management/OEManager/ABL/release.txt @@ -1 +1 @@ -2024-05-01T13:06:38.644 \ No newline at end of file +2024-12-12T16:13:23.207 \ No newline at end of file diff --git a/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getLockStats.p b/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getLockStats.p index 404cc88..69bc6ad 100644 --- a/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getLockStats.p +++ b/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getLockStats.p @@ -1,5 +1,5 @@ /* - Copyright 2020-2023 Progress Software Corporation + Copyright 2020-2024 Progress Software Corporation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -96,7 +96,7 @@ repeat: assign cConnDetail = hConnDetFld:buffer-value(). if num-entries(cConnDetail, ":") ge 4 then assign - iConnectPID = integer(entry(3, cConnDetail, ":")) + iConnectPID = int64(entry(3, cConnDetail, ":")) iSessionID = if entry(4, cConnDetail, ":") begins "AS-" and num-entries(entry(4, cConnDetail, ":"), "-") gt 1 then integer(entry(2, entry(4, cConnDetail, ":"), "-")) else ? . diff --git a/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getRequests.p b/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getRequests.p new file mode 100644 index 0000000..5b82e32 --- /dev/null +++ b/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getRequests.p @@ -0,0 +1,136 @@ +/* + Copyright 2020-2024 Progress Software Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +/** + * Author(s): Dustin Grau (dugrau@progress.com) + * + * Gets MSAgent requests for an ABLApp. + * Usage: getRequests.p + * Parameter Default/Allowed + * Scheme [http|https] + * Hostname [localhost] + * PAS Port [8810] + * UserId [tomcat] + * Password [tomcat] + * ABL App [oepas1] + * AgentID [#] + */ + +using OpenEdge.ApplicationServer.Util.OEManagerConnection. +using OpenEdge.ApplicationServer.Util.OEManagerEndpoint. +using OpenEdge.Core.Json.JsonPropertyHelper. +using OpenEdge.Core.JsonDataTypeEnum. +using Progress.Json.ObjectModel.JsonObject. +using Progress.Json.ObjectModel.JsonArray. +using Progress.Json.ObjectModel.JsonDataType. + +define variable cOutFile as character no-undo. +define variable oAgents as JsonArray no-undo. +define variable oAgent as JsonObject no-undo. +define variable oRequests as JsonArray no-undo. +define variable iLoop as integer no-undo. +define variable iPID as integer no-undo. +define variable cPID as character no-undo. + +/* Manage the server connection to the OEManager webapp */ +define variable oMgrConn as OEManagerConnection no-undo. +define variable cScheme as character no-undo initial "http". +define variable cHost as character no-undo initial "localhost". +define variable cPort as character no-undo. +define variable cUserId as character no-undo. +define variable cPassword as character no-undo. +define variable cAblApp as character no-undo. + +/* Check for passed-in arguments/parameters. */ +if num-entries(session:parameter) ge 6 then + assign + cScheme = entry(1, session:parameter) + cHost = entry(2, session:parameter) + cPort = entry(3, session:parameter) + cUserId = entry(4, session:parameter) + cPassword = entry(5, session:parameter) + cAblApp = entry(6, session:parameter) + cPID = entry(7, session:parameter) + . +else + assign + cScheme = dynamic-function("getParameter" in source-procedure, "Scheme") when (dynamic-function("getParameter" in source-procedure, "Scheme") gt "") eq true + cHost = dynamic-function("getParameter" in source-procedure, "Host") when (dynamic-function("getParameter" in source-procedure, "Host") gt "") eq true + cPort = dynamic-function("getParameter" in source-procedure, "Port") when (dynamic-function("getParameter" in source-procedure, "Port") gt "") eq true + cUserId = dynamic-function("getParameter" in source-procedure, "UserID") when (dynamic-function("getParameter" in source-procedure, "UserID") gt "") eq true + cPassword = dynamic-function("getParameter" in source-procedure, "PassWD") when (dynamic-function("getParameter" in source-procedure, "PassWD") gt "") eq true + cAblApp = dynamic-function("getParameter" in source-procedure, "ABLApp") when (dynamic-function("getParameter" in source-procedure, "ABLApp") gt "") eq true + cPID = dynamic-function("getParameter" in source-procedure, "ProcID") when (dynamic-function("getParameter" in source-procedure, "ProcID") gt "") eq true + . + +/* Create and OEManager connection for API calls. */ +assign oMgrConn = OEManagerConnection:Build(cScheme, cHost, integer(cPort), cUserId, cPassword). + +if (cPID gt "") eq true then do: + assign oRequests = oMgrConn:GetAgentRequests(cAblApp, integer(cPID)). + if oRequests:Length gt 0 then do: + /* Write requests information from the specified MSAgent. */ + message substitute("Saving requests information for MSAgent PID &1...", cPID). + assign cOutFile = substitute("agentRequests_&1_&2.json", cPID, replace(iso-date(now), ":", "_")). + oRequests:WriteFile(session:temp-directory + cOutFile, true). /* Write entire response to disk. */ + message substitute("~tRequests data written to &1", cOutFile). + end. + else + message substitute("No requests data for MSAgent PID &1", cPID). +end. // cPID Present +else do: + /* Otherwise output requests for all agents of an ABL Application. */ + + /* Initial URL to obtain a list of all MSAgents for an ABL Application. */ + message substitute("Looking for MSAgents of &1...", cAblApp). + assign oAgents = oMgrConn:GetAgents(cAblApp). + if oAgents:Length eq 0 then + message "No MSAgents running". + else + AGENTBLK: + do iLoop = 1 to oAgents:Length + on error undo, next AGENTBLK + on stop undo, next AGENTBLK: + oAgent = oAgents:GetJsonObject(iLoop). + + /* We need the agent PID for user-friendly displays since that's how we identify the process. */ + if JsonPropertyHelper:HasTypedProperty(oAgent, "pid", JsonDataType:string) then + assign iPID = integer(oAgent:GetCharacter("pid")). + + /* Write requests information from any available MSAgents. */ + if iPID gt 0 and oAgent:GetCharacter("state") eq "available" then do: + assign oRequests = oMgrConn:GetAgentRequests(cAblApp, iPID). + if oRequests:Length gt 0 then do: + message substitute("Saving requests information for MSAgent PID &1...", iPID). + assign cOutFile = substitute("agentRequests_&1_&2.json", iPID, replace(iso-date(now), ":", "_")). + oRequests:WriteFile(session:temp-directory + cOutFile, true). /* Write entire response to disk. */ + message substitute("~tRequests data written to &1", cOutFile). + end. + else + message substitute("No requests data for MSAgent PID &1", iPID). + end. /* agent state = available */ + else + message substitute("Agent PID &1 not AVAILABLE, skipping requests.", iPID). + end. /* iLoop - agent */ +end. // All Agents + +catch err as Progress.Lang.Error: + put unformatted substitute("~nError while communicating with PASOE instance: &1", err:GetMessage(1)) skip. +end catch. +finally: + /* Return value expected by PCT Ant task. */ + {&_proparse_ prolint-nowarn(returnfinally)} + return string(0). +end finally. diff --git a/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getStatus.p b/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getStatus.p index ce5f0f4..80735bf 100644 --- a/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getStatus.p +++ b/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Cli/getStatus.p @@ -178,7 +178,7 @@ end finally. /* PROCEDURES / FUNCTIONS */ function FormatDecimal returns character ( input pcValue as character ): - return trim(string(int64(pcValue) / 60000, ">>9.9")). + return trim(string(int64(pcValue) / 60000, "->>9.9")). end function. /* FormatDecimal */ function FormatMemory returns character ( input piValue as int64, input plTrim as logical ): @@ -212,9 +212,9 @@ end function. /* FormatMsTime */ function FormatLongNumber returns character ( input pcValue as character, input plTrim as logical ): if plTrim then - return trim(string(int64(pcValue), ">>>,>>>,>>9")). + return trim(string(int64(pcValue), "->>>,>>>,>>9")). else - return string(int64(pcValue), ">>>,>>>,>>9"). + return string(int64(pcValue), "->>>,>>>,>>9"). end function. /* FormatCharAsNumber */ function FormatCharAsNumber returns character ( input pcValue as character ): @@ -663,7 +663,7 @@ procedure GetSessions: JsonPropertyHelper:HasTypedProperty(oMetrics, "readErrors", JsonDataType:Number) then put unformatted substitute("~t # Agent Responses Read: &1 (&2 Errors)", FormatLongNumber(string(oMetrics:GetInteger("reads")), false), - trim(string(oMetrics:GetInteger("readErrors"), ">>>,>>>,>>9"))) skip. + trim(string(oMetrics:GetInteger("readErrors"), "->>>,>>>,>>9"))) skip. /* Minimum, maximum, average times to read a response from the MSAgent. */ if JsonPropertyHelper:HasTypedProperty(oMetrics, "minAgentReadTime", JsonDataType:Number) and @@ -680,7 +680,7 @@ procedure GetSessions: JsonPropertyHelper:HasTypedProperty(oMetrics, "writeErrors", JsonDataType:Number) then put unformatted substitute("~t # Agent Requests Written: &1 (&2 Errors)", FormatLongNumber(string(oMetrics:GetInteger("writes")), false), - trim(string(oMetrics:GetInteger("writeErrors"), ">>>,>>>,>>9"))) skip. + trim(string(oMetrics:GetInteger("writeErrors"), "->>>,>>>,>>9"))) skip. /* Number of clients connected at a particular time. */ /* Maximum number of concurrent clients. */ @@ -688,7 +688,7 @@ procedure GetSessions: JsonPropertyHelper:HasTypedProperty(oMetrics, "maxConcurrentClients", JsonDataType:Number) then put unformatted substitute("~tConcurrent Connected Clients: &1 (Max: &2)", FormatLongNumber(string(oMetrics:GetInteger("concurrentConnectedClients")), false), - trim(string(oMetrics:GetInteger("maxConcurrentClients"), ">>>,>>>,>>9"))) skip. + trim(string(oMetrics:GetInteger("maxConcurrentClients"), "->>>,>>>,>>9"))) skip. /* Total time that reserved ABL sessions had to wait before executing. */ if JsonPropertyHelper:HasTypedProperty(oMetrics, "totReserveABLSessionWaitTime", JsonDataType:Number) then diff --git a/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Util/OEManagerConnection.cls b/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Util/OEManagerConnection.cls index e466438..1abddce 100644 --- a/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Util/OEManagerConnection.cls +++ b/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Util/OEManagerConnection.cls @@ -538,6 +538,31 @@ class OpenEdge.ApplicationServer.Util.OEManagerConnection implements ISupportLog return new JsonArray(). end method. /* GetAgentMetrics */ + /* Get a listng of agent (ABL) requests for a single agent of an ABL Application + https://docs.progress.com/bundle/pas-for-openedge-reference/page/Get-current-request-information.html + + @param character ABL Application Name + @param integer Agent Process ID (PID) + @return JsonArray Array of Requests */ + method public JsonArray GetAgentRequests ( input pcAblApp as character, + input piPID as integer ): + define variable oJsonResp as JsonObject no-undo. + + assign oJsonResp = this-object:GetData(substitute(OEManagerEndpoint:AgentRequests, pcAblApp, piPID)). + + if JsonPropertyHelper:HasTypedProperty(oJsonResp, "error", JsonDataType:String) then + undo, throw new Progress.Lang.AppError(oJsonResp:GetCharacter("error"), 0). + + if JsonPropertyHelper:HasTypedProperty(oJsonResp, "result", JsonDataType:Object) then do: + if JsonPropertyHelper:HasTypedProperty(oJsonResp:GetJsonObject("result"), "AgentRequest", JsonDataType:Array) then + return oJsonResp:GetJsonObject("result"):GetJsonArray("AgentRequest"). + else + return new JsonArray(). + end. /* result */ + else + return new JsonArray(). + end method. /* GetAgentRequests */ + /* Get a listng of agent (ABL) sessions for a single agent of an ABL Application https://docs.progress.com/bundle/pas-for-openedge-reference/page/Get-session-metrics.html diff --git a/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Util/OEManagerEndpoint.cls b/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Util/OEManagerEndpoint.cls index eda2870..837a875 100644 --- a/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Util/OEManagerEndpoint.cls +++ b/PAS/Management/OEManager/ABL/src/OpenEdge/ApplicationServer/Util/OEManagerEndpoint.cls @@ -1,5 +1,5 @@ /* - Copyright 2022-2023 Progress Software Corporation + Copyright 2022-2024 Progress Software Corporation Licensed under the Apache License, Version 2.0 (the "License" get. private set; you may not use this file except in compliance with the License. @@ -43,6 +43,9 @@ class OpenEdge.ApplicationServer.Util.OEManagerEndpoint: define public static property AgentMetrics as character no-undo init "oemanager/applications/&1/agents/&2/metrics" get. private set. + define public static property AgentRequests as character no-undo init "oemanager/applications/&1/agents/&2/requests" get. + private set. + define public static property AgentSessions as character no-undo init "oemanager/applications/&1/agents/&2/sessions" get. private set. diff --git a/PAS/Management/OEManager/ABL/utils.zip b/PAS/Management/OEManager/ABL/utils.zip index c405e2f..c963934 100644 Binary files a/PAS/Management/OEManager/ABL/utils.zip and b/PAS/Management/OEManager/ABL/utils.zip differ diff --git a/PAS/Monitoring/Application/build.xml b/PAS/Monitoring/Application/build.xml index 7f228b0..5f59272 100644 --- a/PAS/Monitoring/Application/build.xml +++ b/PAS/Monitoring/Application/build.xml @@ -1,7 +1,7 @@ + @@ -82,7 +82,7 @@ - + @@ -295,35 +295,27 @@ - - + - + - - - - - + - + - + + + + + + - + - - - - - - - - @@ -367,7 +359,7 @@ - + @@ -479,7 +471,7 @@ - + @@ -607,8 +599,7 @@ - - + @@ -627,39 +618,7 @@ - - - - - - - - - - - - - - - - - - - - - + @@ -756,7 +715,7 @@ - + diff --git a/PAS/Monitoring/Application/deploy/oe117/Diagnostic.pl b/PAS/Monitoring/Application/deploy/oe117/Diagnostic.pl deleted file mode 100644 index dab5d4a..0000000 Binary files a/PAS/Monitoring/Application/deploy/oe117/Diagnostic.pl and /dev/null differ diff --git a/PAS/Monitoring/Application/deploy/oe117/bin/host_setenv.bat b/PAS/Monitoring/Application/deploy/oe117/bin/host_setenv.bat deleted file mode 100644 index 8cc7220..0000000 --- a/PAS/Monitoring/Application/deploy/oe117/bin/host_setenv.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off - -rem Get an IP address to use for identification of this server (from the default route). -for /f "usebackq tokens=4 delims= " %%f in (`route print ^| find " 0.0.0.0"`) do set PUBLIC_IP=%%f diff --git a/PAS/Monitoring/Application/deploy/oe117/bin/host_setenv.sh b/PAS/Monitoring/Application/deploy/oe117/bin/host_setenv.sh deleted file mode 100755 index eb97723..0000000 --- a/PAS/Monitoring/Application/deploy/oe117/bin/host_setenv.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -# Get a non-loopback address to use for identification of this server. -PUBLIC_IP=`ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | head -n 1` -export PUBLIC_IP diff --git a/PAS/Monitoring/Application/deploy/oe117/logging.config b/PAS/Monitoring/Application/deploy/oe117/logging.config deleted file mode 100644 index cc81c74..0000000 --- a/PAS/Monitoring/Application/deploy/oe117/logging.config +++ /dev/null @@ -1,85 +0,0 @@ -{ - "logger": { - "OpenEdge.Web.DataObject.DataObjectHandler": { - "logLevel": "INFO", - "filters": [ - "ABL_SUBSTITUTE_FORMAT", - "ERROR_FORMAT", - "REPLACE_TOKENS_FORMAT", - { - "name": "NAMED_FILE_WRITER", - "fileName": "${session.temp-dir}/DOH-A${req.agent}-S${req.session}.log", - "appendTo": true - } - ] - }, - "DOHEventHandler": { - "logLevel": "INFO", - "filters": [ - "ABL_SUBSTITUTE_FORMAT", - "ERROR_FORMAT", - { - "name": "TOKEN_FORMAT", - "format": "[${t.now}] ${req.id} | ${msg.logger}:${msg.level} - ${msg}" - }, - "REPLACE_TOKENS_FORMAT", - { - "name": "NAMED_FILE_WRITER", - "fileName": "${session.temp-dir}/DOHEvents-A${req.agent}-S${req.session}.log", - "appendTo": true - } - ] - }, - "Spark.Diagnostic.Util.RemoteMetrics": { - "logLevel": "INFO", - "filters": [ - "ABL_SUBSTITUTE_FORMAT", - "ERROR_FORMAT", - { - "name": "TOKEN_FORMAT", - "format": "[${t.now}] ${req.id} | ${msg.logger}:${msg.level} - ${msg}" - }, - "REPLACE_TOKENS_FORMAT", - { - "name": "NAMED_FILE_WRITER", - "fileName": "${session.temp-dir}/metrics/Actions-A${req.agent}-S${req.session}.log", - "appendTo": true - } - ] - }, - "AgentMetrics": { - "logLevel": "INFO", - "filters": [ - "ABL_SUBSTITUTE_FORMAT", - "ERROR_FORMAT", - { - "name": "TOKEN_FORMAT", - "format": "[${t.now}] ${msg.level} - ${msg}" - }, - "REPLACE_TOKENS_FORMAT", - { - "name": "NAMED_FILE_WRITER", - "fileName": "${session.temp-dir}/metrics/OEMetrics.log", - "appendTo": true - } - ] - }, - "Spark.Diagnostic.Util.OEMetrics": { - "logLevel": "INFO", - "filters": [ - "ABL_SUBSTITUTE_FORMAT", - "ERROR_FORMAT", - { - "name": "TOKEN_FORMAT", - "format": "[${t.now}] ${req.id} | ${msg.level} - ${msg}" - }, - "REPLACE_TOKENS_FORMAT", - { - "name": "NAMED_FILE_WRITER", - "fileName": "${session.temp-dir}/metrics/OEMetrics-A${req.agent}-S${req.session}.log", - "appendTo": true - } - ] - } - } -} \ No newline at end of file diff --git a/PAS/Monitoring/Application/deploy/oe117/merge.catalina.properties b/PAS/Monitoring/Application/deploy/oe117/merge.catalina.properties deleted file mode 100644 index 805eff1..0000000 --- a/PAS/Monitoring/Application/deploy/oe117/merge.catalina.properties +++ /dev/null @@ -1,3 +0,0 @@ - -# Adding an advanced access log format -psc.as.accesslog.pattern.advanced=%h %{OEReq.userId}r [%{yyyy-MM-dd'T'HH:mm:ss.SSSZ}t] "%r" %s %b %D %I %S %{OEReq.requestId}r diff --git a/PAS/Monitoring/Application/deploy/oe117/merge_spark.openedge.properties b/PAS/Monitoring/Application/deploy/oe117/merge_spark.openedge.properties deleted file mode 100644 index 29dc07a..0000000 --- a/PAS/Monitoring/Application/deploy/oe117/merge_spark.openedge.properties +++ /dev/null @@ -1,12 +0,0 @@ -[AppServer.Agent.@APPNAME@] - PROPATH=${CATALINA_BASE}/webapps/@WEBAPP@/WEB-INF/openedge,${CATALINA_BASE}/ablapps/@APPNAME@/openedge,${CATALINA_BASE}/openedge,${CATALINA_BASE}/openedge/Diagnostic.pl,${DLC}/tty,${DLC}/tty/netlib/OpenEdge.Net.pl - sessionShutdownProc=Spark/Diagnostic/metrics_shutdown.r - sessionActivateProc=Spark/Diagnostic/metrics_activate.r - sessionDeactivateProc=Spark/Diagnostic/metrics_deactivate.r - sessionStartupProc=Spark/Diagnostic/metrics_startup.r - -[AppServer.SessMgr.@APPNAME@] - agentLogEntryTypes=ASPlumbing,DB.Connects - agentLogFile=${catalina.base}/logs/@APPNAME@.agent.{yyyy-mm-dd}.log - agentStartupParam=-T ${catalina.base}/temp - diff --git a/PAS/Monitoring/Application/deploy/oe117/metrics_config.json b/PAS/Monitoring/Application/deploy/oe117/metrics_config.json deleted file mode 100644 index 20dd02c..0000000 --- a/PAS/Monitoring/Application/deploy/oe117/metrics_config.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "general": { - "pollIgnore": "", - "pollStart": "2020-01-01T08:00:00", - "pollStop": "2099-12-31T23:59:59" - }, - "remote": { - "exclude": "*OpenEdge.Core.*,*OpenEdge.Logging.*,*OpenEdge.Net.*,*OpenEdge.Web.*,*Progress.Web.*,*Spark.*", - "oemUser": "tomcat", - "oemPass": "tomcat", - "outputInterval": 120000, - "source": "oemanager", - "trackMemory": true, - "trackObjects": true, - "trackRequests": true - }, - "profiler": { - "enabled": false, - "filter": "*", - "threshold": 1000, - "trackBy": "request" - }, - "collector": { - "enabled": true, - "scheme": "http", - "server": "@MONITOR@", - "port": @MONPORT@ - } -} \ No newline at end of file diff --git a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/IPushData.r b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/IPushData.r index ab7e28b..29b4e48 100644 Binary files a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/IPushData.r and b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/IPushData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushConfig.r b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushConfig.r index 6a9eba7..6cdd710 100644 Binary files a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushConfig.r and b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushConfig.r differ diff --git a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushData.r b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushData.r index 2aa478d..aca1bd2 100644 Binary files a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushData.r and b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushHealthData.r b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushHealthData.r index 663cbb0..a130c43 100644 Binary files a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushHealthData.r and b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushHealthData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r index febdb63..2ddda58 100644 Binary files a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r and b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r index a117a25..548ddac 100644 Binary files a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r and b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/healthpush.r b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/healthpush.r index 47b6197..50a0733 100644 Binary files a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/healthpush.r and b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/healthpush.r differ diff --git a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/livediagpush.r b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/livediagpush.r index 81eff7d..0ad48bc 100644 Binary files a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/livediagpush.r and b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/livediagpush.r differ diff --git a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r index fae91f8..c5f35c0 100644 Binary files a/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r and b/PAS/Monitoring/Application/deploy/oe122/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r differ diff --git a/PAS/Monitoring/Application/deploy/oe122/build/metrics.r b/PAS/Monitoring/Application/deploy/oe122/build/metrics.r index fbe86a2..107ebd1 100644 Binary files a/PAS/Monitoring/Application/deploy/oe122/build/metrics.r and b/PAS/Monitoring/Application/deploy/oe122/build/metrics.r differ diff --git a/PAS/Monitoring/Application/deploy/oe122/merge_demo.openedge.properties b/PAS/Monitoring/Application/deploy/oe122/merge_demo.openedge.properties deleted file mode 100644 index 6326697..0000000 --- a/PAS/Monitoring/Application/deploy/oe122/merge_demo.openedge.properties +++ /dev/null @@ -1,26 +0,0 @@ -[AppServer.Agent.@APPNAME@] - numInitialSessions=5 - -[AppServer.SessMgr.@APPNAME@] - maxABLSessionsPerAgent=10 - maxAgents=2 - maxConnectionsPerAgent=10 - minAgents=2 - numInitialAgents=2 - -[@APPNAME@.@WEBAPP@.APSV] - adapterEnabled=1 - -[@APPNAME@.@WEBAPP@.SOAP] - adapterEnabled=1 - -[@APPNAME@.@WEBAPP@.REST] - adapterEnabled=1 - -[@APPNAME@.@WEBAPP@.WEB] - adapterEnabled=1 - defaultHandler=OpenEdge.Web.DefaultWebHandler - handler1=OpenEdge.Web.DataObject.DataObjectHandler: /pdo/ - handler2=OpenEdge.Web.PingWebHandler: /_oeping/ - srvrAppMode=production - diff --git a/PAS/Monitoring/Application/deploy/oe117/merge_demo.openedge.properties b/PAS/Monitoring/Application/deploy/oe122/merge_demo_general.openedge.properties similarity index 67% rename from PAS/Monitoring/Application/deploy/oe117/merge_demo.openedge.properties rename to PAS/Monitoring/Application/deploy/oe122/merge_demo_general.openedge.properties index 6326697..0bd7e6a 100644 --- a/PAS/Monitoring/Application/deploy/oe117/merge_demo.openedge.properties +++ b/PAS/Monitoring/Application/deploy/oe122/merge_demo_general.openedge.properties @@ -19,8 +19,4 @@ [@APPNAME@.@WEBAPP@.WEB] adapterEnabled=1 - defaultHandler=OpenEdge.Web.DefaultWebHandler - handler1=OpenEdge.Web.DataObject.DataObjectHandler: /pdo/ - handler2=OpenEdge.Web.PingWebHandler: /_oeping/ - srvrAppMode=production diff --git a/PAS/Monitoring/Application/deploy/oe122/merge_demo_handlers.openedge.properties b/PAS/Monitoring/Application/deploy/oe122/merge_demo_handlers.openedge.properties new file mode 100644 index 0000000..b9576ee --- /dev/null +++ b/PAS/Monitoring/Application/deploy/oe122/merge_demo_handlers.openedge.properties @@ -0,0 +1,4 @@ +[@APPNAME@.@WEBAPP@.WEB] + defaultHandler=OpenEdge.Web.DefaultWebHandler + handler1=OpenEdge.Web.DataObject.DataObjectHandler: /pdo/ + srvrAppMode=production diff --git a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/IPushData.r b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/IPushData.r index ab7e28b..190af59 100644 Binary files a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/IPushData.r and b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/IPushData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushConfig.r b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushConfig.r index 6a9eba7..6a95718 100644 Binary files a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushConfig.r and b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushConfig.r differ diff --git a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushData.r b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushData.r index 2aa478d..d24f385 100644 Binary files a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushData.r and b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushHealthData.r b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushHealthData.r index 663cbb0..1f6b1e8 100644 Binary files a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushHealthData.r and b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushHealthData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r index febdb63..fa340f0 100644 Binary files a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r and b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r index a117a25..ab7b31e 100644 Binary files a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r and b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/healthpush.r b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/healthpush.r index 47b6197..2ed0d4a 100644 Binary files a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/healthpush.r and b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/healthpush.r differ diff --git a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/livediagpush.r b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/livediagpush.r index 81eff7d..5bdfc91 100644 Binary files a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/livediagpush.r and b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/livediagpush.r differ diff --git a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r index fae91f8..37bf662 100644 Binary files a/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r and b/PAS/Monitoring/Application/deploy/oe128/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r differ diff --git a/PAS/Monitoring/Application/deploy/oe128/build/metrics.r b/PAS/Monitoring/Application/deploy/oe128/build/metrics.r index fbe86a2..3588511 100644 Binary files a/PAS/Monitoring/Application/deploy/oe128/build/metrics.r and b/PAS/Monitoring/Application/deploy/oe128/build/metrics.r differ diff --git a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/IPushData.r b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/IPushData.r index ab7e28b..0dc9c69 100644 Binary files a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/IPushData.r and b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/IPushData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushConfig.r b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushConfig.r index 6a9eba7..0482b18 100644 Binary files a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushConfig.r and b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushConfig.r differ diff --git a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushData.r b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushData.r index 2aa478d..ecd76d2 100644 Binary files a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushData.r and b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushHealthData.r b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushHealthData.r index 663cbb0..f6ec684 100644 Binary files a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushHealthData.r and b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushHealthData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r index febdb63..5b1c586 100644 Binary files a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r and b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushLiveDiagData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r index a117a25..9d9f249 100644 Binary files a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r and b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Service/PushProfilerData.r differ diff --git a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/healthpush.r b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/healthpush.r index 47b6197..2be44c1 100644 Binary files a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/healthpush.r and b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/healthpush.r differ diff --git a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/livediagpush.r b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/livediagpush.r index 81eff7d..285cecc 100644 Binary files a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/livediagpush.r and b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/livediagpush.r differ diff --git a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r index fae91f8..55aac80 100644 Binary files a/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r and b/PAS/Monitoring/Application/deploy/oe130/build/OpenEdge/ApplicationServer/Util/reqdiagpush.r differ diff --git a/PAS/Monitoring/Application/deploy/oe130/build/metrics.r b/PAS/Monitoring/Application/deploy/oe130/build/metrics.r index fbe86a2..be3a9ae 100644 Binary files a/PAS/Monitoring/Application/deploy/oe130/build/metrics.r and b/PAS/Monitoring/Application/deploy/oe130/build/metrics.r differ diff --git a/PAS/Monitoring/Collector/bin/database_shutdown.bat b/PAS/Monitoring/Collector/bin/database_shutdown.bat index 98461fe..f5642d7 100644 --- a/PAS/Monitoring/Collector/bin/database_shutdown.bat +++ b/PAS/Monitoring/Collector/bin/database_shutdown.bat @@ -6,9 +6,15 @@ if not defined DLC ( ) if not defined DBDIR ( - set DBDIR=%CATALINA_BASE%/db + if not defined CATALINA_BASE ( + echo CATALINA_BASE is not defined, using static path. + set DBDIR=@PASPATH@/db + ) else ( + set DBDIR=%CATALINA_BASE%/db + ) ) +echo Shutting down @DBNAME@ database. %DLC%/bin/_mprshut -by %DBDIR%/@DBNAME@.db exit /b 0 diff --git a/PAS/Monitoring/Collector/bin/database_shutdown.sh b/PAS/Monitoring/Collector/bin/database_shutdown.sh index 47c17fa..2e60b5d 100755 --- a/PAS/Monitoring/Collector/bin/database_shutdown.sh +++ b/PAS/Monitoring/Collector/bin/database_shutdown.sh @@ -2,13 +2,17 @@ # Stop the database for the PAS instance. if [ "${DLC}" = "" ] ; then - DLC="@DLCHOME@" - export DLC + export DLC="@DLCHOME@" fi if [ "${DBDIR}" = "" ] ; then - DBDIR="${CATALINA_BASE}/db" - export DBDIR + if [ -z "${CATALINA_BASE}" ]; then + echo "CATALINA_BASE is not set, using static path." + export DBDIR="@PASPATH@/db" + else + export DBDIR="${CATALINA_BASE}/db" + fi fi +echo "Shutting down @DBNAME@ database." ${DLC}/bin/_mprshut -by ${DBDIR}/@DBNAME@.db &>/dev/null & diff --git a/PAS/Monitoring/Collector/bin/database_startup.bat b/PAS/Monitoring/Collector/bin/database_startup.bat index 9697d90..2d6a373 100644 --- a/PAS/Monitoring/Collector/bin/database_startup.bat +++ b/PAS/Monitoring/Collector/bin/database_startup.bat @@ -1,31 +1,51 @@ @echo off rem Start the database for the PAS instance. +set DBNAME=@DBNAME@ set DBPORT=@DBPORT@ -set DBOPTS=-bibufs 40 -B 64000 -L 102400 -lruskips 500 -Mm 32600 -Ma 10 -Mpb 30 -Mi 1 -Mn 30 -n 360 -spin 20000 +rem Reserved for Enterprise RDBMS: -lruskips 500 -spin 20000 +set DBOPTS=-bibufs 40 -B 64000 -L 102400 -Mm 32600 -Ma 10 -Mpb 30 -Mi 1 -Mn 30 -n 80 if not defined DLC ( set DLC=@DLCHOME@ ) if not defined DBDIR ( - set DBDIR=%CATALINA_BASE%/db + if not defined CATALINA_BASE ( + echo CATALINA_BASE is not defined, using static path. + set DBDIR=@PASPATH@/db + ) else ( + set DBDIR=%CATALINA_BASE%/db + ) ) rem Check if the database is/isn't already started. -%DLC%/bin/_proutil %DBDIR%/@DBNAME@.db -C holder +%DLC%/bin/_proutil %DBDIR%/%DBNAME%.db -C holder if errorlevel 0 goto notinuse goto end :notinuse rem Use of "start /min" is the only way to execute the database startup without blocking the rest of the PAS startup! -@start /min %DLC%/bin/_mprosrv %DBDIR%/@DBNAME@.db -H localhost -S %DBPORT% -N TCP %DBOPTS% -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ -timeout 2 > NUL -@start /min %DLC%/bin/_mprshut %DBDIR%/@DBNAME@.db -C biw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ -@start /min %DLC%/bin/_mprshut %DBDIR%/@DBNAME@.db -C apw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ -@start /min %DLC%/bin/_mprshut %DBDIR%/@DBNAME@.db -C apw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ +echo Starting database %DBNAME% on port %DBPORT%. +@start /min %DLC%/bin/_mprosrv %DBDIR%/%DBNAME%.db -H localhost -S %DBPORT% -N TCP %DBOPTS% -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ +rem Pause for 4 seconds to allow database to start up. +timeout 4 > NUL +rem Check again if the database is/isn't already started. +%DLC%/bin/_proutil %DBDIR%/%DBNAME%.db -C holder +if errorlevel 0 goto dbprocs +goto starterror + +:dbprocs +echo Starting watchdog and BIW/APW processes for %DBNAME%. +@start /min %DLC%/bin/_mprshut %DBDIR%/%DBNAME%.db -C watchdog -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ +@start /min %DLC%/bin/_mprshut %DBDIR%/%DBNAME%.db -C biw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ +@start /min %DLC%/bin/_mprshut %DBDIR%/%DBNAME%.db -C apw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ +@start /min %DLC%/bin/_mprshut %DBDIR%/%DBNAME%.db -C apw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ goto end -:end +:starterror +echo Unable to start %DBNAME% database. +goto end +:end exit /b 0 diff --git a/PAS/Monitoring/Collector/bin/database_startup.sh b/PAS/Monitoring/Collector/bin/database_startup.sh index c44b641..7bc8e74 100755 --- a/PAS/Monitoring/Collector/bin/database_startup.sh +++ b/PAS/Monitoring/Collector/bin/database_startup.sh @@ -1,33 +1,36 @@ #!/bin/bash # Start the database for the PAS instance. +export DBNAME=@DBNAME@ export DBPORT=@DBPORT@ -export DBOPTS="-bibufs 40 -B 64000 -L 102400 -lruskips 500 -Mm 32600 -Ma 10 -Mpb 30 -Mi 1 -Mn 30 -n 360 -spin 20000" +# Reserved for Enterprise RDBMS: -lruskips 500 -spin 20000 +export DBOPTS="-bibufs 40 -B 64000 -L 102400 -Mm 32600 -Ma 10 -Mpb 30 -Mi 1 -Mn 30 -n 80" if [ "${DLC}" = "" ] ; then - DLC="@DLCHOME@" - export DLC + export DLC="@DLCHOME@" fi if [ "${DBDIR}" = "" ] ; then - DBDIR="${CATALINA_BASE}/db" - export DBDIR + if [ -z "${CATALINA_BASE}" ]; then + echo "CATALINA_BASE is not set, using static path." + export DBDIR="@PASPATH@/db" + else + export DBDIR="${CATALINA_BASE}/db" + fi fi -${DLC}/bin/_proutil ${DBDIR}/@DBNAME@.db -C holder +# Check if database was started or not and take appropriate action +${DLC}/bin/_proutil ${DBDIR}/${DBNAME}.db -C holder retcode=$? # this saves the return code case $retcode in -0) echo "Starting database pasmon on port ${DBPORT}" -${DLC}/bin/_mprosrv ${DBDIR}/@DBNAME@.db -H localhost -S ${DBPORT} -N TCP ${DBOPTS} -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ &>/dev/null & -sleep 2 -${DLC}/bin/_mprshut ${DBDIR}/@DBNAME@.db -C biw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ &>/dev/null & -${DLC}/bin/_mprshut ${DBDIR}/@DBNAME@.db -C apw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ &>/dev/null & -${DLC}/bin/_mprshut ${DBDIR}/@DBNAME@.db -C apw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ &>/dev/null & +0) echo "Starting database ${DBNAME} on port @DBPORT@" +${DLC}/bin/_mprosrv ${DBDIR}/${DBNAME}.db -H localhost -S ${DBPORT} -N TCP ${DBOPTS} -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ &>/dev/null & +sleep 4 ;; 14) echo "The database is in single-user mode" exit $retcode ;; -16) echo "The database is busy in multi-user mode" +16) echo "The database is in multi-user mode" exit $retcode ;; *) echo "proutil -C holder failed" @@ -35,3 +38,25 @@ echo error code = $retcode exit $retcode ;; esac # case $retcode in + +# Confirm if the database was started before starting other processes +${DLC}/bin/_proutil ${DBDIR}/${DBNAME}.db -C holder +retcode=$? # this saves the return code +case $retcode in +0) echo "The database could not be started" +exit $retcode +;; +14) echo "The database is in single-user mode" +exit $retcode +;; +16) echo "Starting watchdog and BIW/APW processes for ${DBNAME}" +${DLC}/bin/_mprshut ${DBDIR}/${DBNAME}.db -C watchdog -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ &>/dev/null & +${DLC}/bin/_mprshut ${DBDIR}/${DBNAME}.db -C biw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ &>/dev/null & +${DLC}/bin/_mprshut ${DBDIR}/${DBNAME}.db -C apw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ &>/dev/null & +${DLC}/bin/_mprshut ${DBDIR}/${DBNAME}.db -C apw -cpinternal @CODEPAGE@ -cpstream @CODEPAGE@ &>/dev/null & +;; +*) echo "proutil -C holder failed" +echo error code = $retcode +exit $retcode +;; +esac # case $retcode in diff --git a/PAS/Monitoring/Collector/build.xml b/PAS/Monitoring/Collector/build.xml index aea6f6b..81d5551 100644 --- a/PAS/Monitoring/Collector/build.xml +++ b/PAS/Monitoring/Collector/build.xml @@ -362,10 +362,12 @@ + + @@ -375,12 +377,13 @@ - + + diff --git a/PAS/Monitoring/INSTALL_OE117.md b/PAS/Monitoring/INSTALL_OE117.md deleted file mode 100644 index 2b870fa..0000000 --- a/PAS/Monitoring/INSTALL_OE117.md +++ /dev/null @@ -1,213 +0,0 @@ -# Continuous PAS Monitoring - OpenEdge 11.7 # - -## Installation & Usage ## - -The provided `build.xml` files are expected to be used with the `proant` utility from within a PROENV session. You should be aware of the location of your PAS instance to be monitored along with a location where your collector/monitor endpoint may reside--the latter may be on a separate server and in fact is strongly encouraged. The primary 2 folders contain the artifacts for tailoring the Application and Collector instances, respectively. For a comprehensive history and listing of all commands, see the file `Pulse_Metrics_Enablement.pdf` in this directory (which focuses more on the approach for OpenEdge 12.2+). - -**For all of the proceeding instructions and for best results, please utilize a PROENV session to make the DLC location and all necessary OpenEdge utilities available in your system path.** - -**Linux Users:** Before proceeding, if you are using Ubuntu Linux as your OS image please be sure that your `/bin/sh` command links to `/bin/bash` as the default shell. If you encounter an error while executing certain PAS commands such as `OEJMX.sh` and receive an error such as "[[: not found" this will serve as a fix for that particular error. - -### Application - PAS Integration ### - -Running `proant` without parameters from within each of the Application or Collection directories will provide a list of commands and options. - - Usage Instructions: - - proant create - [Optional] Create a standard oepas1 PAS instance - -Dhttp=8810 = Port for HTTP connections - -Dhttps=8811 = Port for HTTPS connections - -Dajp=8009 = Port for AJP13 connections - -Dshut=8812 = Tomcat shutdown port - -Dwrk=C:\OpenEdge\WRK = Parent directory for PAS instance - -Dinstance=oepas1 = Name of PAS instance - -Dalias=oepas1 = Alias for PAS instance - - proant deploy_demos - [Optional] Recompile and update demo ABL code - -Dwrk=C:\OpenEdge\WRK = Parent directory for PAS instance - -Dinstance=oepas1 = Name of PAS instance - -Dablapp=oepas1 = Dedicated ABL App name - -Dwebapp=ROOT = Demo webapp name - - proant deploy_metrics - Configure the PAS instance for metrics collection - -Dwrk=C:\OpenEdge\WRK = Parent directory for PAS instance - -Dinstance=oepas1 = Name of PAS instance - -Dablapp=oepas1 = Dedicated ABL App name - -Dwebapp=ROOT = Demo webapp name - -Dmonitor=127.0.0.1 = IP of the monitor endpoint - -Dport=8850 = Port of the monitor endpoint - - proant metrics - Enable/Disable collection for the instance - -Dwrk=C:\OpenEdge\WRK = Parent directory for PAS instance - -Dinstance=oepas1 = Name of PAS instance - -Dablapp=oepas1 = ABL App for collection - -DlocalIP=10.0.2.15 = IP of this server - -Dtype=pulse [pulse|profiler] - -Dstate=on [on|off] - -Dopts=sessions,requests,calltrees,ablobjs [logmsgs,sessions[,requests[,calltrees,callstacks],ablobjs]] - -Dmonitor=127.0.0.1 = IP of the monitor endpoint (or 'file' for local output) - -Dport=8850 = Port of the monitor endpoint - - Note: You cannot simultaneously use the 'calltrees' option in the pulse metrics and run profiler metrics. - The web UI will display whichever was reported, but an agent cannot collect both at the same time. - - proant revert - [Optional] Restore original PAS instance - -Dwrk=C:\OpenEdge\WRK = Parent directory for PAS instance - -Dinstance=oepas1 = Name of PAS instance - - Instance Management: - proant startup - Uses TCMAN to start the oepas1 PAS instance - proant query - Uses TCMAN to query the oepas1 PAS instance - proant shutdown - Uses TCMAN to stop the oepas1 PAS instance - -1. Place the **Application** folder on the host machine where you wish to gather metrics from a PAS instance. -1. From within a `PROENV` session, navigate to the **Application** folder. -1. **OPTIONAL:** If you DO NOT have a PAS installation you wish to monitor, you may use the `proant create` target to create a plain **oepas1** instance in a WRK directory of your choosing. - - Additionally, there is a `proant deploy_demos` target which will add some sample code to an instance and will provide some testing endpoints accessible via the WEB transport. - - Values such as the instance, ablapp, and webapp names can be modified as necessary for this deployment step. -1. Execute `proant deploy_metrics` to integrate the metrics-gathering feature to a target instance. - - Adjust the available parameters as necessary to change your path and target for the PAS instance to tailor. - - **Be certain to change the monitor instance's IP and port as necessary for data collection!** - - This will tailor the instance depending on the OpenEdge version in use. -1. **OPTIONAL:** If you wish to also collect metrics from the **HealthScanner** feature you may execute the `proant health` command to enable the HealthScanner feature for the PAS instance and enable collection of data. - - Please note that by default all PAS instances will use port 8899 for this feature. Each PAS instance must utilize a unique port for the HealthScanner which is configured via the `psc.as.healthcheck.port` property in the `CATALINA_BASE/conf/catalina.properties` file. - - If necessary, choose an available (read: unused) port which will represent your PAS instance's health information. Adjust this value before starting the PAS instance, and it will be found automatically by the supplied code. -1. Start the target instance and confirm operation of the PAS instance at `http://HOSTNAME:PORT` as applicable. - -**Note 1:** The R-code is compiled against OpenEdge 12 by default, and may need to be recompiled for other versions of OpenEdge. To do so, there is an undocumented `compile` target for the proant utility which will recompile the code and place it into the correct deployment directory. From there the `deploy_metrics` will copy the R-code to the correct location. This step will of course require the "4GL Development" license, though once compiled the files can be deployed anywhere the same version of OpenEdge is installed. - -**Note 2:** When specifying the ABL Application name for any utilities or command line options, it is necessary to use the exact same case as the `openedge.properties` file and reported by the PAS instance. Due to the use of JSON objects to pass many of the commands to the instance these values should be treated as case-sensitive. - -### Collector - Metrics Visualization ### - - Usage Instructions: - - proant create - Create the monitor PAS instance and pasmon database - -Dhttp=8850 = Port for HTTP connections - -Dhttps=8851 = Port for HTTPS connections - -Dajp=8852 = Port for AJP13 connections - -Dshut=8853 = Tomcat shutdown port - -Dwrk=C:\OpenEdge\WRK = Parent directory for PAS instance - -Dinstance=monitor = Name of PAS instance - -Dalias=monitor = Alias for PAS instance - -Dablapp=monitor = Dedicated ABL App name - -Dwebapp=ROOT = WebApp name for UI deployment - -Dcodepage=UTF-8 = Codepage for DB/instance - -Dcollation=Basic = Collation for Codepage - - proant update - [Optional] Re-deploy static content and ABL code - -Dwrk=C:\OpenEdge\WRK = Parent directory for PAS instance - -Dinstance=monitor = Name of PAS instance - - proant rebuild_db - [Optional] Re-create the pasmon database from scratch - -Dwrk=C:\OpenEdge\WRK = Parent directory for PAS instance - -Dinstance=monitor = Name of PAS instance - - Instance Management: - proant startup - Uses TCMAN to start the monitor PAS instance - proant query - Uses TCMAN to query the monitor PAS instance - proant shutdown - Uses TCMAN to stop the monitor PAS instance - -**Notice:** This instance assumes availability of ports 8850, 8851, 8852, and 8853 for the PAS instance, with 8854 for the database by default. Please change these values as necessary via properties when creating the new collection endpoint. - -1. Place the **Collector** folder on the host machine where you wish to have all metrics reported. - - This machine must be able to at least receive TCP connections on port 8850 (for HTTP) or 8851 (for HTTPS). -1. From within a PROENV session, navigate to the **Collector** folder. -1. Execute `proant create` to create both the **pasmon** database and **monitor** PAS instance. -1. Confirm creation of the PAS instance at the configured WRK folder, with a /db/ folder within that. -1. Start the **monitor** instance via `proant startup`. -1. Confirm operation at `http://MONITOR_IP:PORT` (eg. [http://localhost:8850](http://localhost:8850)) - -For reference, the following actions are taken during the "create" process: - -- A new PAS instance called "*monitor*" is created at the configured WRK directory. -- A new local database called "*pasmon*" is created at `CATALINA_BASE/db/`. -- The configured WebApp is updated with items from a custom `ui.zip` file contents. -- ABL code is placed within the `ablapps` folder, including the DOH .map files. -- The PAS instance is tailored with a basic `startup.pf` and a WebHandler endpoint. -- Database startup/shutdown scripts are added to the /bin/ directory. - -**Note:** As part of the installation/configuration of this instance, the included **pasmon** database should be automatically started (\_mprosrv) and stopped (\_mprshut) as part of the normal operation of the PAS instance (read: it is not necessary to create a dedicated database server). - -## Metrics Generation ## - -The following instructions assumes testing against a PAS instance **with the demo code deployed**. If you are monitoring your own PAS instance (not oepas1) please execute any desired tests as normal and skip to the **Enabling Collection** steps. - -1. Download and install the [JMeter](https://jmeter.apache.org/download_jmeter.cgi) application to assist with further testing. -1. Open the **Application/RunTests.jmx** file, making sure to adjust the server IP and port in the **HTTP Request** section to match your demo environment. -1. The test should confirm proper operation of the RESTful API endpoints and place stress on the server for a period of 10 minutes. -1. Before execution of the JMeter script, perform the instructions below for enabling collection on your PAS instance, depending on the OpenEdge version and type of solution deployed. - -### Enabling Collection: ### - -For reference, the location of the collection "monitor" instance should have been factored into the enablement scripts during the preceding deployment to the target PAS instance. This is configured via the `metrics_config.json` file... - -- Collection should start automatically on each MSAgent-session after the initial timeout period, once the ABL Application of the instance being monitored begins receiving requests. -- By default the memory, ABLObjects, and requests will be tracked per-session and reported every 2 minutes. - -At this point you may execute any tests against the monitored PAS instance and begin checking for results in the UI of the monitor instance at `http:MONITOR_IP:PORT` (eg. [http://localhost:8850](http://localhost:8850)). - -## Results Interpretation ## - -With the tests executed and results gathered, it should be possible to see an increase in both per-session memory and the count of ABLObjects present. These trends will be seen in the graph of memory and objects as outlined in the process below. - -1. Return to the **Monitor** application at [http://localhost:8850](http://localhost:8850) -1. The dropdown to the right of the **PASOE Stats** text may initially be blank, when no data has been reported to the server yet. As metrics are sent to the Monitor instance you may need to refresh the page to reflect any changes. -1. Once an entry for "**InstanceName / [ServerIP:Port]**" appears in the dropdown, make sure that option is selected and you should then be able to select an option from the "**Agent/Session**" dropdown for further review. -1. As you cycle through the available agents and sessions any recorded results should appear in the **Memory/Objects** graph in the tab set in the lower half of the screen. The two lines plotted should have their corresponding scales along the vertical access on each side of the graph (memory to the left, object count to the right). -1. You may look at the other tabs to review various aspects of data collected from the monitored instance: - - Statistics Overview - A summary of all agent and session statistics gathered for the application. - - Memory/Objects - Reports the selected session's trend of memory consumption to ABL Objects. - - Agent Activity - Provides a graphic for 3 key metrics: - - Concurrent Sessions: Activity over time, including counts of requests serviced by each session at that moment. - - Session Memory: Use over time for the agent, including overhead memory when available (OpenEdge 12.2+). - - Agent Lifetime: Total sessions started over the life of the session, including session and overhead memory totals. - - ABL Requests - Sequential list of requests for ABL code execution. - - Tomcat Access Logs - Provided after the shut-down of the monitored PAS instance (Spark-Diagnostics only). - - Profiler Data - ABL Profiler output, if enabled for collection (not covered here). - - Health Trends - Reserved for displaying trends from the HealthScanner (not covered here). - -### Sample Scenario ### - -For a sample of the possible output, we can view a comparison using the following scenario. The graphs represent 2 agents in use on 2 PAS instances, on a pair of load-balanced servers. In the first stress test only 2,000 requests were made to a load balancer which required 1-2 concurrent sessions to be used on the first agent of each server. Increasing the total requests 10x to 20,000 used all 10 sessions on each first agent, and 2-3 sessions on the second agent. With the scenario stated, we can observe a few key points: - -- The solid black line shows the collective number of requests serviced by all sessions on each agent, and the values were consistent across the agents for both tests--this indicates the load balancer was effective at sending equal requests to each server and the PAS instances behaved identically. - -- Another phenomenon we can observe is that as the stress test started, there was an initial spike of activity on the second agents--this was due to setting the numInitialSessions to 5. Thus, we can see precisely when the first agent needed to start additional sessions to handle the load. Once all 10 sessions were started on that first agent the number of requests to the second agent dropped significantly. - -![Concurrent Sessions](Sample-Agents.png) - -Tracking memory is another good metric to observe. Viewing the Session Memory graph for each agent we can see the cumulative memory for each agent over time, along with the memory reported by each session. In this case we see a plateau in use once all the necessary sessions have been started to service the requests. Thus, we can assume there are no memory leaks here! - -![Agent Memory](Sample-Memory.png) - -When configured, data from the HealthScanner for OpenEdge can be sent as a ProDataSet, collected, and graphed accordingly. Based on the same timeline as the tests above, we can see metric for the health of the CPU did drop significantly for both servers during the latter tests, and began to recover when the tests were halted. - -![HealthScanner](Sample-Health.png) - -## Troubleshooting ## - -Is something not working as expected? Are you running tests but not getting data? Don't worry, there's probably a very simple reason and we need to discover what is really happening behind the scenes.There are logging features built-in to all solutions and we just need to ensure these are fully enabled when debugging the diagnostics. In all cases where things go wrong is it encouraged that you look at all available instance log files for clues. This includes both the /logs/ directory and especially the /temp/ directory which is the default location for many of the custom, disposable files for the diagnostics. - -### Application ### - -1. Open the `logging.config` file which should exist in your PROPATH (default: CATALINA_BASE/openedge). -2. Look for the **"Spark.Diagnostic.Util.RemoteMetrics"**, **"Spark.Diagnostic.Util.OEMetrics"**, and **"AgentMetrics"** properties in the JSON file. -3. Set the **logLevel** property in these objects to DEBUG or TRACE. Note that TRACE may output many additional files into your PAS instance's session temporary directory location. -4. Stop your PAS instance if possible, remove all existing log files, and restart the instance for a clean slate. -5. Inspect the PAS instance's `/temp/` directory for any .log files produced from the logger output. - -### Collector ### - -1. Open the `logging.config` file which should exist in your PROPATH (default: CATALINA_BASE/openedge). -2. Look for the **"Business.Intake"** property in the JSON file. -3. Set the **logLevel** property in this object to DEBUG or TRACE. Note that TRACE may output many additional files into your PAS instance's session temporary directory location. -4. Stop your PAS instance if possible, remove all existing log files, and restart the instance for a clean slate. -5. Inspect the PAS instance's `/temp/` directory for any .log files produced from the logger output. - -**Next Steps** - -Once the instances are restarted with the increased verbosity in logging, re-run any tests for several minutes (at least 2x the "outputInterval" of time for the metrics collection) and examine the various log files produced: - -- Application: Look to the /temp/ folder for information about the overall metrics behavior (OEMetrics* log files) or the internal requests to the OEManager for data (Actions* log files). -- Collector: Look to the /temp/intake/ folder for the intake.log file as well as any dumped data which was sent to the instance for collection. \ No newline at end of file diff --git a/PAS/Monitoring/README.md b/PAS/Monitoring/README.md index cd43f92..95ab34f 100644 --- a/PAS/Monitoring/README.md +++ b/PAS/Monitoring/README.md @@ -4,16 +4,16 @@ PAS for OpenEdge supplies the means of collecting runtime metrics via OEJMX queries or the OEManager REST API endpoints. However, the resulting data from these endpoints represent only a single moment in time and by themselves to not provide trending data which could be useful for analysis over time. For that, we need to provide a mechanism to automatically and repeatedly collect data in a manner which is ideally both transparent to the end-user or an administrator, and does not degrade application performance. -To offer such a solution there are 2 options in this directory meant as internal, unsupported features and their deployment is dependent on the OpenEdge version in which a PAS instance runs: +For the OpenEdge 12 LTS releases there are 2 possible options: -- **11.7.8+** - Via the **Spark Diagnostic** library and its supporting code. *DEPRECATED* - **12.2.4+** - Via the **LiveDiag[nostics]** debug feature in PASOE. +- **12.8.9+** - Via the [**OpenEdge Memory Profiler**](https://docs.progress.com/bundle/openedge-whats-new/page/Whats-New-in-OpenEdge-12.8.html#ariaid-title12) -Due to the retirement of OpenEdge 11.7 scheduled for April 2025 the contents of this guide will focus on the 12.2 LTS and later releases. For information related to the OpenEdge 11.7 release please [view the dedicated README_OE117 document](README_OE117.md). +The solution covered here is explicitly for the **LiveDiag** debug feature available in OpenEdge 12.2 and later releases. ## Requirements ## -In order to utilize the included tooling you must have installed OpenEdge 12.2.4 at a minimum (12.2.16 is the latest as of June 2024). Please note that OpenEdge versions 12.0, 12.1, and 12.3 are not supported and it is highly recommended to upgrade to the latest OpenEdge 12.2.x LTS or OpenEdge 12.8.x LTS release if currently using those noted or earlier versions. +In order to utilize the included tooling you must have installed OpenEdge 12.2.4 at a minimum (12.2.18 is the latest as of August 2025). Please note that OpenEdge versions 12.0, 12.1, and 12.3 are not supported and it is highly recommended to upgrade to the latest OpenEdge 12.2.x LTS or OpenEdge 12.8.x LTS release if currently using those earlier versions. ## Disclaimer ## diff --git a/PAS/Monitoring/README_OE117.md b/PAS/Monitoring/README_OE117.md deleted file mode 100644 index 809fcd7..0000000 --- a/PAS/Monitoring/README_OE117.md +++ /dev/null @@ -1,37 +0,0 @@ -# Continuous PAS Monitoring - OpenEdge 11.7 # - -## Requirements ## - -In order to utilize the included tooling you must have installed OpenEdge 11.7.8 or later (ideally 11.7.13+). For OpenEdge 11.7.x the tailoring process MUST install the `oemanager` WebApp for metrics collection if it is not already deployed. - -## Disclaimer ## - -Use of these tools in a production environment is not recommended **UNLESS** they have been fully tested in a non-production environment first without observing any adverse effects. In some configurations the resulting data collected **MAY** have an impact on performance due to producing highly verbose information for collection. - -## Overview ## - -The **Spark Diagnostic** approach is intended for **OpenEdge 11.7.8+** and requires the `Diagnostic.pl` from the [Spark-Toolkit](https://github.com/progress/Spark-Toolkit) be installed and utilized for a PAS instance, with the PL file added to the PROPATH. Additionally, the `session[Startup|Activate|Deactivate|Shutdown]Proc` settings must be updated in the instance to trigger the necessary ABL logic which communicates with the OEManager webapp. Naturally, this instrumentation must work in conjunction with the existing business application and requires more configuration before it can be enabled. This is the only solution for OpenEdge 11.7.x installations (ideally 11.7.4+), and for numerous reasons is **not recommended for a production environment**. - -In other words, using the **Spark-Diagnostic** solution will cause a more noticeable impact in performance of an application due to the need to request data at the end of a request boundary. - -![Spark Diagnostic Architecture](Arch-Spark.png) - -For the **Spark Diagnostic** solution there is a timeout between each push to the collection endpoint which is dependent on server activity. Meaning, the timeout is only checked when a request is made to a particular MSAgent-session, and if the timeout interval has elapsed since the last send of data then new metrics will be collected. This unfortunately creates a gap in collection if no requests are serviced by a normally-idle MSAgent-session. - -Once collected, this solution is capable of sending data on a routine basis to an external location for collection (provided that network policy allows this). This endpoint is referred to here as the "**monitor**" which is a PAS instance that utilizes a custom database for storage of parsed data. All services are RESTful for both collection and reporting, and a simple UI is provided for generating user-friendly data trends. - -![Monitor Architecture](Arch-Monitor.png) - -## Differentiation ## - -For reference, this solution is not the same as the [OpenEdge HealthScanner](https://docs.progress.com/bundle/pas-for-openedge-management/page/Use-the-OpenEdge-HealthScanner.html) as they differ in several key ways: - -- The **OpenEdge HealthScanner** is primarily intended for production servers and is a supported, documented feature of the PAS for OpenEdge product. -- The **OpenEdge HealthScanner** reports a single, weighted score to represent the overall health of a server. -- The **Spark Diagnostic** solution is focused on specific ABL and Tomcat metrics direct from configured PAS instances, and does not consider the host OS memory, CPU, etc. -- The **OpenEdge HealthScanner** does not retain individual measurements over time, and is meant to be an on-demand snapshot. -- The **Spark Diagnostic** metrics are collected from across all ABL Applications in a PAS instance over time, are stored persistently, and meant for use in trend analysis. - -## Installation & Usage ## - -Please view the [supplemental Install guide](INSTALL_OE117.md) for detailed instructions for deployment on OpenEdge 11.7. \ No newline at end of file