blob: 9fa1e257e8fdd9daa28cae6f90af63ad476a3b37 [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 { Alarms, getNoticeAlarm, AlarmTrend } from './mock/alarm';
import { TraceBrief, Trace } from './mock/trace'
import { makeExecutableSchema, addMockFunctionsToSchema } from 'graphql-tools';
import { graphql } from 'graphql';
import { ClusterBrief, getAllServices } from './mock/metadata';
import { Thermodynamic } from './mock/metric';
import { getTopN } from './mock/aggregation';
const noMock = process.env.NO_MOCK === 'true';
const resolvers = {
Query: {
getTopN,
getAllServices,
}
}
const schema = makeExecutableSchema({ typeDefs: [
"scalar Long",
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'),
fs.readFileSync('query-protocol/trace.graphqls', 'utf8'),
], resolvers });
addMockFunctionsToSchema({
schema,
mocks: {
Long: () => 1,
ClusterBrief,
Thermodynamic,
AlarmTrend,
Alarms,
TraceBrief,
Trace,
},
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/notice': getNoticeAlarm,
'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);