/*
 Provede ping na zadanou IP adresu
 */
package octantserver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Filip Dvorak
 */
class Ping {
//vykona ping a ulozi do do posledniho radku ziskana zpozdeni - viz posledni radek

    public static Double ping(String ipAdresa) throws IOException {
        //prikaz jenz se spusti
        ProcessBuilder prikaz = new ProcessBuilder("ping", "-q", "-c", "10", ipAdresa);
        Process vykonejPrikaz = prikaz.start();

        BufferedReader zachytavac = new BufferedReader(new InputStreamReader(vykonejPrikaz.getInputStream()));
        String posledniradek = null;
        String radek = null;
        
        //bere jednotlive radky z bufferu a ulozi ten posledni --- zde jsou hodnoty ping
        while ((radek = zachytavac.readLine()) != null) {
            posledniradek = radek;
        }
        // ze ziskanych hodnot zpozdeni z pingu vybere minimalni zpozdeni
        Double minimalniZpozdeni = najdiminimalniZpozdeni(posledniradek);

        return minimalniZpozdeni;
    }

//najde minimalni hodnotu z ping (z tech vsech trech zmerenych hodnot - max,min apod)
    private static Double najdiminimalniZpozdeni(String posledniradek) {

        //pomoci reg. vyarazu se vytahne z posledniho radku minimalni hodnota zpozdeni
        Pattern vzorek = Pattern.compile(".*\\=(.*)/(.*)/(.*)/(.*)\\ ms");
        Matcher srovnavac = vzorek.matcher(posledniradek);

        Double minimalniZpozdeni = 0.0;

        if (srovnavac.find()) {
            String pomocna = srovnavac.group(1);
            minimalniZpozdeni = Double.parseDouble(pomocna);
        }
        return minimalniZpozdeni;


    }
}
