From bf0131c5c0900b8f527955ef220d85728aa629aa Mon Sep 17 00:00:00 2001 From: fey Date: Fri, 18 Sep 2026 22:12:21 +0200 Subject: [PATCH] Catch HTTP errors. --- pom.xml | 2 +- .../yo3explorer/octonet_exporter/Main.java | 127 ++++++++++-------- 2 files changed, 74 insertions(+), 55 deletions(-) diff --git a/pom.xml b/pom.xml index b498a40..b99c4b0 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ moe.yo3explorer octonet-exporter - 1.1 + 1.2 11 diff --git a/src/main/java/moe/yo3explorer/octonet_exporter/Main.java b/src/main/java/moe/yo3explorer/octonet_exporter/Main.java index 02b5ecb..36f9dc8 100644 --- a/src/main/java/moe/yo3explorer/octonet_exporter/Main.java +++ b/src/main/java/moe/yo3explorer/octonet_exporter/Main.java @@ -1,6 +1,7 @@ package moe.yo3explorer.octonet_exporter; import com.fasterxml.jackson.databind.ObjectMapper; +import io.prometheus.metrics.core.metrics.Counter; import io.prometheus.metrics.core.metrics.Gauge; import io.prometheus.metrics.exporter.httpserver.HTTPServer; import moe.yo3explorer.octonet_exporter.entities.*; @@ -10,6 +11,8 @@ import okhttp3.Request; import okhttp3.Response; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +Catch errorsCaimport org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.BufferedReader; import java.io.IOException; @@ -30,6 +33,21 @@ public class Main { } } + @Nullable + private static String doHttpRequest(@NotNull OkHttpClient client, String url) + { + try { + Request request = new Request.Builder() + .url(url) + .build(); + Response response = client.newCall(request).execute(); + return response.body().string(); + } catch (IOException e) { + log.error("Error while doing HTTP request to " + url, e); + return null; + } + } + public static void main(String[] args) throws IOException { Logger logger = LogManager.getLogger(Main.class); logger.info("Hello! This is octonet_exporter!"); @@ -63,6 +81,7 @@ public class Main { Gauge level = Gauge.builder().name("octonetExporter_level").help("Signal level").labelNames("input").register(); Gauge packets = Gauge.builder().name("octonetExporter_packets").help("Packets").labelNames("input").register(); Gauge bytes = Gauge.builder().name("octonetExporter_bytes").help("Bytes").labelNames("input").register(); + Counter errors = Counter.builder().name("octonetExporter_errors").help("HTTP Requests to the OctopusNET that failed").register(); OkHttpClient client = new OkHttpClient.Builder().build(); int state = 1; @@ -73,64 +92,64 @@ public class Main { logger.info("Starting scraping loop..."); state++; } - Request request = new Request.Builder().url(String.format(fanspeedUrl,octonetIp,System.currentTimeMillis())).build(); - Call call = client.newCall(request); - Response execute = call.execute(); - String string = execute.body().string(); - FanspeedResponse fanspeedResponse = objectMapper.readValue(string, FanspeedResponse.class); - fanspeed.set(fanspeedResponse.speed); - if (!safeSleep()) - break; - - request = new Request.Builder().url(String.format(temperaturUrl,octonetIp,System.currentTimeMillis())).build(); - call = client.newCall(request); - execute = call.execute(); - string = execute.body().string(); - StringReader stringReader = new StringReader(string); - BufferedReader bufferedReader = new BufferedReader(stringReader); - String headLine = bufferedReader.readLine(); - String temperatureString = bufferedReader.readLine(); - bufferedReader.close(); - stringReader.close(); - temperature.set(Double.parseDouble(temperatureString)); - if (!safeSleep()) - break; - - request = new Request.Builder().url(String.format(tunerstatusUrl,octonetIp)).build(); - call = client.newCall(request); - execute = call.execute(); - string = execute.body().string(); - TunerResponse tunerResponse = objectMapper.readValue(string, TunerResponse.class); - for (Tuner tuner : tunerResponse.getTunerList()) - { - locked.labelValues(tuner.getInput()).set(tuner.isLock() ? 1 : 0); - strength.labelValues(tuner.getInput()).set(tuner.isLock() ? ((double)(tuner.getStrength() + 108750) / 1000.0) : 0.0); - snr.labelValues(tuner.getInput()).set((double)tuner.getSnr() / 1000.0); - quality.labelValues(tuner.getInput()).set(tuner.getQuality()); - level.labelValues(tuner.getInput()).set(tuner.getLevel()); + String string = doHttpRequest(client, String.format(fanspeedUrl,octonetIp,System.currentTimeMillis())); + if (string != null) { + FanspeedResponse fanspeedResponse = objectMapper.readValue(string, FanspeedResponse.class); + fanspeed.set(fanspeedResponse.speed); } + else + errors.inc(); if (!safeSleep()) break; - request = new Request.Builder().url(String.format(streamStatusUrl,octonetIp)).build(); - call = client.newCall(request); - execute = call.execute(); - string = execute.body().string(); - StreamStatusResponse streamStatusResponse = objectMapper.readValue(string, StreamStatusResponse.class); - HashSet inputNames = new HashSet<>(); - for (StreamStatus streamStatus : streamStatusResponse.streamList) - { - if (inputNames.add(Integer.toString(streamStatus.input))) - { - if (streamStatus.status.equalsIgnoreCase("Inactive")) - { - streamStatus.packets = 0; - streamStatus.bytes = 0; - } - packets.labelValues(Integer.toString(streamStatus.input)).set(streamStatus.packets); - bytes.labelValues(Integer.toString(streamStatus.input)).set(streamStatus.bytes); + string = doHttpRequest(client, String.format(temperaturUrl,octonetIp,System.currentTimeMillis())); + if (string != null) { + StringReader stringReader = new StringReader(string); + BufferedReader bufferedReader = new BufferedReader(stringReader); + String headLine = bufferedReader.readLine(); + String temperatureString = bufferedReader.readLine(); + bufferedReader.close(); + stringReader.close(); + temperature.set(Double.parseDouble(temperatureString)); + } + else + errors.inc(); + if (!safeSleep()) + break; + + string = doHttpRequest(client,String.format(tunerstatusUrl,octonetIp)); + if (string != null) { + TunerResponse tunerResponse = objectMapper.readValue(string, TunerResponse.class); + for (Tuner tuner : tunerResponse.getTunerList()) { + locked.labelValues(tuner.getInput()).set(tuner.isLock() ? 1 : 0); + strength.labelValues(tuner.getInput()).set(tuner.isLock() ? ((double) (tuner.getStrength() + 108750) / 1000.0) : 0.0); + snr.labelValues(tuner.getInput()).set((double) tuner.getSnr() / 1000.0); + quality.labelValues(tuner.getInput()).set(tuner.getQuality()); + level.labelValues(tuner.getInput()).set(tuner.getLevel()); } } + else + errors.inc(); + if (!safeSleep()) + break; + + string = doHttpRequest(client,String.format(streamStatusUrl,octonetIp)); + if (string != null) { + StreamStatusResponse streamStatusResponse = objectMapper.readValue(string, StreamStatusResponse.class); + HashSet inputNames = new HashSet<>(); + for (StreamStatus streamStatus : streamStatusResponse.streamList) { + if (inputNames.add(Integer.toString(streamStatus.input))) { + if (streamStatus.status.equalsIgnoreCase("Inactive")) { + streamStatus.packets = 0; + streamStatus.bytes = 0; + } + packets.labelValues(Integer.toString(streamStatus.input)).set(streamStatus.packets); + bytes.labelValues(Integer.toString(streamStatus.input)).set(streamStatus.bytes); + } + } + } + else + errors.inc(); if (!safeSleep()) break; @@ -141,7 +160,7 @@ public class Main { } } - logger.warn("Scraping loop stopped."); - + logger.warn("Scraping loop stopped for some reason."); + server.stop(); } } \ No newline at end of file