Skip to content

Commit a487f00

Browse files
committed
Add payload caching for OSS repo.
Update manifest models.
1 parent 6331b11 commit a487f00

File tree

7 files changed

+73
-17
lines changed

7 files changed

+73
-17
lines changed

repository-api/src/main/groovy/com/rundeck/repository/manifest/ManifestEntry.groovy

+5-2
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,17 @@ class ManifestEntry {
6868

6969
final ManifestEntry that = (ManifestEntry) o
7070

71-
if (id != that.id) {
71+
if (getId() != that.getId()) {
7272
return false
7373
}
7474

7575
return true
7676
}
7777

7878
int hashCode() {
79-
return (id != null ? id.hashCode() : 0)
79+
return (getId() != null ? getId().hashCode() : 0)
8080
}
81+
82+
String getInstallId() { return id }
83+
boolean getInstallable() { return true }
8184
}

repository-api/src/main/groovy/com/rundeck/repository/manifest/RundeckManifestEntry.groovy

+12-6
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ class RundeckManifestEntry extends ManifestEntry {
2020
Map record = [:]
2121

2222
String getId() {
23-
return record.object_id ?: record.post_id
23+
return record.post_id
24+
}
25+
26+
String getInstallId() {
27+
return record.object_id
2428
}
2529

2630
String getName() {
@@ -46,11 +50,11 @@ class RundeckManifestEntry extends ManifestEntry {
4650
String getSourceLink() {
4751
return record.source_link
4852
}
49-
//
50-
// String getArtifactType() {
51-
// return artifactType
52-
// }
53-
//
53+
54+
String getArtifactType() {
55+
return record.artifact_type
56+
}
57+
5458
String getSupport() {
5559
return record.taxonomies?.plugin_support_type?.join(" ")
5660
}
@@ -71,6 +75,8 @@ class RundeckManifestEntry extends ManifestEntry {
7175
return record.binary_link
7276
}
7377

78+
boolean getInstallable() { return record.object_id }
79+
7480
// Long getLastRelease() {
7581
// return
7682
// }

repository-client/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66

77
group = 'com.rundeck.repository'
88
archivesBaseName = 'repository'
9-
version = "0.9.0"
9+
version = "0.9.1"
1010

1111
// In this section you declare where to find the dependencies of your project
1212
repositories {

repository-client/src/main/groovy/com/rundeck/repository/client/manifest/RundeckOfficialManifestService.groovy

+18-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package com.rundeck.repository.client.manifest
1818
import com.fasterxml.jackson.databind.DeserializationFeature
1919
import com.fasterxml.jackson.databind.MapperFeature
2020
import com.fasterxml.jackson.databind.ObjectMapper
21+
import com.google.common.cache.Cache
22+
import com.google.common.cache.CacheBuilder
2123
import com.rundeck.repository.ResponseMessage
2224
import com.rundeck.repository.client.util.ArtifactUtils
2325
import com.rundeck.repository.manifest.ManifestEntry
@@ -32,16 +34,24 @@ import okhttp3.Response
3234
import org.slf4j.Logger
3335
import org.slf4j.LoggerFactory
3436

37+
import java.util.concurrent.TimeUnit
38+
3539

3640
class RundeckOfficialManifestService implements ManifestService {
37-
private static Logger LOG = LoggerFactory.getLogger(HttpManifestSource)
38-
private static ObjectMapper mapper = new ObjectMapper()
41+
private static final String ARTIFACT_LIST = "artifact-list"
42+
private static final Logger LOG = LoggerFactory.getLogger(HttpManifestSource)
43+
private static final ObjectMapper mapper = new ObjectMapper()
3944
private OkHttpClient client = new OkHttpClient();
4045
private final String serviceEndpoint
46+
private Cache<String,Collection<ManifestEntry>> cache
4147

42-
RundeckOfficialManifestService(String serviceEndpoint) {
48+
RundeckOfficialManifestService(String serviceEndpoint, long cacheListTime, TimeUnit cacheUnit) {
4349
this.serviceEndpoint = serviceEndpoint
4450
if(LOG.traceEnabled) LOG.trace("service endpoint: ${serviceEndpoint}")
51+
cache =CacheBuilder.newBuilder()
52+
.maximumSize(1)
53+
.expireAfterWrite(cacheListTime, cacheUnit)
54+
.build()
4555
}
4656

4757
@Override
@@ -75,6 +85,9 @@ class RundeckOfficialManifestService implements ManifestService {
7585

7686
@Override
7787
Collection<ManifestEntry> listArtifacts(final Integer offset, final Integer max) {
88+
Collection<ManifestEntry> artifactList = cache.getIfPresent(ARTIFACT_LIST)
89+
if(artifactList != null) return artifactList
90+
artifactList = []
7891
Response response
7992
try {
8093
Request rq = new Request.Builder()
@@ -84,12 +97,13 @@ class RundeckOfficialManifestService implements ManifestService {
8497
response = client.newCall(rq).execute()
8598
if(response.isSuccessful()) {
8699
def map = mapper.readValue(response.body().byteStream(),HashMap)
87-
Collection<ManifestEntry> artifactList = []
100+
88101
map.hits.each { hit ->
89102
RundeckManifestEntry entry = new RundeckManifestEntry()
90103
entry.record = hit
91104
artifactList.add(entry)
92105
}
106+
cache.put(ARTIFACT_LIST,artifactList)
93107
return artifactList
94108
} else {
95109
LOG.error("listArtifacts http error: ${response.body().string()}")

repository-client/src/main/groovy/com/rundeck/repository/client/repository/RundeckHttpRepository.groovy

+3-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ import okhttp3.Response
3232
import org.slf4j.Logger
3333
import org.slf4j.LoggerFactory
3434

35+
import java.util.concurrent.TimeUnit
36+
3537

3638
class RundeckHttpRepository implements ArtifactRepository {
3739
private static final String REPO_ENDPOINT = "https://api.rundeck.com/repo/v1/oss"
@@ -49,7 +51,7 @@ class RundeckHttpRepository implements ArtifactRepository {
4951
RundeckHttpRepository(RepositoryDefinition repoDef) {
5052
this.rundeckRepositoryEndpoint = repoDef.configProperties.staging == true ? REPO_STAGING_ENDPOINT : REPO_ENDPOINT
5153
this.repositoryDefinition = repoDef
52-
this.manifestService = new RundeckOfficialManifestService(this.rundeckRepositoryEndpoint)
54+
this.manifestService = new RundeckOfficialManifestService(this.rundeckRepositoryEndpoint, 24, TimeUnit.HOURS)
5355
}
5456

5557
@Override

repository-client/src/test/groovy/com/rundeck/repository/client/manifest/RundeckOfficialManifestServiceTest.groovy

+32-2
Large diffs are not rendered by default.

repository-client/src/test/groovy/com/rundeck/repository/client/repository/RundeckHttpRepositoryTest.groovy

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import org.bouncycastle.jce.provider.BouncyCastleProvider
3030
import spock.lang.Specification
3131

3232
import java.security.Security
33+
import java.util.concurrent.TimeUnit
3334

3435

3536
class RundeckHttpRepositoryTest extends Specification {
@@ -49,7 +50,7 @@ class RundeckHttpRepositoryTest extends Specification {
4950
repoDef.repositoryName = "OSS"
5051
RundeckHttpRepository repo = new RundeckHttpRepository(repoDef)
5152
repo.rundeckRepositoryEndpoint = endpoint
52-
repo.manifestService = new RundeckOfficialManifestService(endpoint)
53+
repo.manifestService = new RundeckOfficialManifestService(endpoint, 1, TimeUnit.HOURS)
5354
def pubKey = repo.getRundeckPublicKey()
5455
RecordedRequest r = httpServer.takeRequest()
5556
def pubKeyFromCache = repo.getRundeckPublicKey()

0 commit comments

Comments
 (0)