This commit is contained in:
syuilo 2018-04-05 18:43:06 +09:00
parent 06347cd71e
commit 7403f38fb4
9 changed files with 50 additions and 27 deletions

View file

@ -18,20 +18,21 @@ import html from '../../text/html';
import { IApp } from '../../models/app'; import { IApp } from '../../models/app';
export default async (user: IUser, content: { export default async (user: IUser, content: {
createdAt: Date; createdAt?: Date;
text: string; text?: string;
reply: IPost; reply?: IPost;
repost: IPost; repost?: IPost;
media: IDriveFile[]; media?: IDriveFile[];
geo: any; geo?: any;
poll?: any; poll?: any;
viaMobile: boolean; viaMobile?: boolean;
tags?: string[]; tags?: string[];
cw?: string; cw?: string;
visibility?: string; visibility?: string;
uri?: string; uri?: string;
app?: IApp; app?: IApp;
}) => new Promise<IPost>(async (res, rej) => { }) => new Promise<IPost>(async (res, rej) => {
if (content.createdAt == null) content.createdAt = new Date();
if (content.visibility == null) content.visibility = 'public'; if (content.visibility == null) content.visibility = 'public';
const tags = content.tags || []; const tags = content.tags || [];

View file

@ -103,7 +103,7 @@ async function workerMain(opt) {
if (!opt['only-server']) { if (!opt['only-server']) {
// start processor // start processor
require('./processor').default(); require('./queue').default();
} }
// Send a 'ready' message to parent process // Send a 'ready' message to parent process

View file

@ -1,8 +1,12 @@
import { createQueue } from 'kue'; import { createQueue } from 'kue';
import * as debug from 'debug';
import config from '../config'; import config from '../config';
import db from './processors/db'; import db from './processors/db';
import http from './processors/http'; import http from './processors/http';
const log = debug('misskey:queue');
const queue = createQueue({ const queue = createQueue({
redis: { redis: {
port: config.redis.port, port: config.redis.port,
@ -12,6 +16,8 @@ const queue = createQueue({
}); });
export function createHttp(data) { export function createHttp(data) {
log(`HTTP job created: ${JSON.stringify(data)}`);
return queue return queue
.create('http', data) .create('http', data)
.attempts(16) .attempts(16)
@ -22,7 +28,7 @@ export function createDb(data) {
return queue.create('db', data); return queue.create('db', data);
} }
export function process() { export default function() {
queue.process('db', db); queue.process('db', db);
/* /*

View file

@ -3,5 +3,12 @@ import * as kue from 'kue';
import request from '../../../remote/request'; import request from '../../../remote/request';
export default async (job: kue.Job, done): Promise<void> => { export default async (job: kue.Job, done): Promise<void> => {
await request(job.data.user, job.data.to, job.data.content); try {
await request(job.data.user, job.data.to, job.data.content);
done();
} catch (e) {
console.warn(`deliver failed: ${e}`);
done(e);
}
}; };

View file

@ -3,9 +3,17 @@ import processInbox from './process-inbox';
import reportGitHubFailure from './report-github-failure'; import reportGitHubFailure from './report-github-failure';
const handlers = { const handlers = {
deliver, deliver,
processInbox, processInbox,
reportGitHubFailure, reportGitHubFailure
}; };
export default (job, done) => handlers[job.data.type](job).then(() => done(), done); export default (job, done) => {
const handler = handlers[job.data.type];
if (handler) {
handler(job).then(() => done(), done);
} else {
console.warn(`Unknown job: ${job.data.type}`);
}
};

View file

@ -1,6 +1,6 @@
import * as request from 'request-promise-native'; import * as request from 'request-promise-native';
import User from '../../models/user'; import User from '../../../models/user';
const createPost = require('../../server/api/endpoints/posts/create'); import createPost from '../../../api/post/create';
export default async ({ data }) => { export default async ({ data }) => {
const asyncBot = User.findOne({ _id: data.userId }); const asyncBot = User.findOne({ _id: data.userId });
@ -20,5 +20,5 @@ export default async ({ data }) => {
`**⚠BUILD STILL FAILED⚠**: ?[${data.message}](${data.htmlUrl})` : `**⚠BUILD STILL FAILED⚠**: ?[${data.message}](${data.htmlUrl})` :
`**🚨BUILD FAILED🚨**: →→→?[${data.message}](${data.htmlUrl})←←←`; `**🚨BUILD FAILED🚨**: →→→?[${data.message}](${data.htmlUrl})←←←`;
createPost({ text }, await asyncBot); createPost(await asyncBot, { text });
}; };

View file

@ -59,7 +59,7 @@ export default class Resolver {
throw new Error('invalid response'); throw new Error('invalid response');
} }
log(`resolved: ${JSON.stringify(object)}`); log(`resolved: ${JSON.stringify(object, null, 2)}`);
return object; return object;
} }

View file

@ -1,9 +1,15 @@
import { request } from 'https'; import { request } from 'https';
import { sign } from 'http-signature'; import { sign } from 'http-signature';
import { URL } from 'url'; import { URL } from 'url';
import * as debug from 'debug';
import config from '../config'; import config from '../config';
const log = debug('misskey:activitypub:deliver');
export default ({ account, username }, url, object) => new Promise((resolve, reject) => { export default ({ account, username }, url, object) => new Promise((resolve, reject) => {
log(`--> ${url}`);
const { protocol, hostname, port, pathname, search } = new URL(url); const { protocol, hostname, port, pathname, search } = new URL(url);
const req = request({ const req = request({
@ -14,6 +20,8 @@ export default ({ account, username }, url, object) => new Promise((resolve, rej
path: pathname + search, path: pathname + search,
}, res => { }, res => {
res.on('end', () => { res.on('end', () => {
log(`${url} --> ${res.statusCode}`);
if (res.statusCode >= 200 && res.statusCode < 300) { if (res.statusCode >= 200 && res.statusCode < 300) {
resolve(); resolve();
} else { } else {

View file

@ -4,7 +4,7 @@
import $ from 'cafy'; import $ from 'cafy';
import User from '../../../../models/user'; import User from '../../../../models/user';
import Following from '../../../../models/following'; import Following from '../../../../models/following';
import queue from '../../../../queue'; import create from '../../../../api/following/create';
/** /**
* Follow a user * Follow a user
@ -50,15 +50,8 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
} }
// Create following // Create following
const { _id } = await Following.insert({ create(follower, followee);
createdAt: new Date(),
followerId: follower._id,
followeeId: followee._id
});
queue.create('http', { type: 'follow', following: _id }).save();
// Send response // Send response
res(); res();
}); });