Catch HTTP errors.

This commit is contained in:
fey 2026-09-18 22:12:21 +02:00
parent 2d2b9ff70f
commit bf0131c5c0
2 changed files with 74 additions and 55 deletions

View File

@ -6,7 +6,7 @@
<groupId>moe.yo3explorer</groupId> <groupId>moe.yo3explorer</groupId>
<artifactId>octonet-exporter</artifactId> <artifactId>octonet-exporter</artifactId>
<version>1.1</version> <version>1.2</version>
<properties> <properties>
<maven.compiler.source>11</maven.compiler.source> <maven.compiler.source>11</maven.compiler.source>

View File

@ -1,6 +1,7 @@
package moe.yo3explorer.octonet_exporter; package moe.yo3explorer.octonet_exporter;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import io.prometheus.metrics.core.metrics.Counter;
import io.prometheus.metrics.core.metrics.Gauge; import io.prometheus.metrics.core.metrics.Gauge;
import io.prometheus.metrics.exporter.httpserver.HTTPServer; import io.prometheus.metrics.exporter.httpserver.HTTPServer;
import moe.yo3explorer.octonet_exporter.entities.*; import moe.yo3explorer.octonet_exporter.entities.*;
@ -10,6 +11,8 @@ import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
Catch errorsCaimport org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; 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 { public static void main(String[] args) throws IOException {
Logger logger = LogManager.getLogger(Main.class); Logger logger = LogManager.getLogger(Main.class);
logger.info("Hello! This is octonet_exporter!"); 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 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 packets = Gauge.builder().name("octonetExporter_packets").help("Packets").labelNames("input").register();
Gauge bytes = Gauge.builder().name("octonetExporter_bytes").help("Bytes").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(); OkHttpClient client = new OkHttpClient.Builder().build();
int state = 1; int state = 1;
@ -73,19 +92,18 @@ public class Main {
logger.info("Starting scraping loop..."); logger.info("Starting scraping loop...");
state++; state++;
} }
Request request = new Request.Builder().url(String.format(fanspeedUrl,octonetIp,System.currentTimeMillis())).build(); String string = doHttpRequest(client, String.format(fanspeedUrl,octonetIp,System.currentTimeMillis()));
Call call = client.newCall(request); if (string != null) {
Response execute = call.execute();
String string = execute.body().string();
FanspeedResponse fanspeedResponse = objectMapper.readValue(string, FanspeedResponse.class); FanspeedResponse fanspeedResponse = objectMapper.readValue(string, FanspeedResponse.class);
fanspeed.set(fanspeedResponse.speed); fanspeed.set(fanspeedResponse.speed);
}
else
errors.inc();
if (!safeSleep()) if (!safeSleep())
break; break;
request = new Request.Builder().url(String.format(temperaturUrl,octonetIp,System.currentTimeMillis())).build(); string = doHttpRequest(client, String.format(temperaturUrl,octonetIp,System.currentTimeMillis()));
call = client.newCall(request); if (string != null) {
execute = call.execute();
string = execute.body().string();
StringReader stringReader = new StringReader(string); StringReader stringReader = new StringReader(string);
BufferedReader bufferedReader = new BufferedReader(stringReader); BufferedReader bufferedReader = new BufferedReader(stringReader);
String headLine = bufferedReader.readLine(); String headLine = bufferedReader.readLine();
@ -93,37 +111,35 @@ public class Main {
bufferedReader.close(); bufferedReader.close();
stringReader.close(); stringReader.close();
temperature.set(Double.parseDouble(temperatureString)); temperature.set(Double.parseDouble(temperatureString));
}
else
errors.inc();
if (!safeSleep()) if (!safeSleep())
break; break;
request = new Request.Builder().url(String.format(tunerstatusUrl,octonetIp)).build(); string = doHttpRequest(client,String.format(tunerstatusUrl,octonetIp));
call = client.newCall(request); if (string != null) {
execute = call.execute();
string = execute.body().string();
TunerResponse tunerResponse = objectMapper.readValue(string, TunerResponse.class); TunerResponse tunerResponse = objectMapper.readValue(string, TunerResponse.class);
for (Tuner tuner : tunerResponse.getTunerList()) for (Tuner tuner : tunerResponse.getTunerList()) {
{
locked.labelValues(tuner.getInput()).set(tuner.isLock() ? 1 : 0); locked.labelValues(tuner.getInput()).set(tuner.isLock() ? 1 : 0);
strength.labelValues(tuner.getInput()).set(tuner.isLock() ? ((double)(tuner.getStrength() + 108750) / 1000.0) : 0.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); snr.labelValues(tuner.getInput()).set((double) tuner.getSnr() / 1000.0);
quality.labelValues(tuner.getInput()).set(tuner.getQuality()); quality.labelValues(tuner.getInput()).set(tuner.getQuality());
level.labelValues(tuner.getInput()).set(tuner.getLevel()); level.labelValues(tuner.getInput()).set(tuner.getLevel());
} }
}
else
errors.inc();
if (!safeSleep()) if (!safeSleep())
break; break;
request = new Request.Builder().url(String.format(streamStatusUrl,octonetIp)).build(); string = doHttpRequest(client,String.format(streamStatusUrl,octonetIp));
call = client.newCall(request); if (string != null) {
execute = call.execute();
string = execute.body().string();
StreamStatusResponse streamStatusResponse = objectMapper.readValue(string, StreamStatusResponse.class); StreamStatusResponse streamStatusResponse = objectMapper.readValue(string, StreamStatusResponse.class);
HashSet<String> inputNames = new HashSet<>(); HashSet<String> inputNames = new HashSet<>();
for (StreamStatus streamStatus : streamStatusResponse.streamList) for (StreamStatus streamStatus : streamStatusResponse.streamList) {
{ if (inputNames.add(Integer.toString(streamStatus.input))) {
if (inputNames.add(Integer.toString(streamStatus.input))) if (streamStatus.status.equalsIgnoreCase("Inactive")) {
{
if (streamStatus.status.equalsIgnoreCase("Inactive"))
{
streamStatus.packets = 0; streamStatus.packets = 0;
streamStatus.bytes = 0; streamStatus.bytes = 0;
} }
@ -131,6 +147,9 @@ public class Main {
bytes.labelValues(Integer.toString(streamStatus.input)).set(streamStatus.bytes); bytes.labelValues(Integer.toString(streamStatus.input)).set(streamStatus.bytes);
} }
} }
}
else
errors.inc();
if (!safeSleep()) if (!safeSleep())
break; break;
@ -141,7 +160,7 @@ public class Main {
} }
} }
logger.warn("Scraping loop stopped."); logger.warn("Scraping loop stopped for some reason.");
server.stop();
} }
} }