public static void Timeline(File directory) {
        if (!directory.isDirectory()) {
            System.err.println("Timeline(File directory): directory.isDirectory() == false");
            return;
        }
        File[] files = directory.listFiles();
        System.out.println("Reading input from " + directory.getAbsolutePath());
        Instant previousFileEnd = null;
        Duration uptime = Duration.ofNanos(0);
        Duration downtime = Duration.ofNanos(0);
        for (File inputFile : files) {
            if (inputFile.getName().endsWith(".txt")) {
                System.out.println("  Processing " + inputFile.getName());
                Instant fileStart = null;
                Instant fileEnd = null;
                Instant previous = null;
                Instant current = null;
                Duration maxDiff = Duration.ofNanos(0);

                try {
                    KineticLogFileReader reader = new KineticLogFileReader(inputFile.getAbsolutePath());
                    KineticResponse kineticResponse;
                    while ((kineticResponse = reader.read()) != null) {
                        current = kineticResponse.getTimestamp();
                        if (fileStart == null) {
                            fileStart = current;
                            previous = current;
                        }
                        fileEnd = current;

                        Duration duration = Duration.between(previous, current);
                        if (duration.compareTo(maxDiff) > 0) {
                            maxDiff = duration;
                        }
                        previous = current;
                    }
                    reader.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                if (previousFileEnd == null) {
                    System.out.println("    Start: " + fileStart);
                } else {
                    Duration previousDiff = Duration.between(previousFileEnd, fileStart);
                    downtime = downtime.plus(previousDiff);
                    System.out.println("    Start: " + fileStart + " (" + previousDiff + ")");
                }

                System.out.println("    Max Diff: " + maxDiff);

                Duration fileDiff = Duration.between(fileStart, fileEnd);
                uptime = uptime.plus(fileDiff);
                System.out.println("    End: " + fileEnd + " (" + fileDiff + ")");
                previousFileEnd = fileEnd;
            }
        }

        System.out.println("Uptime: " + uptime);
        System.out.println("Downtime: " + downtime);
        Duration totaltime = uptime.plus(downtime);
        System.out.println("Totaltime: " + totaltime);
        double ratio = (uptime.getSeconds() / totaltime.getSeconds());
        System.out.println("Up Ratio: " + ratio);
    }