Search in sources :

Example 6 with Result

use of com.googlecode.jmxtrans.model.Result in project jmxtrans by jmxtrans.

the class GraphiteWriter method internalWrite.

@Override
public void internalWrite(Server server, Query query, ImmutableList<Result> results) throws Exception {
    Socket socket = null;
    PrintWriter writer = null;
    try {
        socket = pool.borrowObject(address);
        writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), UTF_8), true);
        List<String> typeNames = this.getTypeNames();
        for (Result result : results) {
            log.debug("Query result: {}", result);
            Map<String, Object> resultValues = result.getValues();
            for (Entry<String, Object> values : resultValues.entrySet()) {
                Object value = values.getValue();
                if (isValidNumber(value)) {
                    String line = KeyUtils.getKeyString(server, query, result, values, typeNames, rootPrefix).replaceAll("[()]", "_") + " " + value.toString() + " " + result.getEpoch() / 1000 + "\n";
                    log.debug("Graphite Message: {}", line);
                    writer.write(line);
                } else {
                    onlyOnceLogger.infoOnce("Unable to submit non-numeric value to Graphite: [{}] from result [{}]", value, result);
                }
            }
        }
    } finally {
        if (writer != null && writer.checkError()) {
            log.error("Error writing to Graphite, clearing Graphite socket pool");
            pool.invalidateObject(address, socket);
        } else {
            pool.returnObject(address, socket);
        }
    }
}
Also used : OutputStreamWriter(java.io.OutputStreamWriter) ToString(lombok.ToString) Socket(java.net.Socket) PrintWriter(java.io.PrintWriter) Result(com.googlecode.jmxtrans.model.Result)

Example 7 with Result

use of com.googlecode.jmxtrans.model.Result in project jmxtrans by jmxtrans.

the class GraphiteWriter2 method write.

@Override
public void write(@Nonnull Writer writer, @Nonnull Server server, @Nonnull Query query, @Nonnull Iterable<Result> results) throws IOException {
    for (Result result : results) {
        log.debug("Query result: {}", result);
        Map<String, Object> resultValues = result.getValues();
        for (Map.Entry<String, Object> values : resultValues.entrySet()) {
            Object value = values.getValue();
            if (isValidNumber(value)) {
                String line = KeyUtils.getKeyString(server, query, result, values, typeNames, rootPrefix).replaceAll("[()]", "_") + " " + value.toString() + " " + SECONDS.convert(result.getEpoch(), MILLISECONDS) + "\n";
                log.debug("Graphite Message: {}", line);
                writer.write(line);
            } else {
                onlyOnceLogger.infoOnce("Unable to submit non-numeric value to Graphite: [{}] from result [{}]", value, result);
            }
        }
    }
}
Also used : Map(java.util.Map) Result(com.googlecode.jmxtrans.model.Result)

Example 8 with Result

use of com.googlecode.jmxtrans.model.Result in project jmxtrans by jmxtrans.

the class RRDToolWriter method internalWrite.

@Override
public void internalWrite(Server server, Query query, ImmutableList<Result> results) throws Exception {
    RrdDef def = getDatabaseTemplateSpec();
    List<String> dsNames = getDsNames(def.getDsDefs());
    Map<String, String> dataMap = new TreeMap<>();
    // keys from the result values
    for (Result res : results) {
        log.debug(res.toString());
        Map<String, Object> values = res.getValues();
        for (Entry<String, Object> entry : values.entrySet()) {
            String key = getDataSourceName(getConcatedTypeNameValues(res.getTypeName()), res.getAttributeName(), entry.getKey());
            if (isNumeric(entry.getValue())) {
                log.debug("Generated DataSource name:value: {} : {}", key, entry.getValue());
                if (dsNames.contains(key)) {
                    dataMap.put(key, entry.getValue().toString());
                }
            }
        }
    }
    doGenerate(results);
    if (!dataMap.keySet().isEmpty() && !dataMap.values().isEmpty()) {
        rrdToolUpdate(StringUtils.join(dataMap.keySet(), ':'), StringUtils.join(dataMap.values(), ':'));
    } else {
        log.error("Nothing was logged for query: " + query);
    }
}
Also used : RrdDef(org.jrobin.core.RrdDef) TreeMap(java.util.TreeMap) Result(com.googlecode.jmxtrans.model.Result)

Example 9 with Result

use of com.googlecode.jmxtrans.model.Result in project jmxtrans by jmxtrans.

the class RRDToolWriter method doGenerate.

private void doGenerate(List<Result> results) throws Exception {
    if (isDebugEnabled() && generate) {
        StringBuilder sb = new StringBuilder("\n");
        List<String> keys = new ArrayList<>();
        for (Result res : results) {
            for (Entry<String, Object> entry : res.getValues().entrySet()) {
                if (isNumeric(entry.getValue())) {
                    String key = getDataSourceName(getConcatedTypeNameValues(res.getTypeName()), res.getAttributeName(), entry.getKey());
                    if (keys.contains(key)) {
                        throw new Exception("Duplicate datasource name found: '" + key + "'. Please try to add more typeName keys to the writer to make the name more unique. " + res.toString());
                    }
                    keys.add(key);
                    sb.append("<datasource><!-- ").append(res.getTypeName()).append(":").append(res.getAttributeName()).append(":").append(entry.getKey()).append(" --><name>").append(key).append("</name><type>GAUGE</type><heartbeat>400</heartbeat><min>U</min><max>U</max></datasource>\n");
                }
            }
        }
        log.debug(sb.toString());
    }
}
Also used : ArrayList(java.util.ArrayList) ValidationException(com.googlecode.jmxtrans.model.ValidationException) Result(com.googlecode.jmxtrans.model.Result)

Example 10 with Result

use of com.googlecode.jmxtrans.model.Result in project jmxtrans by jmxtrans.

the class RRDWriter method internalWrite.

@Override
public void internalWrite(Server server, Query query, ImmutableList<Result> results) throws Exception {
    RrdDb db = null;
    try {
        db = createOrOpenDatabase();
        Sample sample = db.createSample();
        List<String> dsNames = Arrays.asList(db.getDsNames());
        // keys from the result values
        for (Result res : results) {
            for (Entry<String, Object> entry : res.getValues().entrySet()) {
                if (dsNames.contains(entry.getKey()) && isNumeric(entry.getValue())) {
                    sample.setValue(entry.getKey(), Double.valueOf(entry.getValue().toString()));
                }
            }
        }
        sample.update();
    } finally {
        if (db != null) {
            db.close();
        }
    }
}
Also used : Sample(org.jrobin.core.Sample) RrdDb(org.jrobin.core.RrdDb) Result(com.googlecode.jmxtrans.model.Result)

Aggregations

Result (com.googlecode.jmxtrans.model.Result)38 Test (org.junit.Test)17 JmxResultProcessor (com.googlecode.jmxtrans.model.JmxResultProcessor)9 ObjectInstance (javax.management.ObjectInstance)9 Query (com.googlecode.jmxtrans.model.Query)8 Map (java.util.Map)8 Server (com.googlecode.jmxtrans.model.Server)7 Attribute (javax.management.Attribute)6 JsonGenerator (com.fasterxml.jackson.core.JsonGenerator)4 ServerFixtures.dummyServer (com.googlecode.jmxtrans.model.ServerFixtures.dummyServer)4 JestResult (io.searchbox.client.JestResult)4 ToString (lombok.ToString)4 OutputWriter (com.googlecode.jmxtrans.model.OutputWriter)3 QueryFixtures.dummyQuery (com.googlecode.jmxtrans.model.QueryFixtures.dummyQuery)3 ResultFixtures.singleTrueResult (com.googlecode.jmxtrans.model.ResultFixtures.singleTrueResult)3 DocumentResult (io.searchbox.core.DocumentResult)3 ArrayList (java.util.ArrayList)3 AttributeList (javax.management.AttributeList)3 ImmutableList (com.google.common.collect.ImmutableList)2 ImmutableMap (com.google.common.collect.ImmutableMap)2