IBM MTM 2019: Final Words

Hello! Here I am again!

It has been a month or so since the last post. First of all, I would like to thank all my readers and commenters for being here and motivating me to complete the entire series! My first blog for this years’ challenge was on the 9th of September. The last one was on the 25th of December. A bit late, I know!

So, let us take a look at my badge!

It’s beautiful isn’t it? Oh god that picture… heheh.

Again, thank you all! This year was massive!

The traffic jump in comparison to last year is big. This is a screenshot that shows the traffic the blog got from the 1st all the way to the 31st of December 2019. It might not be the numbers Facebook reaches, but it’s pretty big to me. I have reached out to all corners of the world!

Master the Mainframe 2020

I don’t know the plans they have for the next edition. Last year they said they were going to cooperate with Zowe but they didn’t as far as I know. I am a bit dissapointed though! I was planning to prepare some Zowe posts but I unfortunately didn’t need to.

Some regrets

Wow, hello dedicated reader. I must apologise. I feel that the quality of explanation has lacked. The content wasn’t new to me anymore so I had a hard time feeling what really needed explanation and what didn’t. What made me realise that was the following thread in the official Slack channel.

At times my blog indeed felt like edited copies. I hope they weren’t that bad though!

The future

I have some plans for this mainframe website. Well, “mainframe” website is a big word. I want to blog about some other stuff too. So I would like to ask e-mail subscribers to reconsider their subscription, there’s a link available to opt out!

  • Master The Mainframe 2020
  • z/OS Cookbook

Those are the plans. I know, not ambitious! But I’m very interested in making a high quality cookbook. A cookbook in programming terms is just a bunch of snippets people can use to quickstart what they want to make or want to solve.

What about you?

Any final words?

IBM MTM 2019: Part Three – Challenge #15

Hello Hello Hello

Today I’m doing the very last challenge of the IBM Master the Mainframe 2019 contest. It has been a long 4 months and we’ve finally reached the finish line.Now let’s take some time to finish this exercise.

Originally I wrote “exercise” wrong, but then I Googled it and corrected it. JUST. FOR. YOU. Isn’t that lovely? (heart emoji thing) Also, the WordPress spelling corrector underlined that word red and it triggered me very hard. You see, UX helps!

So, just to be able to finish before the 31st of December I’ll do a minimum viable product approach. That means I’ll do the absolute minimum to pass (i hope).

Also my apologies to everyone. I have 20 to 30 comments waiting for help and a ton of e-mails still waiting for a reply. I can’t keep up with the demand! Work, holidays, family and partying is taking up most of my time. Goodluck to everyone!

Learning and using z/OS creatively

IBM Master the Mainframe Part Three – Challenge #15

Start the Final Challenge

Let’s start by getting the required data sets. We can do this by issuing tso submit ‘zos.public.jcl(p3ch15)’ from the ISPF Primary Option Menu.

The first time you do this it will allocate new data sets. The second time you do this it will delete and reset some data sets. BE WARNED!

It made the following data sets:

  • ch15.clist
  • ch15.output

It also wrote a timestamp into p3.output(#15) and created REXXJCL member in our JCL data set.

System Activity Utility

From the ISPF Command Shell Panel (=6) I’ll issue the command ex ch15(get) to execute our challenge 15 code.

I’ll enter to select ‘Report specific message identifier found in SYSLOG’.

If prompted for a message id enter ich408i.

This is the result.

Solving this challenge

Don’t take my word for it. Don’t automatically assume I’m right. I don’t exactly have an answer sheet 😉

But what needs to be done?

  • The challenge is for you to enhance a system utility which generates point-in-time system activity reports.
  • At least 1 report you write must demonstrate ability to parse SYSLOG records.
  • Information requested has options 1-6 constructed, option 7 is blank.

So does this mean that I need to make option 7? And make it output whatever I want/can? There needs to be at least 1 report that parses SYSLOG records.

Is this the absolute minimum? I assume so. Great!

Step 1: REXXJCL

I just noticed the ID needs to be filled in in our Z#####.JCL(REXXJCL). I’ll do that first. GETSTRG does not exist in my CH15.CLIST data set. Do I need to create that member? Do I even need to do this? (I didn’t)

Warning: don’t do this just because I do!

Step 2: Explore CH15.CLIST

For the most part I’ll let you figure this out yourself. I’ll only write about the most interesting parts.

These are the challenge files we’re working with.

When we do ex ch15(get) we actually execute this rexx code.

So… IBM has left us with a few options and ideas. We can just code the ones they suggest or we can invent a new option at option 7.

For the MVP principle, I’ll delete 3 options and only do one, the fourth one. As I’m part of the learner program I have about 9 months more to expand. My apologies to the people that thought I would make something impressive! 

I just want to provide an example during the last days the students have available.

Step 3: The Plan

The easiest one in my opinion is getting the TSO logons, unsuccessfull or successfull. ICH70001I is the code that gets logged when a user has logged on. Shortly after that code, the username is displayed along with some timestamps.

I just need to grab those entries and print them to the screen. I can basically use the code of report 1, remove the input prompts, sanitize the data and then it should be ok!

Let me test my theory.

My theory is correct! I’ll delete the other options and make it clear to IBM which option they need to pick.

I have removed the excess options and added the exec ch15(custom) command. Now I’ll go ahead and code my custom option. My custom option will also use the custom file in the clist data set.

Step 4: Coding

Unfortunately, I’m not allowed to share my code. But you should be fine on your own! I have used code bits from https://www.tutorialspoint.com/rexx/rexx_parsing.htm and https://www.rosettacode.org/wiki/Remove_duplicate_elements#REXX to write the solution.

My result

This is the menu that is now generated.

Then after that we get the following output:

So this is an unique list of all the users that have logged on. I’m happy with my MVP approach. I believe these are the logons from today? I’m not 100% sure.

Have I missed something? What have you come up with?

I feel like I have though. Although, I have at least 1 report that demonstrates ability to parse SYSLOG records and I have enhanced a system utility. Is this enough?

IBM MTM 2019: Part Three – Challenge #14

Hello Hello!

This is the “last” challenge of IBM’s Master the Mainframe 2019 challenge! I can’t believe I already made 30 blogposts in the last 4 months. Time goes by so fast!

The fifteenth challenge requires every individual contestant to come up with something unique. I won’t be much of help with the fifteenth challenge but at least you’ll have an example. I hope I don’t set the bar too low or something haha.

This challenge looks simple, perfect finishing touch to the part 3 challenge series in my opinion.

Hi California 😉

Tip by Kevin Durant: your output is going to be different than mine.

Tip by Felipe Fontes: S0W1, 0 is ZERO, not the letter O.

z/OS System Log

IBM Master the Mainframe Part Three – Challenge #14

Get and execute LOGLOOK REXX code

In my REXX data set I’ll create a new member called loglook. In there I’ll copy ‘zos.mtm2019.public.rexx(loglook)’.

I’ll go back using F3 and execute the script by using the line command ex next to our newly created loglook data set member.

What is the contest system name?

I guess SYS1? But last challenge it said in the output: “Column SYSNAME.1 has the value: S0W1”. So wouldn’t it be S0W1 then?

Revisit the SYSLOG and gather needed information

Aye chef! From anywhere I’ll enter =sd;log. I’ll enter the primary command SYM to list the system symbolics.

The system ID is synonomous with sysname, don’t forget it. I’ll go back using F3. Now, I’ll just enter top to go to the top

And then I’ll enter f z50087 to find log entries made by me. If I don’t find any, I’ll refresh using F5.

I have found some! Now what to do with it?

Modify LOGLOOK REXX code

I have to what?! Kidding! We need to make the following modifications:

  • Provide the correct system ID
  • Provide a search string which needs to be your ID

Ok the system ID we have remembered from last time and the search string is our IBM id. This should be pretty straight forward then? Let me see.

This part of the code has some variables. Which ones do we need to change? Hmm… I think I know which ones to change. I’ll do it.

Successful execution has records containing:

  1. log date
  2. log time
  3. message text where message text includes your id

Let’s take a look at my P3.OUTPUT(#14).

Looks good! On to Part 3 Challenge 15!