Tom Fitzgibbon · Jun 29, 2018 go to post

You've left out some info (OS, OS version, firewalls, where you are running CTTerm, data path, etc) but...here are some suggestions:

Does putting in wrong account/password yield same symptom?

1) If you are running CTTerm on the same box check to see if Cache Telnet server enabled, permissions good, local box firewall not interfering, Cache license appropriate/applied, etc.

2) If running CTTerm from network check above plus all applicable firewalls or network protections. Some networks may prevent old Telnet running across specific paths without opening up a hole.

3) If you are using terminal servers to old serial terminals or PCs check the terminal servers.

Tom Fitzgibbon | 3474648531 | gototomAtG...l

Tom Fitzgibbon · Apr 30, 2018 go to post

CLS is kept in the system globals in each namespace. With some work you could probably write a COS routine to display the CLS in a human readable format.

Tom Fitzgibbon | gototomATg...l.com

Tom Fitzgibbon · Apr 30, 2018 go to post

SMTP servers can have different requirements (port, SSL level, etc). You have read AOL SMTP requirements? Sometimes it requires some fiddling.

From Lifewire: Enter these SMTP settings to send outgoing email through to your AOL Mail account from any email program.

  • Incoming Mail Server: imap.aol.com
  • SMTP Outgoing Server Address: smtp.aol.com. Set the port to 587
  • SMTP Username: "user@aol.com" (or @love.com, @games.com or @verizon.net)
  • SMTP password. The password you use to log in to AOL Mail
Tom Fitzgibbon · Apr 29, 2018 go to post

Some ISPs block port 25, see the SMTP server specs for other ports you can use (465, 587, etc).

Code below has worked for me in the past.

Tom Fitzgibbon | gototomATg...l.com

-------------------------------------------------------------------------------------------------------

SendMail(Message,SendTo,Subject) ;send mail

s s=##class(%Net.SMTP).%New()

s auth=##class(%Net.Authenticator).%New() ; use default auth

s auth.UserName="user@domain.com"

s auth.Password="xxxxxxxx"

s s.authenticator=auth

s s.smtpserver="smtpout.secureserver.net"

s s.timezone="Local"

s s.port="80" ;for secureserver

s m=##class(%Net.MailMessage).%New()

s m.Charset="iso-8859-1"

s m.From="person@domain.com"

Send ;where to?

d m.To.Insert(SendTo)

;subject

s m.Subject = Subject

d m.TextData.Write(Message)

s status=s.Send(m)

d m.%Close()

d auth.%Close()

q status

Tom Fitzgibbon · Mar 8, 2018 go to post

I agree with Benjamin: VMs (and containers) are the way to make testing environments. Once you set up your VM/container structure it's easy to create/delete identical testing instances.  Obviously make sure that you carefully isolate your cloned Cache from the real world or it may start interacting with real world production.

Tom Fitzgibbon | tom@tec.today | 3474648531

Tom Fitzgibbon · Feb 9, 2018 go to post

If you've had any experience with packet monitors you probably should try Wireshark since it's the most widely used. Various plugins, addons are available. I've used to monitor CSP, SOAP, JSON, Ensemble and other transactional comm.

Fiddler is a bit more user friendly but once you're in the packet details you have to spend time deciphering no matter what monitor.

Tom Fitzgibbon | gototomATG...l | 3474648531

Tom Fitzgibbon · Dec 2, 2017 go to post

As Robert indicates Shadowing and Mirroring on the Cache level are the ways to go.

Shadowing creates a copy of the master via journal Sets, Kills and $Bit. It's slower to sync and, I think, more prone to desync issues.

Mirroring is fairly immediate sync, offers more flexibility and features, like automatic failover. It's pretty awesome.

Tom Fitzgibbon | gototomAtG...l | 3474648531

Tom Fitzgibbon · Nov 30, 2017 go to post

I've rarely rebuilt indexes while moving Cache DBs. It's a complex added step that is probably not worth doing unless you have very large DB or limited copy throughput.

Tom Fitzgibbon gototomAtG...l

Tom Fitzgibbon · Nov 23, 2017 go to post

Having a refreshable image of your Cache/Namespace test area is the way to go.

Use Docker, VM machine image, backup image or other techniques to quickly reset full Cache image back to baseline for more testing.

Tom Fitzgibbon | gototomAtG...l | 13474648531

Tom Fitzgibbon · Nov 21, 2017 go to post

One thing to check is to make sure your users are not starting up multiple CSP sessions from the same or different browsers on the same device.

Some of our users learned that there was no limit, before we changed our software, to the number of simultaneous CSP application windows they could open.

Six months after we rolled out the application suddenly the entire user population started opening multiple windows and we ran out of license slots.

Bonne chance,

Tom Fitzgibbon | gototomAtG...l | 3474648531

Tom Fitzgibbon · Sep 14, 2017 go to post

I don't recall any default system recording of routine use, which means no audit of routine execution in previous years.

There is an audit of last routine save/compile in the ^ROUTINE(NameOfRoutine) global.

We manually added a routine use audit log through our user menu page. Obviously, this only captured usage from that point forward. You can also add a Cache Audit user event in your menu page to record info in the Cache Audit log.

I don't think there is a Cache Audit event for routine use logging but perhaps someone at InterSystems has added or has a workaround. See http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_audit.

Tom Fitzgibbon | gototomAtG...l | 9179331226 |

Tom Fitzgibbon · Sep 4, 2017 go to post

Evgeny -

Cache.dat file backup while Cache is down is fast and dependable for a 100MB DB. Or backup the entire AWS directory space if you have additional files (csp files, JS, etc.) and you can restore.

Cache backup is slower and only backs up Cache resources but has the great advantage of running while Cache is up.

Third party backup software can do a pretty good backup but it's still dirty and may have corruption.

An AWS snapshot should work, I've never tested extensively.

Tom Fitzgibbon | 917-933-1226 | gototomAtG...l

Tom Fitzgibbon · Aug 29, 2017 go to post

Where is the SQL residing and how do want to trigger it?

If it's sitting on a local Cache server you can start it any number of ways: web page, Cache routine menu, text/email a listener routine, hit a JSON service, "Alexa, start my SQL query", push a big red button, etc.

If on the cloud somewhere or on someone else's server behind a firewall you have to get past authentication/firewall to start the query.

- Tom Fitzgibbon | 9179331226 | gototomAtG...l

Tom Fitzgibbon · Aug 24, 2017 go to post

Need more information (with examples) on what you're trying to do.

If you're talking about:

1) a user login on Cache, you can start a routine/method on login for a terminal type service. http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_users

2) Cache startup and other events you can run routine/method. http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GSTU_customize_startstop

3) many other variations

Tom Fitzgibbon | 9179331226 | gototomAtG...l

Tom Fitzgibbon · Jul 20, 2017 go to post

Without more info on writing/reading patterns the answer can't be knowable. For example, your application may have thousands of random write/reads looking for small amounts of vals OR fairly uniform write/reads looking for complete chunks of vals.

Best thing for you to do is to simulate your data usage on your target platform and do the timings yourself. Testing is fairly easy.

That being said the second method may be more efficient because you can write/read larger chunks of persistent data.

But it all comes down to your specific use case.

Tom Fitzgibbon | 9179331226 | gototomAtG...l.com

Tom Fitzgibbon · Jun 15, 2017 go to post

Windows Cache or Linux Cache Mirroring and Clustering are available for mission critical systems.  Cache is one of most stable DBs around without any extra steps but you probably want to go further for critical production servers.

I ran mirrored Windows servers without data loss. Fairly easy to set up and maintain. Clusters a bit more complicated but may fit with your production model.

See http://www.intersystems.com/our-products/cache/provisioning-monitoring-managing-applications/high-availability/ and http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GHA_failover.

Tom Fitzgibbon | gototomAtG...l.com | 917-933-1226

Tom Fitzgibbon · Jun 14, 2017 go to post

Cache has a slightly Windows tilt, but that's changing fast. For example, Cache Studio IDE works in Windows, not Linux or Mac. Cache Studio will eventually be replaced with InterSystems Atelier IDE (based on Eclipse). Doc and community support is still slightly Windows oriented but have plenty of info about Linux based Cache.

Linux is a great stable platform for running Cache, either on top of Red Hat (Centos), Ubuntu (Debian) OS or other variations.

I use a Mac running VMware Windows or Centos emulations for testing, developing Cache applications. Then put the production Cache application on a Windows or Linux server, Virtual Private Server or cloud server.

If I have a choice I typically go with Linux. But if you have more experience in Windows, stick with Windows. I don't think you're missing much in Cache running on Windows.

Tom Fitzgibbon | gototomAtG...l.com | 917-933-1226

Tom Fitzgibbon · Jun 12, 2017 go to post

Obviously each project will have different requirements. But here are some generalizations from my experience:

Cache SQL: use when you want to expose your data to report writers who use SQL. Use Cache SQL write capability if you must but may be slower. Fairly easy to read code. But you do NOT need Cache SQL to create an app.

Cache Objects: used most often, especially if you are an object oriented programmer. Hard to not see the advantages of objects in most projects. Reasonable speed and code readability.

Cache Direct Global access: used for legacy programs (lots out there) and may be faster performance (depending on read/write code structure). Difficult to read after years of code changes.

Tom FItzgibbon | gototomAtG...l.com | 347-464-8531

Tom Fitzgibbon · Jun 1, 2017 go to post

Recent InterSystems Cache works rather well and has a tendency to make us lazy about checking the DB. SQL, Mongo, etc. DB admins must check/fix/maintain DBs on a regular basis.

For our smallish 100GB-200GB Cache DBs we scheduled daily background integrity checking but would typically find small damage only once every 3 years or more due primarily to hardware failures.

Cache appears to be incredibly resilient compared to other DBs.

Tom Fitzgibbon | gototomAtG...l.com | 917-933-1226

Tom Fitzgibbon · May 22, 2017 go to post

Cache has different mechanisms for calling in from the OS to start Cache functionality. See http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY….

Several other possibilities I've used:

1) Your BAT file creates a "trigger" file (for example: MyTrigger.txt) when you want to do a backup. A Cache routine checks for the existence of the trigger file every five minutes and when the Cache routine notices the file, it deletes the trigger file and does ^DBACK.

2) Your BAT file stops Cache by doing cstop.exe in Intersystem/Cache/bin, then you OS copy the Cache.dat file (Cache namespace/database file), then does cstart.exe. Note: Cache will be DOWN while the copy is being made. You can dirty copy Cache.dat while Cache is running but there's no guarantee your copy DB will not be corrupt.

Tom Fitzgibbon | gototomAtG...l.com | 917-933-1226

Tom Fitzgibbon · May 15, 2017 go to post

Licensing issues are best taken up directly with InterSystems. Most likely free test Cache software tricked up to not accept license to slow piracy.

Tom Fitzgibbon | gototomAtG...l.com | 917-933-1226

Tom Fitzgibbon · Apr 10, 2017 go to post

NYC needs a Cache/Ensemble/etc. user group. User groups generate sales and provide support for InterSystems.

I'm willing to volunteer some time to publicize and organize.

Anyone know about a space? We could try a meet to see who might be interested.

I'm assuming InterSystems (like a lot of vendors) would prefer to keep an arm's length approach to any user groups.

Tom Fitzgibbon | 3474648531 | gototomAtG...l.com

Tom Fitzgibbon · Apr 5, 2017 go to post

I've written COS that uses $System.License object to check license counts. Just loop every X seconds and use COS to send yourself an email or text when LU exceeds your threshold.

Depending on your user habits, app software, platform and InterSystems license Cache users can exceed the max before you know.

And yes, once users exceed limits it's difficult to remote troubleshoot. We ended up stopping new users from signing on before user limit was reached.

http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GSA_license

Tom Fitzgibbon | 346-464-8531 | gototomAtG...l.com

Tom Fitzgibbon · Mar 31, 2017 go to post

Scott -

We've had this problem many times with HL7 messages being "lost" after the sender claims they sent messages to our receiver software. Most of the time we found the sender actually did not send out the HL7 message or sent out a "malformed" message that our receiver rejected. Plus most HL7 sender software has filters that will not send particular messages for a variety of conditions.

Since HL7 is somewhat predictable text, it's pretty easy to parse. You can ask the sender for the missing message number and search for it in your capture stream, for example.

Receiving data from another vendor often creates arguments about "missing" data.

We troubleshot problems as below:

1) Examine any audit information given by Ensemble for errors, rejections, retransmissions and the like.

2) Set up a passive listener that records all data (not just HL7 messages) and examine with tools or your own diagnostic software.

3) Set up additional HL7 receiver software which takes the incoming messages and creates files on your platform (while doing the ACK/NACK with the sender). Then you can examine the files and later process with Ensemble.

Tom Fitzgibbon | 347-464-8531 | gototomAtG...l.com

Tom Fitzgibbon · Mar 27, 2017 go to post

A Cache script also allows you to do other user management, like look for similar named users across all instances, construct interesting user tables for permissions, etc.

Should be fairly straightforward for simple user adds, for example.

Tom Fitzgibbon | 347-464-8531 | gototomAtG...l.com