Skip to content

Commit cc8bb32

Browse files
committed
Added caching to emoji results
1 parent db3abcd commit cc8bb32

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

server/src/main/java/com/objectcomputing/checkins/services/slack/SlackController.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.objectcomputing.checkins.services.slack;
22

3+
import io.micronaut.cache.CacheConfiguration;
34
import io.micronaut.http.HttpResponse;
45
import io.micronaut.http.annotation.Controller;
56
import io.micronaut.http.annotation.Get;
@@ -8,20 +9,29 @@
89
import io.micronaut.security.annotation.Secured;
910
import io.micronaut.security.rules.SecurityRule;
1011
import io.swagger.v3.oas.annotations.tags.Tag;
12+
import jakarta.inject.Named;
1113

1214
import java.net.URI;
15+
import java.time.Duration;
1316
import java.util.Map;
1417
import java.util.UUID;
1518

19+
import static io.micronaut.http.HttpHeaders.CACHE_CONTROL;
20+
1621
@Controller("/services/slack")
1722
@ExecuteOn(TaskExecutors.BLOCKING)
1823
@Secured(SecurityRule.IS_AUTHENTICATED)
1924
@Tag(name = "slack")
2025
public class SlackController {
2126

2227
private final SlackSearch slackSearch;
28+
private final long expiry;
2329

24-
public SlackController(SlackSearch slackSearch) {
30+
public SlackController(@Named("slack-cache") CacheConfiguration cacheConfiguration, SlackSearch slackSearch) {
31+
// If un-configured, default to 1 hour
32+
this.expiry = cacheConfiguration.getExpireAfterWrite()
33+
.map(Duration::toSeconds)
34+
.orElseGet(() -> Duration.ofHours(1).toSeconds());
2535
this.slackSearch = slackSearch;
2636
}
2737

@@ -30,7 +40,7 @@ public HttpResponse<Map<String, String>> customEmoji() {
3040
Map<String, String> customEmoji = slackSearch.getCustomEmoji();
3141

3242
return HttpResponse
33-
.ok()
43+
.ok().header(CACHE_CONTROL, "public, max-age=%d".formatted(expiry))
3444
.headers(headers -> headers.location(URI.create("/services/slack/emoji")))
3545
.body(customEmoji);
3646
}

server/src/main/java/com/objectcomputing/checkins/services/slack/SlackSearch.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import com.slack.api.methods.request.users.UsersInfoRequest;
1818
import com.slack.api.methods.response.users.UsersInfoResponse;
1919

20+
import io.micronaut.cache.annotation.CacheConfig;
21+
import io.micronaut.cache.annotation.Cacheable;
2022
import jakarta.inject.Singleton;
2123
import jakarta.inject.Inject;
2224

@@ -28,6 +30,7 @@
2830
import org.slf4j.Logger;
2931
import org.slf4j.LoggerFactory;
3032

33+
@CacheConfig("slack-cache")
3134
@Singleton
3235
public class SlackSearch {
3336
private static final Logger LOG = LoggerFactory.getLogger(SlackSearch.class);
@@ -127,7 +130,7 @@ public String findUserEmail(String userId) {
127130
}
128131

129132

130-
133+
@Cacheable
131134
public Map<String, String> getCustomEmoji() {
132135
String token = configuration.getApplication().getSlack().getBotToken();
133136
if (token != null) {

server/src/main/resources/application.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ micronaut:
1515
maximum-size: 600
1616
role-permission-cache:
1717
expire-after-write: 1d # 1 day
18-
18+
slack-cache:
19+
expire-after-write: 1800s # 30 minutes
1920
router:
2021
static-resources:
2122
swagger:

0 commit comments

Comments
 (0)