Skip to content

Commit

Permalink
feature: activity stream
Browse files Browse the repository at this point in the history
  • Loading branch information
gregorybesson committed Mar 30, 2017
1 parent c7b0215 commit 4fc5f4b
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 4 deletions.
28 changes: 28 additions & 0 deletions src/cli/core/manager/Manager.js
Expand Up @@ -42,6 +42,8 @@ class Manager {
this._pathReference = path.join(config.root, config.reference.url)
this._pathData = path.join(config.root, config.data.url)
this._watchersStart()
this.connections = [],
this.activities = [],

this.updateStructureAndTemplates()
var p = new Promise((resolve) => {
Expand Down Expand Up @@ -433,6 +435,32 @@ class Manager {
return false
}
}

getActivities() {
return this.activities
}

addActivity(activity) {
if (this.activities.length > 50)
this.activities.shift()

this.activities.push(activity)
}

getConnections() {
return this.connections
}

addConnection(res) {
this.connections.push(res);
}

removeConnection(res) {
var i = this.connections.indexOf(res);
if (i !== -1) {
this.connections.splice(i, 1);
}
}
}

export default Manager
4 changes: 4 additions & 0 deletions src/server/routes/get-home.js
Expand Up @@ -32,7 +32,11 @@ var route = function(req, res, next) {
var files = Manager.instance.getList()
var publishedFiles = Manager.instance.getListWithStatusOnFolder('publish')
var percent = (publishedFiles.length / files.length * 100).toFixed(1)
var connectedUsers = Manager.instance.getConnections()
var totalUsers = config.users
var statistics = {
totalUsers:totalUsers.length,
connectedUsers:connectedUsers.length,
totalPage: files.length,
totalPublishedPage: publishedFiles.length,
percentPublishedPages: percent,
Expand Down
43 changes: 39 additions & 4 deletions src/server/routes/rest/activity-stream.js
@@ -1,11 +1,15 @@
import {
abeExtend
abeExtend,
Manager
} from '../../../cli'

var eventOnActivity = function(data) {
Manager.instance.addActivity(data)
var activities = Manager.instance.getActivities()
this.write('data: {\n')
var i = 0
var size = Object.keys(data).length
this.write('data: "id": "' + activities.length + '",\n')
Array.prototype.forEach.call(Object.keys(data), (key) => {
i++
if (size == i) {
Expand All @@ -32,12 +36,43 @@ var route = function(req, res) {
let evt = eventOnActivity.bind(res)
res.app.on("activity-stream", evt)

res.write('data: {\n')
res.write(`data: "msg": "open"\n`)
res.write('data: }\n\n')
if (!req.headers['last-event-id']) {
var activities = Manager.instance.getActivities()
var j = 0
if(activities.length > 0){
Array.prototype.forEach.call(activities, (activity) => {
var jsonActivity = JSON.parse(JSON.stringify(activity))
j++
var i = 0
var size = Object.keys(jsonActivity).length
res.write('data: {\n')
res.write('data: "id": "' + j + '",\n')
Array.prototype.forEach.call(Object.keys(jsonActivity), (key) => {
i++
if (size == i) {
res.write('data: "' + key + '": "' + jsonActivity[key] + '"\n')
}else {
res.write('data: "' + key + '": "' + jsonActivity[key] + '",\n')
}
})
res.write('data: }\n\n')
})
} else {
res.write('data: {\n')
res.write(`data: "msg": "open"\n`)
res.write('data: }\n\n')
}
} else {
res.write('data: {\n')
res.write(`data: "msg": "open"\n`)
res.write('data: }\n\n')
}

Manager.instance.addConnection(res)

req.connection.addListener("close", function () {
res.app.removeListener("activity-stream", evt)
Manager.instance.removeConnection(res)
}, false);

} else { // if get
Expand Down

0 comments on commit 4fc5f4b

Please sign in to comment.