From 8530e376473fd5da7ab1f9559678bfacee34a3fa Mon Sep 17 00:00:00 2001
From: mohd hassaan <sr.hassan23@gmail.com>
Date: Mon, 22 Apr 2019 20:42:16 +0530
Subject: [PATCH] feat(nuget): Cache searchqueryservice URL (#3570)

---
 lib/datasource/nuget/v3.js    | 23 +++++++++++++++++++++--
 test/datasource/nuget.spec.js |  1 +
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/lib/datasource/nuget/v3.js b/lib/datasource/nuget/v3.js
index dee96f9cfa..ec1bba0901 100644
--- a/lib/datasource/nuget/v3.js
+++ b/lib/datasource/nuget/v3.js
@@ -10,6 +10,7 @@ module.exports = {
 
 // https://api.nuget.org/v3/index.json is a default official nuget feed
 const defaultNugetFeed = 'https://api.nuget.org/v3/index.json';
+const cacheNamespace = 'datasource-nuget';
 
 function getDefaultFeed() {
   return defaultNugetFeed;
@@ -17,6 +18,15 @@ function getDefaultFeed() {
 
 async function getQueryUrl(url) {
   // https://docs.microsoft.com/en-us/nuget/api/search-query-service-resource
+  const resourceType = 'SearchQueryService';
+  const cacheKey = `${url}:${resourceType}`;
+  const cachedResult = await renovateCache.get(cacheNamespace, cacheKey);
+
+  // istanbul ignore if
+  if (cachedResult) {
+    return cachedResult;
+  }
+
   try {
     const servicesIndexRaw = await got(url, { json: true, platform: 'nuget' });
     if (servicesIndexRaw.statusCode !== 200) {
@@ -27,9 +37,18 @@ async function getQueryUrl(url) {
       return null;
     }
     const searchQueryService = servicesIndexRaw.body.resources.find(
-      resource => resource['@type'] === 'SearchQueryService'
+      resource => resource['@type'] === resourceType
+    );
+    const searchQueryServiceId = searchQueryService['@id'];
+
+    const cacheMinutes = 60;
+    await renovateCache.set(
+      cacheNamespace,
+      cacheKey,
+      searchQueryServiceId,
+      cacheMinutes
     );
-    return searchQueryService['@id'];
+    return searchQueryServiceId;
   } catch (e) {
     logger.debug(
       { e },
diff --git a/test/datasource/nuget.spec.js b/test/datasource/nuget.spec.js
index 918e30907d..e1cc3abee4 100644
--- a/test/datasource/nuget.spec.js
+++ b/test/datasource/nuget.spec.js
@@ -65,6 +65,7 @@ const configV3NotNugetOrg = {
 };
 
 describe('datasource/nuget', () => {
+  beforeEach(() => global.renovateCache.rmAll());
   describe('getPkgReleases', () => {
     beforeEach(() => {
       jest.resetAllMocks();
-- 
GitLab