From bdf74ba9a2c59eca458685e1bbac6377bf6ee4ba Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Sat, 13 Apr 2019 20:10:18 +0200 Subject: [PATCH] feat(SharedData): set: log number of subscriptions --- .../apollo-server/connectors/shared-data.js | 7 ++++++- packages/@vue/cli-ui/apollo-server/resolvers.js | 10 +++++++++- .../@vue/cli-ui/apollo-server/util/stats.js | 17 +++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 packages/@vue/cli-ui/apollo-server/util/stats.js diff --git a/packages/@vue/cli-ui/apollo-server/connectors/shared-data.js b/packages/@vue/cli-ui/apollo-server/connectors/shared-data.js index 799e99fce..92ef61b04 100644 --- a/packages/@vue/cli-ui/apollo-server/connectors/shared-data.js +++ b/packages/@vue/cli-ui/apollo-server/connectors/shared-data.js @@ -5,6 +5,7 @@ const { log } = require('../util/logger') const path = require('path') const fs = require('fs-extra') const { rcFolder } = require('../util/rcFolder') +const stats = require('../util/stats') /** * @typedef SharedData @@ -67,12 +68,16 @@ async function set ({ id, projectId, value, disk = false }, context) { updated: new Date() }) + const stat = stats.get(`shared-data_${projectId}`, id) + stat.value = 0 context.pubsub.publish(channels.SHARED_DATA_UPDATED, { sharedDataUpdated: { id, projectId, value } }) const watchers = notify({ id, projectId, value }, context) - log('SharedData set', id, projectId, value, `(${watchers.length} watchers)`) + + setTimeout(() => log('SharedData set', id, projectId, value, `(${watchers.length} watchers, ${stat.value} subscriptions)`)) + return { id, value } } diff --git a/packages/@vue/cli-ui/apollo-server/resolvers.js b/packages/@vue/cli-ui/apollo-server/resolvers.js index 576e1c0a5..5bef3a120 100644 --- a/packages/@vue/cli-ui/apollo-server/resolvers.js +++ b/packages/@vue/cli-ui/apollo-server/resolvers.js @@ -12,6 +12,8 @@ const files = require('./connectors/files') const clientAddons = require('./connectors/client-addons') const sharedData = require('./connectors/shared-data') const locales = require('./connectors/locales') +// Utils +const stats = require('./util/stats') // Start ipc server require('./util/ipc') @@ -69,7 +71,13 @@ const resolvers = [{ sharedDataUpdated: { subscribe: withFilter( (parent, args, { pubsub }) => pubsub.asyncIterator(channels.SHARED_DATA_UPDATED), - (payload, vars) => payload.sharedDataUpdated.id === vars.id && payload.sharedDataUpdated.projectId === vars.projectId + (payload, vars) => { + const result = payload.sharedDataUpdated.id === vars.id && payload.sharedDataUpdated.projectId === vars.projectId + if (result) { + stats.get(`shared-data_${vars.projectId}`, vars.id).value++ + } + return result + } ) }, localeAdded: { diff --git a/packages/@vue/cli-ui/apollo-server/util/stats.js b/packages/@vue/cli-ui/apollo-server/util/stats.js new file mode 100644 index 000000000..c3c7182fb --- /dev/null +++ b/packages/@vue/cli-ui/apollo-server/util/stats.js @@ -0,0 +1,17 @@ +const stats = new Map() + +exports.get = (type, id) => { + let dic = stats.get(type) + if (!dic) { + dic = new Map() + stats.set(type, dic) + } + let stat = dic.get(id) + if (!stat) { + stat = { + value: 0 + } + dic.set(id, stat) + } + return stat +}