Otomasi Gratis untuk z/OS

10 Feb 2012 Otomasi Gratis untuk z/OS

Hampir semua mainframe yang menggunakan sistem operasi z/OS operasinya diotomasikan. Selain makin jarang orang mau menjadi operator, juga untuk meniadakan atau mengurangi faktor kesalahan manusia (human error) dan penundaan waktu (think time) yang mencakup lamanya bengong dan mengetik perintah. Untuk mengotomasikan z/OS diperlukan produk-produk otomasi (automation tools) yang harganya cukup mahal, karena produk-produk otomasi termasuk produk-produk kelas menengah ke atas untuk kelompok suplemen OS. Produk-produk otomasi lebih mahal dari utilitas backup/restore, tape management, spool output management maupun security. Implementasinya pun kebanyakan lebih rumit, lebih mahal dan lebih beresiko serta memerlukan skill khusus karena kebanyakan mengharuskan scripting.

Otomasi mahal

Otomasi secara umum merupakan fungsi sistem yang cukup mahal. Sebagai gambaran, fungsi otomasi system events (EMS), pengadaannya di atas USD 300,000 (atau Rp 3 miliar) untuk sistem berkekuatan sampai dengan 500 MIPS. Makin tinggi MIPSnya tentu makin mahal harganya. Belum lagi biaya layanan tahunan, setidaknya 10% dari harga pengadaan. Untuk fungsi otomasi scheduler bisa lebih tinggi lagi.

Kenapa mahal? Selain tingkat teknologi produknya di atas kebanyakan software, juga resiko support-nya juga cukup tinggi. Berbeda dengan produk software yang lain, kegagalan otomasi bisa berakibat fatal untuk keseluruhan sistem. Bayangkan… sistem jalan sendiri tanpa pemantauan ketat. Jika ada kegagalan, maka kegagalan tersebut akan menggerus siklus operasi berikutnya dan bisa jadi baru ketahuan setelah sistem ajur mumur. Oleh karena itu, produk software otomasi begitu diluncurkan ke pasar, harus sudah benar-benar lulus uji kualitas dengan beban yang sesungguhnya. Untuk itu biasanya vendor berani rugi membanting harga untuk install-base perdana. Pengguna pun tidak berani coba-coba dengan kehadiran merek baru sebelum tahu benar kualitasnya dari referensi masyarakat pengguna lainnya, baik untuk produk maupun support-nya. Wajarlah jika sejak tahun 1980an hingga hari ini pemain produk software otomasi itu-itu saja, CA, BMC dan ASG. Bahkan IBM pun harus merangkak dari bawah meskipun perannya sebagai vendor mainframe paling nomor wahid.

Sementara itu, mengotomasikan sistem, terutama mengotomasikan system-events, memerlukan perencanaan yang matang. Jika cuman dikhayalkan, sepertinya banyak obyek yang harus diotomasikan. Namun giliran tools-nya siap, apa yang kita khayalkan banyak yang akan menjadi pepesan kosong jika kita tidak tahu konsep otomasi. Misalnya yang kita khayalkan antara lain melakukan aksi dengan mengexekusi command ABC setiap kali muncul message yang mengandung string ‘XXYYZZ’. Kelihatannya sederhana. Ternyata jika ternyata respon dari exekusi command ABC itu sendiri berupa beberapa message yang salah satunya mengandung string ‘XXYYZZ’, maka aksi akan berulang. Terlebih jika kemunculan string ‘XXYYZZ’ lebih dari sekali dalam setiap exekusi ABC. Tentu sistem akan “njubung” hanya untuk mengexekusi command ABC. Lebih parah lagi jika command ABC melakukan pekerjaan-pekerjaan yang sensitif, bisa berakibat fatal.

Selain hal yang menakutkan seperti contoh ABC di atas, kadang ada juga pemikiran yang tidak mudah tertuang dalam implementasi. Akibat dari itu semua, tidak jarang pemakaian otomasi sangat minim dan tidak berkembang. Produk mahal dengan pemakaian minimal, tentu akan menjadi sangat mahal. Vendor yang peduli, tentu akan telaten membimbing pengguna untuk mengoptimalkan pemakaian produknya. Sayangnya tidak semua vendor punya kepedulian semacam itu.

Dalam kondisi semacam ini, sebenarnya pengguna perlu waktu untuk melakukan coba-coba. Sayangnya coba-coba otomasi tidak selalu dapat dilakukan di development system. Karena ada sejumlah trigger yang hanya muncul di sistem produksi. Namanya juga coba-coba, tentu yang diharapkan tidak berbiaya mahal. Mungkinkah???

zCBT© merupakan solusi otomasi gratis

Untuk menjawab sebagian persoalan di atas, NSI, sebuah pusat litbang pembuat produk-produk otomasi di bawah naungan PT Agrisoft Citra Buana, menyediakan produk otomasi gratis yang dinamakan zCBT©. zCBT adalah freeware, sehingga pemakaiannya sama sekali tidak dipungut biaya. Kemampuan fungsi-fungsinya hampir setara dengan produk-produk otomasi komersil dan tetap berbasis scripting seperti produk-produk otomasi pada umumnya. Bedanya, scripting pada zCBT menggunakan Rexx yang merupakan bahasa paling favorit di jagat mainframe, sehingga diharapkan pengguna tidak memerlukan pelatihan apapun. Memang ada produk otomasi komersil yang scripting-nya menggunakan Rexx, tetapi dengan berbagai aturan khusus yang harus dipelajari secara serius dan khusus pula. Penulisannya dengan format khusus. Penyimpanannya harus dalam library khusus dan menjalankannya harus dari panel khusus yang disediakan oleh produk tersebut.

Sedangkan pada zCBT benar-benar Rexx bebas tanpa aturan khusus, tidak ada format khusus dan bisa disimpan di library mana saja bahkan digabung dengan program Rexx lainnya. Cara menjalankannya pun benar-benar seperti menjalankan program Rexx biasa, baik sebagai background task maupun interaktif di TSO. Satu-satunya perbedaan dengan Rexx biasa hanyalah ketersediaan fungsi-fungsi cbxxxx() yang hanya bisa diexekusi manakala zCBT aktif. Namun demikian fungsi-fungsi Rexx yang lain tetap jalan tidak terpengaruh sama sekali oleh aktif maupun tidaknya zCBT. Karena secara teknis, zCBT adalah Rexx functions package yang didukung oleh subsystem khusus untuk menyampaikan sinyal interupsi atau event tertentu ke program Rexx sesuai fungsi cbxxxx() yang dipanggilnya.

Membuat skrip otomasi sederhana

Rexx adalah skrip paling populer di dunia mainframe dan dapat diasumsikan setiap tanaga support maupun programmer disana pasti fasih menggunakannya. Bahkan di sejumlah situs mainframe tertentu, operator pun diwajibkan mengerti Rexx. Oleh karena itu diasumsikan, menulis Rexx untuk zCBT bukan masalah. Misalnya kita akan mengotomasikan exekusi command START VTAM dan START SDSF manakala muncul message dengan kode $HASP492 yang berasal dari JES2 menandai bahwa job-entry siap. Skrip yang harus kita bikin cukup menggunakan fungsi cbevent() dalam satu baris program Rexx sbb:

x = cbevent(’MSG’,'$HASP492',’SUPPRESS’,'CMD=START VTAM"START SDSF')

Mudah kan? Katakanlah namanya RULE1. Jangan lupa, jika RULE1 dijalankan dari library SYSPROC, sisipkan /* rexx */ di baris paling atas, sehingga menjadi 2 baris. Tetapi jika dari SYSEXEC, cukup satu baris tersebut sudah bisa dijalankan. String ‘SUPPRESS’ pada argumen ke 3 merupakan opsi agar message $HASP492 tidak dimunculkan di layar console. Jika opsi ini diabaikan, maka message $HASP492 tetap muncul di layar console sebagaimana seharusnya. Sedangkan string ‘CMD=START VTAM”START SDSF’ pada argumen ke 4 juga opsi untuk memberitahu zCBT bahwa text setelah ‘CMD=’ adalah command yang harus diexekusi segera setelah message $HASP492 yang ditunggu muncul, sebelum kontrol dikembalikan ke RULE1. Jika opsi ini diabaikan, zCBT tidak melakukan apa-apa, hanya mengembalikan kontrol ke RULE1. Exekusi akan berlanjut ke instruksi Rexx berikutnya.

Menjalankan RULE1 bisa sebagai command di TSO maupun sebagai STC atau JOB. Jika dijalankan sebagai command di TSO, maka terminal TSO akan diblok sampai muncul message yang diawali dengan string $HASP492. Jika dijalankan sebagai STC atau JOB, maka task tersebut akan menggantung (wait state) sampai muncul message yang diawali dengan string $HASP492. Segera setelah message tersebut muncul, maka command ‘START VTAM”START SDSF’ segera diexekusi oleh zCBT dan RULE1 berhenti karena tidak ada instruksi lain.

RULE1 di atas bisa kita kembangkan agar sedikit lebih luwes. Command ‘START VTAM”START SDSF’ artinya gabungan 2 command, START VTAM dan START SDSF, karena tanda double-quote (“) merupakan console command delimiter. START VTAM artinya menghidupkan VTAM dan START SDSF menghidupkan SDSF. Alangkah luwesnya jika sebelum mengexekusinya terlebih dulu memeriksa apakah VTAM dan/atau SDSF sudah hidup. Untuk itu skrip RULE1 di atas kita kembangkan sbb:


/* RULE1 */
x = cbevent(’MSG’,'$HASP492',’SUPPRESS’)
if cbstate('VTAM') = 'DOWN' then,
x = cbcmd('START VTAM')
if cbstate('SDSF') = 'DOWN' then,
x = cbcmd('START SDSF')

Dalam skrip di atas tampak ada tambahan penggunaan fungsi cbstate() dan cbcmd(). Fungsi cbstate() untuk mendeteksi apakah sebuah task aktif atau tidak. Sedangkan cbcmd() untuk menyampaikan text kepada zCBT untuk diexekusi sebagai console command.

Otomasi dengan trigger ganda

Contoh di atas menggambarkan bagaimana menyusun skrip otomasi untuk trigger tunggal, yaitu message event munculnya message $HASP492. Bagaimana jika pada saat yang sama, setiap ada yang mengisu command START VTAM dan START SDSF juga ditangkap untuk diklarifikasi apakah JES2 sudah aktif. Jika JES2 sudah aktif, maka message $HASP492 tidak perlu ditunggu lagi. Langsung saja periksa apakah VTAM dan SDSF sudah aktif. Jika belum, aktifkan mana yang belum aktif. Jika JES2 aktif, maka semua event ditunggu dan VTAM maupun SDSF tidak boleh diaktifkan sebelum JES2 aktif.

Otomasi ini cukup rumit. Untuk mewujudkannya, yang paling mudah, kita tetap menjalankan RULE1 di atas didampingi dengan RULE2 yang dijalankan dalam task terpisah agar bisa simultan. RULE2 tugasnya menangkap setiap isu command S (sinonim START), karena umumnya orang memilih S ketika mengaktivasi task secara manual. Yang dijaring adalah S VTAM atau S SDSF. Selain kedua command tersebut, RULE2 bertanggungjawab untuk melepaskan exekusinya ke OS menggunakan cbcmd(). Hal ini jangan sampai kelupaan. Command yang terjaring cbevent() dengan opsi SUPPRESS tidak disampaikan ke OS. Artinya, jika tidak ada proses lanjutan, command tersebut seperti tidak pernah ada. Oleh karena itu skrip kita harus bertanggungjawab mengembalikannya ke OS menggunakan cbcmd(). Berikut ini contoh skrip RULE2.


/* RULE2 */
do forever
ev = cbevent('CMD','S','SUPPRESS')
text = subword(ev,2)
task = subword(ev,3)
if task = 'VTAM' & task = 'SDSF' then do
x = cbcmd(text)
iterate
end
if cbstate(task) = 'DOWN' then,
iterate
if word(cbstate('JES2'),1) = 'UP') then,
x = cbwto('$HASP492 JES2 sudah hidup')
end
exit

Skrip RULE2 dijalankan berdampingan dengan RULE1. Idealnya, kedua skrip tersebut dijalankan sebagai STC dengan opsi SUB=MSTR agar terbebas dari JES. Yang diharapkan, otomasi ini akan mengaktifkan VTAM dan SDSF manakala JES2 aktif. Silakan dicermati apakah 2 skrip tersebut memenuhi harapan.

Jika RULE1 dan RULE2 dijalankan ketika JES2 belum aktif, maka RULE2 hanya berfungsi mencegah command S VTAM atau S SDSF. Setiap kali ada isu command S VTAM atau S SDSF diabaikan karena JES2 belum aktif. Ketika JES2 kemudian menjadi aktif, message $HASP492 muncul dan otomatis command START VTAM dan START SDSF diexekusi oleh RULE1. RULE2 tetap berfungsi mencegah command S VTAM atau S SDSF. Namun kali ini alasannya karena VTAM maupun SDSF sudah aktif karena di-START oleh RULE1.

Jika RULE1 dan RULE2 dijalankan ketika JES2 sudah aktif, RULE1 hanya bengong menunggu event yang teoritis tidak akan terjadi karena sudah lampau. Sementara RULE2 juga bengong nunggu ada yang mengisu command S VTAM atau S SDSF. Tanpa itu, yang diharapkan tidak akan pernah terkabul. Agar yang diharapkan terkabul, RULE1 harus mampu mendeteksi apakah JES2 sudah aktif ketika dijalankan. Dan lebih bagus lagi RULE2 hanya diaktifkan manakala JES2 belum aktif. Dengan demikian RULE2 sebaiknya diaktifkan oleh RULE1 sbb:


/* RULE1 */
if cbstate('JES2') = 'DOWN' then do
x = cbcmd('START RULE2')
x = cbevent(’MSG’,'$HASP492',’SUPPRESS’)
end
if cbstate('VTAM') = 'DOWN' then,
x = cbcmd('START VTAM')
if cbstate('SDSF') = 'DOWN' then,
x = cbcmd('START SDSF')
exit

Catatan, cbcmd(‘START RULE2’) harus dilakukan sebelum cbevent(’MSG’,…). Jika terbalik, START RULE1 baru diexekusi setelah message $HASP492 muncul, dan sudah tidak ada gunanya. Karena fungsi cbevent() akan menunggu sampai event yang diharapkan muncul.

Menggabungkan trigger ganda dalam satu skrip

RULE1 dan RULE2 di atas sebenarnya bisa digabung dalam satu skrip. Hanya saja penggabungan tidak selalu berarti penyederhanaan. Kadang malah menjadi lebih rumit. Yang perlu dicatat, dalam satu skrip kita tidak bisa mengexekusi 2 atau lebi fungsi cbevent() secara bersamaan. Menghadang message $HASP492 dan command S tidak bisa dilakukan dengan menyusun cbevent() sbb:

x = cbevent(’MSG’,'$HASP492',’SUPPRESS’) 
y = cbevent('CMD','S',’SUPPRESS’)

Yang terjadi, cbevent() yang pertama akan menunggu sampai event yang diharapkan muncul, baru cbevent() yang kedua diexekusi. Akibatnya, otomasi akan menyimpang jauh dari yang diharapkan. Untuk itu zCBT menyediakan fungsi cbset() untuk memesan kepada zCBT detil event yang diharapkan tanpa menunggu. Sehingga kita bisa menggunakan fungsi cbset() berkali-kali untuk memesan semua event yang kita harapkan. Lantas kita tunggu dengan cbevent() tanpa argumen. Mana-mana event yang muncul duluan akan menginterupsi cbevent() tersebut. Lantas diproses dan setelah itu kembali isu cbevent() tanpa argumen untuk menunggu event lainnya.


if word(cbstate('JES2'),1) = 'UP' then do
call Activate_task 'VTAM'
call Activate_task 'SDSF'
end
else,
call Wait_JES
exit

Wait_JES:
msg = 0
cmd = 0
x = cbset(’MSG’,'$HASP492',’SUPPRESS’)
y = cbset('CMD','S',’SUPPRESS’)
do until (msg & cmd)
ev = cbevent()
type = word(ev,1)
verb = word(ev,2)
if evtype = 'MSG' then do
msg = 1
call Activate_task 'VTAM'
call Activate_task 'SDSF'
iterate
end
if evtype = 'CMD' then do
text = subword(ev,2)
task = subword(ev,3)
if task = 'VTAM' & task = 'SDSF' then do
z = cbcmd(text)
if msg then,
cmd = 1
else,
y = cbset('CMD','S',’SUPPRESS’)
iterate
end
if word(cbstate('JES2'),1) = 'UP' then do
if msg then,
cmd = 1
else,
z = cbwto('$HASP492 JES2 sudah hidup')
end
end
end
return

Activate_task:
arg tname
if cbstate(tname) = 'DOWN' then,
t = cbcmd('START ' tname)
return

Apa itu zCBT?

Di atas sepertinya hanya membahas bahasa Rexx. Bedanya hanya pada fungsi-fungsi cbxxxx() yang mempercanggih Rexx mampu menunggu event, membaca status task dan mengisu command maupun message ke console yang jauh melampaui kemampuan Rexx biasa maupun SYSREXX yang sebenarnya. Lantas apa itu zCBT© yang sebenarnya dan dimana keberadaannya serta bagaimana mengadministrasikannya?

Secara teknis zCBT adalah sebuah subsystem dalam z/OS yang berfungsi menjaring semua event yang dipesan melalui fungsi cbevent() maupun cbset(), memberikan informasi yang dipesan melalui fungsi cbstate(), mengexekusi command yang disampaikan melalui fungsi cbcmd(), serta menampilkan message yang disampaikan melalui fungsi cbwto() maupun cbwtor(). Namun secara manajemen software, zCBT adalah sebuah middleware pendukung Rexx. Karena fungsi zCBT hanya terwujud melalui Rexx programming dan pengguna harus membuat skrip atau program Rexx untuk memanfaatkannya.

Soal administrasi, pengguna tidak perlu repot. zCBT tidak perlu diadministrasikan. zCBT hanya perlu diaktifkan, dan sekali aktif akan berfungsi terus sampai sistem di-shutdown. Untuk mengaktifkannya, dilakukan dengan START command untuk prosedur ZCBT yang disediakan dalam paket sbb:


START ZCBT,SUB=MSTR

Namun demikian, bukan berarti ZCBT menjadi system task (STC) yang menjalankan fungsi-fungsi zCBT. ZCBT hanyalah prosedur untuk mengaktifkan subsystem zCBT dan mati sendiri setelah aktif. Tidak ada STC ZCBT yang aktif terus-menerus seperti program penyedia layanan (server) pada umumnya. Tetapi subsystem zCBT tetap aktif hingga z/OS di-shutdown.

zCBT vs produk otomasi komersil

Barangkali pembaca ada yang sudah berpengalaman menangani produk-produk otomasi komersil, baik produk lokal zJOS/Sekar© maupun produk-produk asing. Selain zJOS/Sekar, umumnya produk otomasi mengandalkan scripting seperti juga zCBT. Ada yang skripnya menggunakan Rexx. Ada pula yang memiliki bahasa sendiri. Dibandingkan dengan produk yang memiliki bahasa skrip sendiri, jelas zCBT menang total, meskipun freeware. Jelas pengguna dituntut mempelajari bahasa skrip produk tersebut. Sehingga perlu waktu dan biaya extra untuk mengimplementasikannya dengan sempurna. Akibatnya, sering terkatung-katung. Produk sudah dipasang dan dibayar, tetapi pemakaiannya sampai bertahun-tahun hanya sebatas contoh yang diberikan vendornya. Banyak sekali contoh situs yang bernasib seperti ini.

Jika dibandingkan dengan yang sama-sama mengandalkan bahasa Rexx, memang sangat relatif. Keanekaragaman fiturnya bisa jadi zCBT belum mampu mengungguli. Maklum namanya juga freeware. Tetapi jika yang diadu implementasinya di lapangan pengguna, NSI yakin zCBT memiliki nilai lebih dari sisi teknis. Kalo dari sisi harga jelas, freeware kan gratis :). Meskipun sama-sama berbahasa Rexx, produk komersil umumnya memiliki format dan syntax maupun penataan khusus. Ada yang setiap modul skripnya harus dibagi dalam beberapa seksi dan dibatasi dengan tanda khusus seperti )INIT, )PROCESS dsb. Bahkan ada yang penempatannya harus dalam dataset khusus seperti VTAM dengan format khusus. Administrasinya pun ada yang cukup runyam yang kadang untuk mengujicoba satu skrip sederhana saja perlu waktu panjang untuk memahaminya. Semua ini menghambat implementasi dan ujung-ujungnya bernasib sama dengan produk yang memiliki bahasa skrip sendiri. Di negeri ini setidaknya ada satu situs z/OS (bank swasta) yang menggunakan otomasi semacam ini dan memang tidak berkembang. Apa yang dipakainya hingga hari ini 100% hanya contoh yang diberikan vendor ketika pertama kali mensetup meskipun setiap tahunya harus membayar milyaran rupiah.

Dari penjelasan bagaimana menyusun dan menjalankan skrip zCBT di paragraf sebelumnya, jelas lah bahwa zCBT sanggup menjawab semua persoalan di atas. Kebebasan menyusun dan menjalankan skrip yang benar-benar seperti dalam Rexx programming biasa merupakan faktor penting. Dengan demikian, NSI tegas menyatakan bahwa pengguna sama sekali tidak memerlukan ketrampilan khusus untuk mengotomasikan sistemnya dengan zCBT.

Namun perlu dicatat bahwa zCBT hanya untuk dibandingkan dengan otomasi yang menuntut scripting. Jelas zCBT tidak bisa dibandingkan dengan produk komersil seperti zJOS/Sekar yang memberi kemudahan implementasi tanpa scripting.

Untuk apa zCBT dibuat?

NSI menyediakan produk-produk otomasi bikinan sendiri (lokal) untuk menandingi produk-produk asing yang harganya kebanyakan di atas 10 digit rupiah. Dengan membuat zCBT, apakah NSI sedang berusaha mematikan produk komersilnya sendiri, zJOS/Sekar©? Tentu saja tidak. zCBT dibuat justru dalam rangka memacu pemasaran zJOS/Sekar dan zJOS/Puspa. NSI menantang para pengguna otomasi yang berbasis scripting untuk menjajal zCBT. Dari pengamatan penggunaan produk otomasi di sejumlah situs di babarapa negara, termasuk negeri ini, sepertinya bisa dipastikan zCBT mampu menggantikan produk otomasi komersil yang anda pakai. Dan yang lebih menarik, zCBT benar-benar tanpa biaya, … “gratis-tis”, baik pengandaannya maupun biaya tahunannya. Setidaknya demikianlah yang pernah terucap oleh pimpinan divisi IT sebuah bank plat merah milik rakyat. Dengan zCBT tidak perlu ada yang diresahkan, karena bisa dipastikan lolos audit.

Namanya juga freeware, tentu hukum yang berlaku juga hukum freeware. NSI tidak akan memberikan bantuan secara formal semasa implementasi awal maupun dalam operasi sehari-hari, dan tidak terikat kontrak apapun. Meskipun demikian, tidak perlu ada kekawatiran karena implementasi zCBT sangat sederhana dan sangat mudah. Beberapa situs mainframe di negara lain sudah melakukannya dan tidak ada masalah. Mereka kontak NSI hanya untuk melaporkan bahwa zCBT berjalan lancar.

mm
Deru Sudibyo
deru.sudibyo@gmail.com
No Comments

Post A Comment