| 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); |