Skip to content

Commit f8a010c

Browse files
committed
Minor fixes and additions
- added rate limit support to SnapshotState - added some additional utility function to Utils
1 parent a75e48a commit f8a010c

3 files changed

Lines changed: 27 additions & 16 deletions

File tree

src/org/noroomattheinn/tesla/APICall.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ public abstract class APICall {
3232
private static double MaxRequestRate = 20.0 / (1000.0 * 60.0); // 20 requests/minute
3333
private static long startTime = new Date().getTime();
3434
protected static long requestCount = 0;
35-
private static final Logger logger = Logger.getLogger(APICall.class.getName());
3635

3736
// Instance Variables
3837
private Resty api;
@@ -73,11 +72,13 @@ public final boolean setAndRefresh(String newEndpoint) {
7372
public boolean refresh() {
7473
try {
7574
honorRateLimit();
76-
if (endpoint != null) setState(api.json(endpoint).object());
77-
requestCount++;
75+
if (endpoint != null) {
76+
requestCount++; // Count it even if it fails
77+
setState(api.json(endpoint).object());
78+
}
7879
return true;
7980
} catch (IOException | JSONException ex) {
80-
Tesla.logger.log(Level.FINEST, null, ex);
81+
Tesla.logger.log(Level.FINEST, "Failed refreshing. HANDLED.", ex);
8182
theState = new JSONObject();
8283
hasValidData = false;
8384
return false;
@@ -134,12 +135,12 @@ protected void honorRateLimit() {
134135
double rate = ((double) requestCount) / elapsedMillis;
135136
if (rate > MaxRequestRate) {
136137
try {
137-
logger.log(
138+
Tesla.logger.log(
138139
Level.INFO, "Throttling request rate. Requests: {0}, Millis: {1}\n",
139140
new Object[]{requestCount, elapsedMillis});
140-
Thread.sleep( (long) (((double)requestCount)/MaxRequestRate + startTime - now ) );
141+
Thread.sleep(5 * 1000); // Arbitrary amount of wait time
141142
} catch (InterruptedException ex) {
142-
logger.log(Level.SEVERE, null, ex);
143+
Tesla.logger.log(Level.SEVERE, null, ex);
143144
}
144145
} else return;
145146
}

src/org/noroomattheinn/tesla/SnapshotState.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,12 @@ private BufferedReader prepareInternal() {
151151
endpointFormat, vehicleWithToken.getStreamingVID(), allKeys);
152152

153153
honorRateLimit();
154+
requestCount++; // Count it even if it fails...
154155
TextResource r = getAuthAPI(vehicleWithToken).text(endpoint);
155-
requestCount++;
156156
return new BufferedReader(new InputStreamReader(r.stream()));
157157
} catch (IOException ex) {
158158
// Timed out or other problem
159-
Tesla.logger.log(Level.INFO, null, ex);
159+
Tesla.logger.log(Level.INFO, "Failed getting streaming data. HANDLED.", ex);
160160
}
161161
vehicleWithToken = null; // Tokens may have expired, force refetch
162162
return null;

src/org/noroomattheinn/utils/Utils.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
package org.noroomattheinn.utils;
88

9+
import java.util.Comparator;
910
import java.util.HashMap;
1011
import java.util.logging.Level;
1112
import java.util.logging.Logger;
@@ -127,14 +128,23 @@ public static double percentChange(double oldValue, double newValue) {
127128
}
128129

129130
public static void sleep(long timeInMillis) {
130-
long timeToSleep = timeInMillis;
131-
long now = System.currentTimeMillis();
132131
try {
133-
while (timeToSleep > 0) {
134-
Thread.sleep(timeToSleep);
135-
timeToSleep = timeInMillis - (System.currentTimeMillis() - now);
136-
timeToSleep = Math.min(timeToSleep, timeInMillis);
137-
}
132+
Thread.sleep(timeInMillis);
138133
} catch (InterruptedException ex) { }
139134
}
135+
136+
public static int compareVersions(String versionA, String versionB) {
137+
String[] partsOfA = versionA.split("\\.");
138+
String[] partsOfB = versionB.split("\\.");
139+
int shortest = Math.min(partsOfA.length, partsOfB.length);
140+
141+
int i = 0;
142+
while (i < shortest && partsOfA[i].equals(partsOfB[i])) { i++; }
143+
144+
if (i < shortest)
145+
return Integer.valueOf(partsOfA[i]) - Integer.valueOf(partsOfB[i]);
146+
147+
return partsOfA.length - partsOfB.length;
148+
}
149+
140150
}

0 commit comments

Comments
 (0)