pz.pzsensor.network.RESTRequester.java Source code

Java tutorial

Introduction

Here is the source code for pz.pzsensor.network.RESTRequester.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package pz.pzsensor.network;

import com.fasterxml.jackson.core.type.TypeReference;
import com.google.common.collect.Maps;
import http.rest.AbstractRestClient;
import http.rest.RestClient;
import http.rest.RestClientException;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import pz.pzsensor.model.Measurement;
import pz.pzsensor.model.Metric;
import pz.pzsensor.model.Resource;
import pz.pzsensor.model.Sensor;
import org.apache.http.Header;
import org.apache.http.HttpResponse;

/**
 *
 * @author Pawel
 */
public class RESTRequester {

    private String serverAddress;

    private static final String SENSORS_ENDPOINT = "/sensors";
    private static final String METRICS_ENDPOINT = "/metrics";
    private static final String MEASUREMENTS_ENDPOINT = "/measurements";
    private static final String RESOURCES_ENDPOINT = "/resources";

    public RESTRequester(String serverAddress) {
        this.serverAddress = serverAddress;
    }

    public Metric getMetric(String metricName) {
        Metric result = null;
        try {
            String metricsUrl = this.serverAddress + METRICS_ENDPOINT;
            RestClient client = RestClient.builder().build();
            Map<String, String> params = Maps.newHashMap();
            params.put("name-like", metricName);

            List<Metric> metrics = client.get(metricsUrl, params, new TypeReference<List<Metric>>() {
            });
            //Zakladam ze monitor zawsze zwraca albo jednoelementowa liste
            //albo pusta liste
            if (!metrics.isEmpty()) {
                result = metrics.get(0);
            }
        } catch (RestClientException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        }
        return result;
    }

    public List<Metric> getMetrics() {
        RestClient client = RestClient.builder().build();
        String metricsUrl = this.serverAddress + METRICS_ENDPOINT;
        List<Metric> metrics = null;
        try {
            metrics = client.get(metricsUrl, null, new TypeReference<List<Metric>>() {
            });

            if (metrics != null) {
                for (Metric m : metrics) {
                    System.out.println(m.name);
                }
            }
        } catch (RestClientException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        }

        return metrics;
    }

    public Metric createMetric(String metricName) {
        Metric metric = new Metric();
        metric.name = metricName;

        String metricsUrl = this.serverAddress + METRICS_ENDPOINT;

        RestClient client = RestClient.builder().build();

        Header header = null;
        try {
            header = client.create(metricsUrl, metric, 200);
            metric = getMetric(metricName);
        } catch (IOException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
            metric = null;
        } catch (RestClientException ex) {
            System.out.println(ex.getMessage());
            metric = null;
        }
        if (header != null) {
            System.out.println("Location header is: " + header.getValue());
        }

        System.out.println("Created metric id = " + metric.id);

        return metric;
    }

    public Resource getResource(String resourceName) {
        Resource result = null;
        try {
            String metricsUrl = this.serverAddress + RESOURCES_ENDPOINT;
            RestClient client = RestClient.builder().build();
            Map<String, String> params = Maps.newHashMap();
            params.put("name-like", resourceName);

            List<Resource> resources = client.get(metricsUrl, params, new TypeReference<List<Resource>>() {
            });

            //Zakladam ze monitor zawsze zwraca albo jednoelementowa liste
            //albo pusta liste
            if (!resources.isEmpty()) {
                result = resources.get(0);
            }
        } catch (RestClientException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        }
        return result;
    }

    public Resource createResource(String resourceName) {
        Resource resource = new Resource();
        resource.name = resourceName;

        String metricsUrl = this.serverAddress + RESOURCES_ENDPOINT;

        RestClient client = RestClient.builder().build();

        Header header = null;
        try {
            header = client.create(metricsUrl, resource, 200);
            resource = getResource(resourceName);
        } catch (IOException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
            resource = null;
        } catch (RestClientException ex) {
            System.out.println(ex.getMessage());
            resource = null;
        }
        if (header != null) {
            System.out.println("Location header is: " + header.getValue());
        }

        System.out.println("Created resource id = " + resource.id);

        return resource;
    }

    public Sensor createSensor(Resource resource, Metric metric) {
        Sensor sensor = new Sensor();

        sensor.metricId = "" + metric.id;
        sensor.resourceId = "" + resource.id;

        String sensorUrl = this.serverAddress + SENSORS_ENDPOINT;
        RestClient client = RestClient.builder().build();

        Header header = null;
        try {
            header = client.create(sensorUrl, sensor, 200);
            sensor = getSensor(resource.name, metric.name);
        } catch (RestClientException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        }
        sensor.metric = metric.name;
        sensor.resource = resource.name;
        return sensor;
    }

    public Sensor getSensor(String resourceName, String metricName) {
        Sensor result = null;
        try {

            String metricsUrl = this.serverAddress + SENSORS_ENDPOINT;
            RestClient client = RestClient.builder().build();
            Map<String, String> params = Maps.newHashMap();
            params.put("resource-name", resourceName);
            params.put("metric-name", metricName);

            List<Sensor> resources = client.get(metricsUrl, params, new TypeReference<List<Sensor>>() {
            });

            //Zakladam ze monitor zawsze zwraca albo jednoelementowa liste
            //albo pusta liste
            if (!resources.isEmpty()) {
                result = resources.get(0);
            }
        } catch (RestClientException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        }
        return result;
    }

    public void createMeasurement(String value, Sensor s) {
        try {
            String measurementsUrl = this.serverAddress + SENSORS_ENDPOINT + "/" + s.id + MEASUREMENTS_ENDPOINT;
            RestClient client = RestClient.builder().build();
            Measurement meas = new Measurement();
            meas.value = value;

            client.create(measurementsUrl, meas, 200);
        } catch (RestClientException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(RESTRequester.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}