feat(SharedData): set: log number of subscriptions

This commit is contained in:
Guillaume Chau
2019-04-13 20:10:18 +02:00
parent 022e17da57
commit bdf74ba9a2
3 changed files with 32 additions and 2 deletions

View File

@@ -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 }
}

View File

@@ -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: {

View File

@@ -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
}