joyent-portal/legacy/spikes/graphql/graphql-server/src/resolvers.js
Sérgio Ramos 8295bd6882 chore: initial lerna setup
this shall be a progressive process
2017-05-25 10:56:50 +01:00

218 lines
5.1 KiB
JavaScript

import { find, filter } from 'lodash';
import data from './mock-data';
import { normalMetricData, leakMetricData } from './mock-data/metrics';
// TMP / Util
const datacenter = {
uuid: 'datacenter-uuid',
region: 'us-east-1'
};
const user = {
uuid: 'unique-user-id',
firstName: 'Judit',
lastName: 'Greskovits',
email: 'name@email.com',
login: 'juditgreskovits'
}
const portal = { user, host: 'dockerhost', datacenter};
const deploymentGroups = data.projects.data.map(p => {
p.slug = p.id;
return p;
});
const services = data.services.data.map(s => {
s.slug = s.id;
return s;
});
const instances = data.instances.data;
const metricTypes = data.metrics.data.types;
const count = 10;
let index = 0;
const getInstanceMetricData = (dataset, type) => {
return dataset[type].slice(index, index + count);
}
const tick = setInterval(() => index++, 15*1000);
// GraphQL
const queries = {
portal() {
return portal;
},
deploymentGroups(_, { name, slug }) {
return deploymentGroups;
},
deploymentGroup(_, { uuid, name, slug }) {
if(uuid) {
return find(deploymentGroups, { uuid: uuid });
}
if(slug) {
return find(deploymentGroups, { slug: slug });
}
return null;
},
serviceScales(_, { serviceName, versionUuid }) { // : [ServiceScale]
return [];
},
serviceScale(_, { uuid }) { // : ServiceScale
return {};
},
convergenceActions(_, { type, service, versionUuid }) { // : [ConvergenceAction]
return [];
},
convergenceAction(uuid) { // : ConvergenceAction
return {};
},
stateConvergencePlans(_, { running, versionUuid }) { // : [StateConvergencePlan]
return [];
},
stateConvergencePlan(_, { uuid }) { // : StateConvergencePlan
return [];
},
versions(_, { manifestUuid, deploymentGroupUuid }) { // : [Version]
return [];
},
version(_, { uuid, manifestUuid }) { // : Version
return null;
},
manifests(_, { type, deploymentGroupUuid }) { // : [Manifest]
return [];
},
manifest(_, { uuid }) { // : Manifest
return null;
},
services(_, { name, slug, parentUuid, deploymentGroupUuid, deploymentGroupSlug }) { // }: [Service]
if(deploymentGroupUuid) {
return filter(services, { project: deploymentGroupUuid });
}
if(deploymentGroupSlug) {
const deploymentGroup = find(deploymentGroups, { slug: deploymentGroupSlug });
if(deploymentGroup) {
if(slug) {
return filter(services, { project: deploymentGroup.uuid, slug: slug });
}
return filter(services, { project: deploymentGroup.uuid });
}
return null;
}
return services;
},
service(_, { uuid, hash }) { // : Service
if(uuid) {
return find(services, { uuid: uuid });
}
if(hash) {
return find(services, { hash: hash });
}
return null;
},
packages(_, { name, type, memory, disk, swap, lwps, vcpus, version, group }) { // : [Package]
return [];
},
package(_, { uuid }) { // : Package
return {};
},
instances(_, { name, machineId, status, serviceUuid, serviceSlug, deploymentGroupUuid, deploymentGroupSlug }) { // : [Instance]
if(serviceUuid) {
return filter(instances, { service: serviceUuid });
}
if(serviceSlug) {
const service = find(services, { slug: serviceSlug });
if(service) {
return filter(instances, { service: service.uuid });
}
return null;
}
return instances;
},
instance(_, { uuid }) { // : Instance
if(uuid) {
return find(instances, { uuid: uuid });
}
},
datacenter() {
return datacenter;
},
/*metricTypes() {
return metricTypes;
},
// tmp test
instanceMetric() {
return {
type: {
uuid: 'node_memory_rss_bytes',
id: 'node_memory_rss_bytes',
name: 'node_memory_rss_bytes',
},
data: getInstanceMetricData(leakMetricData, 'node_memory_rss_bytes')
};
}*/
}
const resolveFunctions = {
Query: queries,
Portal: {
deploymentGroups(portal, args, context) {
return deploymentGroups;
}
},
DeploymentGroup: {
services(deploymentGroup, args, context) {
const a = Object.assign({}, args, {deploymentGroupSlug: deploymentGroup.slug})
return queries.services(null, a);
}
},
Service: {
instances(service, args, context) {
return filter(instances, { service: service.uuid });
},
/*metrics(service) {
return service.metrics ?
service.metrics.map((metric) =>
find(metricTypes, { uuid: metric.type })) : [];
},*/
/*currentMetrics(service) {
// tmp
return [{
"name": "CPU",
"value": 50,
"measurement": "%",
}, {
"name": "Memory",
"value": 20,
"measurement": "%",
}, {
"name": "Network",
"value": 2.9,
"measurement": "Kb/sec",
}];
},*/
},
/*Instance: {
metrics(instance) {
return ([{
type: {
uuid: 'metric-type-uuid',
id: 'metric-type-id',
name: 'metric-type-name'
},
data: normalMetricData.node_memory_rss_bytes
}]);
}
}*/
};
export default resolveFunctions;