If you are not into SAS, here is Java to do a similar thing using EasySMF Java API:

public class DatasetAccess
{
    public static void main(String[] args) throws IOException
    {
        List<String> targetDatasets = Arrays.asList(
                new String[]{
                        "SYS1.PARMLIB",
                        "SYS1.PROCLIB"
                });

        // SmfRecordReader.fromName(...) accepts a filename, a DD name in the         // format //DD:DDNAME or MVS dataset name in the form //'DATASET.NAME'

        try (SmfRecordReader reader = SmfRecordReader.fromName(args[0])
                .include(14)
                .include(15)
                .include(17)
                .include(18)
                .include(61)
                .include(62)
                .include(64)
                .include(65)
                )
        {
            reader.stream()
                .map(record -> new AccessInfo(record))
                .filter(accessInfo -> targetDatasets.contains(accessInfo.dataset))
                .limit(1000)
                .sorted(Comparator
                        .comparing(AccessInfo::getDataset)
.thenComparing(AccessInfo::getSmfDateTime))
                .forEachOrdered(accessInfo ->
                    System.out.format("%-44s %-24s %-10s %-4s %-8s%n",
                            accessInfo.getDataset(),
                            accessInfo.getSmfDateTime(),
                            accessInfo.getEvent(),
                            accessInfo.getSystem(),
                            accessInfo.getJobname()
                            ));
        }
    }

    private static class AccessInfo
    {
        public AccessInfo(SmfRecord record)
        {
            smfDateTime = record.smfDateTime();
            system = record.system();
            switch (record.recordType())
            {
                case 14:
                case 15:
                {
                    Smf14Record r14 = Smf14Record.from(record);
                    event = record.recordType() == 14 ? "Read" : "Update";
                    dataset = r14.smfjfcb1().jfcbdsnm();
                    jobname = r14.smf14jbn();
                    break;
                }
                case 17:
                {
                    Smf17Record r17 = Smf17Record.from(record);
                    event = "Scratch";
                    dataset = r17.smf17dsn();
                    jobname = r17.smf17jbn();
                    break;
                }
                case 18:
                {
                    Smf18Record r18 = Smf18Record.from(record);
                    event = "Rename";
                    dataset = r18.smf18ods();
                    jobname = r18.smf18jbn();
                    break;
                }
                case 61:
                {
                    Smf61Record r61 = Smf61Record.from(record);
                    event = "ICF define";
                    dataset = r61.smf61enm();
                    jobname = r61.smf61jnm();
                    break;
                }
                case 62:
                {
                    Smf62Record r62 = Smf62Record.from(record);
                    event = "VSAM open";
                    dataset = r62.smf62dnm();
                    jobname = r62.smf62jbn();
                    break;
                }
                case 64:
                {
                    Smf64Record r64 = Smf64Record.from(record);
                    event = "VSAM status";
                    dataset = r64.smf64dnm();
                    jobname  = r64.smf64jbn();
                    break;
                }
                case 65:
                {
                    Smf65Record r65 = Smf65Record.from(record);
                    event = "ICF delete";
                    dataset = r65.smf65enm();
                    jobname = r65.smf65jnm();
                    break;
                }
                default:
                {
                    event = Integer.toString(record.recordType());
                    dataset = "Unknown";
                    jobname = "Unknown";
                    break;
                }
            }
        }

        public String getEvent() { return event; }
        public String getSystem() { return system; }
        public String getDataset() { return dataset; }
        public String getJobname() { return jobname; }
        public LocalDateTime getSmfDateTime() { return smfDateTime; }

        private String system;
        private String event;
        private String dataset;
        private String jobname;
        private LocalDateTime smfDateTime;
    }
}

--
Andrew Rowley
Black Hill Software

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to