Something like this, perhaps?

Class User.Util.StringFunctions Extends Ens.Util.FunctionSet

ClassMethod ReReplace(pStr As %String, pPat As %String, pRepl As %String = "") As %String
    Set tStrt = $LOCATE(pStr,pPat,,tEnd) - 1
    // in case the pattern isn't found, return source string
    Return:(tStrt < 0) pStr
    Set tPrefix = $EXTRACT(pStr,1,tStrt)
    Set tSuffix = $EXTRACT(pStr,tEnd,*)
    Return tPrefix_pRepl_tSuffix

USER> set mystr = "REASON->Blood(1.23)"
USER> set newstr = ##class(User.Util.StringFunctions).ReReplace(mystr,"->\w+")
USER> write newstr
USER> set altstr =  ##class(User.Util.StringFunctions).ReReplace(mystr,"->\w+","-CODE")
USER> write altstr

Hi Blake,

This might get you started in the right direction:

Set tRuleName = "<rulename>"
Set tTarget = $ORDER(^Ens.Rule.Targets(tRuleName,""))
Set tArr = 0
Set tCnt = 1
While tTarget '= ""
    Set tArr(tCnt) = tTarget
    Set tTarget = $ORDER(^Ens.Rule.Targets(tRuleName,tTarget))
    Set tArr = tCnt
    Set tCnt = tCnt + 1

Replace <rulename> with the name of the rule as it appears in the router configuration pane.

There's a self-paced training session on BPLs here; it should help get you started.

Can you describe the routes that the ADT and ORM messages are taking to get to the downstream system? Are they coming in through different services and/or being delivered downstream over different operations?

A BPL is  a Business Process class, so you would add a new Process to your production and select the name of the BPL you created as the class (rather than, say, a routing engine).

With some help from a fellow DC member, I wrote the method below. Its intent is to support auto-resolution of managed alerts:

/// Returns the connection status ("AdapterState") of the Business Service or Operation
/// named in <var>pItemName</var>
ClassMethod GetConnectionStatus(pItemName As %String) As %String [ Language = objectscript ]
    Set tStatement = ##class(%SQL.Statement).%New()
    Set tStatus = tStatement.%PrepareClassQuery("Ens.Util.Statistics","EnumerateJobStatus")
    If $$$ISERR(tStatus)
        Return "Error in Status Query: "_$system.Status.GetErrorText(tStatus)
    Set tRS = tStatement.%Execute(pItemName)
    If tRS.%SQLCODE = 0
        Do tRS.%Next()
        Return tRS.%Get("AdapterState")
    Return "Status not Found"

Here's a little code snippet that the Management Portal uses to get the Arbiter state:

	Set state = $SYSTEM.Mirror.ArbiterState()
	Set thisConnected = $SELECT($ZB(+state,+$$$ArbiterConnected,1)'=0:1,1:0)
	Set otherConnected = $SELECT($ZB(+state,+$$$ArbiterPeerConnected,1)'=0:1,1:0)
	If 'thisConnected {
		Set stateString = $$$Text("This member is not connected to the arbiter")
	} ElseIf 'otherConnected {
		Set stateString = $$$Text("Only this member is connected to the arbiter")
	} Else {
		Set stateString = $$$Text("Both failover members are connected to the arbiter")

You'll need to add an Include statement for %syMirror to use the $$$Arbiter* macros.

Note that the ArbiterState() method is undocumented, and its behavior may change in future releases.

Not sure why yours is showing OpenSSL v3. I'm running IRIS for Health 2022. on a Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-121-generic x86_64) physical host and I had no issues with installation.

My guess is that it isn't really complaining about openssl, but that libssl isn't at least version 1.1.1.

I'd try running (as root):

# apt install openssl
# apt install libssl1.1

These commands should install pre-compiled binaries. The first one should automatically install openssl 1.1.1f and the 2nd the same version of the libssl libraries.

And yes, while I haven't specifically used VirtualBox, I am a long-time user of VMWare on multiple platforms, with multiple Linux guests and versions of Caché/IRIS. Virtualization has, so far, very rarely been an issue.

It's a bug, and InterSystems is aware. It's still present in 2022.1, but I expect it will be fixed in an upcoming release.

For now, you'll need to change the resource associated with the database(s) to %DB_%DEFAULT (or whatever you prefer) after the creation of the namespace. That can be done through the management portal, under System Administration | System Configuration | Local Databases.

At some point I encoutered a problem that required I also run this command:

setsebool -P httpd_unified 1

I can't remember what it fixed, but I do know by the fact that I made a note of it that it fixed something ... laugh

Yes, in retrospect I should have realized that the DocType Structure was what the constraint required rather than the calculated value in the Name property. Sorry for any head-scratching I might have caused wink