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