summaryrefslogtreecommitdiff
path: root/src/server/api
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-06-11 09:11:32 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-06-11 09:11:32 +0900
commit2ec25a7729e8d2fa6734bdf25ffb5a1b35ca2d5b (patch)
tree8e50814af7140caf4c8ad9ec2f69a59b8bb88a23 /src/server/api
parentwip (diff)
downloadsharkey-2ec25a7729e8d2fa6734bdf25ffb5a1b35ca2d5b.tar.gz
sharkey-2ec25a7729e8d2fa6734bdf25ffb5a1b35ca2d5b.tar.bz2
sharkey-2ec25a7729e8d2fa6734bdf25ffb5a1b35ca2d5b.zip
wip
Diffstat (limited to 'src/server/api')
-rw-r--r--src/server/api/endpoints.ts5
-rw-r--r--src/server/api/endpoints/hashtags/trend.ts78
-rw-r--r--src/server/api/stream/hashtags-stats.ts35
-rw-r--r--src/server/api/streaming.ts6
4 files changed, 83 insertions, 41 deletions
diff --git a/src/server/api/endpoints.ts b/src/server/api/endpoints.ts
index 91e5298e73..5f0a020d6f 100644
--- a/src/server/api/endpoints.ts
+++ b/src/server/api/endpoints.ts
@@ -629,6 +629,11 @@ const endpoints: Endpoint[] = [
},
{
+ name: 'hashtags/trend',
+ withCredential: true
+ },
+
+ {
name: 'messaging/history',
withCredential: true,
kind: 'messaging-read'
diff --git a/src/server/api/endpoints/hashtags/trend.ts b/src/server/api/endpoints/hashtags/trend.ts
new file mode 100644
index 0000000000..3b95e1fa4c
--- /dev/null
+++ b/src/server/api/endpoints/hashtags/trend.ts
@@ -0,0 +1,78 @@
+import Note from '../../../../models/note';
+
+/**
+ * Get trends of hashtags
+ */
+module.exports = (params, user) => new Promise(async (res, rej) => {
+ // 10分
+ const interval = 1000 * 60 * 10;
+
+ const data = await Note.aggregate([{
+ $match: {
+ createdAt: {
+ $gt: new Date(Date.now() - interval)
+ },
+ tags: {
+ $exists: true,
+ $ne: []
+ }
+ }
+ }, {
+ $unwind: '$tags'
+ }, {
+ $group: {
+ _id: '$tags',
+ count: {
+ $sum: 1
+ }
+ }
+ }, {
+ $group: {
+ _id: null,
+ tags: {
+ $push: {
+ tag: '$_id',
+ count: '$count'
+ }
+ }
+ }
+ }, {
+ $project: {
+ _id: false,
+ tags: true
+ }
+ }]) as Array<{
+ tags: Array<{
+ tag: string;
+ count: number;
+ }>
+ }>;
+
+ const hots = data[0].tags
+ .sort((a, b) => a.count - b.count)
+ .map(tag => tag.tag)
+ .slice(0, 10);
+
+ const countPromises: Array<Promise<number[]>> = [];
+
+ for (let i = 0; i < 10; i++) {
+ countPromises.push(Promise.all(hots.map(tag => Note.count({
+ tags: tag,
+ createdAt: {
+ $lt: new Date(Date.now() - (interval * i)),
+ $gt: new Date(Date.now() - (interval * (i + 1)))
+ }
+ }))));
+ }
+
+ const countsLog = await Promise.all(countPromises);
+
+ const stats = hots.map((tag, i) => ({
+ tag,
+ chart: countsLog.map(counts => counts[i])
+ }));
+
+ console.log(stats);
+
+ res(stats);
+});
diff --git a/src/server/api/stream/hashtags-stats.ts b/src/server/api/stream/hashtags-stats.ts
deleted file mode 100644
index 47183467f5..0000000000
--- a/src/server/api/stream/hashtags-stats.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-
-const ev = new Xev();
-
-export default function(request: websocket.request, connection: websocket.connection): void {
- const onStats = stats => {
- connection.send(JSON.stringify({
- type: 'stats',
- body: stats
- }));
- };
-
- connection.on('message', async data => {
- const msg = JSON.parse(data.utf8Data);
-
- switch (msg.type) {
- case 'requestLog':
- ev.once('hashtagsStatsLog:' + msg.id, statsLog => {
- connection.send(JSON.stringify({
- type: 'statsLog',
- body: statsLog
- }));
- });
- ev.emit('requestHashtagsStatsLog', msg.id);
- break;
- }
- });
-
- ev.addListener('hashtagsStats', onStats);
-
- connection.on('close', () => {
- ev.removeListener('hashtagsStats', onStats);
- });
-}
diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index e4156096ef..2d4cfc108f 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -14,7 +14,6 @@ import othelloGameStream from './stream/othello-game';
import othelloStream from './stream/othello';
import serverStatsStream from './stream/server-stats';
import notesStatsStream from './stream/notes-stats';
-import hashtagsStatsStream from './stream/hashtags-stats';
import requestsStream from './stream/requests';
import { ParsedUrlQuery } from 'querystring';
import authenticate from './authenticate';
@@ -40,11 +39,6 @@ module.exports = (server: http.Server) => {
return;
}
- if (request.resourceURL.pathname === '/hashtags-stats') {
- hashtagsStatsStream(request, connection);
- return;
- }
-
if (request.resourceURL.pathname === '/requests') {
requestsStream(request, connection);
return;