blob: 52159cb2f2771121b55cb03c99baf2539a74b43c [file] [log] [blame]
import mockjs from 'mockjs';
import fs from 'fs';
import { delay } from 'roadhog-api-doc';
import { getTopology } from './mock/topology';
import { getAllApplication, getApplication } from './mock/application';
import { searchServer, getServer } from './mock/server';
import { searchService, getService } from './mock/service';
import { getAlarm, getNoticeAlarm, AlarmTrend } from './mock/alarm';
import { getAllApplication as getAllApplicationForTrace, getTrace, getSpans } from './mock/trace'
import { makeExecutableSchema, addMockFunctionsToSchema } from 'graphql-tools';
import { graphql } from 'graphql';
import { ClusterBrief } from './mock/metadata';
import { Thermodynamic } from './mock/metric';
import { getTopN } from './mock/aggregation';
const noMock = process.env.NO_MOCK === 'true';
const resolvers = {
Query: {
getTopN
}
}
const schema = makeExecutableSchema({ typeDefs: [
fs.readFileSync('query-protocol/common.graphqls', 'utf8'),
fs.readFileSync('query-protocol/metadata.graphqls', 'utf8'),
fs.readFileSync('query-protocol/alarm.graphqls', 'utf8'),
fs.readFileSync('query-protocol/metric.graphqls', 'utf8'),
fs.readFileSync('query-protocol/aggregation.graphqls', 'utf8'),
], resolvers });
addMockFunctionsToSchema({ schema, mocks: {
ClusterBrief, Thermodynamic, AlarmTrend
}, preserveResolvers: true });
const proxy = {
'POST /api/graphql': (req, res) => {
const { query: source, variables: variableValues } = req.body;
graphql({ schema, source, variableValues }).then((result) => res.send(result));
},
'POST /api/topology': getTopology,
'POST /api/application/options': getAllApplication,
'POST /api/application': getApplication,
'POST /api/server/search': searchServer,
'POST /api/server': getServer,
'POST /api/service/search': searchService,
'POST /api/service': getService,
'POST /api/service/options': getAllApplication,
'POST /api/alarm': getAlarm,
'POST /api/notice': getNoticeAlarm,
'POST /api/trace/options': getAllApplicationForTrace,
'POST /api/trace': getTrace,
'POST /api/spans': getSpans,
'POST /api/login/account': (req, res) => {
const { password, userName } = req.body;
if (password === '888888' && userName === 'admin') {
res.send({
status: 'ok',
currentAuthority: 'admin',
});
return;
}
res.send({
status: 'error',
currentAuthority: 'guest',
});
},
};
export default noMock ? {} : delay(proxy, 1000);