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

it.jnrpe.plugin.mysql.CheckMysqlQuery Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2007, 2014 Massimiliano Ziccardi
 *
 * 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 it.jnrpe.plugin.mysql;

import it.jnrpe.ICommandLine;
import it.jnrpe.Status;
import it.jnrpe.plugin.utils.DBUtils;
import it.jnrpe.plugins.Metric;
import it.jnrpe.plugins.MetricGatheringException;
import it.jnrpe.plugins.PluginBase;
import it.jnrpe.utils.BadThresholdException;
import it.jnrpe.utils.thresholds.ThresholdsEvaluatorBuilder;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * Plugin that checks a mysql query result against threshold levels.
 *
 * @author Frederico Campos
 */
public class CheckMysqlQuery extends PluginBase {

    @Override
    public final void configureThresholdEvaluatorBuilder(final ThresholdsEvaluatorBuilder thrb, final ICommandLine cl) throws BadThresholdException {

        if (cl.hasOption("th")) {
            super.configureThresholdEvaluatorBuilder(thrb, cl);
        } else {
            thrb.withLegacyThreshold("rows", null, cl.getOptionValue("warning"), cl.getOptionValue("critical"));
        }

    }

    /**
     * Execute and gather metrics.
     * 
     * @param cl
     *            the command line
     * @throws MetricGatheringException
     *             on any error gathering metrics
     * @return the metrics
     */
    public final Collection gatherMetrics(final ICommandLine cl) throws MetricGatheringException {
        LOG.debug(getContext(), "check_mysql_query gather metrics");
        List metrics = new ArrayList();
        Mysql mysql = new Mysql(cl);
        Connection conn = null;
        try {
            conn = mysql.getConnection();
        } catch (ClassNotFoundException e) {
            LOG.error(getContext(), "Mysql driver library not found into the classpath" + ": download and put it in the same directory " + "of this plugin");
            throw new MetricGatheringException("CHECK_MYSQL_QUERY - CRITICAL: Error accessing the " + "MySQL server - JDBC driver not installed",
                    Status.CRITICAL, e);
        } catch (Exception e) {
            LOG.error(getContext(), "Error accessing the MySQL server", e);
            throw new MetricGatheringException("CHECK_MYSQL_QUERY - CRITICAL: Error accessing " + "the MySQL server - " + e.getMessage(),
                    Status.CRITICAL, e);
        }

        String query = cl.getOptionValue("query");
        Statement st = null;
        ResultSet set = null;
        try {
            st = conn.createStatement();
            st.execute(query);
            set = st.getResultSet();
            BigDecimal value = null;
            if (set.first()) {
                value = set.getBigDecimal(1);
            }

            metrics.add(new Metric("rows", "CHECK_MYSQL_QUERY - Returned value is " + (value != null ? value.longValue() : null), value, null, null));

        } catch (SQLException e) {
            
            String message = e.getMessage();
            LOG.warn(getContext(), "Error executing plugin CheckMysqlQuery : " + message, e);
            throw new MetricGatheringException("CHECK_MYSQL_QUERY - CRITICAL: " + message, Status.CRITICAL, e);
        } finally {
            DBUtils.closeQuietly(set);
            DBUtils.closeQuietly(st);
            DBUtils.closeQuietly(conn);
        }

        return metrics;
    }

    @Override
    protected final String getPluginName() {
        return "CHECK_MYSQL_QUERY";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy