Skip to content

Commit

Permalink
fix resource apis (#328)
Browse files Browse the repository at this point in the history
* fix resource apis

* update
  • Loading branch information
yingwang-us authored May 7, 2020
1 parent 88713b5 commit cd90cc9
Showing 1 changed file with 39 additions and 24 deletions.
63 changes: 39 additions & 24 deletions app/apollo/resolvers/resource.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ const commonResourcesSearch = async ({ models, org_id, searchFilter, limit, quer
}
return resources;
} catch (error) {
logger.error(error, `commonResourcesDistributedSearch encountered an error for the request ${req_id}`);
logger.error(error, `commonResourcesSearch encountered an error for the request ${req_id}`);
throw error;
}
};
Expand Down Expand Up @@ -90,6 +90,29 @@ const readS3File = async (readable) => {
return data;
};

const commonResourceSearch = async ({ models, org_id, searchFilter, queryFields, req_id, logger }) => {
try {

let resource = await models.Resource.findOne(searchFilter).lean();

if (queryFields['data'] && resource.data && isLink(resource.data) && s3IsDefined()) {
const yaml = getS3Data(resource.data, context.logger);
resource.data = yaml;
}

if(queryFields['cluster']) {
let cluster = await models.Cluster.findOne({ org_id: org_id, cluster_id: resource.cluster_id});
cluster.name = cluster.name || (cluster.metadata||{}).name || cluster.cluster_id;
resource.cluster = cluster;
}

return resource;
} catch (error) {
logger.error(error, `commonResourceSearch encountered an error for the request ${req_id}`);
throw error;
}
};

const resourceResolvers = {
Query: {
resourcesCount: async (parent, { org_id }, context) => {
Expand Down Expand Up @@ -119,7 +142,7 @@ const resourceResolvers = {
const queryFields = GraphqlFields(fullQuery);
const queryName = 'resources';
const { models, me, req_id, logger } = context;
logger.debug( {req_id, user: whoIs(me), org_id, filter, fromDate, toDate, limit }, `${queryName} enter`);
logger.debug( {req_id, user: whoIs(me), org_id, filter, fromDate, toDate, limit, queryFields }, `${queryName} enter`);

limit = _.clamp(limit, 20, 500);

Expand All @@ -141,7 +164,7 @@ const resourceResolvers = {
const queryFields = GraphqlFields(fullQuery);
const queryName = 'resourcesByCluster';
const { models, me, req_id, logger } = context;
logger.debug( {req_id, user: whoIs(me), org_id, filter, limit }, `${queryName} enter`);
logger.debug( {req_id, user: whoIs(me), org_id, filter, limit, queryFields }, `${queryName} enter`);

limit = _.clamp(limit, 20, 500);

Expand All @@ -158,43 +181,35 @@ const resourceResolvers = {
return commonResourcesSearch({ models, org_id, searchFilter, limit, queryFields, req_id, logger });
},

resource: async (parent, { org_id, _id }, context) => {
resource: async (parent, { org_id, _id }, context, fullQuery) => {
const queryFields = GraphqlFields(fullQuery);
const queryName = 'resource';
const { models, me, req_id, logger } = context;
logger.debug( {req_id, user: whoIs(me), _id }, `${queryName} enter`);

await validAuth(me, org_id, ACTIONS.READ, TYPES.RESOURCE, queryName, context);
logger.debug( {req_id, user: whoIs(me), _id, queryFields}, `${queryName} enter`);

let result = await models.Resource.findOne({ org_id, _id: ObjectId(_id) }).lean();
if(!result){
throw `resource { org_id: ${org_id}, _id: ${_id} } not found`;
}
await validAuth(me, org_id, ACTIONS.READ, TYPES.RESOURCE, queryName, context);

// 'result.data' will either be a yaml string or will be a link to a file in COS.
// If it's a link then we need to download it and return its contents
if (result.data && isLink(result.data) && s3IsDefined()) {
const yaml = getS3Data(result.data, logger);
result.data = yaml;
}
return result;
const searchFilter = { org_id, _id: ObjectId(_id) };
return commonResourceSearch({ models, org_id, searchFilter, queryFields, req_id, logger });
},

resourceByKeys: async (
parent,
{ org_id, cluster_id, selfLink },
context,
fullQuery
) => {
const queryFields = GraphqlFields(fullQuery);
const queryName = 'resourceByKeys';
const { models, me, req_id, logger } = context;
logger.debug( {req_id, user: whoIs(me), org_id, cluster_id, selfLink}, `${queryName} enter`);

logger.debug( {req_id, user: whoIs(me), org_id, cluster_id, selfLink, queryFields}, `${queryName} enter`);

await validAuth(me, org_id, ACTIONS.READ, TYPES.RESOURCE, queryName, context);
let result = await models.Resource.findOne({
org_id,
cluster_id,
selfLink,
}).lean();
return result;

const searchFilter = { org_id, cluster_id, selfLink };
return commonResourceSearch({ models, org_id, searchFilter, queryFields, req_id, logger });
},
},

Expand Down

0 comments on commit cd90cc9

Please sign in to comment.