in metron-platform/metron-management/src/main/java/org/apache/metron/management/FileSystemFunctions.java [218:279]
public Object apply(List<Object> args, Context context) throws ParseException {
Path path = null;
String[] headers = new String[] {"PERMISSION", "OWNER", "GROUP", "SIZE", "LAST MOD TIME", "NAME"};
if(args.size() == 0) {
path = fs.getHomeDirectory();
}
else {
String pathStr = (String) args.get(0);
if (pathStr == null) {
return FlipTable.of(headers, new String[][]{});
}
else {
try {
path = new Path(pathStr);
}
catch(IllegalArgumentException iae) {
LOG.error("Unable to convert {} to a path {}", pathStr, iae.getMessage(), iae);
return FlipTable.of(headers, new String[][]{});
}
}
}
try {
List<String[]> dataList = new ArrayList<>();
for(FileStatus status : fs.listStatus(path)) {
dataList.add(new String[] {
status.getPermission().toString()
,status.getOwner()
,status.getGroup()
,status.getLen() + ""
,dateFormat.get().format(new Date(status.getModificationTime()))
,status.getPath().getName()
});
}
Collections.sort(dataList, (o1, o2) -> {
try {
Date left = dateFormat.get().parse(o1[4]);
Date right = dateFormat.get().parse(o2[4]);
int ret = left.compareTo(right);
//first sort by date, then by name.
if(ret == 0) {
return o1[5].compareTo(o2[5]);
}
else {
return ret;
}
} catch (java.text.ParseException e) {
String message = "Unable to parse " + Arrays.toString(o1) + " or " + Arrays.toString(o2) + " : " + e.getMessage();
LOG.error(message, e);
throw new IllegalStateException(message, e);
}
});
String[][] data = new String[dataList.size()][headers.length];
for(int i = 0;i < dataList.size();++i) {
data[i] = dataList.get(i);
}
return FlipTable.of(headers, data);
} catch (IOException e) {
String message = "Unable to list" + path + " : " + e.getMessage();
LOG.error(message, e);
return FlipTable.of(headers, new String[][]{});
}
}