All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.dslplatform.ocd.test.Ping Maven / Gradle / Ivy

The newest version!
package com.dslplatform.ocd.test;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Random;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

public class Ping {
    private long timeoutMs;
    private long intervalMs;
    private URL url;

    private Ping(
            final long timeoutMs,
            final long intervalMs,
            final URL url) {
        this.timeoutMs = timeoutMs;
        this.intervalMs = intervalMs;
        this.url = url;
    }

    private static void sleep(final long lengthMs) {
        try {
            Thread.sleep(lengthMs);
        } catch (final InterruptedException e) {}
    }

    public void start() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                sleep(timeoutMs);
                System.out.println("Timed out!");
                System.exit(3);
            }
        }).start();

        final AtomicInteger counter = new AtomicInteger();
        final AtomicBoolean success = new AtomicBoolean();
        final Random random = new Random();

        while (true) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        final StringBuilder sb = new StringBuilder();
                        final int cases = random.nextInt(0xf);
                        sb.append((cases & 1) == 1 ? 'P' : 'p');
                        sb.append((cases & 2) == 2 ? 'I' : 'i');
                        sb.append((cases & 4) == 4 ? 'N' : 'n');
                        sb.append((cases & 8) == 8 ? 'G' : 'g');
                        sb.append("? ");

                        if (counter.addAndGet(1) % 10 == 0) {
                            System.out.println(sb);
                        } else {
                            System.out.print(sb);
                        }

                        final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                        try {
                            final int response = connection.getResponseCode();
                            if (response == 404 || response == 400 || response == 200) {
                                if (success.compareAndSet(false, true)) {
                                    System.out.println("PONG!");
                                }
                                System.exit(0);
                            }
                        }
                        finally {
                            connection.disconnect();
                        }
                    }
                    catch (final IOException e) {}
                }
            }).start();
            sleep(intervalMs);
        }
    }

    private static Ping parse(final String[] args) {
        if (!(args.length == 5 &&
                args[0].equals("-t") &&
                args[1].matches("\\d{1,18}ms") &&
                args[2].equals("-i") &&
                args[3].matches("\\d{1,18}ms"))) {
            throw new IllegalArgumentException("Usage: java -jar ping.jar -t 10000ms -i 100ms http://localhost:8080/path");
        }

        final long timeoutMs = Long.valueOf(args[1].substring(0, args[1].length() - 2));
        final long intervalMs = Long.valueOf(args[3].substring(0, args[3].length() - 2));
        if (intervalMs < 50) {
            throw new IllegalArgumentException("Interval too short (" + args[5] + "), must be >= 50ms!");
        }

        try {
            final URL url = new URL(args[4]);
            return new Ping(timeoutMs, intervalMs, url);
        }
        catch (final MalformedURLException e) {
            throw new IllegalArgumentException("Invalid URL provided: " + args[4]);
        }
    }

    public static void main(final String[] args) {
        try {
            parse(args).start();
        }
        catch (final IllegalArgumentException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy