@nger/fk-upload 1.0.81 → 1.0.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -44,11 +44,8 @@ exports.AppModule = AppModule;
44
44
  process.send('ready');
45
45
  });
46
46
  process.on('uncaughtException', (err) => {
47
- // console.log(`uncaughtException`, err.message)
48
47
  });
49
48
  process.on('unhandledRejection', (reason, promisen) => {
50
49
  promisen.catch((e) => {
51
- // console.log(e.message)
52
- // console.log(e.stack)
53
50
  });
54
51
  });
@@ -1,3 +1,4 @@
1
+ import { FkDownloadTaskEntity } from './../entities/fk-download-task.entity';
1
2
  import { TaskEntity, TaskManager } from '@nger/rabbitmq';
2
3
  import { Db } from '@nger/typeorm';
3
4
  import { Injector } from '@nger/core';
@@ -19,4 +20,13 @@ export declare class CheckUploadController {
19
20
  msg: string;
20
21
  removes: string[];
21
22
  }>;
23
+ checkWaitEffectTask(): Promise<{
24
+ list: FkDownloadTaskEntity[];
25
+ }>;
26
+ checkWaitDownloadTask(): Promise<{
27
+ list: FkDownloadTaskEntity[];
28
+ }>;
29
+ checkWaitUploadTask(): Promise<{
30
+ list: FkDownloadTaskEntity[];
31
+ }>;
22
32
  }
@@ -10,6 +10,7 @@ const core_1 = require("@nger/core");
10
10
  const http_1 = require("@nger/http");
11
11
  const typeorm_2 = require("typeorm");
12
12
  const fs_extra_1 = require("fs-extra");
13
+ const task_service_1 = require("./tasks/task.service");
13
14
  let CheckUploadController = class CheckUploadController {
14
15
  db;
15
16
  manager;
@@ -59,6 +60,46 @@ let CheckUploadController = class CheckUploadController {
59
60
  }));
60
61
  return { msg: 'succes', removes };
61
62
  }
63
+ async checkWaitEffectTask() {
64
+ const download = this.db.manager.getRepository(fk_download_task_entity_1.FkDownloadTaskEntity);
65
+ const list = await download.find({ where: { status: 2 } });
66
+ const task = this.injector.get(task_service_1.TaskService);
67
+ await Promise.all(list.map(async (item) => {
68
+ const download = await task.createEffectTask(item.filename, item.uploadUrl, item.topicId, item.path);
69
+ return this.manager.send(download);
70
+ }));
71
+ return { list };
72
+ }
73
+ async checkWaitDownloadTask() {
74
+ const download = this.db.manager.getRepository(fk_download_task_entity_1.FkDownloadTaskEntity);
75
+ const list = await download.find({ where: { status: 0 } });
76
+ const task = this.injector.get(task_service_1.TaskService);
77
+ await Promise.all(list.map(async (item) => {
78
+ const download = await task.createDownLoadTask(item.url, item.loginId, item.topicId);
79
+ return this.manager.send(download);
80
+ }));
81
+ return { list };
82
+ }
83
+ async checkWaitUploadTask() {
84
+ const download = this.db.manager.getRepository(fk_download_task_entity_1.FkDownloadTaskEntity);
85
+ const errors = await download.find({ where: { uploadUrl: (0, typeorm_2.Like)('https://site%') } });
86
+ await download.update(errors.map(err => err.filename), { status: 1 });
87
+ const list = await download.find({ where: { status: 1 } });
88
+ const task = this.injector.get(task_service_1.TaskService);
89
+ await Promise.all(list.map(async (item) => {
90
+ const upload = await task.createUploadTask({
91
+ filename: item.filename,
92
+ path: item.path,
93
+ url: item.url,
94
+ topicId: item.topicId,
95
+ loginId: item.loginId
96
+ }, item.totalSize, item.fileMd5, this.injector);
97
+ return this.manager.send(upload);
98
+ }));
99
+ return {
100
+ list
101
+ };
102
+ }
62
103
  };
63
104
  tslib_1.__decorate([
64
105
  (0, http_1.Get)('reupload'),
@@ -84,6 +125,24 @@ tslib_1.__decorate([
84
125
  tslib_1.__metadata("design:paramtypes", []),
85
126
  tslib_1.__metadata("design:returntype", Promise)
86
127
  ], CheckUploadController.prototype, "checkSpace", null);
128
+ tslib_1.__decorate([
129
+ (0, http_1.Get)('checkWaitEffectTask'),
130
+ tslib_1.__metadata("design:type", Function),
131
+ tslib_1.__metadata("design:paramtypes", []),
132
+ tslib_1.__metadata("design:returntype", Promise)
133
+ ], CheckUploadController.prototype, "checkWaitEffectTask", null);
134
+ tslib_1.__decorate([
135
+ (0, http_1.Get)('checkWaitDownloadTask'),
136
+ tslib_1.__metadata("design:type", Function),
137
+ tslib_1.__metadata("design:paramtypes", []),
138
+ tslib_1.__metadata("design:returntype", Promise)
139
+ ], CheckUploadController.prototype, "checkWaitDownloadTask", null);
140
+ tslib_1.__decorate([
141
+ (0, http_1.Get)('checkWaitUploadTask'),
142
+ tslib_1.__metadata("design:type", Function),
143
+ tslib_1.__metadata("design:paramtypes", []),
144
+ tslib_1.__metadata("design:returntype", Promise)
145
+ ], CheckUploadController.prototype, "checkWaitUploadTask", null);
87
146
  CheckUploadController = tslib_1.__decorate([
88
147
  (0, core_1.Controller)(`@nger/fk-upload`),
89
148
  tslib_1.__metadata("design:paramtypes", [typeorm_1.Db, rabbitmq_1.TaskManager, core_1.Injector])
@@ -5,7 +5,6 @@ import { Injector, Next } from "@nger/core";
5
5
  */
6
6
  export declare class DownloadTask extends Task {
7
7
  constructor();
8
- downloadingCount: number;
9
8
  handle(injector: Injector, next?: Next): Promise<void>;
10
9
  private createUploadTask;
11
10
  }
@@ -21,12 +21,7 @@ class DownloadTask extends rabbitmq_1.Task {
21
21
  constructor() {
22
22
  super(actions_1.DOWNLOAD_ACTION);
23
23
  }
24
- downloadingCount = 0;
25
24
  async handle(injector, next) {
26
- if (this.downloadingCount > 3) {
27
- throw new Error(`system is busy`);
28
- }
29
- this.downloadingCount += 1;
30
25
  const db = injector.get(typeorm_1.Db);
31
26
  const task = injector.get(rabbitmq_1.DATA);
32
27
  const complete = injector.get(rabbitmq_1.COMPLETE);
@@ -34,7 +29,6 @@ class DownloadTask extends rabbitmq_1.Task {
34
29
  const download = await db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: task.filename } });
35
30
  if (download.status !== 0) {
36
31
  await complete();
37
- this.downloadingCount -= 1;
38
32
  return next && next();
39
33
  }
40
34
  (0, fs_extra_1.ensureDir)((0, path_1.dirname)(task.path));
@@ -73,7 +67,6 @@ class DownloadTask extends rabbitmq_1.Task {
73
67
  const uploadTask = await this.createUploadTask(task, total, fileMd5, injector);
74
68
  await manager.send(uploadTask);
75
69
  await complete();
76
- this.downloadingCount -= 1;
77
70
  });
78
71
  req.on('response', async (resp) => {
79
72
  const headers = resp.headers;
@@ -83,7 +76,6 @@ class DownloadTask extends rabbitmq_1.Task {
83
76
  console.log(`file is to large`);
84
77
  req.destroy();
85
78
  await complete();
86
- this.downloadingCount -= 1;
87
79
  }
88
80
  });
89
81
  if (next)
@@ -1,10 +1,11 @@
1
1
  import { Injector } from "@nger/core";
2
- import { IDownloadTask } from "./actions";
2
+ import { IDownloadTask, IUploadTask } from "./actions";
3
3
  import { TaskEntity } from "@nger/rabbitmq";
4
4
  export declare class TaskService {
5
5
  private injector;
6
6
  constructor(injector: Injector);
7
7
  createEffectTask(filename: string, uploadUrl: string, topicId: number, path: string): Promise<TaskEntity<any>>;
8
8
  createScheduleTask(name: string, rule: string): Promise<TaskEntity<any>>;
9
+ createUploadTask(download: IDownloadTask, total: number, md5: string, injector: Injector): Promise<TaskEntity<IUploadTask>>;
9
10
  createDownLoadTask(url: string, loginId: number, topicId: number): Promise<TaskEntity<IDownloadTask>>;
10
11
  }
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TaskService = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const fk_service_1 = require("./fk.service");
6
+ const fk_download_task_entity_1 = require("./../../entities/fk-download-task.entity");
7
+ const typeorm_1 = require("@nger/typeorm");
5
8
  const cids_1 = tslib_1.__importDefault(require("cids"));
6
9
  const fs_extra_1 = require("fs-extra");
7
10
  const multihashing_async_1 = tslib_1.__importDefault(require("multihashing-async"));
@@ -36,6 +39,37 @@ let TaskService = class TaskService {
36
39
  task.data = schedule;
37
40
  return task;
38
41
  }
42
+ async createUploadTask(download, total, md5, injector) {
43
+ const db = injector.get(typeorm_1.Db);
44
+ await db.manager.update(fk_download_task_entity_1.FkDownloadTaskEntity, download.filename, { totalSize: total, fileMd5: md5, status: 1, size: total });
45
+ const fk = injector.get(fk_service_1.FkService);
46
+ const info = await fk.getUploadInfo(download.loginId, download.filename, md5, total);
47
+ if (info) {
48
+ const totalChunks = Math.ceil(total / info.splitSize) - 1;
49
+ const uploadTask = new rabbitmq_1.TaskEntity();
50
+ uploadTask.topic = actions_1.UPLOAD_ACTION;
51
+ const data = {
52
+ filename: download.filename,
53
+ path: download.path,
54
+ total: total,
55
+ splitSize: info.splitSize,
56
+ totalChunks,
57
+ uploadUrl: info.uploadUrl,
58
+ cookies: info.cookies,
59
+ topicId: download.topicId,
60
+ token: info.token,
61
+ aid: info.aid,
62
+ folderId: info.uploadGroupId,
63
+ fileMd5: md5,
64
+ start: info.uploadedSize,
65
+ loginId: download.loginId,
66
+ index: Math.ceil(info.uploadedSize / info.splitSize)
67
+ };
68
+ uploadTask.data = data;
69
+ return uploadTask;
70
+ }
71
+ throw new Error(`get upload info fail`);
72
+ }
39
73
  async createDownLoadTask(url, loginId, topicId) {
40
74
  const hash = await (0, multihashing_async_1.default)(Buffer.from(url), 'sha1', 16);
41
75
  const cid = new cids_1.default(1, 'raw', hash, 'base64');
@@ -2,6 +2,5 @@ import { Task } from "@nger/rabbitmq";
2
2
  import { Injector, Next } from "@nger/core";
3
3
  export declare class UploadTask extends Task {
4
4
  constructor();
5
- runingCount: number;
6
5
  handle(injector: Injector, next?: Next): Promise<void>;
7
6
  }
@@ -12,7 +12,6 @@ class UploadTask extends rabbitmq_1.Task {
12
12
  constructor() {
13
13
  super(actions_1.UPLOAD_ACTION);
14
14
  }
15
- runingCount = 0;
16
15
  async handle(injector, next) {
17
16
  const task = injector.get(rabbitmq_1.DATA);
18
17
  const complete = injector.get(rabbitmq_1.COMPLETE);
@@ -24,26 +23,19 @@ class UploadTask extends rabbitmq_1.Task {
24
23
  // not exist
25
24
  if (!old) {
26
25
  await complete();
27
- this.runingCount -= 1;
28
26
  return next && next();
29
27
  }
30
28
  // > 1G give up
31
29
  if (task.total >= 1024 * 1024 * 1024) {
32
30
  await complete();
33
- this.runingCount -= 1;
34
31
  return next && next();
35
32
  }
36
33
  if (!(0, fs_1.existsSync)(task.path) || (old.fileMd5 && old.fileMd5.length > 0)) {
37
34
  await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { status: 0 });
38
35
  await complete();
39
- this.runingCount -= 1;
40
36
  return next && next();
41
37
  }
42
38
  if (old.status === 1) {
43
- if (this.runingCount > 5) {
44
- throw new Error(`system is busy`);
45
- }
46
- this.runingCount += 1;
47
39
  // upload
48
40
  await fk.startUploadFile(task).then(async (res) => {
49
41
  // create effect task
@@ -51,7 +43,6 @@ class UploadTask extends rabbitmq_1.Task {
51
43
  await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { status: 2, uploadUrl: task.uploadUrl, uploadSize: task.total, uploadStatus: 1 });
52
44
  const effectTask = await taskService.createEffectTask(res.filename, res.uploadUrl, task.topicId, task.path);
53
45
  await manager.send(effectTask).then(() => complete());
54
- this.runingCount -= 1;
55
46
  });
56
47
  }
57
48
  else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nger/fk-upload",
3
- "version": "1.0.81",
3
+ "version": "1.0.84",
4
4
  "description": "",
5
5
  "main": "dist/core.js",
6
6
  "types": "dist/core.d.ts",