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