go to post Jeffrey Drumm · Mar 5, 2023 The included IsRecentManagedAlert() method expects a recent alert to have 100% identical SourceConfigName and AlertText values. Probably not suitable for your application. Unfortunately, I haven't run into a scenario such as you describe where errors from multiple business hosts must be aggregated into one. I can envision a solution where you would identify this group of business hosts under a single Managed Alert Group, log activity for alerts in that group to a table or global via Ens.Alert's routing rule, and check the table/global for prior activity from that alert group in the in that same rule for the desired time span. Matches could then be suppressed. Since Managed Alert Groups aren't a property of Ens.AlertRequest, you would need to interrogate the business host (production item) for its membership from the rule. So you'd need to create a table/global, write some methods (in a class extending Ens.Rule.FunctionSet) to query your custom table/global for prior alerts and log the current alert, then configure a routing rule to check for the existence of prior activity on the selected Alert Group, log the current activity, and suppress or send the alert based on your criteria.
go to post Jeffrey Drumm · Mar 1, 2023 Check the Learning link at the top of the page. All of the official InterSystems training courses can be found there. Many are free.
go to post Jeffrey Drumm · Feb 10, 2023 Is it a password user? Yes Try disabling OS Delegated auth. That worked! Thanks
go to post Jeffrey Drumm · Feb 10, 2023 Does the version of Studio you're using match the version of Ensemble/Caché? Older versions of Studio will fail to connect to newer versions of Caché/IRIS.
go to post Jeffrey Drumm · Dec 8, 2022 I tried running it with Wine a few years ago and it almost worked. Perhaps Wine has improved since then, but I'm now firmly in the VS Code camp
go to post Jeffrey Drumm · Nov 29, 2022 DocTypeCategory and DocTypeName are populated based on the contents of DocType. The DocType property can be changed even though the message is immutable. TypeVersion is populated based on the value of the MSH:12 field in the message body. If you're attempting to modify the properties of an inbound message received from a business service, I don't think you'll be able to change TypeVersion with "Existing" set in the DTL editor because you can't modify MSH:12. Are you working with messages newly arrived through a service that haven't undergone any prior transformations?
go to post Jeffrey Drumm · Nov 1, 2022 %Net.MailMessage has an IsHTML property; set that to a value of 1 and you can use HTML in your WriteLine() calls to format your text.
go to post Jeffrey Drumm · Oct 21, 2022 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.
go to post Jeffrey Drumm · Oct 12, 2022 Sorry, I was never able to solve this before I finished up with that client. If I have some time I will experiment with one of my local environments.
go to post Jeffrey Drumm · Sep 26, 2022 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?
go to post Jeffrey Drumm · Sep 23, 2022 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).
go to post Jeffrey Drumm · Sep 16, 2022 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" }
go to post Jeffrey Drumm · Aug 8, 2022 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.
go to post Jeffrey Drumm · Aug 5, 2022 Does SYS.Mirror.GetFailoverMemberStatus() give you what you want? It has to be executed from %SYS. %SYS>set sc=##class(SYS.Mirror).GetFailoverMemberStatus(.pri,.alt) %SYS>zw pri pri=$lb("SERVERA.FOO.BAR.ORG/STAGE","SERVERA.foo.bar.org|2188","Primary","Active","172.31.33.69|1972","SERVERA.foo.bar.org|1972") %SYS>zw alt alt=$lb("SERVERB.FOO.BAR.ORG/STAGE","SERVERB.foo.bar.org|2188","Backup","Active","172.31.33.70|1972","SERVERB.foo.bar.org|1972")
go to post Jeffrey Drumm · Jul 21, 2022 Not sure why yours is showing OpenSSL v3. I'm running IRIS for Health 2022.1.0.209.0 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.
go to post Jeffrey Drumm · Jul 20, 2022 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.
go to post Jeffrey Drumm · Jul 13, 2022 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 ...
go to post Jeffrey Drumm · Jul 13, 2022 EDIT: Sorry, didn't notice that Alex Woodhead had already provided this answer ... If SELinux is enabled, you may need to run the following commands as root: # semanage fcontext -a -t httpd_sys_rw_content_t '/opt/webgateway/logs/CSP.log' # restorecon -v '/opt/webgateway/logs/CSP.log' Note that the '#' character represents the root account prompt and is not part of the command.
go to post Jeffrey Drumm · Jul 6, 2022 I've been troubleshooting issues with WebTerminal that resulted in either long delays after login before the IRIS prompt displayed, or license count exhaustion (which generated the lost connection errors you've experienced). The change that made the most immediate difference was to switch the MPM module used by Apache from event to worker. The latter allows pre-allocation of resources that seem to better support websockets. On RedHat Linux, the MPM module is configured through /etc/conf.modules.d/00-mpm.conf: Replace LoadModule mpm_event_module modules/mod_mpm_event.so with LoadModule mpm_worker_module modules/mod_mpm_worker.so ServerLimit 20 StartServers 10 MaxRequestWorkers 500 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 The values above are likely overkill for many purposes; they're borrowed from @Mark Bolinsky's excellent article on HS web server configuration found here: https://community.intersystems.com/post/apache-httpd-web-server-configuration-healthshare It does increase httpd's memory footprint by 30-40% over the "stock" configuration, but unless you're very tight on resources it shouldn't be an issue. I also heard from @John Murray that there will be another WebTerminal release shortly that addresses the IRIS/Caché version interrogation issue along with being kinder to your license count