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>
<artifactId>octonet-exporter</artifactId>
<version>1.1</version>
<version>1.2</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>

View File

@ -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<String> 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<String> 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();
}
}