Skip to content

Commit c702a34

Browse files
committed
Allow enabling and disabling of oura routes based on config
1 parent ea5256d commit c702a34

File tree

4 files changed

+255
-18
lines changed

4 files changed

+255
-18
lines changed

kafka-connect-oura-source/src/main/java/org/radarbase/connect/rest/oura/OuraRestSourceConnectorConfig.java

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,59 @@ public class OuraRestSourceConnectorConfig extends AbstractConfig {
102102
private static final String OURA_USER_REPOSITORY_TOKEN_URL_DOC = "OAuth 2.0 token url for retrieving client credentials.";
103103
private static final String OURA_USER_REPOSITORY_TOKEN_URL_DISPLAY = "OAuth 2.0 token URL.";
104104

105+
// Route enabled configs strings
106+
private static final String OURA_DAILY_ACTIVITY_ENABLED_CONFIG = "oura.daily.activity.enabled";
107+
private static final String OURA_DAILY_ACTIVITY_ENABLED_DOC = "Enable or disable Oura daily activity";
108+
private static final String OURA_DAILY_ACTIVITY_ENABLED_DISPLAY = "Oura daily activity enabled";
109+
110+
private static final String OURA_DAILY_READINESS_ENABLED_CONFIG = "oura.daily.readiness.enabled";
111+
private static final String OURA_DAILY_READINESS_ENABLED_DOC = "Enable or disable Oura daily readiness";
112+
private static final String OURA_DAILY_READINESS_ENABLED_DISPLAY = "Oura daily readiness enabled";
113+
114+
private static final String OURA_DAILY_SLEEP_ENABLED_CONFIG = "oura.daily.sleep.enabled";
115+
private static final String OURA_DAILY_SLEEP_ENABLED_DOC = "Enable or disable Oura daily sleep";
116+
private static final String OURA_DAILY_SLEEP_ENABLED_DISPLAY = "Oura daily sleep enabled";
117+
118+
private static final String OURA_DAILY_OXYGEN_SATURATION_ENABLED_CONFIG = "oura.daily.oxygen.saturation.enabled";
119+
private static final String OURA_DAILY_OXYGEN_SATURATION_ENABLED_DOC = "Enable or disable Oura daily oxygen saturation";
120+
private static final String OURA_DAILY_OXYGEN_SATURATION_ENABLED_DISPLAY = "Oura daily oxygen saturation enabled";
121+
122+
private static final String OURA_HEART_RATE_ENABLED_CONFIG = "oura.heart.rate.enabled";
123+
private static final String OURA_HEART_RATE_ENABLED_DOC = "Enable or disable Oura heart rate";
124+
private static final String OURA_HEART_RATE_ENABLED_DISPLAY = "Oura heart rate enabled";
125+
126+
private static final String OURA_PERSONAL_INFO_ENABLED_CONFIG = "oura.personal.info.enabled";
127+
private static final String OURA_PERSONAL_INFO_ENABLED_DOC = "Enable or disable Oura personal info";
128+
private static final String OURA_PERSONAL_INFO_ENABLED_DISPLAY = "Oura personal info enabled";
129+
130+
private static final String OURA_SESSION_ENABLED_CONFIG = "oura.session.enabled";
131+
private static final String OURA_SESSION_ENABLED_DOC = "Enable or disable Oura sessions";
132+
private static final String OURA_SESSION_ENABLED_DISPLAY = "Oura sessions enabled";
133+
134+
private static final String OURA_SLEEP_ENABLED_CONFIG = "oura.sleep.enabled";
135+
private static final String OURA_SLEEP_ENABLED_DOC = "Enable or disable Oura sleep";
136+
private static final String OURA_SLEEP_ENABLED_DISPLAY = "Oura sleep enabled";
137+
138+
private static final String OURA_TAG_ENABLED_CONFIG = "oura.tag.enabled";
139+
private static final String OURA_TAG_ENABLED_DOC = "Enable or disable Oura tags";
140+
private static final String OURA_TAG_ENABLED_DISPLAY = "Oura tags enabled";
141+
142+
private static final String OURA_WORKOUT_ENABLED_CONFIG = "oura.workout.enabled";
143+
private static final String OURA_WORKOUT_ENABLED_DOC = "Enable or disable Oura workouts";
144+
private static final String OURA_WORKOUT_ENABLED_DISPLAY = "Oura workouts enabled";
145+
146+
private static final String OURA_RING_CONFIGURATION_ENABLED_CONFIG = "oura.ring.configuration.enabled";
147+
private static final String OURA_RING_CONFIGURATION_ENABLED_DOC = "Enable or disable Oura ring configuration";
148+
private static final String OURA_RING_CONFIGURATION_ENABLED_DISPLAY = "Oura ring configuration enabled";
149+
150+
private static final String OURA_REST_MODE_PERIOD_ENABLED_CONFIG = "oura.rest.mode.period.enabled";
151+
private static final String OURA_REST_MODE_PERIOD_ENABLED_DOC = "Enable or disable Oura rest mode period";
152+
private static final String OURA_REST_MODE_PERIOD_ENABLED_DISPLAY = "Oura rest mode period enabled";
153+
154+
private static final String OURA_SLEEP_TIME_RECOMMENDATION_ENABLED_CONFIG = "oura.sleep.time.recommendation.enabled";
155+
private static final String OURA_SLEEP_TIME_RECOMMENDATION_ENABLED_DOC = "Enable or disable Oura sleep time recommendation";
156+
private static final String OURA_SLEEP_TIME_RECOMMENDATION_ENABLED_DISPLAY = "Oura sleep time recommendation enabled";
157+
105158
private OuraUserRepository userRepository;
106159
private final Headers clientCredentials;
107160

@@ -240,6 +293,137 @@ public String toString() {
240293
++orderInGroup,
241294
Width.SHORT,
242295
OURA_USER_REPOSITORY_TOKEN_URL_DISPLAY)
296+
297+
// Route enable/disable flags
298+
.define(OURA_DAILY_ACTIVITY_ENABLED_CONFIG,
299+
Type.BOOLEAN,
300+
true,
301+
Importance.LOW,
302+
OURA_DAILY_ACTIVITY_ENABLED_DOC,
303+
group,
304+
++orderInGroup,
305+
Width.SHORT,
306+
OURA_DAILY_ACTIVITY_ENABLED_DISPLAY)
307+
308+
.define(OURA_DAILY_READINESS_ENABLED_CONFIG,
309+
Type.BOOLEAN,
310+
true,
311+
Importance.LOW,
312+
OURA_DAILY_READINESS_ENABLED_DOC,
313+
group,
314+
++orderInGroup,
315+
Width.SHORT,
316+
OURA_DAILY_READINESS_ENABLED_DISPLAY)
317+
318+
.define(OURA_DAILY_SLEEP_ENABLED_CONFIG,
319+
Type.BOOLEAN,
320+
true,
321+
Importance.LOW,
322+
OURA_DAILY_SLEEP_ENABLED_DOC,
323+
group,
324+
++orderInGroup,
325+
Width.SHORT,
326+
OURA_DAILY_SLEEP_ENABLED_DISPLAY)
327+
328+
.define(OURA_DAILY_OXYGEN_SATURATION_ENABLED_CONFIG,
329+
Type.BOOLEAN,
330+
true,
331+
Importance.LOW,
332+
OURA_DAILY_OXYGEN_SATURATION_ENABLED_DOC,
333+
group,
334+
++orderInGroup,
335+
Width.SHORT,
336+
OURA_DAILY_OXYGEN_SATURATION_ENABLED_DISPLAY)
337+
338+
.define(OURA_HEART_RATE_ENABLED_CONFIG,
339+
Type.BOOLEAN,
340+
true,
341+
Importance.LOW,
342+
OURA_HEART_RATE_ENABLED_DOC,
343+
group,
344+
++orderInGroup,
345+
Width.SHORT,
346+
OURA_HEART_RATE_ENABLED_DISPLAY)
347+
348+
.define(OURA_PERSONAL_INFO_ENABLED_CONFIG,
349+
Type.BOOLEAN,
350+
true,
351+
Importance.LOW,
352+
OURA_PERSONAL_INFO_ENABLED_DOC,
353+
group,
354+
++orderInGroup,
355+
Width.SHORT,
356+
OURA_PERSONAL_INFO_ENABLED_DISPLAY)
357+
358+
.define(OURA_SESSION_ENABLED_CONFIG,
359+
Type.BOOLEAN,
360+
true,
361+
Importance.LOW,
362+
OURA_SESSION_ENABLED_DOC,
363+
group,
364+
++orderInGroup,
365+
Width.SHORT,
366+
OURA_SESSION_ENABLED_DISPLAY)
367+
368+
.define(OURA_SLEEP_ENABLED_CONFIG,
369+
Type.BOOLEAN,
370+
true,
371+
Importance.LOW,
372+
OURA_SLEEP_ENABLED_DOC,
373+
group,
374+
++orderInGroup,
375+
Width.SHORT,
376+
OURA_SLEEP_ENABLED_DISPLAY)
377+
378+
.define(OURA_TAG_ENABLED_CONFIG,
379+
Type.BOOLEAN,
380+
true,
381+
Importance.LOW,
382+
OURA_TAG_ENABLED_DOC,
383+
group,
384+
++orderInGroup,
385+
Width.SHORT,
386+
OURA_TAG_ENABLED_DISPLAY)
387+
388+
.define(OURA_WORKOUT_ENABLED_CONFIG,
389+
Type.BOOLEAN,
390+
true,
391+
Importance.LOW,
392+
OURA_WORKOUT_ENABLED_DOC,
393+
group,
394+
++orderInGroup,
395+
Width.SHORT,
396+
OURA_WORKOUT_ENABLED_DISPLAY)
397+
398+
.define(OURA_RING_CONFIGURATION_ENABLED_CONFIG,
399+
Type.BOOLEAN,
400+
true,
401+
Importance.LOW,
402+
OURA_RING_CONFIGURATION_ENABLED_DOC,
403+
group,
404+
++orderInGroup,
405+
Width.SHORT,
406+
OURA_RING_CONFIGURATION_ENABLED_DISPLAY)
407+
408+
.define(OURA_REST_MODE_PERIOD_ENABLED_CONFIG,
409+
Type.BOOLEAN,
410+
true,
411+
Importance.LOW,
412+
OURA_REST_MODE_PERIOD_ENABLED_DOC,
413+
group,
414+
++orderInGroup,
415+
Width.SHORT,
416+
OURA_REST_MODE_PERIOD_ENABLED_DISPLAY)
417+
418+
.define(OURA_SLEEP_TIME_RECOMMENDATION_ENABLED_CONFIG,
419+
Type.BOOLEAN,
420+
true,
421+
Importance.LOW,
422+
OURA_SLEEP_TIME_RECOMMENDATION_ENABLED_DOC,
423+
group,
424+
++orderInGroup,
425+
Width.SHORT,
426+
OURA_SLEEP_TIME_RECOMMENDATION_ENABLED_DISPLAY)
243427
;
244428
}
245429

@@ -327,4 +511,20 @@ public URL getOuraUserRepositoryTokenUrl() {
327511
}
328512
}
329513
}
514+
515+
// Route enabled getters
516+
public boolean getOuraDailyActivityEnabled() { return getBoolean(OURA_DAILY_ACTIVITY_ENABLED_CONFIG); }
517+
public boolean getOuraDailyReadinessEnabled() { return getBoolean(OURA_DAILY_READINESS_ENABLED_CONFIG); }
518+
public boolean getOuraDailySleepEnabled() { return getBoolean(OURA_DAILY_SLEEP_ENABLED_CONFIG); }
519+
public boolean getOuraDailyOxygenSaturationEnabled() { return getBoolean(OURA_DAILY_OXYGEN_SATURATION_ENABLED_CONFIG); }
520+
public boolean getOuraHeartRateEnabled() { return getBoolean(OURA_HEART_RATE_ENABLED_CONFIG); }
521+
public boolean getOuraPersonalInfoEnabled() { return getBoolean(OURA_PERSONAL_INFO_ENABLED_CONFIG); }
522+
public boolean getOuraSessionEnabled() { return getBoolean(OURA_SESSION_ENABLED_CONFIG); }
523+
public boolean getOuraSleepEnabled() { return getBoolean(OURA_SLEEP_ENABLED_CONFIG); }
524+
public boolean getOuraTagEnabled() { return getBoolean(OURA_TAG_ENABLED_CONFIG); }
525+
public boolean getOuraWorkoutEnabled() { return getBoolean(OURA_WORKOUT_ENABLED_CONFIG); }
526+
public boolean getOuraRingConfigurationEnabled() { return getBoolean(OURA_RING_CONFIGURATION_ENABLED_CONFIG); }
527+
public boolean getOuraRestModePeriodEnabled() { return getBoolean(OURA_REST_MODE_PERIOD_ENABLED_CONFIG); }
528+
public boolean getOuraSleepTimeRecommendationEnabled() { return getBoolean(OURA_SLEEP_TIME_RECOMMENDATION_ENABLED_CONFIG); }
529+
330530
}

kafka-connect-oura-source/src/main/java/org/radarbase/connect/rest/oura/OuraSourceTask.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
import org.radarbase.oura.request.OuraResult.Error;
4545
import org.radarbase.oura.request.OuraErrorBase;
4646
import org.radarbase.oura.request.RestRequest;
47+
import org.radarbase.oura.route.OuraRouteFlags;
48+
import org.radarbase.oura.route.OuraRouteFactory;
4749
import org.radarbase.oura.route.Route;
4850
import org.slf4j.Logger;
4951
import org.slf4j.LoggerFactory;
@@ -70,9 +72,24 @@ public void initialize(OuraRestSourceConnectorConfig config, OffsetStorageReader
7072
this.baseClient = new OkHttpClient();
7173

7274
this.userRepository = ouraConfig.getUserRepository();
75+
OuraRouteFlags flags = new OuraRouteFlags(
76+
ouraConfig.getOuraDailyActivityEnabled(),
77+
ouraConfig.getOuraDailyReadinessEnabled(),
78+
ouraConfig.getOuraDailySleepEnabled(),
79+
ouraConfig.getOuraDailyOxygenSaturationEnabled(),
80+
ouraConfig.getOuraHeartRateEnabled(),
81+
ouraConfig.getOuraPersonalInfoEnabled(),
82+
ouraConfig.getOuraSessionEnabled(),
83+
ouraConfig.getOuraSleepEnabled(),
84+
ouraConfig.getOuraTagEnabled(),
85+
ouraConfig.getOuraWorkoutEnabled(),
86+
ouraConfig.getOuraRingConfigurationEnabled(),
87+
ouraConfig.getOuraRestModePeriodEnabled(),
88+
ouraConfig.getOuraSleepTimeRecommendationEnabled()
89+
);
7390
this.offsetManager = new KafkaOffsetManager(offsetStorageReader);
74-
this.ouraRequestGenerator = new OuraRequestGenerator(this.userRepository, this.offsetManager);
75-
this.routes = this.ouraRequestGenerator.getRoutes();
91+
this.routes = OuraRouteFactory.getRoutes(this.userRepository, flags);
92+
this.ouraRequestGenerator = new OuraRequestGenerator(this.userRepository, this.offsetManager, this.routes);
7693
this.offsetManager.initialize(getPartitions());
7794
}
7895

oura-library/src/main/kotlin/org/radarbase/oura/route/OuraRouteFactory.kt

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,24 @@ import org.radarbase.oura.user.UserRepository
44

55
object OuraRouteFactory {
66

7-
fun getRoutes(userRepository: UserRepository): List<OuraRoute> {
8-
return listOf(
9-
OuraDailyActivityRoute(userRepository),
10-
OuraDailyReadinessRoute(userRepository),
11-
OuraDailySleepRoute(userRepository),
12-
OuraDailyOxygenSaturationRoute(userRepository),
13-
OuraHeartRateRoute(userRepository),
14-
OuraPersonalInfoRoute(userRepository),
15-
OuraSessionRoute(userRepository),
16-
OuraSleepRoute(userRepository),
17-
OuraTagRoute(userRepository),
18-
OuraWorkoutRoute(userRepository),
19-
OuraRingConfigurationRoute(userRepository),
20-
OuraRestModePeriodRoute(userRepository),
21-
OuraSleepTimeRecommendationRoute(userRepository),
22-
)
7+
fun getRoutes(userRepository: UserRepository): List<OuraRoute> =
8+
getRoutes(userRepository, OuraRouteFlags())
9+
10+
fun getRoutes(userRepository: UserRepository, flags: OuraRouteFlags): List<OuraRoute> {
11+
val routes = mutableListOf<OuraRoute>()
12+
if (flags.dailyActivityEnabled) routes.add(OuraDailyActivityRoute(userRepository))
13+
if (flags.dailyReadinessEnabled) routes.add(OuraDailyReadinessRoute(userRepository))
14+
if (flags.dailySleepEnabled) routes.add(OuraDailySleepRoute(userRepository))
15+
if (flags.dailyOxygenSaturationEnabled) routes.add(OuraDailyOxygenSaturationRoute(userRepository))
16+
if (flags.heartRateEnabled) routes.add(OuraHeartRateRoute(userRepository))
17+
if (flags.personalInfoEnabled) routes.add(OuraPersonalInfoRoute(userRepository))
18+
if (flags.sessionEnabled) routes.add(OuraSessionRoute(userRepository))
19+
if (flags.sleepEnabled) routes.add(OuraSleepRoute(userRepository))
20+
if (flags.tagEnabled) routes.add(OuraTagRoute(userRepository))
21+
if (flags.workoutEnabled) routes.add(OuraWorkoutRoute(userRepository))
22+
if (flags.ringConfigurationEnabled) routes.add(OuraRingConfigurationRoute(userRepository))
23+
if (flags.restModePeriodEnabled) routes.add(OuraRestModePeriodRoute(userRepository))
24+
if (flags.sleepTimeRecommendationEnabled) routes.add(OuraSleepTimeRecommendationRoute(userRepository))
25+
return routes
2326
}
2427
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.radarbase.oura.route
2+
3+
data class OuraRouteFlags(
4+
val dailyActivityEnabled: Boolean = true,
5+
val dailyReadinessEnabled: Boolean = true,
6+
val dailySleepEnabled: Boolean = true,
7+
val dailyOxygenSaturationEnabled: Boolean = true,
8+
val heartRateEnabled: Boolean = true,
9+
val personalInfoEnabled: Boolean = true,
10+
val sessionEnabled: Boolean = true,
11+
val sleepEnabled: Boolean = true,
12+
val tagEnabled: Boolean = true,
13+
val workoutEnabled: Boolean = true,
14+
val ringConfigurationEnabled: Boolean = true,
15+
val restModePeriodEnabled: Boolean = true,
16+
val sleepTimeRecommendationEnabled: Boolean = true,
17+
)

0 commit comments

Comments
 (0)