com.seyren.api.bean.ChartsBean.java Source code

Java tutorial

Introduction

Here is the source code for com.seyren.api.bean.ChartsBean.java

Source

/**
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.seyren.api.bean;

import java.math.BigDecimal;

import javax.inject.Inject;
import javax.inject.Named;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import org.springframework.util.StringUtils;

import com.seyren.api.jaxrs.ChartsResource;
import com.seyren.core.domain.Check;
import com.seyren.core.store.ChecksStore;
import com.seyren.core.util.graphite.AxesState;
import com.seyren.core.util.graphite.GraphiteHttpClient;
import com.seyren.core.util.graphite.LegendState;

@Named
public class ChartsBean implements ChartsResource {

    private final ChecksStore checksStore;
    private final GraphiteHttpClient graphiteHttpClient;

    @Inject
    public ChartsBean(ChecksStore checksStore, GraphiteHttpClient graphiteHttpClient) {
        this.checksStore = checksStore;
        this.graphiteHttpClient = graphiteHttpClient;
    }

    @Override
    public Response getChart(String checkId, int width, int height, String from, String to, boolean hideThresholds,
            boolean hideLegend, boolean hideAxes) {

        Check check = checksStore.getCheck(checkId);
        if (check == null) {
            return Response.status(Status.NOT_FOUND).build();
        }

        String target = check.getTarget();

        if (hideThresholds) {
            return getChart(check.getGraphiteBaseUrl(), target, width, height, from, to, null, null, hideLegend,
                    hideAxes);
        } else {
            return getChart(check.getGraphiteBaseUrl(), target, width, height, from, to, check.getWarn(),
                    check.getError(), hideLegend, hideAxes);
        }

    }

    @Override
    public Response getCustomChart(String target, String graphiteBaseUrl, int width, int height, String from,
            String to, String warnThreshold, String errorThreshold, boolean hideLegend, boolean hideAxes) {

        BigDecimal warn;
        if (StringUtils.isEmpty(warnThreshold)) {
            warn = null;
        } else {
            warn = new BigDecimal(warnThreshold);
        }

        BigDecimal error;
        if (StringUtils.isEmpty(errorThreshold)) {
            error = null;
        } else {
            error = new BigDecimal(errorThreshold);
        }

        return getChart(graphiteBaseUrl, target, width, height, from, to, warn, error, hideLegend, hideAxes);

    }

    private Response getChart(String graphiteBaseUrl, String target, int width, int height, String from, String to,
            BigDecimal warnThreshold, BigDecimal errorThreshold, boolean hideLegend, boolean hideAxes) {

        LegendState legendState;
        if (hideLegend) {
            legendState = LegendState.HIDE;
        } else {
            legendState = LegendState.SHOW;
        }

        AxesState axesState;
        if (hideAxes) {
            axesState = AxesState.HIDE;
        } else {
            axesState = AxesState.SHOW;
        }

        try {
            byte[] bytes = graphiteHttpClient.getChart(graphiteBaseUrl, target, width, height, from, to,
                    legendState, axesState, warnThreshold, errorThreshold);
            return Response.ok(bytes, "image/png").build();
        } catch (Exception e) {
            return Response.serverError().build();
        }

    }

}