Skip to content

Commit 62c02c4

Browse files
authored
Add caching with Caffeine (#57)
1 parent 3bcf7fd commit 62c02c4

4 files changed

Lines changed: 25 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
### What's Changed
1010
* Update changelog.md by @mohamead in [PR #51](https://github.com/statens-pensjonskasse/fiskeoye-plugin/pull/51)
1111
* Add vertical scrollbar when needed by @mohamead in [PR #52](https://github.com/statens-pensjonskasse/fiskeoye-plugin/pull/52)
12-
* Fix exception from invisible JBMenuItem in [PR #53](https://github.com/statens-pensjonskasse/fiskeoye-plugin/pull/53)
13-
* Remove unused imports [PR #54](https://github.com/statens-pensjonskasse/fiskeoye-plugin/pull/54)
12+
* Fix exception from invisible JBMenuItem by @mohamead in [PR #53](https://github.com/statens-pensjonskasse/fiskeoye-plugin/pull/53)
13+
* Remove unused imports by @mohamead in [PR #54](https://github.com/statens-pensjonskasse/fiskeoye-plugin/pull/54)
1414

1515
**Full Changelog**: https://github.com/statens-pensjonskasse/fiskeoye-plugin/compare/v0.0.3...v0.0.4
1616

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ repositories {
3333
dependencies {
3434
implementation("org.jsoup:jsoup:1.21.1")
3535
implementation("org.http4k:http4k-core:5.47.0.0")
36+
implementation("com.github.ben-manes.caffeine:caffeine:3.2.2")
3637

3738
testImplementation("io.kotest:kotest-assertions-core-jvm:5.9.1")
3839
testImplementation("io.kotest:kotest-runner-junit5-jvm:5.9.1")

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pluginGroup = no.spk.fiskeoye.plugin
44
pluginName = fiskeoye-plugin
55
pluginRepositoryUrl = https://github.com/statens-pensjonskasse/fiskeoye-plugin
66
# SemVer format -> https://semver.org
7-
pluginVersion = 0.0.4
7+
pluginVersion = 0.0.5
88

99
# Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
1010
pluginSinceBuild = 233

src/main/kotlin/no/spk/fiskeoye/plugin/service/FiskeoyeService.kt

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package no.spk.fiskeoye.plugin.service
22

3+
import com.github.benmanes.caffeine.cache.Cache
4+
import com.github.benmanes.caffeine.cache.Caffeine
35
import com.intellij.openapi.diagnostic.Logger
46
import no.spk.fiskeoye.plugin.service.api.FileContentRequest
57
import no.spk.fiskeoye.plugin.service.api.FilenameRequest
@@ -10,11 +12,18 @@ import org.http4k.core.Request
1012
import org.http4k.core.Status
1113
import org.jsoup.Jsoup
1214
import org.jsoup.nodes.Element
15+
import java.time.Duration
1316

1417
internal object FiskeoyeService {
1518

1619
private val logger: Logger = Logger.getInstance(FiskeoyeService::class.java)
1720
private const val ID = "resultat_linje"
21+
private val cache: Cache<String, Pair<String, List<Element>?>> = Caffeine.newBuilder()
22+
.maximumSize(300)
23+
.expireAfterWrite(Duration.ofMinutes(60))
24+
.expireAfterAccess(Duration.ofMinutes(60))
25+
.recordStats()
26+
.build()
1827

1928
internal fun getFileContent(
2029
includeText: String,
@@ -23,7 +32,11 @@ internal object FiskeoyeService {
2332
isCaseSensitive: Boolean
2433
): Pair<String, List<Element>?> {
2534
val request = FileContentRequest(includeText, isExclude, excludeText, isCaseSensitive)
26-
return send(request) { it.hasAttr("class") && ID == it.className() && it.children().isNotEmpty() }
35+
val cacheKey = generateCacheKey(request, "file_content")
36+
37+
return cache.get(cacheKey) {
38+
send(request) { it.hasAttr("class") && ID == it.className() && it.children().isNotEmpty() }
39+
}
2740
}
2841

2942
internal fun getFilename(
@@ -32,9 +45,15 @@ internal object FiskeoyeService {
3245
isSearchInFullPath: Boolean
3346
): Pair<String, List<Element>?> {
3447
val request = FilenameRequest(includeText, isCaseSensitive, isSearchInFullPath)
35-
return send(request) { it.hasAttr("href") && it.hasParent() && ID == it.parent()!!.className() }
48+
val cacheKey = generateCacheKey(request, "filename")
49+
50+
return cache.get(cacheKey) {
51+
send(request) { it.hasAttr("href") && it.hasParent() && ID == it.parent()!!.className() }
52+
}
3653
}
3754

55+
private fun generateCacheKey(request: FiskeoyeRequest, type: String): String = "${type}_${request.getUrl().hashCode()}"
56+
3857
private fun send(fiskeoyeRequest: FiskeoyeRequest, filterPredicate: (Element) -> Boolean): Pair<String, List<Element>?> {
3958
val url = fiskeoyeRequest.getUrl()
4059
logger.info("Request: $url")

0 commit comments

Comments
 (0)